awful 0.0.2 → 0.0.3
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 +4 -4
- data/bin/sg +7 -0
- data/lib/awful/auto_scaling.rb +28 -9
- data/lib/awful/launch_config.rb +25 -2
- data/lib/awful/security_group.rb +33 -0
- data/lib/awful/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f2edeb3d038db1c9063d5808e2475b027a057dce
|
4
|
+
data.tar.gz: 6d04587e11d128aa9363ef8cf332886a26e80b3e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dc25885681695b9eb9e15a55847ac46e978c7ba91457bc4bce2562b847d736ba9eaa4bf1d58fbc371032c0bea5f971d1c1009f2193c234a5b4f65d97989cef0b
|
7
|
+
data.tar.gz: af16e76f55bc4895fba349b7c551a1cd35157b1aa5b420087dfbb59734d27544b59c1392c334672aa5289b59f43938b1556c6990dae86a2b7ebd6a575cd95cdf
|
data/bin/sg
ADDED
data/lib/awful/auto_scaling.rb
CHANGED
@@ -92,9 +92,10 @@ module Awful
|
|
92
92
|
end
|
93
93
|
|
94
94
|
desc 'update NAME', 'update existing auto-scaling group'
|
95
|
-
method_option :desired_capacity,
|
96
|
-
method_option :min_size,
|
97
|
-
method_option :max_size,
|
95
|
+
method_option :desired_capacity, aliases: '-d', default: nil, desc: 'Set desired capacity'
|
96
|
+
method_option :min_size, aliases: '-m', default: nil, desc: 'Set minimum capacity'
|
97
|
+
method_option :max_size, aliases: '-M', default: nil, desc: 'Set maximum capacity'
|
98
|
+
method_option :launch_configuration_name, aliases: '-l', default: nil, desc: 'Launch config name'
|
98
99
|
def update(name)
|
99
100
|
opt = load_cfg(options)
|
100
101
|
whitelist = %i[auto_scaling_group_name launch_configuration_name min_size max_size desired_capacity default_cooldown availability_zones
|
@@ -114,16 +115,24 @@ module Awful
|
|
114
115
|
end
|
115
116
|
end
|
116
117
|
|
118
|
+
no_commands do
|
119
|
+
def oldest(name)
|
120
|
+
instance_ids = autoscaling.describe_auto_scaling_instances.map(&:auto_scaling_instances).flatten.select do |instance|
|
121
|
+
instance.auto_scaling_group_name == name
|
122
|
+
end.map(&:instance_id)
|
123
|
+
ec2.describe_instances(instance_ids: instance_ids).map(&:reservations).flatten.map(&:instances).flatten.sort_by(&:launch_time)
|
124
|
+
end
|
125
|
+
|
126
|
+
def newest(name)
|
127
|
+
oldest(name).reverse
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
117
131
|
desc 'terminate NAME [NUMBER]', 'terminate NUMBER instances in group NAME'
|
118
132
|
method_option :decrement, aliases: '-d', default: false, type: :boolean, desc: 'Decrement desired capacity for each terminated instance'
|
119
133
|
method_option :newest, aliases: '-n', default: false, type: :boolean, desc: 'Delete newest instances instead of oldest'
|
120
134
|
def terminate(name, num = 1)
|
121
|
-
|
122
|
-
instance.auto_scaling_group_name == name
|
123
|
-
end.map(&:instance_id)
|
124
|
-
|
125
|
-
ins = ec2.describe_instances(instance_ids: instance_ids).map(&:reservations).flatten.map(&:instances).flatten.sort_by(&:launch_time)
|
126
|
-
ins = ins.reverse if options[:newest]
|
135
|
+
ins = options[:newest] ? newest(name) : oldest(name)
|
127
136
|
|
128
137
|
ins.first(num.to_i).map(&:instance_id).tap do |ids|
|
129
138
|
if yes? "Really terminate #{num} instances: #{ids.join(',')}?", :yellow
|
@@ -132,7 +141,17 @@ module Awful
|
|
132
141
|
end
|
133
142
|
end
|
134
143
|
end
|
144
|
+
end
|
135
145
|
|
146
|
+
desc 'stop NAME [NUMBER]', 'stop NUMBER instances in group NAME'
|
147
|
+
method_option :newest, aliases: '-n', default: false, type: :boolean, desc: 'Stop newest instances instead of oldest'
|
148
|
+
def stop(name, num = 1)
|
149
|
+
ins = options[:newest] ? newest(name) : oldest(name)
|
150
|
+
ins.first(num.to_i).map(&:instance_id).tap do |ids|
|
151
|
+
if yes? "Really stop #{num} instances: #{ids.join(',')}?", :yellow
|
152
|
+
ec2.stop_instances(instance_ids: ids)
|
153
|
+
end
|
154
|
+
end
|
136
155
|
end
|
137
156
|
|
138
157
|
end
|
data/lib/awful/launch_config.rb
CHANGED
@@ -44,13 +44,36 @@ module Awful
|
|
44
44
|
puts YAML.dump(stringify_keys(lc))
|
45
45
|
end
|
46
46
|
|
47
|
+
desc 'latest', 'latest'
|
48
|
+
def latest(name)
|
49
|
+
autoscaling.describe_launch_configurations.map(&:launch_configurations).flatten.select do |lc|
|
50
|
+
lc.launch_configuration_name.match(/^#{name}/)
|
51
|
+
end.sort_by(&:created_time).last.launch_configuration_name.tap do |latest|
|
52
|
+
puts latest
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
47
56
|
desc 'create [NAME]', 'create a new launch configuration'
|
57
|
+
method_option :timestamp, aliases: '-t', default: false, desc: 'Add timestamp to launch config name'
|
58
|
+
method_option :patch, aliases: '-p', default: false, desc: 'Add release to launch config name'
|
48
59
|
def create(name)
|
49
|
-
opt = load_cfg
|
60
|
+
opt = load_cfg(options)
|
61
|
+
|
50
62
|
whitelist = %i[launch_configuration_name image_id key_name security_groups classic_link_vpc_id classic_link_vpc_security_groups user_data
|
51
63
|
instance_id instance_type kernel_id ramdisk_id block_device_mappings instance_monitoring spot_price iam_instance_profile
|
52
64
|
ebs_optimized associate_public_ip_address placement_tenancy]
|
53
|
-
|
65
|
+
|
66
|
+
if options[:timestamp]
|
67
|
+
opt[:launch_configuration_name] = "#{name}-#{Time.now.utc.strftime('%Y%m%d%H%M%S')}"
|
68
|
+
elsif opt[:patch]
|
69
|
+
print "bumping version from latest: "
|
70
|
+
m = latest(name).match(/^#{name}-(\w+)\.(\w+)\.(\w+)$/)
|
71
|
+
raise "latest launch config does not match format #{name}-x.x.x" unless m
|
72
|
+
opt[:launch_configuration_name] = "#{name}-#{[m[1], m[2], m[3].to_i + 1].join('.')}"
|
73
|
+
else
|
74
|
+
opt[:launch_configuration_name] = name
|
75
|
+
end
|
76
|
+
|
54
77
|
opt[:user_data] = Base64.encode64(opt[:user_data]) # encode user data
|
55
78
|
opt = remove_empty_strings(opt)
|
56
79
|
opt = only_keys_matching(opt, whitelist)
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Awful
|
2
|
+
|
3
|
+
class SecurityGroup < Thor
|
4
|
+
include Awful
|
5
|
+
|
6
|
+
desc 'ls [NAME]', 'list security groups [matching NAME]'
|
7
|
+
method_option :long, aliases: '-l', default: false, desc: 'Long listing'
|
8
|
+
def ls(name = /./)
|
9
|
+
fields = options[:long] ?
|
10
|
+
->(s) { [tag_name(s), s.group_id, s.group_name, s.vpc_id, s.description] } :
|
11
|
+
->(s) { [s.group_name] }
|
12
|
+
|
13
|
+
ec2.describe_security_groups.map(&:security_groups).flatten.select do |sg|
|
14
|
+
sg.group_name.match(name) or sg.group_id.match(name)
|
15
|
+
end.map do |sg|
|
16
|
+
fields.call(sg)
|
17
|
+
end.tap do |list|
|
18
|
+
print_table list
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
desc 'dump NAME', 'dump security group with NAME as yaml'
|
23
|
+
def dump(name)
|
24
|
+
ec2.describe_security_groups.map(&:security_groups).flatten.find do |sg|
|
25
|
+
sg.group_name == name
|
26
|
+
end.tap do |sg|
|
27
|
+
puts YAML.dump(stringify_keys(sg.to_hash))
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
data/lib/awful/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: awful
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ric Lister
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -75,6 +75,7 @@ executables:
|
|
75
75
|
- elb
|
76
76
|
- lc
|
77
77
|
- rds
|
78
|
+
- sg
|
78
79
|
- subnet
|
79
80
|
- vpc
|
80
81
|
extensions: []
|
@@ -91,6 +92,7 @@ files:
|
|
91
92
|
- bin/elb
|
92
93
|
- bin/lc
|
93
94
|
- bin/rds
|
95
|
+
- bin/sg
|
94
96
|
- bin/subnet
|
95
97
|
- bin/vpc
|
96
98
|
- lib/awful.rb
|
@@ -99,6 +101,7 @@ files:
|
|
99
101
|
- lib/awful/elb.rb
|
100
102
|
- lib/awful/launch_config.rb
|
101
103
|
- lib/awful/rds.rb
|
104
|
+
- lib/awful/security_group.rb
|
102
105
|
- lib/awful/subnet.rb
|
103
106
|
- lib/awful/version.rb
|
104
107
|
- lib/awful/vpc.rb
|