awsome 0.0.15 → 0.0.16

Sign up to get free protection for your applications and to get access to all the features.
@@ -73,6 +73,7 @@ require 'awesome_print'
73
73
  require 'awsome/ec2.rb'
74
74
  require 'awsome/elb.rb'
75
75
  require 'awsome/ssh.rb'
76
+ require 'awsome/r53.rb'
76
77
  require 'awsome/debian.rb'
77
78
  require 'awsome/requirements.rb'
78
79
  require 'awsome/executor.rb'
@@ -33,28 +33,16 @@ module Awsome
33
33
  Awsome::Ssh.ssh(@properties['public_dns_name'], *args)
34
34
  end
35
35
 
36
+ def associate_cnames(*cnames)
37
+ cnames.each { |cname| associate_cname(cname) }
38
+ end
39
+
36
40
  def associate_ips(*elastic_ips)
37
41
  elastic_ips.each do |ip|
38
42
  Awsome::Ec2.associate_address(@properties['instance_id'], ip)
39
43
  end
40
44
  end
41
45
 
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 << "cat /etc/hosts | #{sed.join(' | ')} | sudo tee /etc/hosts.temp"
53
- cmd << "echo '#{ip_address} #{hostnames.join(' ')} # GENERATED' | sudo tee -a /etc/hosts.temp" unless hostnames.empty?
54
- cmd << "sudo mv /etc/hosts.temp /etc/hosts"
55
- ssh(cmd)
56
- end
57
-
58
46
  def reattach_volumes(*volumes)
59
47
  volumes.each do |info|
60
48
  Awsome::Ec2.detach_volume(info['id'], info['dir'], info['preumount'])
@@ -90,6 +78,10 @@ module Awsome
90
78
  @properties = instance.properties.clone
91
79
  end
92
80
 
81
+ def associate_cname(cname)
82
+ Awsome::R53.redefine_cname(cname[:zone], cname[:name], @properties['private_dns_name'])
83
+ end
84
+
93
85
  def has_ssh?
94
86
  Awsome::Ssh.has_ssh?(@properties['public_dns_name'])
95
87
  end
@@ -57,11 +57,7 @@ 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
-
60
+ instance.associate_cnames(*requirement.cnames)
65
61
  instance.associate_ips(*requirement.elastic_ips)
66
62
  instance.register_with_elbs(*requirement.elbs)
67
63
  end
@@ -16,8 +16,8 @@ module Awsome
16
16
  @properties['elastic_ips'] || []
17
17
  end
18
18
 
19
- def hostnames
20
- @properties['hostnames'] || []
19
+ def cnames
20
+ @properties['cnames'] || []
21
21
  end
22
22
 
23
23
  def volumes_to_attach(instance)
@@ -0,0 +1,25 @@
1
+ require 'route53'
2
+
3
+ module Awsome
4
+ module R53
5
+ def self.connection
6
+ @@connection ||= Route53::Connection.new(Awsome.config.aws_access_key, Awsome.config.aws_secret_key)
7
+ end
8
+ def self.zones
9
+ self.connection.get_zones
10
+ end
11
+ def self.find_zone(zone_name)
12
+ self.zones.find { |z| z.name == zone_name }
13
+ end
14
+ def self.find_cname(zone_name, name)
15
+ find_zone(zone_name).get_records('CNAME').find { |r| r.name == name }
16
+ end
17
+ def self.redefine_cname(zone_name, name, value)
18
+ if record = find_cname(zone_name, name)
19
+ record.update(nil, nil, nil, [value], nil)
20
+ else
21
+ Route53::DNSRecord.new(name, 'CNAME', 300, [value], find_zone(zone_name)).create
22
+ end
23
+ end
24
+ end
25
+ end
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.15
4
+ version: 0.0.16
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -27,6 +27,22 @@ dependencies:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: route53
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
30
46
  description: AWS library targeted specifically for continuous integration.
31
47
  email: sebastian@foodocs.com
32
48
  executables:
@@ -44,6 +60,7 @@ files:
44
60
  - lib/awsome/requirements_options.rb
45
61
  - lib/awsome/elb.rb
46
62
  - lib/awsome/debian.rb
63
+ - lib/awsome/r53.rb
47
64
  - lib/awsome/ec2/instance.rb
48
65
  - lib/awsome/instance_requirement.rb
49
66
  - bin/awsome