jnewland-capsize 0.5.0 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.textile +5 -0
- data/lib/capsize/ec2.rb +143 -4
- data/lib/capsize/ec2_plugin.rb +50 -0
- metadata +3 -3
data/README.textile
CHANGED
@@ -40,6 +40,11 @@ h2. Tasks
|
|
40
40
|
Run cap -e <taskname> on any task to get more details
|
41
41
|
|
42
42
|
* cap ec2:console:output
|
43
|
+
* cap ec2:addresses:allocate
|
44
|
+
* cap ec2:addresses:associate
|
45
|
+
* cap ec2:addresses:disassociate
|
46
|
+
* cap ec2:addresses:release
|
47
|
+
* cap ec2:addresses:show
|
43
48
|
* cap ec2:images:show
|
44
49
|
* cap ec2:instances:reboot
|
45
50
|
* cap ec2:instances:run
|
data/lib/capsize/ec2.rb
CHANGED
@@ -12,7 +12,7 @@ Capistrano::Configuration.instance.load do
|
|
12
12
|
Show instance console output.
|
13
13
|
You can view the console of a specific instance by doing one of the following:
|
14
14
|
- define an :instance_id in any Capsize config file with "set :instance_id, 'i-123456'"
|
15
|
-
-
|
15
|
+
- Override this on the command line with "cap ec2:console:output INSTANCE_ID='i-123456'"
|
16
16
|
- If neither of these are provided you will be prompted by Capistano for the instance ID you wish to terminate.
|
17
17
|
DESC
|
18
18
|
task :output do
|
@@ -228,7 +228,7 @@ Capistrano::Configuration.instance.load do
|
|
228
228
|
Terminate an EC2 instance.
|
229
229
|
You can terminate a specific instance by doing one of the following:
|
230
230
|
- define an :instance_id in deploy.rb with "set :instance_id, 'i-123456'"
|
231
|
-
-
|
231
|
+
- Override this on the command line with "cap ec2:instances:terminate INSTANCE_ID='i-123456'"
|
232
232
|
- If neither of these are provided you will be prompted by Capistano for the instance ID you wish to terminate.
|
233
233
|
DESC
|
234
234
|
task :terminate do
|
@@ -259,7 +259,7 @@ Capistrano::Configuration.instance.load do
|
|
259
259
|
Reboot an EC2 instance.
|
260
260
|
You can reboot a specific instance by doing one of the following:
|
261
261
|
- define an :instance_id in deploy.rb with "set :instance_id, 'i-123456'"
|
262
|
-
-
|
262
|
+
- Override this on the command line with "cap ec2:instances:reboot INSTANCE_ID='i-123456'"
|
263
263
|
- If neither of these are provided you will be prompted by Capistano for the instance ID you wish to reboot.
|
264
264
|
DESC
|
265
265
|
task :reboot do
|
@@ -510,6 +510,145 @@ Capistrano::Configuration.instance.load do
|
|
510
510
|
|
511
511
|
end
|
512
512
|
|
513
|
-
end # end namespace :ec2
|
514
513
|
|
514
|
+
# ELASTIC IP (ADDRESSES) TASKS
|
515
|
+
#########################################
|
516
|
+
|
517
|
+
namespace :addresses do
|
518
|
+
|
519
|
+
desc <<-DESC
|
520
|
+
Show and describe elastic IP addresses assigned to your account.
|
521
|
+
DESC
|
522
|
+
task :show do
|
523
|
+
begin
|
524
|
+
result = capsize_ec2.describe_addresses()
|
525
|
+
rescue Exception => e
|
526
|
+
puts "The attempt to show elastic IP addresses failed with error : " + e
|
527
|
+
raise e
|
528
|
+
end
|
529
|
+
|
530
|
+
capsize_ec2.print_address_description(result)
|
531
|
+
end
|
532
|
+
|
533
|
+
desc <<-DESC
|
534
|
+
Acquire a new elastic IP address for use with your account.
|
535
|
+
DESC
|
536
|
+
task :allocate do
|
537
|
+
begin
|
538
|
+
print "Allocating elastic IP address ... "
|
539
|
+
$stdout.flush
|
540
|
+
response = capsize_ec2.allocate_address()
|
541
|
+
puts "success"
|
542
|
+
puts "Allocated address: #{response.publicIp}"
|
543
|
+
puts ""
|
544
|
+
rescue Exception => e
|
545
|
+
puts "failed"
|
546
|
+
puts "The attempt to allocate an elastic IP addresses failed with error : " + e
|
547
|
+
raise e
|
548
|
+
end
|
549
|
+
end
|
550
|
+
|
551
|
+
desc <<-DESC
|
552
|
+
Release an elastic IP from your account.
|
553
|
+
You can release a specific elastic IP by doing one of the following:
|
554
|
+
- define a :public_ip in deploy.rb with "set :public_ip, '123.1.2.3'"
|
555
|
+
- Override this on the command line with "cap ec2:addresses:release PUBLIC_IP='123.1.2.3'"
|
556
|
+
DESC
|
557
|
+
task :release do
|
558
|
+
|
559
|
+
capsize.get(:public_ip)
|
560
|
+
|
561
|
+
case public_ip
|
562
|
+
when nil, ""
|
563
|
+
puts "You don't seem to have set a public_ip ..."
|
564
|
+
else
|
565
|
+
confirm = (Capistrano::CLI.ui.ask("WARNING! Really release elastic IP address \"#{public_ip}\"? (y/N): ").downcase == 'y')
|
566
|
+
if confirm
|
567
|
+
begin
|
568
|
+
response = capsize_ec2.release_address({:public_ip => public_ip})
|
569
|
+
puts "The request to release elastic IP address #{public_ip} has been accepted. Monitor the status of the request with 'cap ec2:addresses:show'"
|
570
|
+
rescue Exception => e
|
571
|
+
puts "The attempt to release the elastic IP address failed with error : " + e
|
572
|
+
raise e
|
573
|
+
end
|
574
|
+
else
|
575
|
+
puts "Your address release request has been cancelled."
|
576
|
+
end
|
577
|
+
end
|
578
|
+
end
|
579
|
+
|
580
|
+
|
581
|
+
desc <<-DESC
|
582
|
+
Associate an elastic IP address with an instance.
|
583
|
+
If the IP address is currently assigned to another instance, the IP address
|
584
|
+
is assigned to the new instance.
|
585
|
+
|
586
|
+
You must supply both a public_ip (this is the elastic IP address you want to assign)
|
587
|
+
and an instance_id (this is the instance to which you want to assign the address)
|
588
|
+
|
589
|
+
You can associate an elastic IP with an instance by doing one of the following:
|
590
|
+
- Define these variables in deploy.rb with "set :public_ip, '123.1.2.3'; set :instance_id, 'i-12312312';"
|
591
|
+
- Override this on the command line with "cap ec2:addresses:associate PUBLIC_IP='123.1.2.3' INSTANCE_ID='i-12312312'"
|
592
|
+
- A combination of the above.
|
593
|
+
DESC
|
594
|
+
task :associate do
|
595
|
+
|
596
|
+
capsize.get(:public_ip)
|
597
|
+
capsize.get(:instance_id)
|
598
|
+
|
599
|
+
if !public_ip || public_ip == ''
|
600
|
+
puts "You don't seem to have set a public_ip ..."
|
601
|
+
elsif !instance_id || instance_id == ''
|
602
|
+
puts "You don't seem to have set an instance_id ..."
|
603
|
+
else
|
604
|
+
#TODO: check if this IP is already assigned to another instance and make
|
605
|
+
# the user confirm the new association if that's the case
|
606
|
+
begin
|
607
|
+
response = capsize_ec2.associate_address(:public_ip => public_ip, :instance_id => instance_id)
|
608
|
+
puts "The elastic IP address #{public_ip} has been associated with " +
|
609
|
+
"instance #{instance_id}."
|
610
|
+
puts "** It may take several minutes for this mapping to take effect."
|
611
|
+
rescue Exception => e
|
612
|
+
puts "The attempt to associate the elastic IP address failed with error : " + e
|
613
|
+
raise e
|
614
|
+
end
|
615
|
+
end
|
616
|
+
end
|
617
|
+
|
618
|
+
|
619
|
+
desc <<-DESC
|
620
|
+
Disassociates the specified elastic IP from whatever instance it's
|
621
|
+
currently associated with
|
622
|
+
|
623
|
+
You can disassociate a specific elastic IP by doing one of the following:
|
624
|
+
- define a :public_ip in deploy.rb with "set :public_ip, '123.1.2.3'"
|
625
|
+
- Override this on the command line with "cap ec2:addresses:disassociate PUBLIC_IP='123.1.2.3'"
|
626
|
+
- If neither of these are provided you will be prompted by Capistano for the IP you wish to disassociate.
|
627
|
+
DESC
|
628
|
+
task :disassociate do
|
629
|
+
|
630
|
+
capsize.get(:public_ip)
|
631
|
+
|
632
|
+
case public_ip
|
633
|
+
when nil, ""
|
634
|
+
puts "You don't seem to have set a public_ip ..."
|
635
|
+
else
|
636
|
+
confirm = (Capistrano::CLI.ui.ask("WARNING! Really disassociate elastic IP address \"#{public_ip}\"? (y/N): ").downcase == 'y')
|
637
|
+
if confirm
|
638
|
+
begin
|
639
|
+
response = capsize_ec2.disassociate_address({:public_ip => public_ip})
|
640
|
+
puts "The elastic IP address #{public_ip} has been disassociated."
|
641
|
+
rescue Exception => e
|
642
|
+
puts "The attempt to disassociate the elastic IP address failed with error : " + e
|
643
|
+
raise e
|
644
|
+
end
|
645
|
+
else
|
646
|
+
puts "Your address disassociation request has been cancelled."
|
647
|
+
end
|
648
|
+
end
|
649
|
+
end
|
650
|
+
|
651
|
+
end # end namespace :addresses
|
652
|
+
|
653
|
+
end # end namespace :ec2
|
515
654
|
end # end Capistrano::Configuration.instance.load
|
data/lib/capsize/ec2_plugin.rb
CHANGED
@@ -458,6 +458,41 @@ module Capsize
|
|
458
458
|
|
459
459
|
end
|
460
460
|
|
461
|
+
# ELASTIC IP ADDRESS METHODS
|
462
|
+
#########################################
|
463
|
+
|
464
|
+
# returns information about elastic IP addresses owned by the user
|
465
|
+
def describe_addresses(options = {})
|
466
|
+
amazon = connect()
|
467
|
+
options = {:public_ip => []}.merge(options)
|
468
|
+
amazon.describe_addresses(:public_ip => options[:public_ip])
|
469
|
+
end
|
470
|
+
|
471
|
+
# allocate an elastic IP address for use with this account
|
472
|
+
def allocate_address
|
473
|
+
amazon = connect()
|
474
|
+
amazon.allocate_address
|
475
|
+
end
|
476
|
+
|
477
|
+
# release an elastic IP address from this account
|
478
|
+
def release_address(options)
|
479
|
+
amazon = connect()
|
480
|
+
amazon.release_address(:public_ip => options[:public_ip])
|
481
|
+
end
|
482
|
+
|
483
|
+
# associate an elastic IP address to an instance
|
484
|
+
def associate_address(options)
|
485
|
+
amazon = connect()
|
486
|
+
amazon.associate_address(:public_ip => options[:public_ip], :instance_id => options[:instance_id])
|
487
|
+
end
|
488
|
+
|
489
|
+
# disassociate an elastic IP address from whatever instance it may be assigned to
|
490
|
+
def disassociate_address(options)
|
491
|
+
amazon = connect()
|
492
|
+
amazon.disassociate_address(:public_ip => options[:public_ip])
|
493
|
+
end
|
494
|
+
|
495
|
+
|
461
496
|
# CAPSIZE HELPER METHODS
|
462
497
|
#########################################
|
463
498
|
# call these from tasks.rb with 'capsize.method_name'
|
@@ -563,6 +598,21 @@ module Capsize
|
|
563
598
|
puts "You don't own any running or pending instances"
|
564
599
|
end
|
565
600
|
end
|
601
|
+
|
602
|
+
# print the result of an describe_addresses
|
603
|
+
def print_address_description(result = nil)
|
604
|
+
puts "" if result.nil?
|
605
|
+
unless result.addressesSet.nil?
|
606
|
+
result.addressesSet.item.each do |item|
|
607
|
+
puts "addressesSet:publicIp = " + item.publicIp unless item.publicIp.nil?
|
608
|
+
puts "addressesSet:instanceId = " + (item.instanceId ? item.instanceId : '(unassociated)')
|
609
|
+
puts ""
|
610
|
+
end
|
611
|
+
else
|
612
|
+
puts "You don't have any elastic IP addresses. Run 'cap ec2:addresses:allocate' to acquire one."
|
613
|
+
end
|
614
|
+
end
|
615
|
+
|
566
616
|
end
|
567
617
|
end
|
568
618
|
Capistrano.plugin :capsize_ec2, Capsize::CapsizeEC2
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jnewland-capsize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jesse Newland
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2008-
|
13
|
+
date: 2008-07-13 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -122,7 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
122
|
requirements: []
|
123
123
|
|
124
124
|
rubyforge_project: capsize
|
125
|
-
rubygems_version: 1.0
|
125
|
+
rubygems_version: 1.2.0
|
126
126
|
signing_key:
|
127
127
|
specification_version: 2
|
128
128
|
summary: Capsize is a Capistrano plugin used to provide an easy way to manage and script interaction with the Amazon EC2 service using the amazon-ec2 Ruby gem.
|