judo 0.4.4 → 0.5.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/VERSION +1 -1
- data/bin/judo +26 -58
- data/default/setup.sh +1 -1
- data/default/userdata.erb +0 -4
- data/lib/judo.rb +1 -1
- data/lib/judo/base.rb +90 -239
- data/lib/judo/cli_helpers.rb +157 -0
- data/lib/judo/group.rb +28 -56
- data/lib/judo/patch.rb +13 -0
- data/lib/judo/server.rb +42 -105
- data/lib/judo/snapshot.rb +11 -24
- metadata +8 -14
- data/TODO +0 -15
- data/lib/judo/commandline_helpers.rb +0 -144
- data/spec/base.rb +0 -21
- data/spec/base_spec.rb +0 -9
- data/spec/server_spec.rb +0 -9
data/lib/judo/snapshot.rb
CHANGED
@@ -1,14 +1,4 @@
|
|
1
1
|
module Judo
|
2
|
-
### sdb
|
3
|
-
### name {
|
4
|
-
### "version" => [ server.version ],
|
5
|
-
### "devs" => [ "/dev/sde1:snap-abc123", "/dev/sde2:snap-abc456" ],
|
6
|
-
### "server" => server.id
|
7
|
-
### "group" => server.group.name
|
8
|
-
### "virgin" => server.virgin
|
9
|
-
### "note" => server.note
|
10
|
-
### "data" => server.data
|
11
|
-
### "created_at" => unixtime
|
12
2
|
class Snapshot
|
13
3
|
attr_accessor :name, :server_id
|
14
4
|
|
@@ -46,12 +36,9 @@ module Judo
|
|
46
36
|
get("version").to_i
|
47
37
|
end
|
48
38
|
|
49
|
-
def
|
50
|
-
get("
|
51
|
-
|
52
|
-
|
53
|
-
def data
|
54
|
-
get("data")
|
39
|
+
def metadata
|
40
|
+
metadata_json = get("metadata_json")
|
41
|
+
JSON.load(metadata_json) if metadata_json
|
55
42
|
end
|
56
43
|
|
57
44
|
def virgin
|
@@ -72,26 +59,25 @@ module Judo
|
|
72
59
|
@base.sdb.put_attributes(@base.snapshot_domain, name, {
|
73
60
|
"version" => server.version,
|
74
61
|
"virgin" => server.virgin?,
|
75
|
-
"
|
76
|
-
"data" => server.data,
|
62
|
+
"metadata_json" => server.get("metadata_json"),
|
77
63
|
"devs" => devs,
|
78
64
|
"server" => server.id,
|
79
65
|
"group" => server.group.name,
|
80
66
|
"created_at" => Time.now.to_i.to_s
|
81
67
|
}, :replace)
|
82
|
-
server.add "snapshots", name
|
83
68
|
end
|
84
69
|
end
|
85
70
|
|
86
|
-
def animate(
|
71
|
+
def animate(new_server_name)
|
87
72
|
raise JudoError, "cannot animate, snapshotting not complete" unless completed?
|
88
|
-
@base.create_server(
|
73
|
+
@base.create_server(new_server_name, group_name,
|
74
|
+
:version => version, :snapshots => devs, :virgin => virgin,
|
75
|
+
:metadata => metadata , :clone => name, :instance_type => server.instance_type)
|
89
76
|
end
|
90
77
|
|
91
78
|
def delete
|
92
|
-
|
79
|
+
raise JudoError, "cannot delete, snapshotting not complete" unless completed?
|
93
80
|
@base.sdb.delete_attributes(@base.snapshot_domain, name)
|
94
|
-
server.remove("snapshots", name) if server
|
95
81
|
end
|
96
82
|
|
97
83
|
def get(key)
|
@@ -124,7 +110,8 @@ module Judo
|
|
124
110
|
end
|
125
111
|
|
126
112
|
def progress
|
127
|
-
|
113
|
+
min_percent = ec2_data.map { |s| s[:aws_progress].to_i }.min
|
114
|
+
"#{min_percent}%"
|
128
115
|
end
|
129
116
|
|
130
117
|
def size(snap_id)
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 5
|
8
|
+
- 0
|
9
|
+
version: 0.5.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Orion Henry
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-06-
|
17
|
+
date: 2010-06-11 00:00:00 -07:00
|
18
18
|
default_executable: judo
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -63,11 +63,9 @@ extensions: []
|
|
63
63
|
|
64
64
|
extra_rdoc_files:
|
65
65
|
- README.markdown
|
66
|
-
- TODO
|
67
66
|
files:
|
68
67
|
- README.markdown
|
69
68
|
- Rakefile
|
70
|
-
- TODO
|
71
69
|
- VERSION
|
72
70
|
- bin/judo
|
73
71
|
- default/config.json
|
@@ -76,13 +74,11 @@ files:
|
|
76
74
|
- default/userdata.erb
|
77
75
|
- lib/judo.rb
|
78
76
|
- lib/judo/base.rb
|
79
|
-
- lib/judo/
|
77
|
+
- lib/judo/cli_helpers.rb
|
80
78
|
- lib/judo/group.rb
|
79
|
+
- lib/judo/patch.rb
|
81
80
|
- lib/judo/server.rb
|
82
81
|
- lib/judo/snapshot.rb
|
83
|
-
- spec/base.rb
|
84
|
-
- spec/base_spec.rb
|
85
|
-
- spec/server_spec.rb
|
86
82
|
has_rdoc: true
|
87
83
|
homepage: http://github.com/orionz/judo
|
88
84
|
licenses: []
|
@@ -113,7 +109,5 @@ rubygems_version: 1.3.6
|
|
113
109
|
signing_key:
|
114
110
|
specification_version: 3
|
115
111
|
summary: The gentle way to manage and control ec2 instances
|
116
|
-
test_files:
|
117
|
-
|
118
|
-
- spec/base_spec.rb
|
119
|
-
- spec/server_spec.rb
|
112
|
+
test_files: []
|
113
|
+
|
data/TODO
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
### NEEDED for new gem launch
|
2
|
-
|
3
|
-
### [ ] round robin or specified availability_zone
|
4
|
-
### [ ] implement auto security_group creation and setup
|
5
|
-
### [ ] start and stop services in parallel
|
6
|
-
### [ ] retry volume creation timeout (happened once)
|
7
|
-
|
8
|
-
### MAYBE
|
9
|
-
### [ ] ebs backed root disk + start/stop
|
10
|
-
### [ ] two phase delete
|
11
|
-
### [ ] write specs
|
12
|
-
### [ ] store git commit hash with commit to block a judo commit if there is newer material stored
|
13
|
-
### [ ] use amazon's new conditional write tools so we never have problems from concurrent updates
|
14
|
-
### [ ] zerigo integration for automatic DNS setup
|
15
|
-
|
@@ -1,144 +0,0 @@
|
|
1
|
-
module JudoCommandLineHelpers
|
2
|
-
|
3
|
-
def each_server(judo, args, &blk)
|
4
|
-
raise JudoError, "No servers specified - use :all for all servers" if args.empty?
|
5
|
-
servers = judo.find_servers_by_name_or_groups_with_not(args)
|
6
|
-
servers.each do |server|
|
7
|
-
begin
|
8
|
-
blk.call(server)
|
9
|
-
rescue JudoInvalid => e
|
10
|
-
puts "#{server} - #{e.message}"
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def mk_server_names(judo, args, &blk)
|
16
|
-
args.each do |arg|
|
17
|
-
name,group = arg.split(":")
|
18
|
-
raise JudoError, "You must specify a group on create and launch" unless group
|
19
|
-
names = if name =~ /^[12345]$/
|
20
|
-
(1..(name.to_i)).each do
|
21
|
-
blk.call(judo.mk_server_name(group), group)
|
22
|
-
end
|
23
|
-
elsif name == ""
|
24
|
-
blk.call(judo.mk_server_name(group), group)
|
25
|
-
elsif name =~ /^\d+$/
|
26
|
-
raise JudoError, "You can batch-create between 1 and 5 servers" if count < 1 or count > 5
|
27
|
-
else
|
28
|
-
blk.call(name, group)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def mk_groups(judo, args, &blk)
|
34
|
-
args.each do |name|
|
35
|
-
if name =~ /:(.+)$/
|
36
|
-
blk.call(judo.get_group($1))
|
37
|
-
else
|
38
|
-
raise JudoError, "Invalid group name '#{name}'"
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def mk_servers(judo, options, args, start)
|
44
|
-
mk_server_names(judo, args) do |name, group|
|
45
|
-
begin
|
46
|
-
server = judo.create_server(name, group, options)
|
47
|
-
server.start(options) if start
|
48
|
-
rescue JudoInvalid => e
|
49
|
-
puts "#{server} - #{e.message}"
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def do_groups(judo)
|
55
|
-
printf " SERVER GROUPS\n"
|
56
|
-
judo.groups.each do |g|
|
57
|
-
printf "%-18s %s servers\n", g.name, g.servers.size
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def do_volumes(judo)
|
62
|
-
vols = judo.volumes.sort { |a,b| [ a[:assigned_to].to_s, a[:instance_id].to_s ] <=> [ b[:assigned_to].to_s, b[:instance_id].to_s ] }
|
63
|
-
|
64
|
-
format = "%13s %6s %12s %-10s %-16s %-16s\n"
|
65
|
-
printf format, "AWS_ID", "SIZE", "AWS_STATUS", "AWS_DEVICE", "ATTACHED TO", "CONFIGURED FOR"
|
66
|
-
printf "%s\n", ("-" * 80)
|
67
|
-
|
68
|
-
vols.each do |v|
|
69
|
-
attached = v[:attached_to] ? v[:attached_to].name : v[:instance_id]
|
70
|
-
assigned = v[:assigned_to] ? v[:assigned_to].name : ""
|
71
|
-
printf format, v[:id], v[:size], v[:status], v[:device], attached, assigned
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
def do_ips(judo)
|
76
|
-
ips = judo.ips.sort { |a,b| a[:assigned_to].to_s <=> b[:assigned_to].to_s }
|
77
|
-
|
78
|
-
format = "%15s %20s %20s\n"
|
79
|
-
printf format, "IP", "ATTACHED TO", "CONFIGURED FOR"
|
80
|
-
printf "%s\n", ("-"*57)
|
81
|
-
|
82
|
-
ips.each do |ip|
|
83
|
-
attached = ip[:attached_to] ? ip[:attached_to].name : ip[:instance_id]
|
84
|
-
assigned = ip[:assigned_to] ? ip[:assigned_to].name : ""
|
85
|
-
printf format, ip[:ip], attached, assigned
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def do_snapshots(judo, args)
|
90
|
-
printf " SNAPSHOTS\n"
|
91
|
-
printf "%s\n", ("-" * 80)
|
92
|
-
judo.snapshots.each do |snapshot|
|
93
|
-
printf "%-15s %-25s %-15s %-10s %s\n", snapshot.name, snapshot.server_name, snapshot.group_name, snapshot.version_desc, "ebs:#{snapshot.ec2_ids.size}"
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
def do_list(judo, args)
|
98
|
-
printf " SERVERS\n"
|
99
|
-
printf "%s\n", ("-" * 80)
|
100
|
-
args << ":all" if args.empty?
|
101
|
-
each_server(judo,args) do |s|
|
102
|
-
printf "%-32s %-12s %-7s %-11s %-11s %-10s %-3s %s\n", s.name, s.group.name, s.version_desc, s.get("instance_id"), s.size_desc, s.ec2_state, "ebs:#{s.volumes.keys.size}", s.has_ip? ? "ip" : ""
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
def sub_info(header, data, &block)
|
107
|
-
return if data == []
|
108
|
-
return if data == {}
|
109
|
-
return if data.nil?
|
110
|
-
puts " [ #{header} ]"
|
111
|
-
[ data ].flatten.each do |d|
|
112
|
-
block.call(d)
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
def do_info(judo, server)
|
117
|
-
puts "[ #{server} ]"
|
118
|
-
printf " %-24s: %s\n", "ID", server.id
|
119
|
-
printf " %-24s: %s\n", "Group", server.group.name
|
120
|
-
printf " %-24s: %s\n", "Note", server.note if server.note
|
121
|
-
printf " %-24s: %s\n", "Animated From", server.clone if server.clone
|
122
|
-
printf " %-24s: %s\n", "Elastic Ip", server.elastic_ip if server.elastic_ip
|
123
|
-
sub_info("EC2", server.ec2_instance) do |i|
|
124
|
-
[: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|
|
125
|
-
printf " %-24s: %s\n",k, i[k]
|
126
|
-
end
|
127
|
-
end
|
128
|
-
sub_info("METADATA", server.metadata.keys) do |key|
|
129
|
-
printf(" %-24s: %s\n", key, server.metadata[key] )
|
130
|
-
end
|
131
|
-
sub_info("VOLUMES", server.ec2_volumes) do |v|
|
132
|
-
printf " %-13s %-10s %-10s %4d %-10s %-8s\n",
|
133
|
-
v[:aws_id],
|
134
|
-
v[:aws_status],
|
135
|
-
v[:zone],
|
136
|
-
v[:aws_size],
|
137
|
-
v[:aws_attachment_status],
|
138
|
-
v[:aws_device]
|
139
|
-
end
|
140
|
-
sub_info("SNAPSHOTS", server.snapshots) do |s|
|
141
|
-
printf " %-10s %-15s %-8s %-5s\n", s.name, s.group_name, s.version_desc, "#{s.ec2_ids.size}v"
|
142
|
-
end
|
143
|
-
end
|
144
|
-
end
|
data/spec/base.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../lib/judo'
|
2
|
-
|
3
|
-
require 'bacon'
|
4
|
-
require 'mocha/standalone'
|
5
|
-
require 'mocha/object'
|
6
|
-
|
7
|
-
class Bacon::Context
|
8
|
-
include Mocha::API
|
9
|
-
|
10
|
-
def initialize(name, &block)
|
11
|
-
@name = name
|
12
|
-
@before, @after = [
|
13
|
-
[lambda { mocha_setup }],
|
14
|
-
[lambda { mocha_verify ; mocha_teardown }]
|
15
|
-
]
|
16
|
-
@block = block
|
17
|
-
end
|
18
|
-
|
19
|
-
def xit(desc, &bk)
|
20
|
-
end
|
21
|
-
end
|
data/spec/base_spec.rb
DELETED