Class: Awsome::Ec2::Instance

Inherits:
Object
  • Object
show all
Defined in:
lib/awsome/ec2/instance.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(property_hash) ⇒ Instance

Returns a new instance of Instance.



6
7
8
9
# File 'lib/awsome/ec2/instance.rb', line 6

def initialize(property_hash)
  raise 'properties must be a hash' unless property_hash.is_a?(Hash)
  @properties = property_hash.clone
end

Instance Attribute Details

#propertiesObject (readonly)

Returns the value of attribute properties.



4
5
6
# File 'lib/awsome/ec2/instance.rb', line 4

def properties
  @properties
end

Instance Method Details

#associate_cnames(*cnames) ⇒ Object



36
37
38
39
40
41
42
43
# File 'lib/awsome/ec2/instance.rb', line 36

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



45
46
47
48
49
# File 'lib/awsome/ec2/instance.rb', line 45

def associate_ips(*elastic_ips)
  elastic_ips.each do |ip|
    Awsome::Ec2.associate_address(@properties['instance_id'], ip)
  end
end

#create_tags(tags) ⇒ Object



79
80
81
# File 'lib/awsome/ec2/instance.rb', line 79

def create_tags(tags)
  Awsome::Ec2.create_tags(@properties['instance_id'], tags)
end

#deregister_from_elbsObject



59
60
61
# File 'lib/awsome/ec2/instance.rb', line 59

def deregister_from_elbs
  elbs.each { |elb| elb.deregister(@properties['instance_id']) }
end

#install_packages(*packages) ⇒ Object



71
72
73
# File 'lib/awsome/ec2/instance.rb', line 71

def install_packages(*packages)
  Awsome::Debian.install_debian_packages(@properties['public_dns_name'], *packages)
end

#packagesObject



11
12
13
# File 'lib/awsome/ec2/instance.rb', line 11

def packages
  Awsome::Debian.describe_debian_packages(@properties['public_dns_name']).to_set
end

#reattach_volumes(*volumes) ⇒ Object



51
52
53
54
55
56
57
# File 'lib/awsome/ec2/instance.rb', line 51

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



63
64
65
# File 'lib/awsome/ec2/instance.rb', line 63

def register_with_elbs(*load_balancer_names)
  Awsome::Elb.describe_lbs(*load_balancer_names).each { |elb| elb.register(@properties['instance_id']) }
end

#remove_packages(*packages) ⇒ Object



67
68
69
# File 'lib/awsome/ec2/instance.rb', line 67

def remove_packages(*packages)
  Awsome::Debian.remove_debian_packages(@properties['public_dns_name'], *packages)
end

#ssh(*args) ⇒ Object



32
33
34
# File 'lib/awsome/ec2/instance.rb', line 32

def ssh(*args)
  Awsome::Ssh.ssh(@properties['public_dns_name'], *args)
end

#terminateObject



75
76
77
# File 'lib/awsome/ec2/instance.rb', line 75

def terminate
  Awsome::Ec2.terminate_instances(@properties['instance_id'])
end

#volumesObject



15
16
17
18
19
# File 'lib/awsome/ec2/instance.rb', line 15

def volumes
  Awsome::Ec2.describe_attachments('attachment.instance-id' => @properties['instance_id']).collect do |p| 
    p['volume_id'] 
  end.to_set
end

#wait_for_ssh!Object



28
29
30
# File 'lib/awsome/ec2/instance.rb', line 28

def wait_for_ssh!
  Awsome.wait_until(interval: 10) { has_ssh? }
end

#wait_until_running!Object



21
22
23
24
25
26
# File 'lib/awsome/ec2/instance.rb', line 21

def wait_until_running!
  Awsome.wait_until(interval: 10) do
    reload! 
    @properties['state'] =~ /^running/
  end
end