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 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