chef-provisioning-aws 0.4.0 → 0.5.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/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,7 +1,10 @@
|
|
1
|
-
|
1
|
+
# Module under which all AWS resources live
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
class Chef
|
4
|
+
module Provisioning
|
5
|
+
module AWSDriver
|
6
|
+
module Resources
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
7
10
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'chef/resource/lwrp_base'
|
2
|
+
|
3
|
+
class Chef
|
4
|
+
module Provisioning
|
5
|
+
module AWSDriver
|
6
|
+
class SuperLWRP < Chef::Resource::LWRPBase
|
7
|
+
#
|
8
|
+
# Add the :lazy_default and :coerce validation_opts to `attribute`
|
9
|
+
#
|
10
|
+
def self.attribute(attr_name, validation_opts={})
|
11
|
+
lazy_default = validation_opts.delete(:lazy_default)
|
12
|
+
coerce = validation_opts.delete(:coerce)
|
13
|
+
if lazy_default || coerce
|
14
|
+
define_method(attr_name) do |arg=nil|
|
15
|
+
arg = instance_exec(arg, &coerce) if coerce && !arg.nil?
|
16
|
+
|
17
|
+
result = set_or_return(attr_name.to_sym, arg, validation_opts)
|
18
|
+
|
19
|
+
if result.nil? && arg.nil?
|
20
|
+
result = instance_eval(&lazy_default) if lazy_default
|
21
|
+
end
|
22
|
+
|
23
|
+
result
|
24
|
+
end
|
25
|
+
define_method(:"#{attr_name}=") do |arg|
|
26
|
+
if arg.nil?
|
27
|
+
remove_instance_variable(:"@#{arg}")
|
28
|
+
else
|
29
|
+
set_or_return(attr_name.to_sym, arg, validation_opts)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
else
|
33
|
+
super
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# FUUUUUU cloning
|
38
|
+
def load_prior_resource(*args)
|
39
|
+
Chef::Log.debug "Overloading #{self.resource_name} load_prior_resource with NOOP"
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -1,17 +1,19 @@
|
|
1
|
-
require 'chef/
|
2
|
-
require 'chef/provisioning/aws_driver'
|
1
|
+
require 'chef/provisioning/aws_driver/aws_resource'
|
3
2
|
|
4
|
-
class Chef::Resource::AwsAutoScalingGroup < Chef::
|
5
|
-
|
6
|
-
self.databag_name = 'auto_scaling_groups'
|
3
|
+
class Chef::Resource::AwsAutoScalingGroup < Chef::Provisioning::AWSDriver::AWSResource
|
4
|
+
aws_sdk_type AWS::AutoScaling::Group
|
7
5
|
|
8
|
-
|
9
|
-
|
6
|
+
attribute :name, kind_of: String, name_attribute: true
|
7
|
+
attribute :options, kind_of: Hash, default: {}
|
8
|
+
attribute :availability_zones, kind_of: Array
|
9
|
+
attribute :desired_capacity, kind_of: Integer
|
10
|
+
attribute :launch_configuration, kind_of: String
|
11
|
+
attribute :min_size, kind_of: Integer
|
12
|
+
attribute :max_size, kind_of: Integer
|
13
|
+
attribute :load_balancers, kind_of: Array, coerce: proc { |value| [value].flatten }
|
10
14
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
attribute :max_size, :kind_of => Integer, :default => 4
|
16
|
-
attribute :load_balancers, :kind_of => Array
|
15
|
+
def aws_object
|
16
|
+
result = driver.auto_scaling.groups[name]
|
17
|
+
result && result.exists? ? result : nil
|
18
|
+
end
|
17
19
|
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'chef/provisioning/aws_driver/aws_resource_with_entry'
|
2
|
+
|
3
|
+
#
|
4
|
+
# DHCP options for use by VPCs.
|
5
|
+
#
|
6
|
+
# If you specify nothing, the DHCP options set will use 'AmazonProvidedDNS' for its
|
7
|
+
# domain name servers and all other values will be empty.
|
8
|
+
#
|
9
|
+
# API documentation for the AWS Ruby SDK for DHCP Options (and the object returned from `aws_object` can be found here:
|
10
|
+
#
|
11
|
+
# - http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html
|
12
|
+
#
|
13
|
+
class Chef::Resource::AwsDhcpOptions < Chef::Provisioning::AWSDriver::AWSResourceWithEntry
|
14
|
+
aws_sdk_type AWS::EC2::DHCPOptions
|
15
|
+
|
16
|
+
#
|
17
|
+
# The Chef "idempotence name" of this DHCP options set.
|
18
|
+
#
|
19
|
+
attribute :name, kind_of: String, name_attribute: true
|
20
|
+
|
21
|
+
#
|
22
|
+
# A domain name of your choice (e.g., example.com).
|
23
|
+
#
|
24
|
+
attribute :domain_name, kind_of: String
|
25
|
+
|
26
|
+
#
|
27
|
+
# The IP addresses of domain name servers. You can specify up to four addresses.
|
28
|
+
#
|
29
|
+
# Defaults to "AmazonProvidedDNS"
|
30
|
+
#
|
31
|
+
attribute :domain_name_servers, kind_of: Array, coerce: proc { |v| Array[v].flatten }
|
32
|
+
|
33
|
+
#
|
34
|
+
# The IP addresses of Network Time Protocol (NTP) servers. You can specify up to four addresses.
|
35
|
+
#
|
36
|
+
attribute :ntp_servers, kind_of: Array, coerce: proc { |v| Array[v].flatten }
|
37
|
+
|
38
|
+
#
|
39
|
+
# The IP addresses of NetBIOS name servers. You can specify up to four addresses.
|
40
|
+
#
|
41
|
+
attribute :netbios_name_servers, kind_of: Array, coerce: proc { |v| Array[v].flatten }
|
42
|
+
|
43
|
+
#
|
44
|
+
# Value indicating the NetBIOS node type (1, 2, 4, or 8). For more information about the values, go to RFC 2132. We recommend you only use 2 at this time (broadcast and multicast are currently not supported).
|
45
|
+
#
|
46
|
+
attribute :netbios_node_type, kind_of: Integer
|
47
|
+
|
48
|
+
attribute :dhcp_options_id, kind_of: String, aws_id_attribute: true, lazy_default: proc {
|
49
|
+
name =~ /^dopt-[a-f0-9]{8}$/ ? name : nil
|
50
|
+
}
|
51
|
+
|
52
|
+
def aws_object
|
53
|
+
driver, id = get_driver_and_id
|
54
|
+
result = driver.ec2.dhcp_options[id] if id
|
55
|
+
result && result.exists? ? result : nil
|
56
|
+
end
|
57
|
+
end
|
@@ -1,31 +1,29 @@
|
|
1
|
-
require 'chef/
|
2
|
-
require 'chef/
|
1
|
+
require 'chef/provisioning/aws_driver/aws_resource_with_entry'
|
2
|
+
require 'chef/resource/aws_instance'
|
3
3
|
|
4
|
-
class Chef::Resource::AwsEbsVolume < Chef::
|
5
|
-
|
6
|
-
self.databag_name = 'ebs_volumes'
|
4
|
+
class Chef::Resource::AwsEbsVolume < Chef::Provisioning::AWSDriver::AWSResourceWithEntry
|
5
|
+
aws_sdk_type AWS::EC2::Volume, backcompat_data_bag_name: 'ebs_volumes'
|
7
6
|
|
8
|
-
|
9
|
-
default_action :create
|
7
|
+
attribute :name, kind_of: String, name_attribute: true
|
10
8
|
|
11
|
-
|
12
|
-
stored_attribute :created_at
|
9
|
+
attribute :machine, kind_of: [ String, FalseClass, AwsInstance, AWS::EC2::Instance ]
|
13
10
|
|
14
|
-
attribute :
|
15
|
-
attribute :
|
11
|
+
attribute :availability_zone, kind_of: String
|
12
|
+
attribute :size, kind_of: Integer
|
13
|
+
attribute :snapshot, kind_of: String
|
16
14
|
|
17
|
-
attribute :
|
18
|
-
attribute :
|
19
|
-
attribute :
|
15
|
+
attribute :iops, kind_of: Integer
|
16
|
+
attribute :volume_type, kind_of: String
|
17
|
+
attribute :encrypted, kind_of: [ TrueClass, FalseClass ]
|
18
|
+
attribute :device, kind_of: String
|
20
19
|
|
20
|
+
attribute :volume_id, kind_of: String, aws_id_attribute: true, lazy_default: proc {
|
21
|
+
name =~ /^vol-[a-f0-9]{8}$/ ? name : nil
|
22
|
+
}
|
21
23
|
|
22
|
-
def
|
23
|
-
|
24
|
+
def aws_object
|
25
|
+
driver, id = get_driver_and_id
|
26
|
+
result = driver.ec2.volumes[id] if id
|
27
|
+
result && result.exists? && ![:deleted, :deleting].include?(result.status) ? result : nil
|
24
28
|
end
|
25
|
-
|
26
|
-
def after_created
|
27
|
-
super
|
28
|
-
end
|
29
|
-
|
30
|
-
|
31
29
|
end
|
@@ -1,29 +1,54 @@
|
|
1
|
-
require 'chef/
|
2
|
-
require '
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
1
|
+
require 'chef/provisioning/aws_driver/aws_resource_with_entry'
|
2
|
+
require 'ipaddr'
|
3
|
+
|
4
|
+
class Chef::Resource::AwsEipAddress < Chef::Provisioning::AWSDriver::AWSResourceWithEntry
|
5
|
+
aws_sdk_type AWS::EC2::ElasticIp, option_names: [ :public_ip ], id: :public_ip, managed_entry_id_name: 'public_ip', backcompat_data_bag_name: 'eip_addresses'
|
6
|
+
|
7
|
+
attribute :name, kind_of: String, name_attribute: true
|
8
|
+
|
9
|
+
# TODO network interface
|
10
|
+
attribute :machine, kind_of: [String, FalseClass]
|
11
|
+
attribute :associate_to_vpc, kind_of: [TrueClass, FalseClass]
|
12
|
+
|
13
|
+
#
|
14
|
+
# Desired public IP address to associate with this Chef resource.
|
15
|
+
#
|
16
|
+
# Defaults to 'name' if name is an IP address.
|
17
|
+
#
|
18
|
+
# If the IP address is already allocated to your account, Chef will ensure it is
|
19
|
+
# linked to the current . Thus, this is a way to associate an existing AWS IP
|
20
|
+
# with Chef:
|
21
|
+
#
|
22
|
+
# ```ruby
|
23
|
+
# aws_eip_address 'frontend_ip' do
|
24
|
+
# public_ip '205.32.21.0'
|
25
|
+
# end
|
26
|
+
# ```
|
27
|
+
#
|
28
|
+
attribute :public_ip, kind_of: String, aws_id_attribute: true, coerce: proc { |v| IPAddr.new(v); v },
|
29
|
+
lazy_default: proc {
|
30
|
+
begin
|
31
|
+
IPAddr.new(name)
|
32
|
+
name
|
33
|
+
rescue
|
34
|
+
end
|
35
|
+
}
|
36
|
+
|
37
|
+
def aws_object
|
38
|
+
driver, public_ip = get_driver_and_id
|
39
|
+
result = driver.ec2.elastic_ips[public_ip] if public_ip
|
40
|
+
result && result.exists? ? result : nil
|
22
41
|
end
|
23
42
|
|
24
|
-
def
|
25
|
-
|
43
|
+
def action(*args)
|
44
|
+
# Backcompat for associate and disassociate
|
45
|
+
if args == [ :associate ]
|
46
|
+
super(:create)
|
47
|
+
elsif args == [ :disassociate ]
|
48
|
+
machine false
|
49
|
+
super(:create)
|
50
|
+
else
|
51
|
+
super
|
52
|
+
end
|
26
53
|
end
|
27
|
-
|
28
|
-
|
29
54
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'chef/provisioning/aws_driver/aws_resource_with_entry'
|
2
|
+
|
3
|
+
class Chef::Resource::AwsImage < Chef::Provisioning::AWSDriver::AWSResourceWithEntry
|
4
|
+
aws_sdk_type AWS::EC2::Image,
|
5
|
+
managed_entry_type: :machine_image,
|
6
|
+
managed_entry_id_name: 'image_id',
|
7
|
+
load_provider: false
|
8
|
+
|
9
|
+
attribute :name, kind_of: String, name_attribute: true
|
10
|
+
|
11
|
+
attribute :image_id, kind_of: String, aws_id_attribute: true, lazy_default: proc {
|
12
|
+
name =~ /^ami-[a-f0-9]{8}$/ ? name : nil
|
13
|
+
}
|
14
|
+
|
15
|
+
def aws_object
|
16
|
+
driver, id = get_driver_and_id
|
17
|
+
result = driver.ec2.images[id] if id
|
18
|
+
result && result.exists? ? result : nil
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'chef/provisioning/aws_driver/aws_resource_with_entry'
|
2
|
+
|
3
|
+
class Chef::Resource::AwsInstance < Chef::Provisioning::AWSDriver::AWSResourceWithEntry
|
4
|
+
aws_sdk_type AWS::EC2::Instance,
|
5
|
+
managed_entry_type: :machine,
|
6
|
+
managed_entry_id_name: 'instance_id',
|
7
|
+
load_provider: false
|
8
|
+
|
9
|
+
attribute :name, kind_of: String, name_attribute: true
|
10
|
+
|
11
|
+
attribute :instance_id, kind_of: String, aws_id_attribute: true, lazy_default: proc {
|
12
|
+
name =~ /^i-[a-f0-9]{8}$/ ? name : nil
|
13
|
+
}
|
14
|
+
|
15
|
+
def aws_object
|
16
|
+
driver, id = get_driver_and_id
|
17
|
+
result = driver.ec2.instances[id] if id
|
18
|
+
result && result.exists? ? result : nil
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'chef/provisioning/aws_driver/aws_resource'
|
2
|
+
|
3
|
+
class Chef::Resource::AwsInternetGateway < Chef::Provisioning::AWSDriver::AWSResource
|
4
|
+
aws_sdk_type AWS::EC2::InternetGateway, load_provider: false, id: :id
|
5
|
+
|
6
|
+
attribute :name, kind_of: String, name_attribute: true
|
7
|
+
|
8
|
+
attribute :internet_gateway_id, kind_of: String, aws_id_attribute: true, lazy_default: proc {
|
9
|
+
name =~ /^igw-[a-f0-9]{8}$/ ? name : nil
|
10
|
+
}
|
11
|
+
|
12
|
+
def aws_object
|
13
|
+
result = driver.ec2.internet_gateways[internet_gateway_id]
|
14
|
+
result && result.exists? ? result : nil
|
15
|
+
end
|
16
|
+
end
|
@@ -1,11 +1,7 @@
|
|
1
|
-
require 'chef/provisioning'
|
2
|
-
require 'chef/resource/aws_resource'
|
1
|
+
require 'chef/provisioning/aws_driver/aws_resource'
|
3
2
|
|
4
|
-
class Chef::Resource::AwsKeyPair < Chef::
|
5
|
-
|
6
|
-
|
7
|
-
actions :create, :delete, :nothing
|
8
|
-
default_action :create
|
3
|
+
class Chef::Resource::AwsKeyPair < Chef::Provisioning::AWSDriver::AWSResource
|
4
|
+
aws_sdk_type AWS::EC2::KeyPair, id: :name
|
9
5
|
|
10
6
|
# Private key to use as input (will be generated if it does not exist)
|
11
7
|
attribute :private_key_path, :kind_of => String
|
@@ -17,8 +13,8 @@ class Chef::Resource::AwsKeyPair < Chef::Resource::AwsResource
|
|
17
13
|
# TODO what is the right default for this?
|
18
14
|
attribute :allow_overwrite, :kind_of => [TrueClass, FalseClass], :default => false
|
19
15
|
|
20
|
-
|
21
|
-
|
22
|
-
|
16
|
+
def aws_object
|
17
|
+
result = driver.ec2.key_pairs[name]
|
18
|
+
result && result.exists? ? result : nil
|
23
19
|
end
|
24
20
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'chef/provisioning/aws_driver/aws_resource'
|
2
|
+
|
3
|
+
class Chef::Resource::AwsLaunchConfiguration < Chef::Provisioning::AWSDriver::AWSResource
|
4
|
+
aws_sdk_type AWS::AutoScaling::LaunchConfiguration, id: :name
|
5
|
+
|
6
|
+
attribute :name, kind_of: String, name_attribute: true
|
7
|
+
attribute :image, kind_of: [ String, AWS::EC2::Image ]
|
8
|
+
attribute :instance_type, kind_of: String
|
9
|
+
attribute :options, kind_of: Hash, default: {}
|
10
|
+
|
11
|
+
def aws_object
|
12
|
+
result = driver.auto_scaling.launch_configurations[name]
|
13
|
+
result && result.exists? ? result : nil
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'chef/provisioning/aws_driver/aws_resource'
|
2
|
+
|
3
|
+
class Chef::Resource::AwsLoadBalancer < Chef::Provisioning::AWSDriver::AWSResource
|
4
|
+
aws_sdk_type AWS::ELB::LoadBalancer, load_provider: false
|
5
|
+
|
6
|
+
attribute :name, kind_of: String, name_attribute: true
|
7
|
+
|
8
|
+
attribute :load_balancer_id, kind_of: String, aws_id_attribute: true, lazy_default: proc {
|
9
|
+
name =~ /^elb-[a-f0-9]{8}$/ ? name : nil
|
10
|
+
}
|
11
|
+
|
12
|
+
def aws_object
|
13
|
+
result = driver.elb.load_balancers[name]
|
14
|
+
result && result.exists? ? result : nil
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'chef/provisioning/aws_driver/aws_resource'
|
2
|
+
|
3
|
+
class Chef::Resource::AwsNetworkInterface < Chef::Provisioning::AWSDriver::AWSResource
|
4
|
+
aws_sdk_type AWS::EC2::NetworkInterface, load_provider: false, id: :id
|
5
|
+
|
6
|
+
attribute :name, kind_of: String, name_attribute: true
|
7
|
+
|
8
|
+
attribute :network_interface_id, kind_of: String, aws_id_attribute: true, lazy_default: proc {
|
9
|
+
name =~ /^eni-[a-f0-9]{8}$/ ? name : nil
|
10
|
+
}
|
11
|
+
|
12
|
+
def aws_object
|
13
|
+
result = driver.ec2.network_interfaces[network_interface_id]
|
14
|
+
result && result.exists? ? result : nil
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'chef/provisioning/aws_driver/aws_resource_with_entry'
|
2
|
+
|
3
|
+
#
|
4
|
+
# An AWS route table, specifying where to route traffic destined for particular
|
5
|
+
# sets of IPs.
|
6
|
+
#
|
7
|
+
# `name` is not guaranteed unique for an AWS account; therefore, Chef will
|
8
|
+
# store the route table ID associated with this name in your Chef server in the
|
9
|
+
# data bag `data/aws_route_Table/<name>`.
|
10
|
+
#
|
11
|
+
# API documentation for the AWS Ruby SDK for VPCs (and the object returned from `aws_object` can be found here:
|
12
|
+
#
|
13
|
+
# - http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/EC2/RouteTable.html
|
14
|
+
#
|
15
|
+
class Chef::Resource::AwsRouteTable < Chef::Provisioning::AWSDriver::AWSResourceWithEntry
|
16
|
+
aws_sdk_type AWS::EC2::RouteTable
|
17
|
+
|
18
|
+
require 'chef/resource/aws_vpc'
|
19
|
+
|
20
|
+
#
|
21
|
+
# The name of this route table.
|
22
|
+
#
|
23
|
+
attribute :name, kind_of: String, name_attribute: true
|
24
|
+
|
25
|
+
#
|
26
|
+
# The VPC of this route table.
|
27
|
+
#
|
28
|
+
# May be one of:
|
29
|
+
# - The name of an `aws_vpc` Chef resource.
|
30
|
+
# - An actual `aws_vpc` resource.
|
31
|
+
# - An AWS `VPC` object.
|
32
|
+
#
|
33
|
+
# This is required for new route tables.
|
34
|
+
#
|
35
|
+
attribute :vpc, kind_of: [ String, AwsVpc, AWS::EC2::VPC ], required: true
|
36
|
+
|
37
|
+
#
|
38
|
+
# The routes for this route table.
|
39
|
+
#
|
40
|
+
# If specified, this must be a complete specification of all routes: it will
|
41
|
+
# add any new routes and remove any old ones.
|
42
|
+
#
|
43
|
+
# This is in the form of a Hash, like so:
|
44
|
+
#
|
45
|
+
# ```ruby
|
46
|
+
# main_routes '10.0.0.0/8' => 'internal_vpn',
|
47
|
+
# '0.0.0.0/0' => :internet_gateway
|
48
|
+
# ```
|
49
|
+
#
|
50
|
+
# The destination (the left side of the `=>`) is always a CIDR block.
|
51
|
+
# The target (the right side of the `=>`) can be one of several things:
|
52
|
+
# - { internet_gateway: <AWS Internet Gateway ID or object> }
|
53
|
+
# - { instance: <Chef machine name or resource, AWS Instance ID or object> }
|
54
|
+
# - { network_interface: <AWS Network Interface ID or object> }
|
55
|
+
# - <AWS Internet Gateway, Instance or Network Interface <ID or object)>
|
56
|
+
# - Chef machine name
|
57
|
+
# - Chef machine resource
|
58
|
+
#
|
59
|
+
attribute :routes, kind_of: Hash
|
60
|
+
|
61
|
+
attribute :route_table_id, kind_of: String, aws_id_attribute: true, lazy_default: proc {
|
62
|
+
name =~ /^rtb-[a-f0-9]{8}$/ ? name : nil
|
63
|
+
}
|
64
|
+
|
65
|
+
def aws_object
|
66
|
+
driver, id = get_driver_and_id
|
67
|
+
result = driver.ec2.route_tables[id] if id
|
68
|
+
begin
|
69
|
+
# try accessing it to find out if it exists
|
70
|
+
result.vpc if result
|
71
|
+
rescue AWS::EC2::Errors::InvalidRouteTableID::NotFound
|
72
|
+
result = nil
|
73
|
+
end
|
74
|
+
result
|
75
|
+
end
|
76
|
+
end
|