chef-provisioning-aws 1.1.0 → 1.1.1
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.
- checksums.yaml +4 -4
- data/lib/chef/provider/aws_instance.rb +4 -0
- data/lib/chef/provisioning/aws_driver/driver.rb +8 -6
- data/lib/chef/provisioning/aws_driver/version.rb +1 -1
- data/spec/aws_support.rb +5 -0
- data/spec/aws_support/matchers/destroy_an_aws_object.rb +62 -0
- data/spec/integration/aws_ebs_volume_spec.rb +18 -0
- data/spec/integration/machine_batch_spec.rb +7 -4
- data/spec/integration/machine_spec.rb +28 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9a8ee86c530dd398dad4b925b119b8d88db9f55a
|
4
|
+
data.tar.gz: 367430b7e0cdee74064297461617a9545c9c1aa1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 76da770b34ea861319e125e2125aee36d61b2ce47ed333a26aceae6939576c5f498d054b9f84eff7f1ad46b7d7ca61e6f5cbb5c236742dd761697b8b25eb50f1
|
7
|
+
data.tar.gz: b0c8b49ae247b81214853e172b417c77ed40928da2903f6a4b79085bac2fb4cd91f108a827a9059d60259daa712b2084be4414dcd5202f1d37f1ce4649e98339
|
@@ -1,6 +1,10 @@
|
|
1
1
|
require 'chef/provisioning/aws_driver/aws_provider'
|
2
2
|
|
3
3
|
class Chef::Provider::AwsInstance < Chef::Provisioning::AWSDriver::AWSProvider
|
4
|
+
def create_aws_object(instance); end
|
5
|
+
|
6
|
+
def update_aws_object(instance); end
|
7
|
+
|
4
8
|
def destroy_aws_object(instance)
|
5
9
|
converge_by "delete instance #{new_resource} in VPC #{instance.vpc.id} in #{region}" do
|
6
10
|
instance.delete
|
@@ -90,10 +90,10 @@ module AWSDriver
|
|
90
90
|
actual_elb = elb.load_balancers.create(lb_spec.name, lb_options)
|
91
91
|
|
92
92
|
lb_spec.reference = {
|
93
|
-
'driver_url' => driver_url,
|
94
93
|
'driver_version' => Chef::Provisioning::AWSDriver::VERSION,
|
95
94
|
'allocated_at' => Time.now.utc.to_s,
|
96
95
|
}
|
96
|
+
lb_spec.driver_url = driver_url
|
97
97
|
end
|
98
98
|
else
|
99
99
|
# Header gets printed the first time we make an update
|
@@ -335,11 +335,11 @@ module AWSDriver
|
|
335
335
|
image = ec2.images.create(image_options.to_hash)
|
336
336
|
image.add_tag('From-Instance', :value => image_options[:instance_id]) if image_options[:instance_id]
|
337
337
|
image_spec.reference = {
|
338
|
-
'driver_url' => driver_url,
|
339
338
|
'driver_version' => Chef::Provisioning::AWSDriver::VERSION,
|
340
339
|
'image_id' => image.id,
|
341
340
|
'allocated_at' => Time.now.to_i
|
342
341
|
}
|
342
|
+
image_spec.driver_url = driver_url
|
343
343
|
end
|
344
344
|
end
|
345
345
|
end
|
@@ -414,14 +414,15 @@ EOD
|
|
414
414
|
sleep 5 while instance.status == :pending
|
415
415
|
# TODO add other tags identifying user / node url (same as fog)
|
416
416
|
instance.tags['Name'] = machine_spec.name
|
417
|
+
instance.source_dest_check = machine_options[:source_dest_check] if machine_options.has_key?(:source_dest_check)
|
417
418
|
machine_spec.reference = {
|
418
|
-
'driver_url' => driver_url,
|
419
419
|
'driver_version' => Chef::Provisioning::AWSDriver::VERSION,
|
420
420
|
'allocated_at' => Time.now.utc.to_s,
|
421
421
|
'host_node' => action_handler.host_node,
|
422
422
|
'image_id' => bootstrap_options[:image_id],
|
423
423
|
'instance_id' => instance.id
|
424
424
|
}
|
425
|
+
machine_spec.driver_url = driver_url
|
425
426
|
machine_spec.reference['key_name'] = bootstrap_options[:key_name] if bootstrap_options[:key_name]
|
426
427
|
%w(is_windows ssh_username sudo use_private_ip_for_ssh ssh_gateway).each do |key|
|
427
428
|
machine_spec.reference[key] = machine_options[key.to_sym] if machine_options[key.to_sym]
|
@@ -602,8 +603,8 @@ EOD
|
|
602
603
|
|
603
604
|
def instance_for(machine_spec)
|
604
605
|
if machine_spec.reference
|
605
|
-
if machine_spec.
|
606
|
-
raise "Switching a machine's driver from #{machine_spec.
|
606
|
+
if machine_spec.driver_url != driver_url
|
607
|
+
raise "Switching a machine's driver from #{machine_spec.driver_url} to #{driver_url} is not currently supported! Use machine :destroy and then re-create the machine on the new driver."
|
607
608
|
end
|
608
609
|
Chef::Resource::AwsInstance.get_aws_object(machine_spec.reference['instance_id'], driver: self, managed_entry_store: machine_spec.managed_entry_store, required: false)
|
609
610
|
end
|
@@ -941,14 +942,15 @@ EOD
|
|
941
942
|
machine_spec = machine_specs.pop
|
942
943
|
machine_options = specs_and_options[machine_spec]
|
943
944
|
machine_spec.reference = {
|
944
|
-
'driver_url' => driver_url,
|
945
945
|
'driver_version' => Chef::Provisioning::AWSDriver::VERSION,
|
946
946
|
'allocated_at' => Time.now.utc.to_s,
|
947
947
|
'host_node' => action_handler.host_node,
|
948
948
|
'image_id' => bootstrap_options[:image_id],
|
949
949
|
'instance_id' => instance.id
|
950
950
|
}
|
951
|
+
machine_spec.driver_url = driver_url
|
951
952
|
instance.tags['Name'] = machine_spec.name
|
953
|
+
instance.source_dest_check = machine_options[:source_dest_check] if machine_options.has_key?(:source_dest_check)
|
952
954
|
machine_spec.reference['key_name'] = bootstrap_options[:key_name] if bootstrap_options[:key_name]
|
953
955
|
%w(is_windows ssh_username sudo use_private_ip_for_ssh ssh_gateway).each do |key|
|
954
956
|
machine_spec.reference[key] = machine_options[key.to_sym] if machine_options[key.to_sym]
|
data/spec/aws_support.rb
CHANGED
@@ -12,6 +12,7 @@ module AWSSupport
|
|
12
12
|
require 'chef/provisioning/aws_driver'
|
13
13
|
require 'aws_support/matchers/create_an_aws_object'
|
14
14
|
require 'aws_support/matchers/update_an_aws_object'
|
15
|
+
require 'aws_support/matchers/destroy_an_aws_object'
|
15
16
|
require 'aws_support/delayed_stream'
|
16
17
|
require 'chef/provisioning/aws_driver/resources'
|
17
18
|
require 'aws_support/aws_resource_run_wrapper'
|
@@ -188,6 +189,10 @@ module AWSSupport
|
|
188
189
|
define_method("create_an_#{resource_name}") do |name, expected_values={}|
|
189
190
|
AWSSupport::Matchers::CreateAnAWSObject.new(self, resource_class, name, expected_values)
|
190
191
|
end
|
192
|
+
define_method("destroy_an_#{resource_name}") do |name, expected_values={}|
|
193
|
+
AWSSupport::Matchers::DestroyAnAWSObject.new(self, resource_class, name)
|
194
|
+
end
|
195
|
+
|
191
196
|
end
|
192
197
|
|
193
198
|
def chef_config
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'rspec/matchers'
|
2
|
+
require 'chef/provisioning'
|
3
|
+
require 'aws_support/deep_matcher'
|
4
|
+
|
5
|
+
module AWSSupport
|
6
|
+
module Matchers
|
7
|
+
class DestroyAnAWSObject
|
8
|
+
include RSpec::Matchers::Composable
|
9
|
+
include AWSSupport::DeepMatcher
|
10
|
+
|
11
|
+
def initialize(example, resource_class, name)
|
12
|
+
@example = example
|
13
|
+
@resource_class = resource_class
|
14
|
+
@name = name
|
15
|
+
|
16
|
+
# Grab the "before" value
|
17
|
+
resource = resource_class.new(name, nil)
|
18
|
+
resource.driver example.driver
|
19
|
+
resource.managed_entry_store Chef::Provisioning.chef_managed_entry_store
|
20
|
+
@had_initial_value = !resource.aws_object.nil?
|
21
|
+
end
|
22
|
+
|
23
|
+
attr_reader :example
|
24
|
+
attr_reader :resource_class
|
25
|
+
attr_reader :name
|
26
|
+
def resource_name
|
27
|
+
@resource_class.resource_name
|
28
|
+
end
|
29
|
+
attr_reader :had_initial_value
|
30
|
+
|
31
|
+
def match_failure_messages(recipe)
|
32
|
+
differences = []
|
33
|
+
|
34
|
+
if !had_initial_value
|
35
|
+
differences << "expected recipe to delete #{resource_name}[#{name}], but the AWS object did not exist before recipe ran!"
|
36
|
+
return differences
|
37
|
+
end
|
38
|
+
|
39
|
+
# Converge
|
40
|
+
begin
|
41
|
+
recipe.converge
|
42
|
+
rescue
|
43
|
+
differences += [ "error trying to delete #{resource_name}[#{name}]!\n#{($!.backtrace.map { |line| "- #{line}\n" } + [ recipe.output_for_failure_message ]).join("")}" ]
|
44
|
+
end
|
45
|
+
|
46
|
+
# Check whether the recipe caused an update or not
|
47
|
+
differences += match_values_failure_messages(example.be_updated, recipe, "recipe")
|
48
|
+
|
49
|
+
# Check for object existence and properties
|
50
|
+
resource = resource_class.new(name, nil)
|
51
|
+
resource.driver example.driver
|
52
|
+
resource.managed_entry_store Chef::Provisioning.chef_managed_entry_store
|
53
|
+
aws_object = resource.aws_object
|
54
|
+
|
55
|
+
# Check existence
|
56
|
+
differences << "#{resource_name}[#{name}] was not deleted!" unless aws_object.nil?
|
57
|
+
|
58
|
+
differences
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -17,6 +17,23 @@ describe Chef::Resource::AwsEbsVolume do
|
|
17
17
|
).and be_idempotent
|
18
18
|
end
|
19
19
|
|
20
|
+
describe 'action :delete' do
|
21
|
+
with_converge {
|
22
|
+
aws_ebs_volume "test_volume" do
|
23
|
+
availability_zone 'a'
|
24
|
+
size 8
|
25
|
+
end
|
26
|
+
}
|
27
|
+
it "deletes the ebs volume" do
|
28
|
+
expect_recipe {
|
29
|
+
aws_ebs_volume "test_volume" do
|
30
|
+
action :destroy
|
31
|
+
end
|
32
|
+
}.to destroy_an_aws_ebs_volume('test_volume')
|
33
|
+
.and be_idempotent
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
20
37
|
it "aws_ebs_volume 'test_volume_az' creates an ebs volume when provided proper full AZ" do
|
21
38
|
expect_recipe {
|
22
39
|
aws_ebs_volume "test_volume_az" do
|
@@ -26,6 +43,7 @@ describe Chef::Resource::AwsEbsVolume do
|
|
26
43
|
}.to create_an_aws_ebs_volume('test_volume_az')
|
27
44
|
.and be_idempotent
|
28
45
|
end
|
46
|
+
|
29
47
|
end
|
30
48
|
end
|
31
49
|
end
|
@@ -20,14 +20,17 @@ describe Chef::Resource::MachineBatch do
|
|
20
20
|
machine_options bootstrap_options: {
|
21
21
|
subnet_id: 'test_public_subnet',
|
22
22
|
key_name: 'test_key_pair'
|
23
|
-
}
|
23
|
+
}, source_dest_check: false
|
24
24
|
action :allocate
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
28
|
-
}.to create_an_aws_instance('test_machine1'
|
29
|
-
|
30
|
-
).and create_an_aws_instance('
|
28
|
+
}.to create_an_aws_instance('test_machine1',
|
29
|
+
source_dest_check: false
|
30
|
+
).and create_an_aws_instance('test_machine2',
|
31
|
+
source_dest_check: false
|
32
|
+
).and create_an_aws_instance('test_machine3',
|
33
|
+
source_dest_check: false
|
31
34
|
).and be_idempotent
|
32
35
|
end
|
33
36
|
end
|
@@ -12,6 +12,7 @@ describe Chef::Resource::Machine do
|
|
12
12
|
|
13
13
|
purge_all
|
14
14
|
setup_public_vpc
|
15
|
+
|
15
16
|
it "machine with few options allocates a machine", :super_slow do
|
16
17
|
expect_recipe {
|
17
18
|
machine 'test_machine' do
|
@@ -37,6 +38,20 @@ describe Chef::Resource::Machine do
|
|
37
38
|
}.to create_an_aws_instance('test_machine'
|
38
39
|
).and be_idempotent
|
39
40
|
end
|
41
|
+
|
42
|
+
it "machine with source_dest_check false creates a machine with no source dest check", :super_slow do
|
43
|
+
expect_recipe {
|
44
|
+
machine 'test_machine' do
|
45
|
+
machine_options bootstrap_options: {
|
46
|
+
subnet_id: 'test_public_subnet',
|
47
|
+
key_name: 'test_key_pair'
|
48
|
+
}, source_dest_check: false
|
49
|
+
action :allocate
|
50
|
+
end
|
51
|
+
}.to create_an_aws_instance('test_machine',
|
52
|
+
source_dest_check: false
|
53
|
+
).and be_idempotent
|
54
|
+
end
|
40
55
|
end
|
41
56
|
|
42
57
|
with_aws "Without a VPC" do
|
@@ -59,6 +74,19 @@ describe Chef::Resource::Machine do
|
|
59
74
|
).and create_an_aws_key_pair('test_key_pair'
|
60
75
|
).and be_idempotent
|
61
76
|
end
|
77
|
+
|
78
|
+
# Tests https://github.com/chef/chef-provisioning-aws/issues/189
|
79
|
+
it "correctly finds the driver_url when switching between machine and aws_instance", :super_slow do
|
80
|
+
expect { recipe {
|
81
|
+
machine 'test-machine-driver' do
|
82
|
+
action :allocate
|
83
|
+
end
|
84
|
+
aws_instance 'test-machine-driver'
|
85
|
+
machine 'test-machine-driver' do
|
86
|
+
action :destroy
|
87
|
+
end
|
88
|
+
}.converge }.to_not raise_error
|
89
|
+
end
|
62
90
|
end
|
63
91
|
end
|
64
92
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chef-provisioning-aws
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Ewart
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef
|
@@ -188,6 +188,7 @@ files:
|
|
188
188
|
- spec/aws_support/deep_matcher/rspec_monkeypatches.rb
|
189
189
|
- spec/aws_support/delayed_stream.rb
|
190
190
|
- spec/aws_support/matchers/create_an_aws_object.rb
|
191
|
+
- spec/aws_support/matchers/destroy_an_aws_object.rb
|
191
192
|
- spec/aws_support/matchers/update_an_aws_object.rb
|
192
193
|
- spec/integration/aws_ebs_volume_spec.rb
|
193
194
|
- spec/integration/aws_key_pair_spec.rb
|