awful 0.0.182 → 0.1.0.alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 1018b747b6fe7986a7993a356f64cd7731a6cf18
4
- data.tar.gz: 6c8dddeed7c2ba32461649940ad7090cb732babe
2
+ SHA256:
3
+ metadata.gz: ca91c337c82cd7e1c02e82c4397a306e9ba282ae1f465bfbe77e432fbe8f4be2
4
+ data.tar.gz: 67ca6667f8794f8f08730cd5e0cf22f6e3a00d4d60741d38fb84074a9d7c2a68
5
5
  SHA512:
6
- metadata.gz: 44afdfcbde8896949a11e9873b0358744404b97828af07b59de6a2ca63e55081690c7f67fdf00f134c38e2e917342526f929a3d26de5b8bc6818cf9392a25ad0
7
- data.tar.gz: c44145fa3785f15346b2613818fb87d421f82df5cd68995e9484a61555b3128c9cdab250158af36e6a8d83f0bf784a0f0d952638707ca5f1c034aadb2b3b7284
6
+ metadata.gz: efe7b80f981f0d603ae6957b9aa48df0134d7d3f060a8bc40845009458e72ec91da7eb197288864642aa9e937a89049f3a0e42c18291b7fc9b914cd01197fb9f
7
+ data.tar.gz: d5ecdf7fc3d9ecaeebffdc5d0713776d35c8b3d2c61b7d85fc9a48becd642d6a03fbdbddea8b3cc056c24dc1f5ab90e0a7714bfb60236b4809e177124ae85074
data/awful.gemspec CHANGED
@@ -18,10 +18,19 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.7"
21
+ spec.add_development_dependency "bundler"
22
22
  spec.add_development_dependency "rake"
23
23
 
24
- spec.add_dependency('aws-sdk', '~> 2')
25
24
  spec.add_dependency('thor')
26
25
  spec.add_dependency('dotenv')
27
- end
26
+
27
+ spec.add_dependency('aws-sdk-autoscaling')
28
+ spec.add_dependency('aws-sdk-cloudformation')
29
+ spec.add_dependency('aws-sdk-dynamodb')
30
+ spec.add_dependency('aws-sdk-ec2')
31
+ spec.add_dependency('aws-sdk-ecr')
32
+ spec.add_dependency('aws-sdk-elasticloadbalancingv2')
33
+ spec.add_dependency('aws-sdk-rds')
34
+ spec.add_dependency('aws-sdk-s3')
35
+ spec.add_dependency('aws-sdk-ssm')
36
+ end
data/bin/emr ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ #-*- mode: ruby; -*-
3
+
4
+ require 'awful'
5
+ require 'awful/emr'
6
+
7
+ Awful::EMR.start(ARGV)
data/bin/firehose ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ #-*- mode: ruby; -*-
3
+
4
+ require 'awful'
5
+ require 'awful/firehose'
6
+
7
+ Awful::Firehose.start(ARGV)
data/bin/kinesis ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ #-*- mode: ruby; -*-
3
+
4
+ require 'awful'
5
+ require 'awful/kinesis'
6
+
7
+ Awful::Kinesis.start(ARGV)
data/lib/awful/alb.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require 'aws-sdk-elasticloadbalancingv2'
2
+
1
3
  module Awful
2
4
  module Short
3
5
  def alb(*args)
@@ -17,10 +19,6 @@ module Awful
17
19
  }
18
20
 
19
21
  no_commands do
20
- def color(string)
21
- set_color(string, COLORS.fetch(string.to_sym, :yellow))
22
- end
23
-
24
22
  def alb
25
23
  @alb ||= Aws::ElasticLoadBalancingV2::Client.new
26
24
  end
@@ -167,4 +165,4 @@ module Awful
167
165
  end
168
166
 
169
167
  end
170
- end
168
+ end
data/lib/awful/ami.rb CHANGED
@@ -28,10 +28,6 @@ module Awful
28
28
 
29
29
  ec2.describe_images(params).images
30
30
  end
31
-
32
- def color(string)
33
- set_color(string, COLORS.fetch(string.to_sym, :yellow))
34
- end
35
31
  end
36
32
 
37
33
  desc 'ls [IDS]', 'list AMIs'
@@ -106,4 +102,4 @@ module Awful
106
102
  end
107
103
  end
108
104
  end
109
- end
105
+ end
@@ -1,3 +1,5 @@
1
+ require 'aws-sdk-autoscaling'
2
+
1
3
  module Awful
2
4
  module Short
3
5
  def asg(*args)
@@ -28,10 +30,6 @@ module Awful
28
30
  }
29
31
 
30
32
  no_commands do
31
- def color(string)
32
- set_color(string, COLORS.fetch(string.to_sym, :yellow))
33
- end
34
-
35
33
  def all_matching_asgs(name)
36
34
  autoscaling.describe_auto_scaling_groups.map(&:auto_scaling_groups).flatten.select do |asg|
37
35
  asg.auto_scaling_group_name.match(name) or tag_name(asg, '').match(name)
@@ -416,4 +414,4 @@ module Awful
416
414
  autoscaling.exit_standby(auto_scaling_group_name: name, instance_ids: instance_ids)
417
415
  end
418
416
  end
419
- end
417
+ end
@@ -1,3 +1,5 @@
1
+ require 'aws-sdk-cloudformation'
2
+
1
3
  module Awful
2
4
  module Short
3
5
  def changesets(*args)
@@ -29,10 +31,6 @@ module Awful
29
31
  def cf
30
32
  @cf ||= Aws::CloudFormation::Client.new
31
33
  end
32
-
33
- def color(string)
34
- set_color(string, COLORS.fetch(string.downcase.to_sym, :blue))
35
- end
36
34
  end
37
35
 
38
36
  ## if no task given , run this
@@ -87,4 +85,4 @@ module Awful
87
85
  desc 'changesets', 'control changesets'
88
86
  subcommand 'changesets', Changesets
89
87
  end
90
- end
88
+ end
@@ -1,3 +1,5 @@
1
+ require 'aws-sdk-cloudformation'
2
+
1
3
  module Awful
2
4
  module Short
3
5
  def cf(*args)
@@ -8,30 +10,35 @@ module Awful
8
10
  class CloudFormation < Cli
9
11
 
10
12
  COLORS = {
11
- create_in_progress: :yellow,
12
- delete_in_progress: :yellow,
13
- update_in_progress: :yellow,
14
- update_complete_cleanup_in_progress: :yellow,
15
- create_failed: :red,
16
- delete_failed: :red,
17
- update_failed: :red,
18
- create_complete: :green,
19
- delete_complete: :green,
20
- update_complete: :green,
21
- delete_skipped: :yellow,
22
- rollback_in_progress: :red,
23
- rollback_complete: :red,
13
+ CREATE_IN_PROGRESS: :yellow,
14
+ DELETE_IN_PROGRESS: :yellow,
15
+ UPDATE_IN_PROGRESS: :yellow,
16
+ UPDATE_COMPLETE_CLEANUP_IN_PROGRESS: :yellow,
17
+ CREATE_FAILED: :red,
18
+ DELETE_FAILED: :red,
19
+ UPDATE_FAILED: :red,
20
+ CREATE_COMPLETE: :green,
21
+ DELETE_COMPLETE: :green,
22
+ UPDATE_COMPLETE: :green,
23
+ DELETE_SKIPPED: :yellow,
24
+ ROLLBACK_IN_PROGRESS: :red,
25
+ ROLLBACK_COMPLETE: :red,
26
+ ROLLBACK_FAILED: :red,
27
+ ACTIVE: :green,
28
+ DELETED: :red,
24
29
  }
25
30
 
26
- no_commands do
27
- def cf
28
- @cf ||= Aws::CloudFormation::Client.new
29
- end
30
-
31
- def color(string)
32
- set_color(string, COLORS.fetch(string.downcase.to_sym, :blue))
33
- end
31
+ ## stack statuses that are not DELETE_COMPLETE
32
+ STATUSES = %i[
33
+ CREATE_IN_PROGRESS CREATE_FAILED CREATE_COMPLETE
34
+ ROLLBACK_IN_PROGRESS ROLLBACK_FAILED ROLLBACK_COMPLETE
35
+ DELETE_IN_PROGRESS DELETE_FAILED
36
+ UPDATE_IN_PROGRESS UPDATE_COMPLETE_CLEANUP_IN_PROGRESS UPDATE_COMPLETE
37
+ UPDATE_ROLLBACK_IN_PROGRESS UPDATE_ROLLBACK_FAILED UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS UPDATE_ROLLBACK_COMPLETE
38
+ REVIEW_IN_PROGRESS
39
+ ]
34
40
 
41
+ no_commands do
35
42
  ## get list of stacks
36
43
  def stack_summaries(next_token = nil)
37
44
  response = cf.list_stacks(next_token: next_token)
@@ -45,28 +52,16 @@ module Awful
45
52
  end
46
53
 
47
54
  desc 'ls [PATTERN]', 'list cloudformation stacks matching PATTERN'
48
- method_option :long, aliases: '-l', type: :boolean, default: false, desc: 'Long listing'
49
- method_option :all, aliases: '-a', type: :boolean, default: false, desc: 'Show all, including stacks in DELETE_COMPLETE'
50
- def ls(name = /./)
51
- stacks = stack_summaries
52
-
53
- ## skip deleted stacks unless -a given
54
- unless options[:all]
55
- stacks = stacks.select { |stack| stack.stack_status != 'DELETE_COMPLETE' }
56
- end
57
-
58
- ## match on given arg
59
- stacks.select do |stack|
60
- stack.stack_name.match(name)
55
+ method_option :long, aliases: '-l', type: :boolean, default: false, desc: 'long listing'
56
+ def ls(name = nil)
57
+ paginate(:stack_summaries) do |next_token|
58
+ cf.list_stacks(stack_status_filter: STATUSES, next_token: next_token)
59
+ end.tap do |stacks|
60
+ stacks.select! { |s| s.stack_name.match(name) } if name
61
61
  end.output do |list|
62
62
  if options[:long]
63
63
  print_table list.map { |s|
64
- [
65
- s.stack_name,
66
- s.creation_time,
67
- color(s.stack_status),
68
- s.template_description,
69
- ]
64
+ [s.stack_name, s.creation_time, color(s.stack_status), s.template_description]
70
65
  }.sort
71
66
  else
72
67
  puts list.map(&:stack_name).sort
@@ -279,5 +274,23 @@ module Awful
279
274
  end
280
275
  puts cf.estimate_template_cost(template_body: template, parameters: parameters).url
281
276
  end
277
+
278
+ desc 'sets', 'list stack sets'
279
+ method_option :long, aliases: '-l', type: :boolean, default: false, desc: 'long listing'
280
+ method_option :status, aliases: '-s', type: :string, default: 'ACTIVE', desc: 'ACTIVE or DELETED'
281
+ def sets
282
+ paginate(:summaries) do |next_token|
283
+ cf.list_stack_sets(status: options[:status].upcase, next_token: next_token)
284
+ end.output do |sets|
285
+ if options[:long]
286
+ print_table sets.map { |s|
287
+ [s.stack_set_name, s.stack_set_id, color(s.status), s.description]
288
+ }
289
+ else
290
+ puts sets.map(&:stack_set_name)
291
+ end
292
+ end
293
+ end
294
+
282
295
  end
283
- end
296
+ end
@@ -18,10 +18,6 @@ module Awful
18
18
  def cloudfront
19
19
  @cloudfront ||= Aws::CloudFront::Client.new
20
20
  end
21
-
22
- def color(string)
23
- set_color(string, COLORS.fetch(string.downcase.to_sym, :blue))
24
- end
25
21
  end
26
22
 
27
23
  desc 'ls', 'list distributions'
@@ -101,4 +97,4 @@ module Awful
101
97
  end
102
98
  end
103
99
  end
104
- end
100
+ end
@@ -15,10 +15,6 @@ module Awful
15
15
  def events
16
16
  @events ||= Aws::CloudWatchEvents::Client.new
17
17
  end
18
-
19
- def color(string)
20
- set_color(string, COLORS.fetch(string.to_sym, :yellow))
21
- end
22
18
  end
23
19
 
24
20
  desc 'ls [PREFIX]', 'list events'
@@ -77,4 +73,4 @@ module Awful
77
73
  end
78
74
 
79
75
  end
80
- end
76
+ end
data/lib/awful/config.rb CHANGED
@@ -21,10 +21,6 @@ module Awful
21
21
  def config
22
22
  @_config ||= Aws::ConfigService::Client.new
23
23
  end
24
-
25
- def color(string)
26
- set_color(string, COLORS.fetch(string.to_sym, :yellow))
27
- end
28
24
  end
29
25
 
30
26
  desc 'recorders', 'show delivery recorders'
@@ -85,4 +81,4 @@ module Awful
85
81
  end
86
82
 
87
83
  end
88
- end
84
+ end
@@ -1,3 +1,4 @@
1
+ require 'aws-sdk-dynamodb'
1
2
  require 'json'
2
3
  require 'awful/dynamodb_streams'
3
4
 
@@ -17,10 +18,6 @@ module Awful
17
18
  }
18
19
 
19
20
  no_commands do
20
- def color(string)
21
- set_color(string, COLORS.fetch(string.to_sym, :yellow))
22
- end
23
-
24
21
  ## return array of tables names matching name
25
22
  def all_matching_tables(name)
26
23
  tables = []
@@ -428,4 +425,4 @@ module Awful
428
425
  desc 'streams SUBCOMMANDS', 'subcommands for dynamodb streams'
429
426
  subcommand 'streams', Streams
430
427
  end
431
- end
428
+ end
data/lib/awful/ec2.rb CHANGED
@@ -15,12 +15,6 @@ module Awful
15
15
  terminated: :red,
16
16
  }
17
17
 
18
- no_commands do
19
- def color(string)
20
- set_color(string, COLORS.fetch(string.to_sym, :yellow))
21
- end
22
- end
23
-
24
18
  desc 'ls [NAME]', 'get instances with given name regex'
25
19
  method_option :long, aliases: '-l', type: :boolean, default: false, desc: 'Long listing'
26
20
  method_option :ids, aliases: '-i', type: :array, default: [], desc: 'List of instance ids to retrieve'
data/lib/awful/ecr.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'aws-sdk-ecr'
1
2
  require 'json'
2
3
  require 'base64'
3
4
 
@@ -191,4 +192,4 @@ module Awful
191
192
  puts "deleted: #{deleted}, failures: #{failures}"
192
193
  end
193
194
  end
194
- end
195
+ end
data/lib/awful/ecs.rb CHANGED
@@ -21,10 +21,6 @@ module Awful
21
21
  def ecs
22
22
  @ecs ||= Aws::ECS::Client.new
23
23
  end
24
-
25
- def color(string)
26
- set_color(string, COLORS.fetch(string.to_sym, :yellow))
27
- end
28
24
  end
29
25
 
30
26
  desc 'ls NAME', 'list ECS clusters'
@@ -253,4 +249,4 @@ module Awful
253
249
  end
254
250
  end
255
251
  end
256
- end
252
+ end
@@ -17,10 +17,6 @@ module Awful
17
17
  def elasticache
18
18
  @elasticache ||= Aws::ElastiCache::Client.new
19
19
  end
20
-
21
- def color(string)
22
- set_color(string, COLORS.fetch(string.to_sym, :yellow))
23
- end
24
20
  end
25
21
 
26
22
  desc 'ls [ID]', 'list clusters'
@@ -71,4 +67,4 @@ module Awful
71
67
  end
72
68
  end
73
69
  end
74
- end
70
+ end
data/lib/awful/elb.rb CHANGED
@@ -12,10 +12,6 @@ module Awful
12
12
  }
13
13
 
14
14
  no_commands do
15
- def color(string)
16
- set_color(string, COLORS.fetch(string.to_sym, :yellow))
17
- end
18
-
19
15
  ## cannot search ELBs by tag, so just name here
20
16
  def all_matching_elbs(name)
21
17
  elb.describe_load_balancers.map(&:load_balancer_descriptions).flatten.select do |elb|
@@ -158,4 +154,4 @@ module Awful
158
154
  end
159
155
  end
160
156
  end
161
- end
157
+ end
data/lib/awful/emr.rb ADDED
@@ -0,0 +1,60 @@
1
+ module Awful
2
+ module Short
3
+ def emr(*args)
4
+ Awful::EMR.new.invoke(*args)
5
+ end
6
+ end
7
+
8
+ class EMR < Cli
9
+ COLORS = {
10
+ RUNNING: :green,
11
+ TERMINATING: :red,
12
+ TERMINATED: :red,
13
+ TERMINATED_WITH_ERRORS: :red,
14
+ }
15
+
16
+ no_commands do
17
+ def emr
18
+ @emr ||= Aws::EMR::Client.new
19
+ end
20
+ end
21
+
22
+ desc 'ls', 'list clusters'
23
+ method_option :long, aliases: '-l', type: :boolean, default: false, desc: 'long listing'
24
+ method_option :states, aliases: '-s', type: :array, default: [], desc: 'limit to clusters with given states'
25
+ def ls
26
+ emr.list_clusters(cluster_states: options[:states].map(&:upcase)).clusters.output do |clusters|
27
+ if options[:long]
28
+ print_table clusters.map { |c|
29
+ [c.name, c.id, color(c.status.state), c.status.timeline.creation_date_time, "#{c.normalized_instance_hours}h"]
30
+ }
31
+ else
32
+ puts clusters.map(&:name)
33
+ end
34
+ end
35
+ end
36
+
37
+ desc 'dump ID', 'describe cluster with ID'
38
+ def dump(id)
39
+ emr.describe_cluster(cluster_id: id).cluster.output do |cluster|
40
+ puts YAML.dump(stringify_keys(cluster.to_hash))
41
+ end
42
+ end
43
+
44
+ desc 'instances', 'list instances for cluster'
45
+ method_option :long, aliases: '-l', type: :boolean, default: false, desc: 'long listing'
46
+ method_option :group, aliases: '-g', type: :array, default: [], desc: 'instance group types: MASTER, CORE, TASK'
47
+ def instances(id)
48
+ emr.list_instances(cluster_id: id, instance_group_types: options[:group].map(&:upcase)).instances.output do |instances|
49
+ if options[:long]
50
+ print_table instances.map { |i|
51
+ [i.ec2_instance_id, i.instance_group_id, color(i.status.state), i.instance_type, i.public_ip_address, i.private_ip_address, i.status.timeline.creation_date_time]
52
+ }
53
+ else
54
+ puts instances.map(&:ec2_instance_id)
55
+ end
56
+ end
57
+ end
58
+
59
+ end
60
+ end
@@ -0,0 +1,63 @@
1
+ require 'yaml'
2
+
3
+ module Awful
4
+ module Short
5
+ def firehose(*args)
6
+ Awful::Firehose.new.invoke(*args)
7
+ end
8
+ end
9
+
10
+ class Firehose < Cli
11
+ COLORS = {
12
+ ACTIVE: :green,
13
+ DELETING: :red,
14
+ }
15
+
16
+ no_commands do
17
+ def firehose
18
+ @_firehose ||= Aws::Firehose::Client.new
19
+ end
20
+
21
+ ## special-case paginator for delivery streams
22
+ def paginate_delivery_streams(thing)
23
+ token = nil
24
+ things = []
25
+ loop do
26
+ resp = yield(token)
27
+ items = resp.send(thing)
28
+ things += items
29
+ token = items.last
30
+ break unless resp.has_more_delivery_streams
31
+ end
32
+ things
33
+ end
34
+ end
35
+
36
+ desc 'ls', 'list firehose streams'
37
+ method_option :long, aliases: '-l', type: :boolean, default: false, desc: 'long listing'
38
+ def ls
39
+ paginate_delivery_streams(:delivery_stream_names) do |start|
40
+ firehose.list_delivery_streams(exclusive_start_delivery_stream_name: start)
41
+ end.output do |streams|
42
+ if options[:long]
43
+ print_table streams.map { |name|
44
+
45
+ s = firehose.describe_delivery_stream(delivery_stream_name: name).delivery_stream_description
46
+ op = s.has_more_destinations ? '>' : ''
47
+ [s.delivery_stream_name, op + s.destinations.count.to_s, color(s.delivery_stream_status), s.delivery_stream_type, 'v' + s.version_id.to_s, s.create_timestamp]
48
+ }
49
+ else
50
+ puts streams
51
+ end
52
+ end
53
+ end
54
+
55
+ desc 'dump NAME', 'describe firehose stream'
56
+ def dump(name)
57
+ firehose.describe_delivery_stream(delivery_stream_name: name).delivery_stream_description.output do |stream|
58
+ puts YAML.dump(stringify_keys(stream.to_hash))
59
+ end
60
+ end
61
+
62
+ end
63
+ end
data/lib/awful/iam.rb CHANGED
@@ -11,10 +11,6 @@ module Awful
11
11
  def iam
12
12
  @iam ||= Aws::IAM::Client.new
13
13
  end
14
-
15
- def color(string)
16
- set_color(string, COLORS.fetch(string.to_sym, :yellow))
17
- end
18
14
  end
19
15
 
20
16
  desc 'users', 'list users'
@@ -159,4 +155,4 @@ module Awful
159
155
 
160
156
  end
161
157
 
162
- end
158
+ end
@@ -0,0 +1,62 @@
1
+ require 'yaml'
2
+
3
+ module Awful
4
+ module Short
5
+ def kinesis(*args)
6
+ Awful::Kinesis.new.invoke(*args)
7
+ end
8
+ end
9
+
10
+ class Kinesis < Cli
11
+ COLORS = {
12
+ ACTIVE: :green,
13
+ DELETING: :red,
14
+ }
15
+
16
+ no_commands do
17
+ def kinesis
18
+ @_kinesis ||= Aws::Kinesis::Client.new
19
+ end
20
+
21
+ ## special-case paginator for streams
22
+ def paginate_streams(thing)
23
+ token = nil
24
+ things = []
25
+ loop do
26
+ resp = yield(token)
27
+ items = resp.send(thing)
28
+ things += items
29
+ token = items.last
30
+ break unless resp.has_more_streams
31
+ end
32
+ things
33
+ end
34
+ end
35
+
36
+ desc 'ls', 'list streams'
37
+ method_option :long, aliases: '-l', type: :boolean, default: false, desc: 'long listing'
38
+ def ls
39
+ paginate_streams(:stream_names) do |start|
40
+ kinesis.list_streams(exclusive_start_stream_name: start)
41
+ end.output do |streams|
42
+ if options[:long]
43
+ print_table streams.map { |name|
44
+ s = kinesis.describe_stream(stream_name: name).stream_description
45
+ op = s.has_more_shards ? '>' : ''
46
+ [s.stream_name, op + s.shards.count.to_s, color(s.stream_status), s.encryption_type, s.retention_period_hours.to_s + 'h', s.stream_creation_timestamp]
47
+ }
48
+ else
49
+ puts streams
50
+ end
51
+ end
52
+ end
53
+
54
+ desc 'dump [NAME]', 'describe a stream by name'
55
+ def dump(name)
56
+ kinesis.describe_stream(stream_name: name).stream_description.output do |stream|
57
+ puts YAML.dump(stringify_keys(stream.to_hash))
58
+ end
59
+ end
60
+
61
+ end
62
+ end
data/lib/awful/kms.rb CHANGED
@@ -18,10 +18,6 @@ module Awful
18
18
  @_kms ||= Aws::KMS::Client.new
19
19
  end
20
20
 
21
- def color(string)
22
- set_color(string, COLORS.fetch(string.to_sym, :yellow))
23
- end
24
-
25
21
  def list_aliases
26
22
  paginate(:aliases) do |marker|
27
23
  kms.list_aliases(marker: marker)
@@ -135,4 +131,4 @@ module Awful
135
131
  end
136
132
 
137
133
  end
138
- end
134
+ end
@@ -13,12 +13,6 @@ module Awful
13
13
  Disabled: :red
14
14
  }
15
15
 
16
- no_commands do
17
- def color(string)
18
- set_color(string, COLORS.fetch(string.to_sym, :yellow))
19
- end
20
- end
21
-
22
16
  desc 'ls [FUNCTION_NAME]', 'list event source mappings'
23
17
  method_option :long, aliases: '-l', type: :boolean, default: false, desc: 'Long listing'
24
18
  def ls(name = nil)
@@ -67,4 +61,4 @@ module Awful
67
61
  end
68
62
  end
69
63
  end
70
- end
64
+ end
data/lib/awful/param.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require 'aws-sdk-ssm'
2
+
1
3
  module Awful
2
4
  module Short
3
5
  def param(*args)
@@ -98,4 +100,4 @@ module Awful
98
100
  end
99
101
 
100
102
  end
101
- end
103
+ end
data/lib/awful/rds.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require 'aws-sdk-rds'
2
+
1
3
  module Awful
2
4
 
3
5
  class Rds < Cli
data/lib/awful/s3.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require 'aws-sdk-s3'
2
+
1
3
  module Awful
2
4
  module Short
3
5
  def s3(*args)
@@ -17,6 +19,18 @@ module Awful
17
19
  rescue Aws::S3::Errors::NoSuchTagSet # sdk throws this if no tags
18
20
  nil
19
21
  end
22
+
23
+ def get_stack_tag(name)
24
+ (get_tags(name) || []).find do |tag|
25
+ tag.key == 'aws:cloudformation:stack-name'
26
+ end&.value
27
+ end
28
+
29
+ def stack_exists?(name)
30
+ cf.describe_stacks(stack_name: name) && true
31
+ rescue ::Aws::CloudFormation::Errors::ValidationError
32
+ false
33
+ end
20
34
  end
21
35
 
22
36
  desc 'ls PATTERN', 'list buckets or objects'
@@ -197,5 +211,18 @@ module Awful
197
211
  }
198
212
  )
199
213
  end
214
+
215
+ desc 'orphans', 'find empty buckets from a deleted CFN stack'
216
+ method_option :delete, type: :boolean, default: false, desc: 'delete orphaned buckets'
217
+ def orphans
218
+ s3.list_buckets.buckets.each do |bucket|
219
+ if (stack = get_stack_tag(bucket.name))
220
+ next if stack_exists?(stack)
221
+ puts bucket.name
222
+ s3.delete_bucket(bucket: bucket.name) if options[:delete]
223
+ end
224
+ end
225
+ end
226
+
200
227
  end
201
- end
228
+ end
data/lib/awful/ssm.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require 'aws-sdk-ssm'
2
+
1
3
  module Awful
2
4
  module Short
3
5
  def ssm(*args)
@@ -17,10 +19,6 @@ module Awful
17
19
  def ssm
18
20
  @ssm ||= Aws::SSM::Client.new
19
21
  end
20
-
21
- def color(string)
22
- set_color(string, COLORS.fetch(string.to_sym, :yellow))
23
- end
24
22
  end
25
23
 
26
24
  desc 'ls', 'list commands'
@@ -91,4 +89,4 @@ module Awful
91
89
  end
92
90
  end
93
91
  end
94
- end
92
+ end
data/lib/awful/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Awful
2
- VERSION = '0.0.182'
3
- end
2
+ VERSION = '0.1.0.alpha.1'
3
+ end
data/lib/awful/vpce.rb CHANGED
@@ -13,12 +13,6 @@ module Awful
13
13
  deleted: :green,
14
14
  }
15
15
 
16
- no_commands do
17
- def color(string)
18
- set_color(string, COLORS.fetch(string.to_sym, :yellow))
19
- end
20
- end
21
-
22
16
  desc 'ls [IDs]', 'list VPC endpoints'
23
17
  method_option :long, aliases: '-l', type: :boolean, default: false, desc: 'long listing'
24
18
  method_option :vpc, aliases: '-v', type: :array, default: [], desc: 'VPC IDs to filter'
@@ -54,4 +48,4 @@ module Awful
54
48
  end
55
49
 
56
50
  end
57
- end
51
+ end
data/lib/awful.rb CHANGED
@@ -1,7 +1,8 @@
1
+ require 'aws-sdk-s3'
2
+ require 'aws-sdk-ec2'
1
3
  require 'awful/version'
2
4
 
3
5
  require 'dotenv'
4
- require 'aws-sdk'
5
6
  require 'thor'
6
7
  require 'yaml'
7
8
  require 'erb'
@@ -33,6 +34,10 @@ module Awful
33
34
  options[:yes] ? say("#{statement} yes", color) : super(statement, color)
34
35
  end
35
36
 
37
+ def color(string)
38
+ set_color(string, self.class::COLORS.fetch(string.to_sym, :yellow))
39
+ end
40
+
36
41
  def ec2
37
42
  @ec2 ||= Aws::EC2::Client.new
38
43
  end
@@ -76,6 +81,10 @@ module Awful
76
81
  @s3 ||= Aws::S3::Client.new
77
82
  end
78
83
 
84
+ def cf
85
+ @cf ||= Aws::CloudFormation::Client.new
86
+ end
87
+
79
88
  def lambda
80
89
  @lambda ||= Aws::Lambda::Client.new
81
90
  end
@@ -84,6 +93,10 @@ module Awful
84
93
  @support ||= Aws::Support::Client.new
85
94
  end
86
95
 
96
+ def cf
97
+ @cf ||= Aws::CloudFormation::Client.new
98
+ end
99
+
87
100
  def symbolize_keys(thing)
88
101
  if thing.is_a?(Hash)
89
102
  Hash[ thing.map { |k,v| [ k.to_sym, symbolize_keys(v) ] } ]
@@ -184,5 +197,16 @@ module Awful
184
197
  things
185
198
  end
186
199
  end
200
+
201
+ desc 'version', 'print version'
202
+ def version
203
+ puts VERSION
204
+ exit
205
+ end
206
+
207
+ desc 'll', 'long list'
208
+ def ll(*args)
209
+ invoke :ls, args, options.merge(long: true)
210
+ end
187
211
  end
188
- end
212
+ end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: awful
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.182
4
+ version: 0.1.0.alpha.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ric Lister
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-20 00:00:00.000000000 Z
11
+ date: 2022-02-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.7'
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.7'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -39,21 +39,21 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: aws-sdk
42
+ name: thor
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '2'
47
+ version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '2'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: thor
56
+ name: dotenv
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -67,7 +67,119 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: dotenv
70
+ name: aws-sdk-autoscaling
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: aws-sdk-cloudformation
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: aws-sdk-dynamodb
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: aws-sdk-ec2
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: aws-sdk-ecr
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: aws-sdk-elasticloadbalancingv2
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: aws-sdk-rds
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: aws-sdk-s3
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: aws-sdk-ssm
71
183
  requirement: !ruby/object:Gem::Requirement
72
184
  requirements:
73
185
  - - ">="
@@ -104,8 +216,11 @@ executables:
104
216
  - eip
105
217
  - elasticache
106
218
  - elb
219
+ - emr
220
+ - firehose
107
221
  - iam
108
222
  - keypair
223
+ - kinesis
109
224
  - kms
110
225
  - lambda
111
226
  - lc
@@ -152,8 +267,11 @@ files:
152
267
  - bin/eip
153
268
  - bin/elasticache
154
269
  - bin/elb
270
+ - bin/emr
271
+ - bin/firehose
155
272
  - bin/iam
156
273
  - bin/keypair
274
+ - bin/kinesis
157
275
  - bin/kms
158
276
  - bin/lambda
159
277
  - bin/lc
@@ -198,8 +316,11 @@ files:
198
316
  - lib/awful/eip.rb
199
317
  - lib/awful/elasticache.rb
200
318
  - lib/awful/elb.rb
319
+ - lib/awful/emr.rb
320
+ - lib/awful/firehose.rb
201
321
  - lib/awful/iam.rb
202
322
  - lib/awful/keypair.rb
323
+ - lib/awful/kinesis.rb
203
324
  - lib/awful/kms.rb
204
325
  - lib/awful/lambda.rb
205
326
  - lib/awful/lambda_events.rb
@@ -226,7 +347,7 @@ homepage: ''
226
347
  licenses:
227
348
  - MIT
228
349
  metadata: {}
229
- post_install_message:
350
+ post_install_message:
230
351
  rdoc_options: []
231
352
  require_paths:
232
353
  - lib
@@ -237,13 +358,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
237
358
  version: '0'
238
359
  required_rubygems_version: !ruby/object:Gem::Requirement
239
360
  requirements:
240
- - - ">="
361
+ - - ">"
241
362
  - !ruby/object:Gem::Version
242
- version: '0'
363
+ version: 1.3.1
243
364
  requirements: []
244
- rubyforge_project:
245
- rubygems_version: 2.6.13
246
- signing_key:
365
+ rubygems_version: 3.1.4
366
+ signing_key:
247
367
  specification_version: 4
248
368
  summary: Simple AWS command-line tool.
249
369
  test_files: []