judo 0.1.4 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|