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 +5 -5
- data/awful.gemspec +12 -3
- data/bin/emr +7 -0
- data/bin/firehose +7 -0
- data/bin/kinesis +7 -0
- data/lib/awful/alb.rb +3 -5
- data/lib/awful/ami.rb +1 -5
- data/lib/awful/auto_scaling.rb +3 -5
- data/lib/awful/changesets.rb +3 -5
- data/lib/awful/cloudformation.rb +54 -41
- data/lib/awful/cloudfront.rb +1 -5
- data/lib/awful/cloudwatch_events.rb +1 -5
- data/lib/awful/config.rb +1 -5
- data/lib/awful/dynamodb.rb +2 -5
- data/lib/awful/ec2.rb +0 -6
- data/lib/awful/ecr.rb +2 -1
- data/lib/awful/ecs.rb +1 -5
- data/lib/awful/elasticache.rb +1 -5
- data/lib/awful/elb.rb +1 -5
- data/lib/awful/emr.rb +60 -0
- data/lib/awful/firehose.rb +63 -0
- data/lib/awful/iam.rb +1 -5
- data/lib/awful/kinesis.rb +62 -0
- data/lib/awful/kms.rb +1 -5
- data/lib/awful/lambda_events.rb +1 -7
- data/lib/awful/param.rb +3 -1
- data/lib/awful/rds.rb +2 -0
- data/lib/awful/s3.rb +28 -1
- data/lib/awful/ssm.rb +3 -5
- data/lib/awful/version.rb +2 -2
- data/lib/awful/vpce.rb +1 -7
- data/lib/awful.rb +26 -2
- metadata +140 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: ca91c337c82cd7e1c02e82c4397a306e9ba282ae1f465bfbe77e432fbe8f4be2
|
4
|
+
data.tar.gz: 67ca6667f8794f8f08730cd5e0cf22f6e3a00d4d60741d38fb84074a9d7c2a68
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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"
|
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
|
-
|
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
data/bin/firehose
ADDED
data/bin/kinesis
ADDED
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
|
data/lib/awful/auto_scaling.rb
CHANGED
@@ -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
|
data/lib/awful/changesets.rb
CHANGED
@@ -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
|
data/lib/awful/cloudformation.rb
CHANGED
@@ -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
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
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
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
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: '
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
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
|
data/lib/awful/cloudfront.rb
CHANGED
@@ -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
|
data/lib/awful/dynamodb.rb
CHANGED
@@ -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
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
|
data/lib/awful/elasticache.rb
CHANGED
@@ -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
|
data/lib/awful/lambda_events.rb
CHANGED
@@ -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
data/lib/awful/rds.rb
CHANGED
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.
|
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.
|
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:
|
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: '
|
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: '
|
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:
|
42
|
+
name: thor
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
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: '
|
54
|
+
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
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:
|
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:
|
363
|
+
version: 1.3.1
|
243
364
|
requirements: []
|
244
|
-
|
245
|
-
|
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: []
|