lib/judo/server.rb in judo-0.2.0 vs lib/judo/server.rb in judo-0.2.1
- old
+ new
@@ -169,11 +169,11 @@
create_volumes
end
end
def clone_snapshots(snapshots)
- snapshots.each do |device,snap_id|
+ snapshots.each do |device,snap_id|
task("Creating EC2 Volume #{device} from #{snap_id}") do
volume_id = @base.ec2.create_volume(snap_id, nil, config["availability_zone"])[:aws_id]
add_volume(volume_id, device)
end
end
@@ -301,11 +301,11 @@
def invalid(str)
raise JudoInvalid, str
end
def force_detach_volumes
- volumes.each do |device,volume_id|
+ volumes.each do |device,volume_id|
task("Force detaching #{volume_id}") do
@base.ec2.detach_volume(volume_id, instance_id, device, true) rescue nil
end
end
end
@@ -380,11 +380,11 @@
end
end
def wait_for_volumes_detached
begin
- Timeout::timeout(30) do
+ Timeout::timeout(60) do
loop do
break if ec2_volumes.reject { |v| v[:aws_status] == "available" }.empty?
sleep 2
end
end
@@ -536,9 +536,26 @@
end
def snapshot(name)
snap = @base.new_snapshot(name, self.name)
snap.create
+ end
+
+ def swapip(other)
+ ip1 = elastic_ip
+ ip2 = other.elastic_ip
+ raise JudoError, "Server must have an elastic IP to swap" unless ip1 and ip2
+
+ task("Swapping Ip Addresses") do
+ @base.ec2.disassociate_address(ip1)
+ @base.ec2.disassociate_address(ip2)
+
+ @base.ec2.associate_address(instance_id, ip2)
+ @base.ec2.associate_address(other.instance_id, ip1)
+
+ update "elastic_ip" => ip2
+ other.update "elastic_ip" => ip1
+ end
end
def <=>(s)
[group.name, name] <=> [s.group.name, s.name]
end