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 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.4
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
- # next if args and not servers.map { |s| s.name }.include?(snapshot.server_name)
129
- printf "%-15s %-25s %-15s %-10s %s\n", snapshot.name, snapshot.server_name, snapshot.group_name, snapshot.version_desc, "#{snapshot.num_ec2_snapshots}v"
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
- if server.ec2_instance and not server.ec2_instance.empty?
145
- puts "\t[ EC2 ]"
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 "\t %-24s: %s\n",k, server.ec2_instance[k]
159
+ printf " %-24s: %s\n",k, i[k]
148
160
  end
149
161
  end
150
- puts "\t[ VOLUMES ]"
151
- server.ec2_volumes.each do |v|
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
@@ -8,9 +8,15 @@ module Judo
8
8
  @group_name = group
9
9
  end
10
10
 
11
- def create(version = group.version, snapshots = nil)
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
@@ -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
 
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
8
- - 4
9
- version: 0.1.4
7
+ - 2
8
+ - 0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Orion Henry