ec2launcher 1.6.15 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,6 +9,8 @@ require 'json'
9
9
 
10
10
  require 'ec2launcher'
11
11
 
12
+ require 'aws-sdk'
13
+
12
14
  SETUP_SCRIPT = "setup_instance.rb"
13
15
 
14
16
  class InitOptions
@@ -78,23 +80,40 @@ end
78
80
  option_parser = InitOptions.new
79
81
  options = option_parser.parse(ARGV)
80
82
 
83
+ if ARGV.length < 1
84
+ option_parser.help
85
+ abort
86
+ end
87
+
81
88
  setup_json_filename = ARGV[0]
82
89
 
90
+ begin
91
+ logger = Log4r::Logger['ec2launcher']
92
+ unless logger
93
+ logger = Log4r::Logger.new 'ec2launcher'
94
+ log_output = Log4r::Outputter.stdout
95
+ log_output.formatter = PatternFormatter.new :pattern => "%m"
96
+ logger.outputters = log_output
97
+ end
98
+ rescue
99
+ end
100
+
83
101
  # Read the setup JSON file
84
102
  instance_data = JSON.parse(File.read(setup_json_filename))
85
103
 
86
104
  # Path to executables
87
105
  gem_path = instance_data["gem_path"]
88
106
  ruby_path = instance_data["ruby_path"]
89
- chef_path = instance_data["chef_path"]
90
107
 
91
108
  # Pre-install gems
92
109
  unless instance_data["gems"].nil?
110
+ puts "Preinstalling gems..."
93
111
  instance_data["gems"].each {|gem_name| puts `#{gem_path} install --no-rdoc --no-ri #{gem_name}` }
94
112
  end
95
113
 
96
114
  # Pre-install packages
97
115
  unless instance_data["packages"].nil?
116
+ puts "Preinstalling packages..."
98
117
  puts `yum install #{instance_data["packages"].join(" ")} -y`
99
118
  end
100
119
 
@@ -138,22 +157,11 @@ end
138
157
  puts "Retrieving Chef validation.pem ..."
139
158
  puts `s3curl.pl --id startup #{instance_data['chef_validation_pem_url']} > /etc/chef/validation.pem`
140
159
 
141
- # Setting hostname
142
- puts "Setting hostname ... #{options.hostname}"
143
- `hostname #{options.hostname}`
144
- `sed -i 's/^HOSTNAME=.*$/HOSTNAME=#{options.hostname}/' /etc/sysconfig/network`
145
-
146
- # Set Chef node name
147
- File.open("/etc/chef/client.rb", 'a') { |f| f.write("node_name \"#{options.hostname}\"") }
148
-
149
- # Setup Chef client
150
- puts "Connecting to Chef ..."
151
- `rm -f /etc/chef/client.pem`
152
- puts `#{chef_path}`
153
-
154
160
  # Retrieve secondary setup script and run it
155
161
  puts "Launching role setup script ..."
156
- command = "#{ruby_path} /tmp/#{SETUP_SCRIPT} -a #{options.application} -e #{options.environ} -h #{options.hostname} #{setup_json_filename}"
162
+ command = "#{ruby_path} /tmp/#{SETUP_SCRIPT} -a #{options.application} -e #{options.environ} "
163
+ command += " -h #{options.hostname} " if options.hostname
164
+ command += "#{setup_json_filename}"
157
165
  command += " -c #{options.clone_host}" unless options.clone_host.nil?
158
166
  command += " 2>&1 > /var/log/cloud-init.log"
159
167
  run_command(command)
@@ -11,6 +11,7 @@ require 'json'
11
11
  require 'aws-sdk'
12
12
 
13
13
  require 'ec2launcher'
14
+ require 'ec2launcher/dynamic_hostname_generator'
14
15
 
15
16
  AWS_KEYS = "/etc/aws/startup_runner_keys"
16
17
 
@@ -77,6 +78,17 @@ class InstanceSetup
77
78
  option_parser = InitOptions.new
78
79
  @options = option_parser.parse(args)
79
80
 
81
+ begin
82
+ @logger = Log4r::Logger['ec2launcher']
83
+ unless @logger
84
+ @logger = Log4r::Logger.new 'ec2launcher'
85
+ log_output = Log4r::Outputter.stdout
86
+ log_output.formatter = PatternFormatter.new :pattern => "%m"
87
+ @logger.outputters = log_output
88
+ end
89
+ rescue
90
+ end
91
+
80
92
  @setup_json_filename = args[0]
81
93
 
82
94
  # Load the AWS access keys
@@ -111,6 +123,55 @@ class InstanceSetup
111
123
  parser = JSON::Parser.new(File.read(@setup_json_filename), { :create_additions => true })
112
124
  instance_data = parser.parse()
113
125
 
126
+ ##############################
127
+ # EXECUTABLES
128
+ ##############################
129
+ chef_path = instance_data["chef_path"]
130
+
131
+ ##############################
132
+ # HOST NAME
133
+ ##############################
134
+ @hostname = @options.hostname
135
+ if instance_data["dynamic_name"]
136
+ puts "Calculating dynamic host name..."
137
+ hostname_generator = EC2Launcher::DynamicHostnameGenerator.new(instance_data["dynamic_name_prefix"], instance_data["dynamic_name_suffix"])
138
+ short_hostname = hostname_generator.generate_dynamic_hostname(@INSTANCE_ID)
139
+ @hostname = hostname_generator.generate_fqdn(short_hostname, instance_data["domain_name"])
140
+
141
+ instance_data["short_hostname"] = short_hostname
142
+ instance_data["hostname"] = @hostname
143
+
144
+ # Route53
145
+ if instance_data["route53_zone_id"]
146
+ puts "Adding host to Route53..."
147
+
148
+ # Find the local ip address
149
+ local_mac_address = `curl http://169.254.169.254/latest/meta-data/mac`.strip
150
+ local_ip_addresses = `curl http://169.254.169.254/latest/meta-data/network/interfaces/macs/#{local_mac_address}/local-ipv4s`.strip
151
+ local_ip_address = local_ip_addresses.split[0]
152
+
153
+ # Add record to Route53.
154
+ # Note that we use the FQDN because that is what the AWS SDK requires, even though the Web Console only
155
+ # uses the short name.
156
+ aws_route53 = AWS::Route53.new
157
+ route53 = EC2Launcher::Route53.new(aws_route53, instance_data["route53_zone_id"], @logger)
158
+ route53_zone = aws_route53.client.get_hosted_zone({:id => instance_data["route53_zone_id"]})
159
+ route53.create_record(@hostname, local_ip_address)
160
+ end
161
+ end
162
+
163
+ puts "Setting hostname ... #{@hostname}"
164
+ `hostname #{@hostname}`
165
+ `sed -i 's/^HOSTNAME=.*$/HOSTNAME=#{@hostname}/' /etc/sysconfig/network`
166
+
167
+ # Set Chef node name
168
+ File.open("/etc/chef/client.rb", 'a') { |f| f.write("node_name \"#{@hostname}\"") }
169
+
170
+ # Setup Chef client
171
+ puts "Connecting to Chef ..."
172
+ `rm -f /etc/chef/client.pem`
173
+ puts `#{chef_path}`
174
+
114
175
  ##############################
115
176
  # EBS VOLUMES
116
177
  ##############################
@@ -172,7 +233,7 @@ class InstanceSetup
172
233
  knife_config = <<EOF
173
234
  log_level :info
174
235
  log_location STDOUT
175
- node_name '#{@options.hostname}'
236
+ node_name '#{@hostname}'
176
237
  client_key '/etc/chef/client.pem'
177
238
  validation_client_name 'chef-validator'
178
239
  validation_key '/etc/chef/validation.pem'
@@ -188,7 +249,7 @@ EOF
188
249
  ##############################
189
250
  # Add roles
190
251
  instance_data["roles"].each do |role|
191
- cmd = "#{knife_path} node run_list add #{@options.hostname} \"role[#{role}]\""
252
+ cmd = "#{knife_path} node run_list add #{@hostname} \"role[#{role}]\""
192
253
  puts cmd
193
254
  puts `#{cmd}`
194
255
  end
@@ -219,9 +280,9 @@ EOF
219
280
  ses.send_email(
220
281
  :from => instance_data["email_notifications"]["from"],
221
282
  :to => instance_data["email_notifications"]["to"],
222
- :subject => "Server setup complete: #{@options.hostname}",
223
- :body_text => "Server setup is complete for Host: #{@options.hostname}, Environment: #{@options.environ}, Application: #{@options.application}",
224
- :body_html => "<div>Server setup is complete for:</div><div><strong>Host:</strong> #{@options.hostname}</div><div><strong>Environment:</strong> #{@options.environ}</div><div><strong>Application:</strong> #{@options.application}</div>"
283
+ :subject => "Server setup complete: #{@hostname}",
284
+ :body_text => "Server setup is complete for Host: #{@hostname}, Environment: #{@options.environ}, Application: #{@options.application}",
285
+ :body_html => "<div>Server setup is complete for:</div><div><strong>Host:</strong> #{@hostname}</div><div><strong>Environment:</strong> #{@options.environ}</div><div><strong>Application:</strong> #{@options.application}</div>"
225
286
  )
226
287
  else
227
288
  puts "Skipping email notification."
@@ -0,0 +1,29 @@
1
+ require_relative "../test_helper"
2
+ require 'ec2launcher/dynamic_hostname_generator'
3
+
4
+ describe "DynamicHostnameGenerator", "Dynamic host name generation" do
5
+ it "creates valid hostname without prefix or suffix" do
6
+ generator = EC2Launcher::DynamicHostnameGenerator.new
7
+ generator.generate_dynamic_hostname("i-abcdefgh").must_equal "abcdefgh"
8
+ end
9
+
10
+ it "creates valid hostname with a simple suffix and no prefix" do
11
+ generator = EC2Launcher::DynamicHostnameGenerator.new(nil, "example.com")
12
+ generator.generate_dynamic_hostname("i-abcdefgh").must_equal "abcdefgh.example.com"
13
+ end
14
+
15
+ it "creates valid hostname with a simple prefix with no suffix" do
16
+ generator = EC2Launcher::DynamicHostnameGenerator.new("prefix-")
17
+ generator.generate_dynamic_hostname("i-abcdefgh").must_equal "prefix-abcdefgh"
18
+ end
19
+
20
+ it "creates valid hostname with both a prefix and suffix" do
21
+ generator = EC2Launcher::DynamicHostnameGenerator.new("prefix-", "example.com")
22
+ generator.generate_dynamic_hostname("i-abcdefgh").must_equal "prefix-abcdefgh.example.com"
23
+ end
24
+
25
+ it "creates valid hostname when the suffix starts with a period" do
26
+ generator = EC2Launcher::DynamicHostnameGenerator.new(nil, ".example.com")
27
+ generator.generate_dynamic_hostname("i-abcdefgh").must_equal "abcdefgh.example.com"
28
+ end
29
+ end
@@ -0,0 +1,42 @@
1
+ require_relative "../../test_helper"
2
+ require 'ec2launcher/hostnames/host_name_generation'
3
+
4
+ class HostNameGenerationSpecTest
5
+ include EC2Launcher::HostNames::HostNameGeneration
6
+ end
7
+
8
+ describe "HostNameGeneration" do
9
+ let (:generator) { HostNameGenerationSpecTest.new }
10
+
11
+ it "gives a valid short name given a long name and domain" do
12
+ generator.generate_short_name("host.example.com", "example.com").must_equal "host"
13
+ end
14
+
15
+ it "gives a valid short name given a long name and no domain" do
16
+ generator.generate_short_name("host.example.com", nil).must_equal "host.example.com"
17
+ end
18
+
19
+ it "gives a valid short name given a long name and a domain that starts with a period" do
20
+ generator.generate_short_name("host.example.com", ".example.com").must_equal "host"
21
+ end
22
+
23
+ it "gives a valid FQDN given a short name and a domain" do
24
+ generator.generate_fqdn("host", "example.com").must_equal "host.example.com"
25
+ end
26
+
27
+ it "gives a valid FQDN given a short name and a domain that starts with a period" do
28
+ generator.generate_fqdn("host", ".example.com").must_equal "host.example.com"
29
+ end
30
+
31
+ it "gives a valid FQDN with a short name and no domain" do
32
+ generator.generate_fqdn("host", nil).must_equal "host"
33
+ end
34
+
35
+ it "throws an exception when generating a FQDN without a short name" do
36
+ assert_raises(ArgumentError) { generator.generate_fqdn(nil, nil) }
37
+ end
38
+
39
+ it "throws an exception when generating a short name without a long name" do
40
+ assert_raises(ArgumentError) { generator.generate_short_name(nil, nil) }
41
+ end
42
+ end
data/test/test_helper.rb CHANGED
@@ -1,3 +1,2 @@
1
1
  require 'minitest/autorun'
2
2
  require 'minitest/pride'
3
- require File.expand_path('../../lib/ec2launcher.rb', __FILE__)
@@ -0,0 +1,102 @@
1
+ require_relative "../test_helper"
2
+ require 'minitest/mock'
3
+ require 'ec2launcher/block_device_builder'
4
+ require 'ec2launcher/dsl/block_device'
5
+
6
+ class BlockDeviceBuilderTest < MiniTest::Unit::TestCase
7
+
8
+ def test_building_ephemeral_drives()
9
+ ec2 = MiniTest::Mock.new
10
+ logger = MiniTest::Mock.new
11
+
12
+ bdb = BlockDeviceBuilder.new(ec2, nil, logger)
13
+
14
+ bd_mapping = {}
15
+ bdb.build_ephemeral_drives(bd_mapping, "m1.large")
16
+
17
+ refute_nil bd_mapping
18
+
19
+ assert_true bd_mapping["/dev/sdb"]
20
+ assert_true bd_mapping["/dev/sdc"]
21
+ assert_equal "ephemeral0", bd_mapping["/dev/sdb"]
22
+ assert_equal "ephemeral1", bd_mapping["/dev/sdc"]
23
+
24
+ bd_mapping = {}
25
+ bdb.build_ephemeral_drives(bd_mapping, "m1.small")
26
+
27
+ refute_nil bd_mapping
28
+
29
+ assert_true bd_mapping["/dev/sdb"]
30
+ assert_equal "ephemeral0", bd_mapping["/dev/sdb"]
31
+
32
+ bd_mapping = {}
33
+ bdb.build_ephemeral_drives(bd_mapping, "t1.micro")
34
+
35
+ refute_nil bd_mapping
36
+
37
+ assert_equal 0, bd_mapping.keys.size
38
+ end
39
+
40
+ def test_basic_ebs_volume_setup()
41
+ ec2 = MiniTest::Mock.new
42
+ logger = MiniTest::Mock.new
43
+
44
+ bdb = BlockDeviceBuilder.new(ec2, nil, logger)
45
+
46
+ bd_mapping = {}
47
+ block_devices = [ EC2Launcher::DSL::BlockDevice.new({:name => "database"}) ]
48
+ bdb.build_ebs_volumes(bd_mapping, block_devices)
49
+
50
+ refute_nil bd_mapping
51
+ assert_true bd_mapping["/dev/sdf"]
52
+ assert_equal 60, bd_mapping["/dev/sdf"][:volume_size]
53
+ assert_equal true, bd_mapping["/dev/sdf"][:delete_on_termination]
54
+ assert_nil bd_mapping["/dev/sdf"][:iops]
55
+
56
+ bd_mapping = {}
57
+ block_devices = [ EC2Launcher::DSL::BlockDevice.new({:name => "database", :size => 120}) ]
58
+ bdb.build_ebs_volumes(bd_mapping, block_devices)
59
+
60
+ refute_nil bd_mapping
61
+ assert_true bd_mapping["/dev/sdf"]
62
+ assert_equal 120, bd_mapping["/dev/sdf"][:volume_size]
63
+ assert_nil bd_mapping["/dev/sdf"][:iops]
64
+ end
65
+
66
+ def test_ebs_volume_setup_with_multiple_drives()
67
+ ec2 = MiniTest::Mock.new
68
+ logger = MiniTest::Mock.new
69
+
70
+ bdb = BlockDeviceBuilder.new(ec2, nil, logger)
71
+
72
+ bd_mapping = {}
73
+ block_devices = [ EC2Launcher::DSL::BlockDevice.new({:name => "database", :count => 3}) ]
74
+ bdb.build_ebs_volumes(bd_mapping, block_devices)
75
+
76
+ refute_nil bd_mapping
77
+ assert_true bd_mapping["/dev/sdf"]
78
+ assert_true bd_mapping["/dev/sdg"]
79
+ assert_true bd_mapping["/dev/sdh"]
80
+
81
+ assert_nil bd_mapping["/dev/sdf"][:iops]
82
+ assert_nil bd_mapping["/dev/sdg"][:iops]
83
+ assert_nil bd_mapping["/dev/sdh"][:iops]
84
+ end
85
+
86
+ def test_ebs_volume_setup_with_piops()
87
+ ec2 = MiniTest::Mock.new
88
+ logger = MiniTest::Mock.new
89
+
90
+ bdb = BlockDeviceBuilder.new(ec2, nil, logger)
91
+
92
+ bd_mapping = {}
93
+ block_devices = [ EC2Launcher::DSL::BlockDevice.new({:name => "database", :iops => 200}) ]
94
+ bdb.build_ebs_volumes(bd_mapping, block_devices)
95
+
96
+ refute_nil bd_mapping
97
+ assert_true bd_mapping["/dev/sdf"]
98
+
99
+ refute_nil bd_mapping["/dev/sdf"][:iops]
100
+ assert_equal 200, bd_mapping["/dev/sdf"][:iops]
101
+ end
102
+ end
@@ -1,4 +1,5 @@
1
1
  require_relative "../../test_helper"
2
+ require 'ec2launcher/dsl/config'
2
3
 
3
4
  class ConfigParserTest < MiniTest::Unit::TestCase
4
5
  def test_full_config_parses_correctly
@@ -0,0 +1,184 @@
1
+ require_relative "../test_helper"
2
+ require 'minitest/mock'
3
+ require 'ec2launcher/route53'
4
+
5
+ require 'ostruct'
6
+
7
+ class Route53Test < MiniTest::Unit::TestCase
8
+
9
+ def setup()
10
+ @default_hosted_zone_id = "ABCDEFGH"
11
+ @default_record_name = "server1.example.com"
12
+ @default_record_type = "A"
13
+ @default_record_ttl = 3600
14
+ @default_record_value = "10.0.0.1"
15
+ end
16
+
17
+ def create_route53_with_mock_client(client)
18
+ route53 = OpenStruct.new
19
+ route53.client = client
20
+ route53
21
+ end
22
+
23
+ def generate_route53_record_set(name, type, ttl, value)
24
+ route53_result = OpenStruct.new
25
+ route53_result.data = {
26
+ :resource_record_sets => [
27
+ {
28
+ :name => name,
29
+ :type => type,
30
+ :ttl => ttl,
31
+ :resource_records => [
32
+ {
33
+ :value => value
34
+ }
35
+ ]
36
+ }
37
+ ]
38
+ }
39
+ route53_result
40
+ end
41
+
42
+ def generate_route53_change_request(action, zone_id, name, type, ttl, value)
43
+ {
44
+ :hosted_zone_id => zone_id,
45
+ :change_batch => {
46
+ :changes => [
47
+ {
48
+ :action => action,
49
+ :resource_record_set => {
50
+ :name => name,
51
+ :type => type,
52
+ :ttl => ttl,
53
+ :resource_records => [ { :value => value } ]
54
+ }
55
+ }
56
+ ]
57
+ }
58
+ }
59
+ end
60
+
61
+ def generate_route53_query(zone_id = nil, name = nil, type = nil)
62
+ zone_id ||= @default_hosted_zone_id
63
+ name ||= @default_record_name
64
+ type ||= @default_record_type
65
+
66
+ {
67
+ :hosted_zone_id => zone_id,
68
+ :start_record_name => name,
69
+ :start_record_type => type,
70
+ :max_items => 1
71
+ }
72
+ end
73
+
74
+ def test_find_record()
75
+ mock_client = MiniTest::Mock.new
76
+ mock_route53 = create_route53_with_mock_client(mock_client)
77
+
78
+ route53_query = generate_route53_query()
79
+ route53_result = generate_route53_record_set(@default_record_name, @default_record_type, @default_record_ttl, @default_record_value)
80
+
81
+ # mock expects:
82
+ # method return arguments
83
+ #-------------------------------------------------------------
84
+ mock_client.expect(:list_resource_record_sets, route53_result, [route53_query])
85
+
86
+ route53 = EC2Launcher::Route53.new(mock_route53, @default_hosted_zone_id)
87
+ record = route53.find_record(@default_record_name, @default_record_type)
88
+
89
+ assert mock_client.verify
90
+
91
+ refute_nil record
92
+
93
+ assert_equal @default_record_name, record.name
94
+ assert_equal @default_record_ttl, record.ttl
95
+ assert_equal @default_record_value, record.value
96
+ assert_equal @default_record_type, record.type
97
+ end
98
+
99
+ def test_delete_record()
100
+ mock_client = MiniTest::Mock.new
101
+ mock_route53 = create_route53_with_mock_client(mock_client)
102
+
103
+ change_request = generate_route53_change_request("DELETE", @default_hosted_zone_id, @default_record_name, @default_record_type, @default_record_ttl, @default_record_value)
104
+
105
+ mock_client.expect(:change_resource_record_sets, nil, [change_request])
106
+
107
+ route53 = EC2Launcher::Route53.new(mock_route53, @default_hosted_zone_id)
108
+
109
+ delete_result = route53.delete_record(@default_record_name, @default_record_type, @default_record_ttl, @default_record_value, false)
110
+
111
+ assert mock_client.verify
112
+
113
+ assert delete_result
114
+ end
115
+
116
+ def test_delete_record_by_name()
117
+ mock_client = MiniTest::Mock.new
118
+ mock_route53 = create_route53_with_mock_client(mock_client)
119
+
120
+ route53_query = generate_route53_query()
121
+ route53_result = generate_route53_record_set(@default_record_name, @default_record_type, @default_record_ttl, @default_record_value)
122
+ change_request = generate_route53_change_request("DELETE", @default_hosted_zone_id, @default_record_name, @default_record_type, @default_record_ttl, @default_record_value)
123
+
124
+ mock_client.expect(:list_resource_record_sets, route53_result, [route53_query])
125
+ mock_client.expect(:change_resource_record_sets, nil, [change_request])
126
+
127
+ route53 = EC2Launcher::Route53.new(mock_route53, @default_hosted_zone_id)
128
+ delete_result = route53.delete_record_by_name(@default_record_name, @default_record_type, false)
129
+
130
+ assert mock_client.verify
131
+
132
+ assert delete_result
133
+ end
134
+
135
+ def test_delete_record_by_name_does_not_exist()
136
+ mock_client = MiniTest::Mock.new
137
+ mock_route53 = create_route53_with_mock_client(mock_client)
138
+
139
+ route53_query = generate_route53_query()
140
+
141
+ mock_client.expect(:list_resource_record_sets, nil, [route53_query])
142
+
143
+ route53 = EC2Launcher::Route53.new(mock_route53, @default_hosted_zone_id)
144
+ delete_result = route53.delete_record_by_name(@default_record_name, @default_record_type, false)
145
+
146
+ assert mock_client.verify
147
+ assert_equal false, delete_result
148
+ end
149
+
150
+ def test_creating_new_record()
151
+ mock_client = MiniTest::Mock.new
152
+ mock_route53 = create_route53_with_mock_client(mock_client)
153
+
154
+ route53_query = generate_route53_query()
155
+ update_request = generate_route53_change_request("CREATE", @default_hosted_zone_id, @default_record_name, @default_record_type, @default_record_ttl, @default_record_value)
156
+
157
+ mock_client.expect(:list_resource_record_sets, nil, [route53_query])
158
+ mock_client.expect(:change_resource_record_sets, nil, [update_request])
159
+
160
+ route53 = EC2Launcher::Route53.new(mock_route53, @default_hosted_zone_id)
161
+ route53.create_record(@default_record_name, @default_record_value, @default_record_type, @default_record_ttl)
162
+
163
+ assert mock_client.verify
164
+ end
165
+
166
+ def test_updating_existing_record()
167
+ mock_client = MiniTest::Mock.new
168
+ mock_route53 = create_route53_with_mock_client(mock_client)
169
+
170
+ route53_query = generate_route53_query()
171
+ find_result = generate_route53_record_set(@default_record_name, @default_record_type, @default_record_ttl, @default_record_value)
172
+ delete_request = generate_route53_change_request("DELETE", @default_hosted_zone_id, @default_record_name, @default_record_type, @default_record_ttl, @default_record_value)
173
+ update_request = generate_route53_change_request("CREATE", @default_hosted_zone_id, @default_record_name, @default_record_type, @default_record_ttl, "10.0.1.1")
174
+
175
+ mock_client.expect(:list_resource_record_sets, find_result, [route53_query])
176
+ mock_client.expect(:change_resource_record_sets, nil, [delete_request])
177
+ mock_client.expect(:change_resource_record_sets, nil, [update_request])
178
+
179
+ route53 = EC2Launcher::Route53.new(mock_route53, @default_hosted_zone_id)
180
+ route53.create_record(@default_record_name, "10.0.1.1", @default_record_type, @default_record_ttl)
181
+
182
+ assert mock_client.verify
183
+ end
184
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ec2launcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.15
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Laurent
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-01 00:00:00.000000000 Z
11
+ date: 2013-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ! '>='
18
18
  - !ruby/object:Gem::Version
19
- version: 1.6.6
19
+ version: 1.8.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ! '>='
25
25
  - !ruby/object:Gem::Version
26
- version: 1.6.6
26
+ version: 1.8.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: log4r
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -69,20 +69,10 @@ dependencies:
69
69
  description: Tool to manage application configurations and launch new EC2 instances
70
70
  based on the configurations.
71
71
  email:
72
- executables:
73
- - ec2launcher
72
+ executables: []
74
73
  extensions: []
75
74
  extra_rdoc_files: []
76
75
  files:
77
- - .gitignore
78
- - CHANGELOG.md
79
- - Gemfile
80
- - LICENSE
81
- - README.md
82
- - Rakefile
83
- - bin/ec2launcher
84
- - ec2launcher.gemspec
85
- - lib/ec2launcher.rb
86
76
  - lib/ec2launcher/application_processor.rb
87
77
  - lib/ec2launcher/aws_initializer.rb
88
78
  - lib/ec2launcher/backoff_runner.rb
@@ -97,20 +87,32 @@ files:
97
87
  - lib/ec2launcher/dsl/email_notification.rb
98
88
  - lib/ec2launcher/dsl/environment.rb
99
89
  - lib/ec2launcher/dsl/helper.rb
90
+ - lib/ec2launcher/dynamic_hostname_generator.rb
100
91
  - lib/ec2launcher/environment_processor.rb
101
92
  - lib/ec2launcher/hostname_generator.rb
93
+ - lib/ec2launcher/hostnames/host_name_generation.rb
102
94
  - lib/ec2launcher/init_options.rb
103
95
  - lib/ec2launcher/instance_paths_config.rb
104
96
  - lib/ec2launcher/route53.rb
105
97
  - lib/ec2launcher/security_group_handler.rb
106
98
  - lib/ec2launcher/terminator.rb
107
99
  - lib/ec2launcher/version.rb
100
+ - lib/ec2launcher.rb
101
+ - CHANGELOG.md
102
+ - Gemfile
103
+ - Gemfile.lock
104
+ - LICENSE
105
+ - Rakefile
106
+ - README.md
107
+ - test/spec/dynamic_hostname_generator_spec.rb
108
+ - test/spec/hostnames/host_name_generation_spec.rb
109
+ - test/test_helper.rb
110
+ - test/unit/block_device_builder.rb
111
+ - test/unit/dsl/config_parser_test.rb
112
+ - test/unit/route53_test.rb
108
113
  - startup-scripts/runurl
109
114
  - startup-scripts/setup.rb
110
115
  - startup-scripts/setup_instance.rb
111
- - test/ec2launcher/dsl/config_parser_test.rb
112
- - test/test_helper.rb
113
- - yard_extensions/dsl_attribute_handler.rb
114
116
  homepage: https://github.com/StudyBlue/ec2launcher
115
117
  licenses:
116
118
  - Apache 2.0
@@ -136,5 +138,9 @@ signing_key:
136
138
  specification_version: 4
137
139
  summary: Tool to launch EC2 instances.
138
140
  test_files:
139
- - test/ec2launcher/dsl/config_parser_test.rb
141
+ - test/spec/dynamic_hostname_generator_spec.rb
142
+ - test/spec/hostnames/host_name_generation_spec.rb
140
143
  - test/test_helper.rb
144
+ - test/unit/block_device_builder.rb
145
+ - test/unit/dsl/config_parser_test.rb
146
+ - test/unit/route53_test.rb
data/.gitignore DELETED
@@ -1,17 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp