Class: Awsome::Ec2::Instance
- Inherits:
-
Object
- Object
- Awsome::Ec2::Instance
- Defined in:
- lib/awsome/ec2/instance.rb
Instance Attribute Summary collapse
-
#properties ⇒ Object
readonly
Returns the value of attribute properties.
Class Method Summary collapse
Instance Method Summary collapse
- #ami_id ⇒ Object
- #associate_cnames(*cnames) ⇒ Object
- #associate_ips(*elastic_ips) ⇒ Object
- #availability_zone ⇒ Object
- #create_tags(tags) ⇒ Object
- #deregister_from_elbs ⇒ Object
- #elbs ⇒ Object
- #id ⇒ Object
-
#initialize(property_hash) ⇒ Instance
constructor
A new instance of Instance.
- #install_packages(*packages) ⇒ Object
- #instance_type ⇒ Object
- #key ⇒ Object
- #packages ⇒ Object
- #reattach_volumes(*volumes) ⇒ Object
- #register_with_elbs(*load_balancer_names) ⇒ Object
- #remove_packages(*packages) ⇒ Object
- #security_group_ids ⇒ Object
- #ssh(*args) ⇒ Object
- #terminate ⇒ Object
- #volumes ⇒ Object
- #wait_for_ssh! ⇒ Object
- #wait_until_running! ⇒ Object
Constructor Details
#initialize(property_hash) ⇒ Instance
Returns a new instance of Instance.
8 9 10 11 |
# File 'lib/awsome/ec2/instance.rb', line 8 def initialize(property_hash) raise 'properties must be a hash' unless property_hash.is_a?(Hash) @properties = property_hash.clone end |
Instance Attribute Details
#properties ⇒ Object (readonly)
Returns the value of attribute properties.
6 7 8 |
# File 'lib/awsome/ec2/instance.rb', line 6 def properties @properties end |
Class Method Details
.to_table(instances, title = 'Instances') ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/awsome/ec2/instance.rb', line 86 def self.to_table(instances, title='Instances') rows = [] # add instance rows instances.each do |instance| rows << [ instance.packages.to_a.join("\n"), instance.volumes.to_a.join("\n"), instance.elbs.collect(&:name).join("\n"), instance.ami_id, instance.key, instance.instance_type, instance.availability_zone, instance.security_group_ids ] rows << :separator end # remove last unnecessary separator rows.pop if rows.any? headings = %w(packages volumes elbs ami key type zone secgroup) Terminal::Table.new :headings => headings, :rows => rows, :title => title end |
Instance Method Details
#ami_id ⇒ Object
119 120 121 |
# File 'lib/awsome/ec2/instance.rb', line 119 def ami_id @properties['ami_id'] end |
#associate_cnames(*cnames) ⇒ Object
38 39 40 41 42 43 44 45 |
# File 'lib/awsome/ec2/instance.rb', line 38 def associate_cnames(*cnames) cnames.each do |cname| zone = cname['zone'] cname['names'].each do |name| Awsome::R53.redefine_cname(zone, name, @properties['private_dns_name']) end end end |
#associate_ips(*elastic_ips) ⇒ Object
47 48 49 50 51 |
# File 'lib/awsome/ec2/instance.rb', line 47 def associate_ips(*elastic_ips) elastic_ips.each do |ip| Awsome::Ec2.associate_address(@properties['instance_id'], ip) end end |
#availability_zone ⇒ Object
131 132 133 |
# File 'lib/awsome/ec2/instance.rb', line 131 def availability_zone @properties['availability_zone'] end |
#create_tags(tags) ⇒ Object
82 83 84 |
# File 'lib/awsome/ec2/instance.rb', line 82 def () Awsome::Ec2.(@properties['instance_id'], ) end |
#deregister_from_elbs ⇒ Object
61 62 63 |
# File 'lib/awsome/ec2/instance.rb', line 61 def deregister_from_elbs elbs.each { |elb| elb.deregister(@properties['instance_id']) } end |
#elbs ⇒ Object
111 112 113 |
# File 'lib/awsome/ec2/instance.rb', line 111 def elbs Awsome::Elb.describe_lbs.select { |elb| elb.instances.include?(@properties['instance_id']) } end |
#id ⇒ Object
115 116 117 |
# File 'lib/awsome/ec2/instance.rb', line 115 def id @properties['instance_id'] end |
#install_packages(*packages) ⇒ Object
74 75 76 |
# File 'lib/awsome/ec2/instance.rb', line 74 def install_packages(*packages) Awsome::Debian.install_debian_packages(@properties['public_dns_name'], *packages) end |
#instance_type ⇒ Object
127 128 129 |
# File 'lib/awsome/ec2/instance.rb', line 127 def instance_type @properties['instance_type'] end |
#key ⇒ Object
123 124 125 |
# File 'lib/awsome/ec2/instance.rb', line 123 def key @properties['key'] end |
#packages ⇒ Object
13 14 15 |
# File 'lib/awsome/ec2/instance.rb', line 13 def packages Awsome::Debian.describe_debian_packages(@properties['public_dns_name']).to_set end |
#reattach_volumes(*volumes) ⇒ Object
53 54 55 56 57 58 59 |
# File 'lib/awsome/ec2/instance.rb', line 53 def reattach_volumes(*volumes) volumes.each do |info| Awsome::Ec2.detach_volume(info['id'], info['dir'], info['preumount']) Awsome.wait_until(interval: 10) { Awsome::Ec2.volume_available?(info['id']) } Awsome::Ec2.attach_volume(info['id'], @properties['instance_id'], info['device']) end end |
#register_with_elbs(*load_balancer_names) ⇒ Object
65 66 67 68 |
# File 'lib/awsome/ec2/instance.rb', line 65 def register_with_elbs(*load_balancer_names) return if load_balancer_names.empty? Awsome::Elb.describe_lbs(*load_balancer_names).each { |elb| elb.register(@properties['instance_id']) } end |
#remove_packages(*packages) ⇒ Object
70 71 72 |
# File 'lib/awsome/ec2/instance.rb', line 70 def remove_packages(*packages) Awsome::Debian.remove_debian_packages(@properties['public_dns_name'], *packages) end |
#security_group_ids ⇒ Object
135 136 137 |
# File 'lib/awsome/ec2/instance.rb', line 135 def security_group_ids @properties['security_group_ids'] end |
#ssh(*args) ⇒ Object
34 35 36 |
# File 'lib/awsome/ec2/instance.rb', line 34 def ssh(*args) Awsome::Ssh.ssh(@properties['public_dns_name'], *args) end |
#terminate ⇒ Object
78 79 80 |
# File 'lib/awsome/ec2/instance.rb', line 78 def terminate Awsome::Ec2.terminate_instances(@properties['instance_id']) end |
#volumes ⇒ Object
17 18 19 20 21 |
# File 'lib/awsome/ec2/instance.rb', line 17 def volumes Awsome::Ec2.('attachment.instance-id' => @properties['instance_id']).collect do |p| p['volume_id'] end.to_set end |
#wait_for_ssh! ⇒ Object
30 31 32 |
# File 'lib/awsome/ec2/instance.rb', line 30 def wait_for_ssh! Awsome.wait_until(interval: 20) { has_ssh? } end |
#wait_until_running! ⇒ Object
23 24 25 26 27 28 |
# File 'lib/awsome/ec2/instance.rb', line 23 def wait_until_running! Awsome.wait_until(interval: 20) do reload! @properties['state'] =~ /^running/ end end |