awful 0.0.182 → 0.1.0.alpha.1

Sign up to get free protection for your applications and to get access to all the features.
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: []