judo 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/TODO CHANGED
@@ -1,8 +1,8 @@
1
1
  ### NEEDED for new gem launch
2
2
 
3
- ### [ ] snapshots/init/virgin
3
+ ### [ ] snapshot complete in do_snapshots()
4
4
  ### [ ] judo swap (x) (y) -> swaps elastic IP's and name
5
- ### [ ] judo swap_ip (x) (y) -> swaps elastic IP's and name
5
+ ### [ ] snapshots/init/virgin
6
6
 
7
7
  ### [ ] judo does not work with ruby 1.8.6 - :(
8
8
  ### [ ] saw a timeout on volume allocation - make sure we build in re-tries - need to allocate the server all together as much as possible
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.2.1
data/bin/judo CHANGED
@@ -35,6 +35,8 @@ Usage: judo launch [options] SERVER ...
35
35
  judo clone [options] SNAPSHOT SERVER ## create a new server from a snapshot
36
36
  judo erase [options] SNAPSHOT ## erase an old snapshot
37
37
 
38
+ judo swapip [options] SERVER SERVER ## swap elastic IP's on the two servers
39
+
38
40
  judo info [options] [SERVER ...]
39
41
  judo console [options] [SERVER ...] ## shows AWS console output
40
42
  judo ssh [options] [SERVER ...] ## ssh's into the server
@@ -76,6 +78,9 @@ banner
76
78
  opts.on( '-g', '--group GROUP', 'Specify the default group of the repo dir' ) do |group|
77
79
  options[:group] = group
78
80
  end
81
+ opts.on( '-n', '--note NOTE', 'Add a note to a server as you create or launch it') do |note|
82
+ options[:note] = note
83
+ end
79
84
  opts.on( '-v', '--version VERSION', 'Update the servers config version on create/start/launch' ) do |version|
80
85
  options[:version] = version
81
86
  end
@@ -103,9 +108,13 @@ begin
103
108
  when "start" then find_servers(judo, ARGV) { |s| s.start(options[:version]) }
104
109
  when "restart" then find_servers(judo, ARGV) { |s| s.restart(options[:force]) }
105
110
  when "stop" then find_servers(judo, ARGV) { |s| s.stop(options[:force]) }
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 }
111
+ when "create" then mk_servers(judo, ARGV) { |s| s.create(options) }
112
+ when "launch" then mk_servers(judo, ARGV) { |s| s.create(options); s.start }
108
113
  when "snapshots" then do_snapshots(judo, ARGV)
114
+ when "swapip" then
115
+ servers = find_servers(judo, ARGV)
116
+ raise JudoError, "usage: judo swapip SERVER SERVER" unless servers.size == 2
117
+ servers[0].swapip(servers[1])
109
118
  when "erase" then
110
119
  raise JudoError, "usage: judo erase SNAPSHOT" unless ARGV.size == 1
111
120
  snapshot_name = ARGV.shift
data/lib/judo/base.rb CHANGED
@@ -68,13 +68,16 @@ module Judo
68
68
  :judo_dir => dir,
69
69
  :group => group_config ? File.basename(File.dirname(group_config)) : nil,
70
70
  :repo => repo_dir,
71
- :bucket => config["s3_bucket"],
72
- :access_id => config["access_id"],
73
- :access_secret => config["access_secret"]
71
+ :bucket => (config["s3_bucket"] || ENV['JUDO_BUCKET']),
72
+ :access_id => (config["access_id"] || ENV['AWS_ACCESS_KEY_ID']),
73
+ :access_secret => (config["access_secret"] || ENV['AWS_SECRET_ACCESS_KEY'])
74
74
  }.delete_if { |key,value| value.nil? }
75
75
  rescue Object => e
76
- puts e.inspect
77
- {}
76
+ {
77
+ :access_id => ENV['AWS_ACCESS_KEY_ID'],
78
+ :access_secret => ENV['AWS_SECRET_ACCESS_KEY'],
79
+ :bucket => ENV['JUDO_BUCKET']
80
+ }.delete_if { |key,value| value.nil? }
78
81
  end
79
82
 
80
83
  def self.find_judo_dir(check)
@@ -11,7 +11,7 @@ module JudoCommandLineHelpers
11
11
  if string =~ /([^:]*):(.*)/
12
12
  [ $1, $2 ]
13
13
  else
14
- [ string, nil]
14
+ [ string, nil]
15
15
  end
16
16
  end
17
17
 
data/lib/judo/server.rb CHANGED
@@ -171,7 +171,7 @@ module Judo
171
171
  end
172
172
 
173
173
  def clone_snapshots(snapshots)
174
- snapshots.each do |device,snap_id|
174
+ snapshots.each do |device,snap_id|
175
175
  task("Creating EC2 Volume #{device} from #{snap_id}") do
176
176
  volume_id = @base.ec2.create_volume(snap_id, nil, config["availability_zone"])[:aws_id]
177
177
  add_volume(volume_id, device)
@@ -303,7 +303,7 @@ module Judo
303
303
  end
304
304
 
305
305
  def force_detach_volumes
306
- volumes.each do |device,volume_id|
306
+ volumes.each do |device,volume_id|
307
307
  task("Force detaching #{volume_id}") do
308
308
  @base.ec2.detach_volume(volume_id, instance_id, device, true) rescue nil
309
309
  end
@@ -382,7 +382,7 @@ module Judo
382
382
 
383
383
  def wait_for_volumes_detached
384
384
  begin
385
- Timeout::timeout(30) do
385
+ Timeout::timeout(60) do
386
386
  loop do
387
387
  break if ec2_volumes.reject { |v| v[:aws_status] == "available" }.empty?
388
388
  sleep 2
@@ -540,6 +540,23 @@ USER_DATA
540
540
  snap.create
541
541
  end
542
542
 
543
+ def swapip(other)
544
+ ip1 = elastic_ip
545
+ ip2 = other.elastic_ip
546
+ raise JudoError, "Server must have an elastic IP to swap" unless ip1 and ip2
547
+
548
+ task("Swapping Ip Addresses") do
549
+ @base.ec2.disassociate_address(ip1)
550
+ @base.ec2.disassociate_address(ip2)
551
+
552
+ @base.ec2.associate_address(instance_id, ip2)
553
+ @base.ec2.associate_address(other.instance_id, ip1)
554
+
555
+ update "elastic_ip" => ip2
556
+ other.update "elastic_ip" => ip1
557
+ end
558
+ end
559
+
543
560
  def <=>(s)
544
561
  [group.name, name] <=> [s.group.name, s.name]
545
562
  end
data/lib/judo/snapshot.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Judo
2
2
  class Snapshot
3
- attr_accessor :name, :server_name
3
+ attr_accessor :name, :server_name
4
4
 
5
5
  def self.domain
6
6
  "judo_snapshots"
@@ -39,7 +39,7 @@ module Judo
39
39
  def create
40
40
  raise JudoError,"snapshot already exists" unless state.empty?
41
41
  raise JudoError,"server has no disks to clone: #{server.volumes}" if server.volumes.empty?
42
- task("Snapshotting #{server.name}") do
42
+ @base.task("Snapshotting #{server.name}") do
43
43
  devs = server.volumes.map do |dev,vol|
44
44
  "#{dev}:#{@base.ec2.create_snapshot(vol)[:aws_id]}"
45
45
  end
@@ -66,9 +66,9 @@ module Judo
66
66
 
67
67
  def destroy
68
68
  devs.each do |dev,snapshot_id|
69
- task("Deleting #{dev} #{snapshot_id}") do
69
+ @base.task("Deleting snapshot #{snapshot_id}") do
70
70
  begin
71
- @base.ec2.delete_snapshot(snapshot_id)
71
+ @base.ec2.delete_snapshot(snapshot_id)
72
72
  rescue Object => e
73
73
  puts "Error destrotying snapshot #{e.message}"
74
74
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 0
9
- version: 0.2.0
8
+ - 1
9
+ version: 0.2.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Orion Henry