chef-provisioning-aws 1.3.1 → 1.4.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.
- checksums.yaml +4 -4
- data/README.md +70 -69
- data/Rakefile +22 -2
- data/lib/chef/provider/aws_auto_scaling_group.rb +3 -2
- data/lib/chef/provider/aws_cache_cluster.rb +3 -2
- data/lib/chef/provider/aws_cache_replication_group.rb +5 -4
- data/lib/chef/provider/aws_cache_subnet_group.rb +5 -4
- data/lib/chef/provider/aws_cloudsearch_domain.rb +163 -0
- data/lib/chef/provider/aws_dhcp_options.rb +9 -6
- data/lib/chef/provider/aws_ebs_volume.rb +7 -3
- data/lib/chef/provider/aws_eip_address.rb +8 -7
- data/lib/chef/provider/aws_image.rb +8 -3
- data/lib/chef/provider/aws_instance.rb +14 -2
- data/lib/chef/provider/aws_key_pair.rb +2 -1
- data/lib/chef/provider/aws_launch_configuration.rb +4 -2
- data/lib/chef/provider/aws_load_balancer.rb +18 -0
- data/lib/chef/provider/aws_network_acl.rb +6 -2
- data/lib/chef/provider/aws_network_interface.rb +11 -24
- data/lib/chef/provider/aws_rds_instance.rb +66 -0
- data/lib/chef/provider/aws_rds_subnet_group.rb +89 -0
- data/lib/chef/provider/aws_route_table.rb +42 -23
- data/lib/chef/provider/aws_s3_bucket.rb +32 -8
- data/lib/chef/provider/aws_security_group.rb +11 -4
- data/lib/chef/provider/aws_server_certificate.rb +23 -0
- data/lib/chef/provider/aws_sns_topic.rb +4 -3
- data/lib/chef/provider/aws_sqs_queue.rb +3 -2
- data/lib/chef/provider/aws_subnet.rb +10 -7
- data/lib/chef/provider/aws_vpc.rb +54 -21
- data/lib/chef/provider/aws_vpc_peering_connection.rb +88 -0
- data/lib/chef/provisioning/aws_driver.rb +8 -0
- data/lib/chef/provisioning/aws_driver/aws_provider.rb +45 -76
- data/lib/chef/provisioning/aws_driver/aws_rds_resource.rb +11 -0
- data/lib/chef/provisioning/aws_driver/aws_resource.rb +14 -2
- data/lib/chef/provisioning/aws_driver/aws_resource_with_entry.rb +2 -8
- data/lib/chef/provisioning/aws_driver/aws_taggable.rb +18 -0
- data/lib/chef/provisioning/aws_driver/aws_tagger.rb +61 -0
- data/lib/chef/provisioning/aws_driver/credentials2.rb +51 -0
- data/lib/chef/provisioning/aws_driver/driver.rb +214 -162
- data/lib/chef/provisioning/aws_driver/tagging_strategy/ec2.rb +64 -0
- data/lib/chef/provisioning/aws_driver/tagging_strategy/elb.rb +39 -0
- data/lib/chef/provisioning/aws_driver/tagging_strategy/rds.rb +92 -0
- data/lib/chef/provisioning/aws_driver/tagging_strategy/s3.rb +41 -0
- data/lib/chef/provisioning/aws_driver/version.rb +1 -1
- data/lib/chef/resource/aws_cache_cluster.rb +1 -2
- data/lib/chef/resource/aws_cloudsearch_domain.rb +46 -0
- data/lib/chef/resource/aws_dhcp_options.rb +2 -0
- data/lib/chef/resource/aws_ebs_volume.rb +3 -1
- data/lib/chef/resource/aws_eip_address.rb +0 -3
- data/lib/chef/resource/aws_image.rb +3 -0
- data/lib/chef/resource/aws_instance.rb +7 -2
- data/lib/chef/resource/aws_internet_gateway.rb +2 -0
- data/lib/chef/resource/aws_load_balancer.rb +3 -0
- data/lib/chef/resource/aws_network_acl.rb +2 -0
- data/lib/chef/resource/aws_network_interface.rb +3 -1
- data/lib/chef/resource/aws_rds_instance.rb +42 -0
- data/lib/chef/resource/aws_rds_subnet_group.rb +29 -0
- data/lib/chef/resource/aws_route_table.rb +7 -5
- data/lib/chef/resource/aws_s3_bucket.rb +3 -0
- data/lib/chef/resource/aws_security_group.rb +2 -7
- data/lib/chef/resource/aws_server_certificate.rb +21 -0
- data/lib/chef/resource/aws_subnet.rb +2 -0
- data/lib/chef/resource/aws_vpc.rb +4 -1
- data/lib/chef/resource/aws_vpc_peering_connection.rb +73 -0
- data/spec/acceptance/aws_ebs_volume/nodes/ettores-mbp.lan.json +3 -0
- data/spec/aws_support.rb +25 -8
- data/spec/aws_support/aws_resource_run_wrapper.rb +5 -1
- data/spec/aws_support/deep_matcher/match_values_failure_messages.rb +19 -0
- data/spec/aws_support/matchers/create_an_aws_object.rb +1 -1
- data/spec/aws_support/matchers/destroy_an_aws_object.rb +1 -1
- data/spec/aws_support/matchers/have_aws_object_tags.rb +9 -15
- data/spec/aws_support/matchers/match_an_aws_object.rb +1 -1
- data/spec/aws_support/matchers/update_an_aws_object.rb +1 -1
- data/spec/integration/aws_cloudsearch_domain_spec.rb +31 -0
- data/spec/integration/aws_dhcp_options_spec.rb +73 -0
- data/spec/integration/aws_ebs_volume_spec.rb +97 -0
- data/spec/integration/aws_network_acl_spec.rb +51 -0
- data/spec/integration/aws_network_interface_spec.rb +89 -0
- data/spec/integration/aws_rds_instance_spec.rb +150 -0
- data/spec/integration/aws_rds_subnet_group_spec.rb +105 -0
- data/spec/integration/aws_route_table_spec.rb +94 -7
- data/spec/integration/aws_s3_bucket_spec.rb +88 -0
- data/spec/integration/aws_security_group_spec.rb +47 -0
- data/spec/integration/aws_server_certificate_spec.rb +24 -0
- data/spec/integration/aws_subnet_spec.rb +51 -2
- data/spec/integration/aws_vpc_peering_connection_spec.rb +99 -0
- data/spec/integration/aws_vpc_spec.rb +73 -0
- data/spec/integration/load_balancer_spec.rb +101 -0
- data/spec/integration/machine_image_spec.rb +61 -6
- data/spec/integration/machine_spec.rb +26 -0
- data/spec/spec_helper.rb +3 -0
- data/spec/unit/{aws_driver → chef/provisioning/aws_driver}/credentials_spec.rb +0 -0
- data/spec/unit/chef/provisioning/aws_driver/driver_spec.rb +88 -0
- metadata +63 -20
- data/spec/integration/aws_tagged_items_spec.rb +0 -166
@@ -0,0 +1,73 @@
|
|
1
|
+
describe "AwsDhcpOptions" do
|
2
|
+
extend AWSSupport
|
3
|
+
|
4
|
+
when_the_chef_12_server "exists", organization: 'foo', server_scope: :context do
|
5
|
+
with_aws "when connected to AWS" do
|
6
|
+
|
7
|
+
it "creates an aws_dhcp_options resource with maximum attributes" do
|
8
|
+
expect_recipe {
|
9
|
+
aws_dhcp_options 'test-dhcp-options' do
|
10
|
+
domain_name 'example.com'
|
11
|
+
domain_name_servers %w(8.8.8.8 8.8.4.4)
|
12
|
+
ntp_servers %w(8.8.8.8 8.8.4.4)
|
13
|
+
netbios_name_servers %w(8.8.8.8 8.8.4.4)
|
14
|
+
netbios_node_type 2
|
15
|
+
end
|
16
|
+
}.to create_an_aws_dhcp_options('test-dhcp-options', configuration: {
|
17
|
+
domain_name: 'example.com',
|
18
|
+
domain_name_servers: %w(8.8.8.8 8.8.4.4),
|
19
|
+
ntp_servers: %w(8.8.8.8 8.8.4.4),
|
20
|
+
netbios_name_servers: %w(8.8.8.8 8.8.4.4),
|
21
|
+
netbios_node_type: 2
|
22
|
+
}).and be_idempotent
|
23
|
+
end
|
24
|
+
|
25
|
+
it "creates aws_dhcp_options tags" do
|
26
|
+
expect_recipe {
|
27
|
+
aws_dhcp_options 'test-dhcp-options' do
|
28
|
+
aws_tags key1: "value"
|
29
|
+
end
|
30
|
+
}.to create_an_aws_dhcp_options('test-dhcp-options')
|
31
|
+
.and have_aws_dhcp_options_tags('test-dhcp-options',
|
32
|
+
{
|
33
|
+
'Name' => 'test-dhcp-options',
|
34
|
+
'key1' => 'value'
|
35
|
+
}
|
36
|
+
).and be_idempotent
|
37
|
+
end
|
38
|
+
|
39
|
+
context "with existing tags" do
|
40
|
+
aws_dhcp_options 'test-dhcp-options' do
|
41
|
+
aws_tags key1: "value"
|
42
|
+
end
|
43
|
+
|
44
|
+
it "updates aws_dhcp_options tags" do
|
45
|
+
expect_recipe {
|
46
|
+
aws_dhcp_options 'test-dhcp-options' do
|
47
|
+
aws_tags key1: "value2", key2: nil
|
48
|
+
end
|
49
|
+
}.to have_aws_dhcp_options_tags('test-dhcp-options',
|
50
|
+
{
|
51
|
+
'Name' => 'test-dhcp-options',
|
52
|
+
'key1' => 'value2',
|
53
|
+
'key2' => ''
|
54
|
+
}
|
55
|
+
).and be_idempotent
|
56
|
+
end
|
57
|
+
|
58
|
+
it "removes all aws_dhcp_options tags except Name" do
|
59
|
+
expect_recipe {
|
60
|
+
aws_dhcp_options 'test-dhcp-options' do
|
61
|
+
aws_tags Hash.new
|
62
|
+
end
|
63
|
+
}.to have_aws_dhcp_options_tags('test-dhcp-options',
|
64
|
+
{
|
65
|
+
'Name' => 'test-dhcp-options'
|
66
|
+
}
|
67
|
+
).and be_idempotent
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -44,6 +44,103 @@ describe Chef::Resource::AwsEbsVolume do
|
|
44
44
|
.and be_idempotent
|
45
45
|
end
|
46
46
|
|
47
|
+
# These tests are testing the tagging functionality - they use some example resources rather
|
48
|
+
# because these are integration tests so we cannot make a mock resource.
|
49
|
+
it "aws_ebs_volume 'test_volume' created with default Name tag" do
|
50
|
+
expect_recipe {
|
51
|
+
aws_ebs_volume "test_volume"
|
52
|
+
}.to create_an_aws_ebs_volume('test_volume'
|
53
|
+
).and have_aws_ebs_volume_tags('test_volume',
|
54
|
+
{ 'Name' => 'test_volume' }
|
55
|
+
).and be_idempotent
|
56
|
+
end
|
57
|
+
|
58
|
+
it "allows users to specify a unique Name tag" do
|
59
|
+
expect_recipe {
|
60
|
+
aws_ebs_volume "test_volume_2" do
|
61
|
+
aws_tags :Name => 'test_volume_new'
|
62
|
+
end
|
63
|
+
}.to create_an_aws_ebs_volume('test_volume_2'
|
64
|
+
).and have_aws_ebs_volume_tags('test_volume_2',
|
65
|
+
{ 'Name' => 'test_volume_new' }
|
66
|
+
).and be_idempotent
|
67
|
+
end
|
68
|
+
|
69
|
+
it "allows tags to be specified as strings or symbols" do
|
70
|
+
expect_recipe {
|
71
|
+
aws_ebs_volume "test_volume" do
|
72
|
+
aws_tags({
|
73
|
+
:key1 => :symbol,
|
74
|
+
'key2' => :symbol,
|
75
|
+
:key3 => 'string',
|
76
|
+
'key4' => 'string'
|
77
|
+
})
|
78
|
+
end
|
79
|
+
}.to create_an_aws_ebs_volume('test_volume'
|
80
|
+
).and have_aws_ebs_volume_tags('test_volume',
|
81
|
+
{
|
82
|
+
'key1' => 'symbol',
|
83
|
+
'key2' => 'symbol',
|
84
|
+
'key3' => 'string',
|
85
|
+
'key4' => 'string'
|
86
|
+
}
|
87
|
+
).and be_idempotent
|
88
|
+
end
|
89
|
+
|
90
|
+
context "when there are existing tags" do
|
91
|
+
before(:each) do
|
92
|
+
converge {
|
93
|
+
aws_ebs_volume "test_volume_a" do
|
94
|
+
aws_tags :byebye => 'true'
|
95
|
+
end
|
96
|
+
}
|
97
|
+
end
|
98
|
+
|
99
|
+
after(:each) do
|
100
|
+
converge {
|
101
|
+
aws_ebs_volume "test_volume_a" do
|
102
|
+
action :purge
|
103
|
+
end
|
104
|
+
}
|
105
|
+
end
|
106
|
+
|
107
|
+
it "updates the tags" do
|
108
|
+
expect_recipe {
|
109
|
+
aws_ebs_volume "test_volume_a" do
|
110
|
+
aws_tags 'Name' => 'test_volume_b', :project => 'X'
|
111
|
+
end
|
112
|
+
}.to have_aws_ebs_volume_tags('test_volume_a',
|
113
|
+
{
|
114
|
+
'Name' => 'test_volume_b',
|
115
|
+
'project' => 'X'
|
116
|
+
}
|
117
|
+
).and be_idempotent
|
118
|
+
end
|
119
|
+
|
120
|
+
it "deletes the tags" do
|
121
|
+
expect_recipe {
|
122
|
+
aws_ebs_volume "test_volume_a" do
|
123
|
+
aws_tags {}
|
124
|
+
end
|
125
|
+
}.to have_aws_ebs_volume_tags('test_volume_a',
|
126
|
+
{
|
127
|
+
'Name' => 'test_volume_a',
|
128
|
+
}
|
129
|
+
).and be_idempotent
|
130
|
+
end
|
131
|
+
|
132
|
+
it "aws_ebs_volume 'test_volume' tags are not changed when not updated" do
|
133
|
+
expect_recipe {
|
134
|
+
#aws_ebs_volume "test_volume_a"
|
135
|
+
}.to have_aws_ebs_volume_tags('test_volume_a',
|
136
|
+
{
|
137
|
+
'Name' => 'test_volume_a',
|
138
|
+
'byebye' => 'true'
|
139
|
+
}
|
140
|
+
)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
47
144
|
end
|
48
145
|
end
|
49
146
|
end
|
@@ -102,6 +102,57 @@ describe Chef::Resource::AwsNetworkAcl do
|
|
102
102
|
).and be_idempotent
|
103
103
|
end
|
104
104
|
end
|
105
|
+
|
106
|
+
it "creates aws_network_acl tags" do
|
107
|
+
expect_recipe {
|
108
|
+
aws_network_acl 'test_network_acl' do
|
109
|
+
vpc 'test_vpc'
|
110
|
+
aws_tags key1: "value"
|
111
|
+
end
|
112
|
+
}.to create_an_aws_network_acl('test_network_acl')
|
113
|
+
.and have_aws_network_acl_tags('test_network_acl',
|
114
|
+
{
|
115
|
+
'Name' => 'test_network_acl',
|
116
|
+
'key1' => 'value'
|
117
|
+
}
|
118
|
+
).and be_idempotent
|
119
|
+
end
|
120
|
+
|
121
|
+
context "with existing tags" do
|
122
|
+
aws_network_acl 'test_network_acl' do
|
123
|
+
vpc 'test_vpc'
|
124
|
+
aws_tags key1: "value"
|
125
|
+
end
|
126
|
+
|
127
|
+
it "updates aws_network_acl tags" do
|
128
|
+
expect_recipe {
|
129
|
+
aws_network_acl 'test_network_acl' do
|
130
|
+
vpc 'test_vpc'
|
131
|
+
aws_tags key1: "value2", key2: nil
|
132
|
+
end
|
133
|
+
}.to have_aws_network_acl_tags('test_network_acl',
|
134
|
+
{
|
135
|
+
'Name' => 'test_network_acl',
|
136
|
+
'key1' => 'value2',
|
137
|
+
'key2' => ''
|
138
|
+
}
|
139
|
+
).and be_idempotent
|
140
|
+
end
|
141
|
+
|
142
|
+
it "removes all aws_network_acl tags except Name" do
|
143
|
+
expect_recipe {
|
144
|
+
aws_network_acl 'test_network_acl' do
|
145
|
+
vpc 'test_vpc'
|
146
|
+
aws_tags {}
|
147
|
+
end
|
148
|
+
}.to have_aws_network_acl_tags('test_network_acl',
|
149
|
+
{
|
150
|
+
'Name' => 'test_network_acl'
|
151
|
+
}
|
152
|
+
).and be_idempotent
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
105
156
|
end
|
106
157
|
end
|
107
158
|
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
describe "AwsNetworkInterface" do
|
2
|
+
extend AWSSupport
|
3
|
+
|
4
|
+
when_the_chef_12_server "exists", organization: 'foo', server_scope: :context do
|
5
|
+
with_aws "when connected to AWS" do
|
6
|
+
|
7
|
+
context "setting up public VPC", :super_slow do
|
8
|
+
|
9
|
+
# Putting this in its own context so it doesn't slow down other tests
|
10
|
+
setup_public_vpc
|
11
|
+
|
12
|
+
it "creates an aws_network_interface resource with maximum attributes" do
|
13
|
+
expect_recipe {
|
14
|
+
machine "test_machine" do
|
15
|
+
machine_options bootstrap_options: {
|
16
|
+
subnet_id: 'test_public_subnet',
|
17
|
+
security_group_ids: ['test_security_group']
|
18
|
+
}
|
19
|
+
action :allocate
|
20
|
+
end
|
21
|
+
|
22
|
+
aws_network_interface 'test_network_interface' do
|
23
|
+
subnet 'test_public_subnet'
|
24
|
+
private_ip_address '10.0.0.25'
|
25
|
+
description "test_network_interface"
|
26
|
+
security_groups ['test_security_group']
|
27
|
+
machine "test_machine"
|
28
|
+
device_index 1
|
29
|
+
end
|
30
|
+
}.to create_an_aws_instance('test_machine'
|
31
|
+
).and create_an_aws_network_interface('test_network_interface'
|
32
|
+
).and be_idempotent
|
33
|
+
end
|
34
|
+
|
35
|
+
it "creates aws_network_interface tags" do
|
36
|
+
expect_recipe {
|
37
|
+
aws_network_interface 'test_network_interface' do
|
38
|
+
subnet 'test_public_subnet'
|
39
|
+
aws_tags key1: "value"
|
40
|
+
end
|
41
|
+
}.to create_an_aws_network_interface('test_network_interface')
|
42
|
+
.and have_aws_network_interface_tags('test_network_interface',
|
43
|
+
{
|
44
|
+
'Name' => 'test_network_interface',
|
45
|
+
'key1' => 'value'
|
46
|
+
}
|
47
|
+
).and be_idempotent
|
48
|
+
end
|
49
|
+
|
50
|
+
context "with existing tags" do
|
51
|
+
aws_network_interface 'test_network_interface' do
|
52
|
+
subnet 'test_public_subnet'
|
53
|
+
aws_tags key1: "value"
|
54
|
+
end
|
55
|
+
|
56
|
+
it "updates aws_network_interface tags" do
|
57
|
+
expect_recipe {
|
58
|
+
aws_network_interface 'test_network_interface' do
|
59
|
+
subnet 'test_public_subnet'
|
60
|
+
aws_tags key1: "value2", key2: nil
|
61
|
+
end
|
62
|
+
}.to have_aws_network_interface_tags('test_network_interface',
|
63
|
+
{
|
64
|
+
'Name' => 'test_network_interface',
|
65
|
+
'key1' => 'value2',
|
66
|
+
'key2' => ''
|
67
|
+
}
|
68
|
+
).and be_idempotent
|
69
|
+
end
|
70
|
+
|
71
|
+
it "removes all aws_network_interface tags except Name" do
|
72
|
+
expect_recipe {
|
73
|
+
aws_network_interface 'test_network_interface' do
|
74
|
+
subnet 'test_public_subnet'
|
75
|
+
aws_tags {}
|
76
|
+
end
|
77
|
+
}.to have_aws_network_interface_tags('test_network_interface',
|
78
|
+
{
|
79
|
+
'Name' => 'test_network_interface'
|
80
|
+
}
|
81
|
+
).and be_idempotent
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,150 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Chef::Resource::AwsRdsInstance do
|
4
|
+
extend AWSSupport
|
5
|
+
|
6
|
+
when_the_chef_12_server "exists", organization: 'foo', server_scope: :context do
|
7
|
+
with_aws "with a connection to AWS, a VPC, two subnets, and a db subnet group" do
|
8
|
+
|
9
|
+
azs = []
|
10
|
+
driver.ec2.availability_zones.each do |az|
|
11
|
+
azs << az
|
12
|
+
end
|
13
|
+
az_1 = azs[0].name
|
14
|
+
az_2 = azs[1].name
|
15
|
+
|
16
|
+
aws_vpc "test_vpc" do
|
17
|
+
cidr_block '10.0.5.0/24'
|
18
|
+
internet_gateway true
|
19
|
+
end
|
20
|
+
|
21
|
+
aws_subnet "test_subnet" do
|
22
|
+
vpc 'test_vpc'
|
23
|
+
cidr_block "10.0.5.0/26"
|
24
|
+
availability_zone az_1
|
25
|
+
end
|
26
|
+
|
27
|
+
aws_subnet "test_subnet_2" do
|
28
|
+
vpc 'test_vpc'
|
29
|
+
cidr_block "10.0.5.64/26"
|
30
|
+
availability_zone az_2
|
31
|
+
end
|
32
|
+
|
33
|
+
aws_rds_subnet_group "test-db-subnet-group" do
|
34
|
+
description "some_description"
|
35
|
+
subnets ["test_subnet", test_subnet_2.aws_object.id]
|
36
|
+
end
|
37
|
+
|
38
|
+
it "aws_rds_instance 'test-rds-instance' creates an rds instance that can parse the aws_rds_subnet_group" do
|
39
|
+
expect_recipe {
|
40
|
+
aws_rds_instance "test-rds-instance" do
|
41
|
+
engine "postgres"
|
42
|
+
publicly_accessible false
|
43
|
+
db_instance_class "db.t1.micro"
|
44
|
+
master_username "thechief"
|
45
|
+
master_user_password "securesecure" # 2x security
|
46
|
+
multi_az false
|
47
|
+
allocated_storage 5
|
48
|
+
db_subnet_group_name "test-db-subnet-group"
|
49
|
+
end
|
50
|
+
}.to create_an_aws_rds_instance('test-rds-instance',
|
51
|
+
engine: 'postgres',
|
52
|
+
multi_az: false,
|
53
|
+
db_instance_class: "db.t1.micro",
|
54
|
+
master_username: "thechief",
|
55
|
+
).and be_idempotent
|
56
|
+
i = driver.rds.client.describe_db_instances(:db_instance_identifier => "test-rds-instance")[:db_instances].first
|
57
|
+
expect(i[:db_subnet_group][:db_subnet_group_name]).to eq("test-db-subnet-group")
|
58
|
+
expect(i[:publicly_accessible]).to eq(false)
|
59
|
+
end
|
60
|
+
|
61
|
+
it "aws_rds_instance prefers explicit options" do
|
62
|
+
expect_recipe {
|
63
|
+
aws_rds_instance "test-rds-instance2" do
|
64
|
+
engine "postgres"
|
65
|
+
publicly_accessible false
|
66
|
+
db_instance_class "db.t1.micro"
|
67
|
+
master_username "thechief"
|
68
|
+
master_user_password "securesecure"
|
69
|
+
multi_az false
|
70
|
+
allocated_storage 5
|
71
|
+
additional_options(multi_az: true, backup_retention_period: 2)
|
72
|
+
end
|
73
|
+
}.to create_an_aws_rds_instance('test-rds-instance2',
|
74
|
+
engine: 'postgres',
|
75
|
+
multi_az: false,
|
76
|
+
db_instance_class: "db.t1.micro",
|
77
|
+
master_username: "thechief",
|
78
|
+
backup_retention_period: 2)
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
tagging_id = Random.rand(1000)
|
83
|
+
|
84
|
+
it "creates aws_rds_instance tags" do
|
85
|
+
expect_recipe {
|
86
|
+
aws_rds_instance "test-rds-instance-tagging-#{tagging_id}" do
|
87
|
+
aws_tags key1: "value"
|
88
|
+
allocated_storage 5
|
89
|
+
db_instance_class "db.t1.micro"
|
90
|
+
engine "postgres"
|
91
|
+
master_username "thechief"
|
92
|
+
master_user_password "securesecure"
|
93
|
+
end
|
94
|
+
}.to create_an_aws_rds_instance("test-rds-instance-tagging-#{tagging_id}")
|
95
|
+
.and have_aws_rds_instance_tags("test-rds-instance-tagging-#{tagging_id}",
|
96
|
+
{
|
97
|
+
'key1' => 'value'
|
98
|
+
}
|
99
|
+
).and be_idempotent
|
100
|
+
end
|
101
|
+
|
102
|
+
# if we use let, the tagging_id method is not available in the context block
|
103
|
+
tagging_id = Random.rand(1000)
|
104
|
+
|
105
|
+
context "with existing tags" do
|
106
|
+
aws_rds_instance "test-rds-instance-tagging-#{tagging_id}" do
|
107
|
+
aws_tags key1: "value"
|
108
|
+
allocated_storage 5
|
109
|
+
db_instance_class "db.t1.micro"
|
110
|
+
engine "postgres"
|
111
|
+
master_username "thechief"
|
112
|
+
master_user_password "securesecure"
|
113
|
+
end
|
114
|
+
|
115
|
+
it "updates aws_rds_instance tags" do
|
116
|
+
expect_recipe {
|
117
|
+
aws_rds_instance "test-rds-instance-tagging-#{tagging_id}" do
|
118
|
+
aws_tags key1: "value2", key2: nil
|
119
|
+
allocated_storage 5
|
120
|
+
db_instance_class "db.t1.micro"
|
121
|
+
engine "postgres"
|
122
|
+
master_username "thechief"
|
123
|
+
master_user_password "securesecure"
|
124
|
+
end
|
125
|
+
}.to have_aws_rds_instance_tags("test-rds-instance-tagging-#{tagging_id}",
|
126
|
+
{
|
127
|
+
'key1' => 'value2',
|
128
|
+
'key2' => nil
|
129
|
+
}
|
130
|
+
).and be_idempotent
|
131
|
+
end
|
132
|
+
|
133
|
+
it "removes all aws_rds_instance tags" do
|
134
|
+
expect_recipe {
|
135
|
+
aws_rds_instance "test-rds-instance-tagging-#{tagging_id}" do
|
136
|
+
aws_tags {}
|
137
|
+
allocated_storage 5
|
138
|
+
db_instance_class "db.t1.micro"
|
139
|
+
engine "postgres"
|
140
|
+
master_username "thechief"
|
141
|
+
master_user_password "securesecure"
|
142
|
+
end
|
143
|
+
}.to have_aws_rds_instance_tags("test-rds-instance-tagging-#{tagging_id}", {}
|
144
|
+
).and be_idempotent
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|