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.
@@ -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 note
50
- get("note")
51
- end
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
- "note" => server.note,
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(new_server)
71
+ def animate(new_server_name)
87
72
  raise JudoError, "cannot animate, snapshotting not complete" unless completed?
88
- @base.create_server(new_server, group_name, :version => version, :snapshots => devs, :virgin => virgin, :note => note, :data => data , :clone => name)
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
- ### TODO - wait for snapshotting to finish
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
- "#{(ec2_data.inject(0) { |sum,a| sum + a[:aws_progress].to_i } / ec2_data.size).to_i}%"
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
- - 4
8
- - 4
9
- version: 0.4.4
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-02 00:00:00 -04:00
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/commandline_helpers.rb
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
- - spec/base.rb
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
@@ -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
@@ -1,9 +0,0 @@
1
- require File.dirname(__FILE__) + '/base'
2
-
3
- describe Judo::Base do
4
- before do
5
- end
6
-
7
- it "xxx" do
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- require File.dirname(__FILE__) + '/base'
2
-
3
- describe Judo::Server do
4
- before do
5
- end
6
-
7
- it "creates a new server" do
8
- end
9
- end