judo 0.4.4 → 0.5.0

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