Class: Awsome::Ec2::Instance

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

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

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

#propertiesObject (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_idObject



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_zoneObject



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 create_tags(tags)
  Awsome::Ec2.create_tags(@properties['instance_id'], tags)
end

#deregister_from_elbsObject



61
62
63
# File 'lib/awsome/ec2/instance.rb', line 61

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

#elbsObject



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

#idObject



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_typeObject



127
128
129
# File 'lib/awsome/ec2/instance.rb', line 127

def instance_type
  @properties['instance_type']
end

#keyObject



123
124
125
# File 'lib/awsome/ec2/instance.rb', line 123

def key
  @properties['key']
end

#packagesObject



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_idsObject



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

#terminateObject



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

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

#volumesObject



17
18
19
20
21
# File 'lib/awsome/ec2/instance.rb', line 17

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



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