judo 0.1.4 → 0.2.0
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.
- data/TODO +0 -4
- data/VERSION +1 -1
- data/bin/judo +2 -2
- data/lib/judo/commandline_helpers.rb +24 -10
- data/lib/judo/server.rb +14 -4
- data/lib/judo/snapshot.rb +1 -5
- metadata +3 -3
data/TODO
CHANGED
@@ -1,10 +1,6 @@
|
|
1
1
|
### NEEDED for new gem launch
|
2
2
|
|
3
|
-
### [ ] judo snapshots
|
4
|
-
### [ ] judo snapshot foo bar
|
5
|
-
### [ ] judo clone foo bar2
|
6
3
|
### [ ] snapshots/init/virgin
|
7
|
-
### [ ] judo stop --force
|
8
4
|
### [ ] judo swap (x) (y) -> swaps elastic IP's and name
|
9
5
|
### [ ] judo swap_ip (x) (y) -> swaps elastic IP's and name
|
10
6
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/bin/judo
CHANGED
@@ -103,8 +103,8 @@ begin
|
|
103
103
|
when "start" then find_servers(judo, ARGV) { |s| s.start(options[:version]) }
|
104
104
|
when "restart" then find_servers(judo, ARGV) { |s| s.restart(options[:force]) }
|
105
105
|
when "stop" then find_servers(judo, ARGV) { |s| s.stop(options[:force]) }
|
106
|
-
when "create" then mk_servers(judo, ARGV) { |s| s.create(options[:version]) }
|
107
|
-
when "launch" then mk_servers(judo, ARGV) { |s| s.create(options[:version]); s.start }
|
106
|
+
when "create" then mk_servers(judo, ARGV) { |s| s.create( :version => options[:version]) }
|
107
|
+
when "launch" then mk_servers(judo, ARGV) { |s| s.create( :version => options[:version]); s.start }
|
108
108
|
when "snapshots" then do_snapshots(judo, ARGV)
|
109
109
|
when "erase" then
|
110
110
|
raise JudoError, "usage: judo erase SNAPSHOT" unless ARGV.size == 1
|
@@ -123,10 +123,9 @@ module JudoCommandLineHelpers
|
|
123
123
|
servers = find_servers(judo, args)
|
124
124
|
printf " SNAPSHOTS\n"
|
125
125
|
printf "%s\n", ("-" * 80)
|
126
|
-
## FIXME - listing snapshots for deleted servers?
|
127
126
|
judo.snapshots.each do |snapshot|
|
128
|
-
|
129
|
-
printf "%-15s %-25s %-15s %-10s %s\n", snapshot.name, snapshot.server_name, snapshot.group_name, snapshot.version_desc, "#{snapshot.
|
127
|
+
next if args and not servers.detect { |s| s == snapshot.server }
|
128
|
+
printf "%-15s %-25s %-15s %-10s %s\n", snapshot.name, snapshot.server_name, snapshot.group_name, snapshot.version_desc, "#{snapshot.ec2_ids.size}v"
|
130
129
|
end
|
131
130
|
end
|
132
131
|
|
@@ -139,17 +138,29 @@ module JudoCommandLineHelpers
|
|
139
138
|
end
|
140
139
|
end
|
141
140
|
|
141
|
+
def sub_info(header, data, &block)
|
142
|
+
return if data == []
|
143
|
+
return if data == {}
|
144
|
+
return if data.nil?
|
145
|
+
puts " [ #{header} ]"
|
146
|
+
[ data ].flatten.each do |d|
|
147
|
+
block.call(d)
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
142
151
|
def do_info(judo, server)
|
143
|
-
puts "#{server}"
|
144
|
-
|
145
|
-
|
152
|
+
puts "[ #{server} ]"
|
153
|
+
printf " %-24s: %s\n", "Group", server.group.name
|
154
|
+
printf " %-24s: %s\n", "Note", server.note if server.note
|
155
|
+
printf " %-24s: %s\n", "Clone Of", server.clone if server.clone
|
156
|
+
printf " %-24s: %s\n", "Elastic Ip", server.elastic_ip if server.elastic_ip
|
157
|
+
sub_info("EC2", server.ec2_instance) do |i|
|
146
158
|
[:aws_instance_id, :ssh_key_name, :aws_availability_zone, :aws_state, :aws_image_id, :dns_name, :aws_instance_type, :private_dns_name, :aws_launch_time, :aws_groups ].each do |k|
|
147
|
-
printf "
|
159
|
+
printf " %-24s: %s\n",k, i[k]
|
148
160
|
end
|
149
161
|
end
|
150
|
-
|
151
|
-
|
152
|
-
printf "\t %-13s %-10s %-10s %4d %-10s %-8s\n",
|
162
|
+
sub_info("VOLUMES", server.ec2_volumes) do |v|
|
163
|
+
printf " %-13s %-10s %-10s %4d %-10s %-8s\n",
|
153
164
|
v[:aws_id],
|
154
165
|
v[:aws_status],
|
155
166
|
v[:zone],
|
@@ -157,5 +168,8 @@ module JudoCommandLineHelpers
|
|
157
168
|
v[:aws_attachment_status],
|
158
169
|
v[:aws_device]
|
159
170
|
end
|
171
|
+
sub_info("SNAPSHOTS", server.snapshots) do |s|
|
172
|
+
printf " %-10s %-15s %-8s %-5s\n", s.name, s.group_name, s.version_desc, "#{s.ec2_ids.size}v"
|
173
|
+
end
|
160
174
|
end
|
161
175
|
end
|
data/lib/judo/server.rb
CHANGED
@@ -8,9 +8,15 @@ module Judo
|
|
8
8
|
@group_name = group
|
9
9
|
end
|
10
10
|
|
11
|
-
def create(
|
11
|
+
def create(options)
|
12
12
|
raise JudoError, "no group specified" unless @group_name
|
13
13
|
|
14
|
+
snapshots = options[:snapshots]
|
15
|
+
note = options[:note]
|
16
|
+
|
17
|
+
version = options[:version]
|
18
|
+
version ||= group.version
|
19
|
+
|
14
20
|
if @name.nil?
|
15
21
|
index = @base.servers.map { |s| (s.name =~ /^#{s.group.name}.(\d*)$/); $1.to_i }.sort.last.to_i + 1
|
16
22
|
@name = "#{group.name}.#{index}"
|
@@ -19,7 +25,7 @@ module Judo
|
|
19
25
|
raise JudoError, "there is already a server named #{name}" if @base.servers.detect { |s| s.name == @name and s != self}
|
20
26
|
|
21
27
|
task("Creating server #{name}") do
|
22
|
-
update "name" => name, "group" => @group_name, "virgin" => true, "secret" => rand(2 ** 128).to_s(36), "version" => version
|
28
|
+
update "name" => name, "group" => @group_name, "note" => note, "virgin" => true, "secret" => rand(2 ** 128).to_s(36), "version" => version
|
23
29
|
@base.sdb.put_attributes("judo_config", "groups", @group_name => name)
|
24
30
|
end
|
25
31
|
|
@@ -85,6 +91,10 @@ module Judo
|
|
85
91
|
end
|
86
92
|
end
|
87
93
|
|
94
|
+
def note
|
95
|
+
get("note")
|
96
|
+
end
|
97
|
+
|
88
98
|
def clone
|
89
99
|
get("clone")
|
90
100
|
end
|
@@ -102,7 +112,7 @@ module Judo
|
|
102
112
|
end
|
103
113
|
|
104
114
|
def snapshots
|
105
|
-
base.snapshots.select { |s| s.server == self }
|
115
|
+
@base.snapshots.select { |s| s.server == self }
|
106
116
|
end
|
107
117
|
|
108
118
|
def volumes
|
@@ -295,7 +305,7 @@ module Judo
|
|
295
305
|
def force_detach_volumes
|
296
306
|
volumes.each do |device,volume_id|
|
297
307
|
task("Force detaching #{volume_id}") do
|
298
|
-
@base.ec2.detach_volume(volume_id, instance_id, device, true)
|
308
|
+
@base.ec2.detach_volume(volume_id, instance_id, device, true) rescue nil
|
299
309
|
end
|
300
310
|
end
|
301
311
|
end
|
data/lib/judo/snapshot.rb
CHANGED
@@ -32,10 +32,6 @@ module Judo
|
|
32
32
|
get("version").to_i
|
33
33
|
end
|
34
34
|
|
35
|
-
def num_ec2_snapshots
|
36
|
-
devs.size
|
37
|
-
end
|
38
|
-
|
39
35
|
def devs
|
40
36
|
Hash[ (state["devs"] || []).map { |a| a.split(":") } ]
|
41
37
|
end
|
@@ -55,7 +51,7 @@ module Judo
|
|
55
51
|
def clone(new_server, version = self.version)
|
56
52
|
raise JudoError, "cannot clone, snapshotting not complete" unless completed?
|
57
53
|
server = @base.new_server(new_server, group_name)
|
58
|
-
server.create(version, devs)
|
54
|
+
server.create( :version => version, :snapshots => devs)
|
59
55
|
server.update "clone" => name ##, "secret" => rand(2 ** 128).to_s(36) ## cant change this till kuzushi knows about a post-clone operation
|
60
56
|
end
|
61
57
|
|