awsome 0.0.11 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
@@ -124,6 +124,17 @@ module Awsome
124
124
  end
125
125
  end
126
126
 
127
+ @@associate_address_columns = %w(
128
+ identifier
129
+ elastic_ip
130
+ instance_id
131
+ )
132
+
133
+ def self.associate_address(instance_id, ip_address)
134
+ cmd = Awsome::Ec2.command('ec2-associate-address', ip_address, instance: instance_id)
135
+ Awsome.execute(cmd, columns: @@associate_address_columns, filter: /^ADDRESS/)
136
+ end
137
+
127
138
  def self.attach_volume(volume_id, instance_id, device)
128
139
  cmd = Awsome::Ec2.command('ec2-attach-volume', volume_id, instance: instance_id, device: device)
129
140
  Awsome.execute(cmd)
@@ -33,6 +33,28 @@ module Awsome
33
33
  Awsome::Ssh.ssh(@properties['public_dns_name'], *args)
34
34
  end
35
35
 
36
+ def associate_ips(*elastic_ips)
37
+ elastic_ips.each do |ip|
38
+ Awsome::Ec2.associate_address(@properties['instance_id'], ip)
39
+ end
40
+ end
41
+
42
+ def install_hosts_entries(ip_address, *hostnames)
43
+ sed = []
44
+ cmd = []
45
+
46
+ # we will remove all hosts entries for the given "ip_address"
47
+ sed << "sed '/^#{ip_address}/d"
48
+
49
+ # we will remove all hosts entries for each of the given "hostnames"
50
+ sed += hostnames.collect { |h| "sed '/ #{h} /d'" }
51
+
52
+ cmd << "sudo cat /etc/hosts | #{sed.join(' | ')} > /etc/hosts.temp"
53
+ cmd << "sudo echo '#{ip_address} #{hostnames.join(' ')} # GENERATED' >> /etc/hosts.temp"
54
+ cmd << "sudo mv /etc/hosts.temp /etc/hosts"
55
+ ssh(cmd)
56
+ end
57
+
36
58
  def reattach_volumes(*volumes)
37
59
  volumes.each do |info|
38
60
  Awsome::Ec2.detach_volume(info['id'], info['dir'], info['preumount'])
@@ -57,6 +57,12 @@ module Awsome
57
57
  instance.deregister_from_elbs
58
58
  instance.remove_packages(*requirement.packages_to_remove(instance))
59
59
  instance.install_packages(*requirement.packages_to_install(instance))
60
+
61
+ instances_to_use do |other_instance, other_requirement|
62
+ other_instance.install_hosts_entries(instance.properties['private_dns_name'], *requirement.hostnames)
63
+ end
64
+
65
+ instance.associate_ips(*requirement.elastic_ips)
60
66
  instance.register_with_elbs(*requirement.elbs)
61
67
  end
62
68
  end
@@ -9,7 +9,15 @@ module Awsome
9
9
  end
10
10
 
11
11
  def elbs
12
- @properties['elbs']
12
+ @properties['elbs'] || []
13
+ end
14
+
15
+ def elastic_ips
16
+ @properties['elastic_ips'] || []
17
+ end
18
+
19
+ def hostnames
20
+ @properties['hostnames'] || []
13
21
  end
14
22
 
15
23
  def volumes_to_attach(instance)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: awsome
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.12
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: