cf_factory 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/examples/base_vpc.rb +40 -0
- data/examples/cloudinit_script_for_one_instance.rb +77 -0
- data/examples/cloudinit_script_with_autoscaling.rb +85 -0
- data/examples/elb_with_cloudfront.rb +101 -0
- data/examples/instance_with_eip.rb +38 -0
- data/examples/instance_with_yum.rb +38 -0
- data/examples/just_an_instance.rb +29 -0
- data/examples/play_with_region_and_zones.rb +26 -0
- data/examples/ra_web_hosting.rb +146 -0
- data/examples/s3_with_cloudfront.rb +36 -0
- data/examples/test_vpc.rb +53 -0
- data/lib/cf_factory/as/cf_as_group.rb +75 -0
- data/lib/cf_factory/as/cf_as_launch_config.rb +53 -0
- data/lib/cf_factory/as/cf_as_scaling_policy.rb +33 -0
- data/lib/cf_factory/base/cf_base.rb +97 -0
- data/lib/cf_factory/base/cf_ec2_tag.rb +32 -0
- data/lib/cf_factory/base/cf_generator.rb +18 -0
- data/lib/cf_factory/base/cf_helper.rb +91 -0
- data/lib/cf_factory/base/cf_inner.rb +55 -0
- data/lib/cf_factory/base/cf_main.rb +101 -0
- data/lib/cf_factory/base/cf_mapping.rb +26 -0
- data/lib/cf_factory/base/cf_named_inner.rb +0 -0
- data/lib/cf_factory/base/cf_output.rb +24 -0
- data/lib/cf_factory/base/cf_parameter.rb +25 -0
- data/lib/cf_factory/base/cf_script_reader.rb +32 -0
- data/lib/cf_factory/cloudformation/cf_cloud_formation_init.rb +25 -0
- data/lib/cf_factory/cloudformation/cf_cloudformation_command.rb +37 -0
- data/lib/cf_factory/cloudformation/cf_cloudformation_commands.rb +25 -0
- data/lib/cf_factory/cloudformation/cf_cloudformation_config.rb +33 -0
- data/lib/cf_factory/cloudformation/cf_cloudformation_file.rb +38 -0
- data/lib/cf_factory/cloudformation/cf_cloudformation_files.rb +25 -0
- data/lib/cf_factory/cloudformation/cf_cloudformation_inner.rb +28 -0
- data/lib/cf_factory/cloudformation/cf_cloudformation_package.rb +34 -0
- data/lib/cf_factory/cloudformation/cf_cloudformation_packages.rb +42 -0
- data/lib/cf_factory/cloudformation/cf_cloudformation_sources.rb +30 -0
- data/lib/cf_factory/cloudformation/cf_init_script.rb +73 -0
- data/lib/cf_factory/cloudfront/cf_cache_behavior.rb +37 -0
- data/lib/cf_factory/cloudfront/cf_cache_behaviors.rb +28 -0
- data/lib/cf_factory/cloudfront/cf_cloudfront_distribution.rb +64 -0
- data/lib/cf_factory/cloudfront/cf_custom_origin_config.rb +37 -0
- data/lib/cf_factory/cloudfront/cf_default_cache_behavior.rb +32 -0
- data/lib/cf_factory/cloudfront/cf_distribution_config.rb +31 -0
- data/lib/cf_factory/cloudfront/cf_forwarded_values.rb +25 -0
- data/lib/cf_factory/cloudfront/cf_logging.rb +24 -0
- data/lib/cf_factory/cloudfront/cf_origin.rb +40 -0
- data/lib/cf_factory/cloudfront/cf_s3_origin_config.rb +25 -0
- data/lib/cf_factory/cloudwatch/cf_cloud_watch_alarm.rb +58 -0
- data/lib/cf_factory/ec2/cf_ebs_volume.rb +54 -0
- data/lib/cf_factory/ec2/cf_ec2_instance.rb +62 -0
- data/lib/cf_factory/ec2/cf_ec2_security_group.rb +40 -0
- data/lib/cf_factory/ec2/cf_ec2_security_group_egress.rb +28 -0
- data/lib/cf_factory/ec2/cf_ec2_security_group_ingress.rb +39 -0
- data/lib/cf_factory/ec2/cf_eip.rb +26 -0
- data/lib/cf_factory/ec2/cf_eip_association.rb +29 -0
- data/lib/cf_factory/elb/cf_app_cookie_stickiness_policy.rb +15 -0
- data/lib/cf_factory/elb/cf_elb.rb +49 -0
- data/lib/cf_factory/elb/cf_health_check.rb +23 -0
- data/lib/cf_factory/elb/cf_lb_cookie_stickiness_policy.rb +15 -0
- data/lib/cf_factory/elb/cf_listener.rb +26 -0
- data/lib/cf_factory/help/fixes.rb +14 -0
- data/lib/cf_factory/help/ip_mask.rb +165 -0
- data/lib/cf_factory/help/template_validation.rb +28 -0
- data/lib/cf_factory/iam/cf_iam_access_key.rb +32 -0
- data/lib/cf_factory/iam/cf_iam_group.rb +30 -0
- data/lib/cf_factory/iam/cf_iam_instance_profile.rb +30 -0
- data/lib/cf_factory/iam/cf_iam_policy.rb +18 -0
- data/lib/cf_factory/iam/cf_iam_role.rb +56 -0
- data/lib/cf_factory/iam/cf_iam_statement.rb +23 -0
- data/lib/cf_factory/iam/cf_iam_user.rb +34 -0
- data/lib/cf_factory/iam/cf_policy_document.rb +19 -0
- data/lib/cf_factory/modules/base_vpc.rb +61 -0
- data/lib/cf_factory/rds/cf_rds_instance.rb +53 -0
- data/lib/cf_factory/rds/cf_rds_security_group.rb +33 -0
- data/lib/cf_factory/rds/cf_rds_security_group_ingress.rb +29 -0
- data/lib/cf_factory/rds/cf_rds_subnet_group.rb +29 -0
- data/lib/cf_factory/route53/cf_elb_alias_target.rb +21 -0
- data/lib/cf_factory/route53/cf_record_set.rb +61 -0
- data/lib/cf_factory/route53/cf_route53_record_set.rb +61 -0
- data/lib/cf_factory/route53/cf_route53_record_set_group.rb +42 -0
- data/lib/cf_factory/s3/cf_s3_bucket.rb +32 -0
- data/lib/cf_factory/s3/cf_web_site_config.rb +24 -0
- data/lib/cf_factory/sqs/cf_sqs_queue.rb +26 -0
- data/lib/cf_factory/vpc/cf_attach_gateway.rb +28 -0
- data/lib/cf_factory/vpc/cf_internet_gateway.rb +30 -0
- data/lib/cf_factory/vpc/cf_network_acl.rb +39 -0
- data/lib/cf_factory/vpc/cf_network_acl_association.rb +24 -0
- data/lib/cf_factory/vpc/cf_network_acl_entry.rb +37 -0
- data/lib/cf_factory/vpc/cf_route.rb +43 -0
- data/lib/cf_factory/vpc/cf_route_table.rb +41 -0
- data/lib/cf_factory/vpc/cf_route_table_association.rb +24 -0
- data/lib/cf_factory/vpc/cf_subnet.rb +48 -0
- data/lib/cf_factory/vpc/cf_vpc.rb +64 -0
- data/lib/cf_factory.rb +103 -0
- metadata +140 -0
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
2
|
+
class CfRecordSet
|
3
|
+
include CfInner
|
4
|
+
|
5
|
+
def initialize(name, record_name, record_type, options)
|
6
|
+
@name = name
|
7
|
+
@record_name = record_name
|
8
|
+
@record_type = record_type
|
9
|
+
|
10
|
+
@comment = options[:comment]
|
11
|
+
@region = options[:region]
|
12
|
+
@hosted_zone_id = options[:hosted_zone_id]
|
13
|
+
@hosted_zone_name = options[:hosted_zone_name]
|
14
|
+
@region = options[:region]
|
15
|
+
@ttl = options[:ttl]
|
16
|
+
@resource_records = options[:resource_records]
|
17
|
+
@weight = options[:weight]
|
18
|
+
@set_identifier = options[:set_identifier]
|
19
|
+
@alias_target = options[:alias_target]
|
20
|
+
validate()
|
21
|
+
end
|
22
|
+
|
23
|
+
def get_cf_type
|
24
|
+
"AWS::Route53::RecordSet"
|
25
|
+
end
|
26
|
+
|
27
|
+
def get_cf_attributes
|
28
|
+
{}
|
29
|
+
end
|
30
|
+
|
31
|
+
def get_cf_properties
|
32
|
+
result = {}
|
33
|
+
result["Name"] = @record_name
|
34
|
+
result["Type"] = @record_type
|
35
|
+
result["Comment"] = @comment unless @comment.nil?
|
36
|
+
result["HostedZoneId"] = @hosted_zone_id unless @hosted_zone_id.nil?
|
37
|
+
result["HostedZoneName"] = @hosted_zone_name unless @hosted_zone_name.nil?
|
38
|
+
result["Region"] = @region unless @region.nil?
|
39
|
+
result["TTL"] = @ttl unless @ttl.nil?
|
40
|
+
result["Weight"] = @weight unless @weight.nil?
|
41
|
+
result["SetIdentifier"] = @set_identifier unless @set_identifier.nil?
|
42
|
+
result["ResourceRecords"] = @resource_records.inspect unless @resource_records.nil?
|
43
|
+
result["AliasTarget"] = @alias_target.generate unless @alias_target.nil?
|
44
|
+
result
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def validate
|
50
|
+
if @hosted_zone_id.nil? && @hosted_zone_name.nil?
|
51
|
+
raise Exception.new("either :hosted_zone_id or :hosted_zone_name must be specified")
|
52
|
+
end
|
53
|
+
if !@ttl.nil? && @resource_records.nil?
|
54
|
+
raise Exception.new("when :ttl specified, :resource_records must also be specified (and vice versa)")
|
55
|
+
end
|
56
|
+
if !@weight.nil? && @set_identifier.nil?
|
57
|
+
raise Exception.new("when :weight specified, :set_identifier must also be specified (and vice versa)")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
2
|
+
class CfRoute53RecordSet
|
3
|
+
include CfBase
|
4
|
+
|
5
|
+
def initialize(name, record_name, record_type, options)
|
6
|
+
@name = name
|
7
|
+
@record_name = record_name
|
8
|
+
@record_type = record_type
|
9
|
+
|
10
|
+
@comment = options[:comment]
|
11
|
+
@region = options[:region]
|
12
|
+
@hosted_zone_id = options[:hosted_zone_id]
|
13
|
+
@hosted_zone_name = options[:hosted_zone_name]
|
14
|
+
@region = options[:region]
|
15
|
+
@ttl = options[:ttl]
|
16
|
+
@resource_records = options[:resource_records]
|
17
|
+
@weight = options[:weight]
|
18
|
+
@set_identifier = options[:set_identifier]
|
19
|
+
@alias_target = options[:alias_target]
|
20
|
+
validate()
|
21
|
+
end
|
22
|
+
|
23
|
+
def get_cf_type
|
24
|
+
"AWS::Route53::RecordSet"
|
25
|
+
end
|
26
|
+
|
27
|
+
def get_cf_attributes
|
28
|
+
{}
|
29
|
+
end
|
30
|
+
|
31
|
+
def get_cf_properties
|
32
|
+
result = {}
|
33
|
+
result["Name"] = @record_name
|
34
|
+
result["Type"] = @record_type
|
35
|
+
result["Comment"] = @comment unless @comment.nil?
|
36
|
+
result["HostedZoneId"] = @hosted_zone_id unless @hosted_zone_id.nil?
|
37
|
+
result["HostedZoneName"] = @hosted_zone_name unless @hosted_zone_name.nil?
|
38
|
+
result["Region"] = @region unless @region.nil?
|
39
|
+
result["TTL"] = @ttl unless @ttl.nil?
|
40
|
+
result["Weight"] = @weight unless @weight.nil?
|
41
|
+
result["SetIdentifier"] = @set_identifier unless @set_identifier.nil?
|
42
|
+
result["ResourceRecords"] = CfHelper.print_array(@resource_records) unless @resource_records.nil?
|
43
|
+
result["AliasTarget"] = @alias_target.generate unless @alias_target.nil?
|
44
|
+
result
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def validate
|
50
|
+
if @hosted_zone_id.nil? && @hosted_zone_name.nil?
|
51
|
+
raise Exception.new("either :hosted_zone_id or :hosted_zone_name must be specified")
|
52
|
+
end
|
53
|
+
if !@ttl.nil? && @resource_records.nil?
|
54
|
+
raise Exception.new("when :ttl specified, :resource_records must also be specified (and vice versa)")
|
55
|
+
end
|
56
|
+
if !@weight.nil? && @set_identifier.nil?
|
57
|
+
raise Exception.new("when :weight specified, :set_identifier must also be specified (and vice versa)")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
#not yet working
|
2
|
+
|
3
|
+
require 'cf_factory/base/cf_base'
|
4
|
+
class CfRoute53RecordSetGroup
|
5
|
+
include CfBase
|
6
|
+
|
7
|
+
def initialize(name, record_sets, options)
|
8
|
+
raise Exception.new("don't use for now")
|
9
|
+
@name = name
|
10
|
+
@record_sets = record_sets
|
11
|
+
@hosted_zone_id = options[:hosted_zone_id]
|
12
|
+
@hosted_zone_name = options[:hosted_zone_name]
|
13
|
+
@comment = options[:comment]
|
14
|
+
validate()
|
15
|
+
end
|
16
|
+
|
17
|
+
def get_cf_type
|
18
|
+
"AWS::Route53::RecordSetGroup"
|
19
|
+
end
|
20
|
+
|
21
|
+
def get_cf_attributes
|
22
|
+
{}
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_cf_properties
|
26
|
+
result = {}
|
27
|
+
result["RecordSets"] = CfHelper.generate_inner_array(@record_sets)
|
28
|
+
result["Comment"] = @comment unless @comment.nil?
|
29
|
+
result["HostedZoneId"] = @hosted_zone_id unless @hosted_zone_id.nil?
|
30
|
+
result["HostedZoneName"] = @hosted_zone_name unless @hosted_zone_name.nil?
|
31
|
+
result
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def validate
|
37
|
+
if @hosted_zone_id.nil? && @hosted_zone_name.nil?
|
38
|
+
raise Exception.new("either :hosted_zone_id or :hosted_zone_name must be specified")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
2
|
+
class CfS3Bucket
|
3
|
+
include CfBase
|
4
|
+
|
5
|
+
def initialize(name, options = {})
|
6
|
+
@name = name
|
7
|
+
@access_control = options[:access_control]
|
8
|
+
end
|
9
|
+
|
10
|
+
def set_deletion_policy(deletion_policy)
|
11
|
+
@deletion_policy = deletion_policy
|
12
|
+
end
|
13
|
+
|
14
|
+
def get_cf_type
|
15
|
+
"AWS::S3::Bucket"
|
16
|
+
end
|
17
|
+
|
18
|
+
def get_cf_attributes
|
19
|
+
result = super
|
20
|
+
end
|
21
|
+
|
22
|
+
def get_cf_properties
|
23
|
+
result = {}
|
24
|
+
result["AccessControl"] = @access_control unless @access_control.nil?
|
25
|
+
result
|
26
|
+
end
|
27
|
+
|
28
|
+
def short_domain_name
|
29
|
+
CfHelper.join([self.generate_ref, ".s3.amazonaws.com"])
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'cf_factory/base/cf_inner'
|
2
|
+
|
3
|
+
class CfWebSiteConfig
|
4
|
+
include CfInner
|
5
|
+
|
6
|
+
attr_reader(:id)
|
7
|
+
|
8
|
+
def additional_indent
|
9
|
+
2
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(index_doc, error_doc)
|
13
|
+
@index_doc = index_doc
|
14
|
+
@error_doc = error_doc
|
15
|
+
end
|
16
|
+
|
17
|
+
def get_cf_attributes
|
18
|
+
result = {}
|
19
|
+
result["IndexDocument"] = @index_doc
|
20
|
+
result["ErrorDocument"] = @error_doc
|
21
|
+
result
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
2
|
+
require 'cf_factory/base/cf_helper'
|
3
|
+
|
4
|
+
class CfSqsQueue
|
5
|
+
include CfBase
|
6
|
+
|
7
|
+
def initialize(name, options = {})
|
8
|
+
@name = name
|
9
|
+
@visibility_timeout = options[:visibility_timeout]
|
10
|
+
end
|
11
|
+
|
12
|
+
def get_cf_type
|
13
|
+
"AWS::SQS::Queue"
|
14
|
+
end
|
15
|
+
|
16
|
+
def get_cf_attributes
|
17
|
+
{}
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_cf_properties
|
21
|
+
result = {}
|
22
|
+
result["VisibilityTimeout"] = @visibility_timeout unless @visibility_timeout.nil?
|
23
|
+
result
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
2
|
+
class CfAttachGateway
|
3
|
+
include CfBase
|
4
|
+
|
5
|
+
def initialize(name, vpc = nil, internet_gateway = nil, vpn_gateway = nil)
|
6
|
+
@name = name
|
7
|
+
@vpc = vpc
|
8
|
+
@internet_gateway = internet_gateway
|
9
|
+
@vpn_gateway = vpn_gateway
|
10
|
+
end
|
11
|
+
|
12
|
+
def get_cf_type
|
13
|
+
"AWS::EC2::VPCGatewayAttachment"
|
14
|
+
end
|
15
|
+
|
16
|
+
def get_cf_attributes
|
17
|
+
{}
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_cf_properties
|
21
|
+
result = {}
|
22
|
+
result["VpcId"] = @vpc.generate_ref
|
23
|
+
result["InternetGatewayId"] = @internet_gateway.generate_ref unless @internet_gateway.nil?
|
24
|
+
result["VpnGatewayId"] = @vpn_gateway.generate_ref unless @vpn_gateway.nil?
|
25
|
+
result
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
2
|
+
require 'cf_factory/vpc/cf_attach_gateway'
|
3
|
+
|
4
|
+
class CfInternetGateway
|
5
|
+
include CfBase
|
6
|
+
|
7
|
+
def initialize(name, vpn)
|
8
|
+
@name = name
|
9
|
+
@vpn = vpn
|
10
|
+
end
|
11
|
+
|
12
|
+
def get_cf_type
|
13
|
+
"AWS::EC2::InternetGateway"
|
14
|
+
end
|
15
|
+
|
16
|
+
def get_cf_attributes
|
17
|
+
{}
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_cf_properties
|
21
|
+
{}
|
22
|
+
end
|
23
|
+
|
24
|
+
def generate
|
25
|
+
result = super
|
26
|
+
result += CfAttachGateway.new("Attach#{@name}", @vpn, self).generate
|
27
|
+
result
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
2
|
+
class CfNetworkAcl
|
3
|
+
include CfBase
|
4
|
+
|
5
|
+
def initialize(name)
|
6
|
+
@name = name
|
7
|
+
@entries = []
|
8
|
+
end
|
9
|
+
|
10
|
+
def add_network_acl_entry(network_acl_entry)
|
11
|
+
network_acl_entry.set_network_acl(self)
|
12
|
+
@entries << network_acl_entry
|
13
|
+
end
|
14
|
+
|
15
|
+
def set_vpc(vpc)
|
16
|
+
@vpc = vpc
|
17
|
+
end
|
18
|
+
|
19
|
+
def get_cf_type
|
20
|
+
"AWS::EC2::NetworkAcl"
|
21
|
+
end
|
22
|
+
|
23
|
+
def get_cf_attributes
|
24
|
+
{}
|
25
|
+
end
|
26
|
+
|
27
|
+
def get_cf_properties
|
28
|
+
{"VpcId" => @vpc.generate_ref}
|
29
|
+
end
|
30
|
+
|
31
|
+
def generate
|
32
|
+
super
|
33
|
+
@entries.each() {|entry|
|
34
|
+
@result += entry.generate
|
35
|
+
}
|
36
|
+
@result
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
2
|
+
|
3
|
+
class CfNetworkAclAssociation
|
4
|
+
include CfBase
|
5
|
+
|
6
|
+
def initialize(name, subnet, network_acl)
|
7
|
+
@name = name
|
8
|
+
@subnet = subnet
|
9
|
+
@network_acl = network_acl
|
10
|
+
end
|
11
|
+
|
12
|
+
def get_cf_type
|
13
|
+
"AWS::EC2::SubnetNetworkAclAssociation"
|
14
|
+
end
|
15
|
+
|
16
|
+
def get_cf_attributes
|
17
|
+
{}
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_cf_properties
|
21
|
+
{"SubnetId" => @subnet.generate_ref, "NetworkAclId" => @network_acl.generate_ref}
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
2
|
+
|
3
|
+
class CfNetworkAclEntry
|
4
|
+
include CfBase
|
5
|
+
|
6
|
+
def initialize(name, rule_number, protocol, rule_action, egress, cidr_block, from_port, to_port)
|
7
|
+
@name = name
|
8
|
+
@rule_number = rule_number
|
9
|
+
@protocol = protocol
|
10
|
+
@rule_action = rule_action
|
11
|
+
@egress = egress
|
12
|
+
@cidr_block = cidr_block
|
13
|
+
@from_port = from_port
|
14
|
+
@to_port = to_port
|
15
|
+
end
|
16
|
+
|
17
|
+
def set_network_acl(network_acl)
|
18
|
+
@network_acl = network_acl
|
19
|
+
end
|
20
|
+
|
21
|
+
def get_cf_type
|
22
|
+
"AWS::EC2::NetworkAclEntry"
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_cf_attributes
|
26
|
+
{}
|
27
|
+
end
|
28
|
+
|
29
|
+
def get_cf_properties
|
30
|
+
{"NetworkAclId" => @network_acl.generate_ref, "CidrBlock" => @cidr_block,
|
31
|
+
"Protocol" => @protocol.to_i, "RuleNumber" => @rule_number.to_i, "RuleAction" => @rule_action, "Egress" => @egress,
|
32
|
+
"PortRange" => {"From" => @from_port.to_i, "To" => @to_port.to_i }
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
2
|
+
|
3
|
+
class CfRoute
|
4
|
+
include CfBase
|
5
|
+
|
6
|
+
def initialize(name, dest_cidr, gateway = nil, instance = nil, eni = nil)
|
7
|
+
@name = name
|
8
|
+
@dest_cidr = dest_cidr
|
9
|
+
@gateway = gateway
|
10
|
+
@instance = instance
|
11
|
+
@eni = eni
|
12
|
+
end
|
13
|
+
|
14
|
+
def set_route_table(route_table)
|
15
|
+
@route_table = route_table
|
16
|
+
end
|
17
|
+
|
18
|
+
def add_association()
|
19
|
+
end
|
20
|
+
|
21
|
+
def get_cf_type
|
22
|
+
"AWS::EC2::Route"
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_cf_attributes
|
26
|
+
{}
|
27
|
+
end
|
28
|
+
|
29
|
+
def get_cf_properties
|
30
|
+
options = {}
|
31
|
+
unless @gateway.nil?
|
32
|
+
options["GatewayId"] = @gateway.generate_ref
|
33
|
+
end
|
34
|
+
unless @instance.nil?
|
35
|
+
options["InstanceId"] = @instance.generate_ref
|
36
|
+
end
|
37
|
+
unless @eni.nil?
|
38
|
+
options["NetworkInterfaceId"] = @eni.generate_ref
|
39
|
+
end
|
40
|
+
{"RouteTableId" => @route_table.generate_ref, "DestinationCidrBlock" => @dest_cidr}.merge(options)
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
2
|
+
|
3
|
+
class CfRouteTable
|
4
|
+
include CfBase
|
5
|
+
|
6
|
+
def initialize(name)
|
7
|
+
@name = name
|
8
|
+
@vpc = ":::::"
|
9
|
+
@routes = []
|
10
|
+
end
|
11
|
+
|
12
|
+
def add_route(route)
|
13
|
+
route.set_route_table(self)
|
14
|
+
@routes << route
|
15
|
+
end
|
16
|
+
|
17
|
+
def set_vpc(vpc)
|
18
|
+
@vpc = vpc
|
19
|
+
end
|
20
|
+
|
21
|
+
def get_cf_type
|
22
|
+
"AWS::EC2::RouteTable"
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_cf_attributes
|
26
|
+
{}
|
27
|
+
end
|
28
|
+
|
29
|
+
def get_cf_properties
|
30
|
+
{"VpcId" => @vpc.generate_ref}
|
31
|
+
end
|
32
|
+
|
33
|
+
def generate
|
34
|
+
super
|
35
|
+
@routes.each() {|route|
|
36
|
+
@result += route.generate
|
37
|
+
}
|
38
|
+
@result
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
2
|
+
|
3
|
+
class CfRouteTableAssociation
|
4
|
+
include CfBase
|
5
|
+
|
6
|
+
def initialize(name, subnet, route_table)
|
7
|
+
@name = name
|
8
|
+
@subnet = subnet
|
9
|
+
@route_table = route_table
|
10
|
+
end
|
11
|
+
|
12
|
+
def get_cf_type
|
13
|
+
"AWS::EC2::SubnetRouteTableAssociation"
|
14
|
+
end
|
15
|
+
|
16
|
+
def get_cf_attributes
|
17
|
+
{}
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_cf_properties
|
21
|
+
{"SubnetId" => @subnet.generate_ref, "RouteTableId" => @route_table.generate_ref}
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
2
|
+
require 'cf_factory/vpc/cf_route_table_association'
|
3
|
+
require 'cf_factory/vpc/cf_network_acl_association'
|
4
|
+
|
5
|
+
class CfSubnet
|
6
|
+
include CfBase
|
7
|
+
|
8
|
+
def initialize(name, cidr_block, availability_zone, route_table = nil, network_acl = nil)
|
9
|
+
@name = name
|
10
|
+
@vpc = ":::::"
|
11
|
+
@cidr_block = cidr_block
|
12
|
+
@route_table = route_table
|
13
|
+
@network_acl = network_acl
|
14
|
+
@availability_zone = availability_zone
|
15
|
+
end
|
16
|
+
|
17
|
+
def set_vpc(vpc)
|
18
|
+
@vpc = vpc
|
19
|
+
end
|
20
|
+
|
21
|
+
def get_cf_type
|
22
|
+
"AWS::EC2::Subnet"
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_cf_attributes
|
26
|
+
{}
|
27
|
+
end
|
28
|
+
|
29
|
+
def get_cf_properties
|
30
|
+
{"VpcId" => @vpc.generate_ref, "CidrBlock" => @cidr_block, "AvailabilityZone" => @availability_zone}
|
31
|
+
end
|
32
|
+
|
33
|
+
def generate
|
34
|
+
super
|
35
|
+
unless @route_table.nil?
|
36
|
+
name = "#{@name}RouteTableAssociation"
|
37
|
+
rta = CfRouteTableAssociation.new(name, self, @route_table)
|
38
|
+
@result += rta.generate
|
39
|
+
end
|
40
|
+
unless @network_acl.nil?
|
41
|
+
name = "#{@name}NetworkAclAssociation"
|
42
|
+
acl = CfNetworkAclAssociation.new(name, self, @network_acl)
|
43
|
+
@result += acl.generate
|
44
|
+
end
|
45
|
+
@result
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
2
|
+
|
3
|
+
class CfVpc
|
4
|
+
include CfBase
|
5
|
+
|
6
|
+
def initialize(cidr, name = "MyVpc")
|
7
|
+
@cidr = cidr
|
8
|
+
@name = name
|
9
|
+
@subnets = []
|
10
|
+
@igws = []
|
11
|
+
@route_tables = []
|
12
|
+
@network_acls = []
|
13
|
+
end
|
14
|
+
|
15
|
+
def get_cf_type
|
16
|
+
"AWS::EC2::VPC"
|
17
|
+
end
|
18
|
+
|
19
|
+
def get_cf_attributes
|
20
|
+
{}
|
21
|
+
end
|
22
|
+
|
23
|
+
def get_cf_properties
|
24
|
+
{"CidrBlock" => @cidr}
|
25
|
+
end
|
26
|
+
|
27
|
+
def add_subnet(subnet)
|
28
|
+
subnet.set_vpc(self)
|
29
|
+
@subnets << subnet
|
30
|
+
end
|
31
|
+
|
32
|
+
def add_route_table(route_table)
|
33
|
+
route_table.set_vpc(self)
|
34
|
+
@route_tables << route_table
|
35
|
+
end
|
36
|
+
|
37
|
+
def add_internet_gateway(igw)
|
38
|
+
@igws << igw
|
39
|
+
end
|
40
|
+
|
41
|
+
def add_network_acl(network_acl)
|
42
|
+
network_acl.set_vpc(self)
|
43
|
+
@network_acls << network_acl
|
44
|
+
end
|
45
|
+
|
46
|
+
def generate
|
47
|
+
super
|
48
|
+
@igws.each() {|ig|
|
49
|
+
@result += ig.generate
|
50
|
+
}
|
51
|
+
@route_tables.each() {|rt|
|
52
|
+
@result += rt.generate
|
53
|
+
}
|
54
|
+
@network_acls.each() {|acl|
|
55
|
+
@result += acl.generate
|
56
|
+
}
|
57
|
+
@subnets.each() {|sn|
|
58
|
+
@result += sn.generate
|
59
|
+
}
|
60
|
+
#
|
61
|
+
@result
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|