chef-provisioning-aws 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +2 -0
- data/lib/chef/provider/aws_auto_scaling_group.rb +30 -41
- data/lib/chef/provider/aws_dhcp_options.rb +70 -0
- data/lib/chef/provider/aws_ebs_volume.rb +182 -34
- data/lib/chef/provider/aws_eip_address.rb +63 -60
- data/lib/chef/provider/aws_key_pair.rb +18 -27
- data/lib/chef/provider/aws_launch_configuration.rb +50 -0
- data/lib/chef/provider/aws_route_table.rb +122 -0
- data/lib/chef/provider/aws_s3_bucket.rb +42 -49
- data/lib/chef/provider/aws_security_group.rb +252 -59
- data/lib/chef/provider/aws_sns_topic.rb +10 -26
- data/lib/chef/provider/aws_sqs_queue.rb +16 -38
- data/lib/chef/provider/aws_subnet.rb +85 -32
- data/lib/chef/provider/aws_vpc.rb +163 -23
- data/lib/chef/provisioning/aws_driver.rb +18 -1
- data/lib/chef/provisioning/aws_driver/aws_provider.rb +206 -0
- data/lib/chef/provisioning/aws_driver/aws_resource.rb +186 -0
- data/lib/chef/provisioning/aws_driver/aws_resource_with_entry.rb +114 -0
- data/lib/chef/provisioning/aws_driver/driver.rb +317 -255
- data/lib/chef/provisioning/aws_driver/resources.rb +8 -5
- data/lib/chef/provisioning/aws_driver/super_lwrp.rb +45 -0
- data/lib/chef/provisioning/aws_driver/version.rb +1 -1
- data/lib/chef/resource/aws_auto_scaling_group.rb +15 -13
- data/lib/chef/resource/aws_dhcp_options.rb +57 -0
- data/lib/chef/resource/aws_ebs_volume.rb +20 -22
- data/lib/chef/resource/aws_eip_address.rb +50 -25
- data/lib/chef/resource/aws_image.rb +20 -0
- data/lib/chef/resource/aws_instance.rb +20 -0
- data/lib/chef/resource/aws_internet_gateway.rb +16 -0
- data/lib/chef/resource/aws_key_pair.rb +6 -10
- data/lib/chef/resource/aws_launch_configuration.rb +15 -0
- data/lib/chef/resource/aws_load_balancer.rb +16 -0
- data/lib/chef/resource/aws_network_interface.rb +16 -0
- data/lib/chef/resource/aws_route_table.rb +76 -0
- data/lib/chef/resource/aws_s3_bucket.rb +8 -18
- data/lib/chef/resource/aws_security_group.rb +49 -19
- data/lib/chef/resource/aws_sns_topic.rb +14 -15
- data/lib/chef/resource/aws_sqs_queue.rb +16 -14
- data/lib/chef/resource/aws_subnet.rb +87 -17
- data/lib/chef/resource/aws_vpc.rb +137 -15
- data/spec/integration/aws_security_group_spec.rb +55 -0
- data/spec/spec_helper.rb +8 -2
- data/spec/support/aws_support.rb +211 -0
- metadata +33 -10
- data/lib/chef/provider/aws_launch_config.rb +0 -43
- data/lib/chef/provider/aws_provider.rb +0 -22
- data/lib/chef/provisioning/aws_driver/aws_profile.rb +0 -73
- data/lib/chef/resource/aws_launch_config.rb +0 -14
- data/lib/chef/resource/aws_resource.rb +0 -10
- data/spec/chef_zero_rspec_helper.rb +0 -8
- data/spec/unit/provider/aws_subnet_spec.rb +0 -67
- data/spec/unit/resource/aws_subnet_spec.rb +0 -23
@@ -1,39 +1,23 @@
|
|
1
|
-
require 'chef/
|
1
|
+
require 'chef/provisioning/aws_driver/aws_provider'
|
2
2
|
require 'date'
|
3
3
|
|
4
|
-
class Chef::Provider::AwsSnsTopic < Chef::
|
4
|
+
class Chef::Provider::AwsSnsTopic < Chef::Provisioning::AWSDriver::AWSProvider
|
5
5
|
|
6
|
-
|
7
|
-
if existing_topic == nil
|
8
|
-
converge_by "Creating new SNS topic #{fqn} in #{new_driver.aws_config.region}" do
|
9
|
-
new_driver.sns.topics.create(fqn)
|
6
|
+
protected
|
10
7
|
|
11
|
-
|
12
|
-
|
13
|
-
|
8
|
+
def create_aws_object
|
9
|
+
converge_by "Creating new SNS topic #{new_resource.name} in #{region}" do
|
10
|
+
new_resource.driver.sns.topics.create(new_resource.name)
|
14
11
|
end
|
15
12
|
end
|
16
13
|
|
17
|
-
|
18
|
-
if existing_topic
|
19
|
-
converge_by "Deleting SNS topic #{fqn} in #{new_driver.aws_config.region}" do
|
20
|
-
existing_topic.delete
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
new_resource.delete
|
14
|
+
def update_aws_object(topic)
|
25
15
|
end
|
26
16
|
|
27
|
-
def
|
28
|
-
|
29
|
-
|
30
|
-
rescue
|
31
|
-
nil
|
17
|
+
def destroy_aws_object(topic)
|
18
|
+
converge_by "Deleting SNS topic #{topic.name} in #{region}" do
|
19
|
+
topic.delete
|
32
20
|
end
|
33
21
|
end
|
34
22
|
|
35
|
-
def id
|
36
|
-
new_resource.topic_name
|
37
|
-
end
|
38
|
-
|
39
23
|
end
|
@@ -1,47 +1,25 @@
|
|
1
|
-
require 'chef/
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
rescue AWS::SQS::Errors::QueueDeletedRecently
|
14
|
-
sleep 5
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
new_resource.created_at DateTime.now.to_s
|
19
|
-
new_resource.save
|
1
|
+
require 'chef/provisioning/aws_driver/aws_provider'
|
2
|
+
|
3
|
+
class Chef::Provider::AwsSqsQueue < Chef::Provisioning::AWSDriver::AWSProvider
|
4
|
+
|
5
|
+
def create_aws_object
|
6
|
+
converge_by "create new SQS queue #{new_resource.name} in #{region}" do
|
7
|
+
# TODO need timeout here.
|
8
|
+
begin
|
9
|
+
new_resource.driver.sqs.queues.create(new_resource.name, new_resource.options || {})
|
10
|
+
rescue AWS::SQS::Errors::QueueDeletedRecently
|
11
|
+
sleep 5
|
12
|
+
retry
|
20
13
|
end
|
21
14
|
end
|
22
15
|
end
|
23
16
|
|
24
|
-
|
25
|
-
if existing_queue
|
26
|
-
converge_by "Deleting SQS queue #{fqn} in #{new_driver.aws_config.region}" do
|
27
|
-
existing_queue.delete
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
new_resource.delete
|
17
|
+
def update_aws_object(queue)
|
32
18
|
end
|
33
19
|
|
34
|
-
def
|
35
|
-
|
36
|
-
|
37
|
-
rescue
|
38
|
-
nil
|
20
|
+
def destroy_aws_object(queue)
|
21
|
+
converge_by "delete SQS queue #{new_resource.name} in #{region}" do
|
22
|
+
queue.delete
|
39
23
|
end
|
40
24
|
end
|
41
|
-
|
42
|
-
# Fully qualified queue name (i.e luigi:us-east-1)
|
43
|
-
def id
|
44
|
-
new_resource.queue_name
|
45
|
-
end
|
46
|
-
|
47
25
|
end
|
@@ -1,52 +1,105 @@
|
|
1
|
-
require 'chef/
|
1
|
+
require 'chef/provisioning/aws_driver/aws_provider'
|
2
|
+
require 'chef/provisioning/aws_driver/aws_resource'
|
2
3
|
require 'date'
|
4
|
+
require 'chef/resource/aws_vpc'
|
3
5
|
|
4
|
-
class Chef::Provider::AwsSubnet < Chef::
|
6
|
+
class Chef::Provider::AwsSubnet < Chef::Provisioning::AWSDriver::AWSProvider
|
5
7
|
|
6
|
-
|
7
|
-
|
8
|
+
def action_create
|
9
|
+
subnet = super
|
8
10
|
|
9
|
-
if
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
subnet.tags['VPC'] = new_resource.vpc
|
16
|
-
new_resource.subnet_id subnet.id
|
17
|
-
new_resource.save
|
18
|
-
end
|
11
|
+
if new_resource.map_public_ip_on_launch != nil
|
12
|
+
update_map_public_ip_on_launch(subnet)
|
13
|
+
end
|
14
|
+
|
15
|
+
if new_resource.route_table != nil
|
16
|
+
update_route_table(subnet)
|
19
17
|
end
|
20
18
|
end
|
21
19
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
20
|
+
protected
|
21
|
+
|
22
|
+
def create_aws_object
|
23
|
+
cidr_block = new_resource.cidr_block
|
24
|
+
if !cidr_block
|
25
|
+
cidr_block = Chef::Resource::AwsVpc.get_aws_object(new_resource.vpc, resource: new_resource).cidr_block
|
27
26
|
end
|
27
|
+
options = { :vpc => new_resource.vpc }
|
28
|
+
options[:availability_zone] = new_resource.availability_zone if new_resource.availability_zone
|
29
|
+
options = Chef::Provisioning::AWSDriver::AWSResource.lookup_options(options, resource: new_resource)
|
28
30
|
|
29
|
-
new_resource.
|
31
|
+
converge_by "create new subnet #{new_resource.name} with CIDR #{cidr_block} in VPC #{new_resource.vpc} (#{options[:vpc]}) in #{region}" do
|
32
|
+
subnet = new_resource.driver.ec2.subnets.create(cidr_block, options)
|
33
|
+
subnet.tags['Name'] = new_resource.name
|
34
|
+
subnet.tags['VPC'] = new_resource.vpc
|
35
|
+
subnet
|
36
|
+
end
|
30
37
|
end
|
31
38
|
|
32
|
-
def
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
39
|
+
def update_aws_object(subnet)
|
40
|
+
# Verify unmodifiable attributes of existing subnet
|
41
|
+
if new_resource.cidr_block && subnet.cidr_block != new_resource.cidr_block
|
42
|
+
raise "cidr_block for subnet #{new_resource.name} is #{new_resource.cidr_block}, but existing subnet (#{subnet.id})'s cidr_block is #{subnet.cidr_block}. Modification of subnet cidr_block is unsupported!"
|
43
|
+
end
|
44
|
+
vpc = Chef::Resource::AwsVpc.get_aws_object(new_resource.vpc, resource: new_resource)
|
45
|
+
if vpc && subnet.vpc != vpc
|
46
|
+
raise "vpc for subnet #{new_resource.name} is #{new_resource.vpc} (#{vpc.id}), but existing subnet (#{subnet.id})'s vpc is #{subnet.vpc.id}. Modification of subnet vpc is unsupported!"
|
47
|
+
end
|
48
|
+
if new_resource.availability_zone && subnet.availability_zone_name != new_resource.availability_zone
|
49
|
+
raise "availability_zone for subnet #{new_resource.name} is #{new_resource.availability_zone}, but existing subnet (#{subnet.id})'s availability_zone is #{subnet.availability_zone}. Modification of subnet availability_zone is unsupported!"
|
37
50
|
end
|
38
51
|
end
|
39
52
|
|
40
|
-
def
|
41
|
-
|
42
|
-
|
43
|
-
rescue
|
44
|
-
nil
|
53
|
+
def destroy_aws_object(subnet)
|
54
|
+
converge_by "delete subnet #{new_resource.name} in VPC #{new_resource.vpc} in #{region}" do
|
55
|
+
subnet.delete
|
45
56
|
end
|
46
57
|
end
|
47
58
|
|
48
|
-
|
49
|
-
|
59
|
+
private
|
60
|
+
|
61
|
+
def update_map_public_ip_on_launch(subnet)
|
62
|
+
if !new_resource.map_public_ip_on_launch.nil?
|
63
|
+
subnet_desc = subnet.client.describe_subnets(subnet_ids: [ subnet.id ])[:subnet_set].first
|
64
|
+
if new_resource.map_public_ip_on_launch
|
65
|
+
if !subnet_desc[:map_public_ip_on_launch]
|
66
|
+
converge_by "turn on automatic public IPs for subnet #{subnet.id}" do
|
67
|
+
subnet.client.modify_subnet_attribute(subnet_id: subnet.id, map_public_ip_on_launch: { value: true })
|
68
|
+
end
|
69
|
+
end
|
70
|
+
else
|
71
|
+
if subnet_desc[:map_public_ip_on_launch]
|
72
|
+
converge_by "turn off automatic public IPs for subnet #{subnet.id}" do
|
73
|
+
subnet.client.modify_subnet_attribute(subnet_id: subnet.id, map_public_ip_on_launch: { value: false })
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
50
78
|
end
|
51
79
|
|
80
|
+
def update_route_table(subnet)
|
81
|
+
if new_resource.route_table == :default_to_main
|
82
|
+
if !subnet.route_table_association.main?
|
83
|
+
converge_by "reset route table of subnet #{new_resource.name} to the VPC default" do
|
84
|
+
subnet.route_table = nil
|
85
|
+
end
|
86
|
+
end
|
87
|
+
else
|
88
|
+
route_table = Chef::Resource::AwsRouteTable.get_aws_object(new_resource.route_table, resource: new_resource)
|
89
|
+
current_route_table_association = subnet.route_table_association
|
90
|
+
if current_route_table_association.main?
|
91
|
+
# Even if the user sets the route table explicitly to the main route table,
|
92
|
+
# we have work to do here: we need to make the relationship explicit so that
|
93
|
+
# it won't be changed when the main route table of the VPC changes.
|
94
|
+
converge_by "set route table of subnet #{new_resource.name} to #{new_resource.route_table}" do
|
95
|
+
subnet.route_table = route_table
|
96
|
+
end
|
97
|
+
elsif current_route_table_association.route_table != route_table
|
98
|
+
# The route table is different now. Change it.
|
99
|
+
converge_by "change route table of subnet #{new_resource.name} to #{new_resource.route_table} (was #{current_route_table_association.route_table.id})" do
|
100
|
+
subnet.route_table = route_table
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
52
105
|
end
|
@@ -1,42 +1,182 @@
|
|
1
|
-
require 'chef/
|
1
|
+
require 'chef/provisioning/aws_driver/aws_provider'
|
2
2
|
require 'date'
|
3
3
|
|
4
|
-
class Chef::Provider::AwsVpc < Chef::
|
4
|
+
class Chef::Provider::AwsVpc < Chef::Provisioning::AWSDriver::AWSProvider
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
def action_create
|
7
|
+
vpc = super
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
9
|
+
# Update DNS attributes
|
10
|
+
update_vpc_attributes(vpc)
|
11
|
+
|
12
|
+
#
|
13
|
+
# Attach/detach internet gateway
|
14
|
+
#
|
15
|
+
if !new_resource.internet_gateway.nil?
|
16
|
+
update_internet_gateway(vpc)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Replace the main route table for the VPC
|
20
|
+
if !new_resource.main_route_table.nil?
|
21
|
+
main_route_table = update_main_route_table(vpc)
|
22
|
+
end
|
23
|
+
|
24
|
+
# Update the main route table
|
25
|
+
if !new_resource.main_routes.nil?
|
26
|
+
update_main_routes(vpc, main_route_table)
|
27
|
+
end
|
28
|
+
|
29
|
+
# Update DHCP options
|
30
|
+
if !new_resource.dhcp_options.nil?
|
31
|
+
update_dhcp_options(vpc)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
protected
|
36
|
+
|
37
|
+
def create_aws_object
|
38
|
+
options = { }
|
39
|
+
options[:instance_tenancy] = new_resource.instance_tenancy if new_resource.instance_tenancy
|
40
|
+
|
41
|
+
converge_by "create new VPC #{new_resource.name} in #{region}" do
|
42
|
+
vpc = new_resource.driver.ec2.vpcs.create(new_resource.cidr_block, options)
|
43
|
+
vpc.tags['Name'] = new_resource.name
|
44
|
+
vpc
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def update_aws_object(vpc)
|
49
|
+
if new_resource.instance_tenancy && new_resource.instance_tenancy != vpc.instance_tenancy
|
50
|
+
raise "Tenancy of VPC #{new_resource.name} is #{vpc.instance_tenancy}, but desired tenancy is #{new_resource.instance_tenancy}. Instance tenancy of VPCs cannot be changed!"
|
51
|
+
end
|
52
|
+
if new_resource.cidr_block && new_resource.cidr_block != vpc.cidr_block
|
53
|
+
raise "CIDR block of VPC #{new_resource.name} is #{vpc.cidr_block}, but desired CIDR block is #{new_resource.cidr_block}. VPC CIDR blocks cannot currently be changed!"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def destroy_aws_object(vpc)
|
58
|
+
# Detach or destroy the internet gateway
|
59
|
+
ig = vpc.internet_gateway
|
60
|
+
if ig
|
61
|
+
converge_by "detach Internet Gateway #{ig.id} in #{region} from VPC #{new_resource.name} (#{vpc.id}" do
|
62
|
+
ig.detach(vpc.id)
|
63
|
+
end
|
64
|
+
if ig.tags['OwnedByVPC'] == vpc.id
|
65
|
+
converge_by "destroy Internet Gateway #{ig.id} in #{region} (owned by VPC #{new_resource.name} (#{vpc.id}))" do
|
66
|
+
ig.delete
|
67
|
+
end
|
16
68
|
end
|
17
69
|
end
|
70
|
+
|
71
|
+
# TODO delete main route table & routes if they exist and we created them
|
72
|
+
|
73
|
+
converge_by "delete VPC #{new_resource.name} (#{vpc.id}) in #{region}" do
|
74
|
+
vpc.delete
|
75
|
+
end
|
18
76
|
end
|
19
77
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
78
|
+
private
|
79
|
+
|
80
|
+
def update_vpc_attributes(vpc)
|
81
|
+
# Figure out what (if anything) we need to update
|
82
|
+
update_attributes = {}
|
83
|
+
%w(enable_dns_support enable_dns_hostnames).each do |name|
|
84
|
+
desired_value = new_resource.public_send(name)
|
85
|
+
if !desired_value.nil?
|
86
|
+
# enable_dns_support -> enableDnsSupport
|
87
|
+
aws_attr_name = name.gsub(/_./) { |v| v[1..1].upcase }
|
88
|
+
name = name.to_sym
|
89
|
+
actual_value = vpc.client.describe_vpc_attribute(vpc_id: vpc.id, attribute: aws_attr_name)
|
90
|
+
if actual_value[name][:value] != desired_value
|
91
|
+
update_attributes[name] = { old_value: actual_value[name][:value], value: desired_value }
|
92
|
+
end
|
24
93
|
end
|
25
94
|
end
|
26
95
|
|
27
|
-
|
96
|
+
update_attributes.each do |name, update|
|
97
|
+
converge_by "update #{name} to #{update[:value].inspect} (was #{update[:old_value].inspect}) in VPC #{new_resource.name} (#{vpc.id})" do
|
98
|
+
vpc.client.modify_vpc_attribute(:vpc_id => vpc.id, name => { value: update[:value] })
|
99
|
+
end
|
100
|
+
end
|
28
101
|
end
|
29
102
|
|
30
|
-
def
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
103
|
+
def update_internet_gateway(vpc)
|
104
|
+
current_ig = vpc.internet_gateway
|
105
|
+
case new_resource.internet_gateway
|
106
|
+
when String, Chef::Resource::AwsInternetGateway, AWS::EC2::InternetGateway
|
107
|
+
new_ig = Chef::Resource::AwsInternetGateway.get_aws_object(new_resource.internet_gateway, resource: new_resource)
|
108
|
+
if !current_ig
|
109
|
+
converge_by "attach Internet Gateway #{new_resource.internet_gateway} to VPC #{vpc.id}" do
|
110
|
+
new_ig.attach(vpc.id)
|
111
|
+
end
|
112
|
+
elsif current_ig != new_ig
|
113
|
+
converge_by "replace Internet Gateway #{current_ig.id} on VPC #{vpc.id} with new Internet Gateway #{new_ig.id}" do
|
114
|
+
current_ig.detach(vpc.id)
|
115
|
+
new_ig.attach(vpc.id)
|
116
|
+
end
|
117
|
+
if current_ig.tags['OwnedByVPC'] == vpc.id
|
118
|
+
converge_by "destroy Internet Gateway #{current_ig.id} in #{region} (owned by VPC #{vpc.id})" do
|
119
|
+
current_ig.delete
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
when true
|
124
|
+
if !current_ig
|
125
|
+
converge_by "attach new Internet Gateway to VPC #{vpc.id}" do
|
126
|
+
current_ig = AWS.ec2(config: vpc.config).internet_gateways.create
|
127
|
+
action_handler.report_progress "create Internet Gateway #{current_ig.id}"
|
128
|
+
current_ig.tags['OwnedByVPC'] = vpc.id
|
129
|
+
action_handler.report_progress "tag Internet Gateway #{current_ig.id} as OwnedByVpc: #{vpc.id}"
|
130
|
+
vpc.internet_gateway = current_ig
|
131
|
+
end
|
132
|
+
end
|
133
|
+
when false
|
134
|
+
if current_ig
|
135
|
+
converge_by "detach Internet Gateway #{current_ig.id} from VPC #{vpc.id}" do
|
136
|
+
current_ig.detach(vpc.id)
|
137
|
+
end
|
138
|
+
if current_ig.tags['OwnedByVPC'] == vpc.id
|
139
|
+
converge_by "destroy Internet Gateway #{current_ig.id} in #{region} (owned by VPC #{vpc.id})" do
|
140
|
+
current_ig.delete
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
35
144
|
end
|
36
145
|
end
|
37
146
|
|
38
|
-
def
|
39
|
-
new_resource.
|
147
|
+
def update_main_route_table(vpc)
|
148
|
+
desired_route_table = Chef::Resource::AwsRouteTable.get_aws_object(new_resource.main_route_table, resource: new_resource)
|
149
|
+
current_route_table = vpc.route_tables.main_route_table
|
150
|
+
if current_route_table != desired_route_table
|
151
|
+
main_association = current_route_table.associations.select { |a| a.main? }.first
|
152
|
+
if !main_association
|
153
|
+
raise "No main route table association found for VPC #{new_resource.name} (#{vpc.id})'s current main route table #{current_route_table.id}: error! Probably a race condition."
|
154
|
+
end
|
155
|
+
converge_by "change main route table for VPC #{new_resource.name} (#{vpc.id}) to #{desired_route_table.id} (was #{current_route_table.id})" do
|
156
|
+
vpc.client.replace_route_table_association(
|
157
|
+
association_id: main_association.id,
|
158
|
+
route_table_id: desired_route_table.id)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
desired_route_table
|
40
162
|
end
|
41
163
|
|
164
|
+
def update_main_routes(vpc, main_route_table)
|
165
|
+
main_route_table ||= vpc.route_tables.main_route_table
|
166
|
+
aws_route_table main_route_table do
|
167
|
+
vpc vpc
|
168
|
+
routes new_resource.main_routes
|
169
|
+
end
|
170
|
+
main_route_table
|
171
|
+
end
|
172
|
+
|
173
|
+
def update_dhcp_options(vpc)
|
174
|
+
dhcp_options = vpc.dhcp_options
|
175
|
+
desired_dhcp_options = Chef::Resource::AwsDhcpOptions.get_aws_object(new_resource.dhcp_options, resource: new_resource)
|
176
|
+
if dhcp_options != desired_dhcp_options
|
177
|
+
converge_by "change DHCP options for VPC #{new_resource.name} (#{vpc.id}) to #{new_resource.dhcp_options} (#{desired_dhcp_options.id}) - was #{dhcp_options.id}" do
|
178
|
+
vpc.dhcp_options = desired_dhcp_options
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
42
182
|
end
|