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,32 @@
|
|
1
|
+
# Reads a file, integrates the specified arguments, and generates indented output taken specified parameters into account
|
2
|
+
class CfScriptReader
|
3
|
+
def initialize(file_to_read, indentation = 0)
|
4
|
+
@file = file_to_read
|
5
|
+
@indent = indentation
|
6
|
+
end
|
7
|
+
|
8
|
+
def apply_arguments(*arguments)
|
9
|
+
@arguments = arguments
|
10
|
+
puts @arguments.inspect
|
11
|
+
end
|
12
|
+
|
13
|
+
def generate()
|
14
|
+
contents = File.open(@file, "r") {|f| f.read}
|
15
|
+
count = 1
|
16
|
+
@arguments.each() {|arg|
|
17
|
+
pattern = /<\$#{count}>/
|
18
|
+
puts "pattern = #{pattern.inspect}"
|
19
|
+
contents.gsub!(pattern, arg)
|
20
|
+
count += 1
|
21
|
+
}
|
22
|
+
result = ""
|
23
|
+
contents.each_line do |line|
|
24
|
+
result += "#{' '*@indent}#{line}"
|
25
|
+
end
|
26
|
+
result
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
2
|
+
require 'cf_factory/base/cf_inner'
|
3
|
+
|
4
|
+
class CfCloudFormationInit
|
5
|
+
include CfInner
|
6
|
+
|
7
|
+
#config: key value pair of config-sets
|
8
|
+
def initialize(configs)
|
9
|
+
@configs = configs
|
10
|
+
@name = "AWS::CloudFormation::Init"
|
11
|
+
end
|
12
|
+
|
13
|
+
def get_cf_attributes
|
14
|
+
result = {}
|
15
|
+
@configs.each() {|c|
|
16
|
+
result[c.get_name] = c.generate
|
17
|
+
}
|
18
|
+
result
|
19
|
+
end
|
20
|
+
|
21
|
+
def generate
|
22
|
+
generate_name
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
2
|
+
require 'cf_factory/base/cf_inner'
|
3
|
+
require 'cf_factory/base/cf_helper'
|
4
|
+
|
5
|
+
class CfCloudFormationCommand
|
6
|
+
include CfInner
|
7
|
+
|
8
|
+
def get_name
|
9
|
+
@name
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(name, command, options = {})
|
13
|
+
@name = name
|
14
|
+
@command = command
|
15
|
+
#
|
16
|
+
@env = options[:env]
|
17
|
+
@cwd = options[:cwd]
|
18
|
+
@test = options[:test]
|
19
|
+
@ignore_errors = options[:ignore_errors]
|
20
|
+
@additional_indent = 6
|
21
|
+
end
|
22
|
+
|
23
|
+
def additional_indent
|
24
|
+
@additional_indent += 2
|
25
|
+
end
|
26
|
+
|
27
|
+
def get_cf_attributes
|
28
|
+
result = {}
|
29
|
+
result['command'] = @command
|
30
|
+
result['env'] = @env unless @env.nil?
|
31
|
+
result['cwd'] = @cwd unless @cwd.nil?
|
32
|
+
result['test'] = @test unless @test.nil?
|
33
|
+
result['ignoreErrors'] = @ignore_errors unless @ignore_errors.nil?
|
34
|
+
result
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
2
|
+
require 'cf_factory/base/cf_inner'
|
3
|
+
require 'cf_factory/base/cf_helper'
|
4
|
+
|
5
|
+
class CfCloudFormationCommands
|
6
|
+
include CfInner
|
7
|
+
|
8
|
+
def initialize(commands)
|
9
|
+
@commands = commands
|
10
|
+
@additional_indent = 4
|
11
|
+
end
|
12
|
+
|
13
|
+
def additional_indent
|
14
|
+
@additional_indent += 2
|
15
|
+
end
|
16
|
+
|
17
|
+
def get_cf_attributes
|
18
|
+
result = {}
|
19
|
+
@commands.each() {|command|
|
20
|
+
result[command.get_name] = command.generate
|
21
|
+
}
|
22
|
+
result
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
2
|
+
require 'cf_factory/base/cf_inner'
|
3
|
+
require 'cf_factory/base/cf_helper'
|
4
|
+
|
5
|
+
class CfCloudFormationConfig
|
6
|
+
include CfInner
|
7
|
+
|
8
|
+
def get_name
|
9
|
+
@name
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(name, sources, commands, files, packages)
|
13
|
+
@name = name
|
14
|
+
@sources = sources
|
15
|
+
@commands = commands
|
16
|
+
@files = files
|
17
|
+
@packages = packages
|
18
|
+
end
|
19
|
+
|
20
|
+
def additional_indent
|
21
|
+
4
|
22
|
+
end
|
23
|
+
|
24
|
+
def get_cf_attributes
|
25
|
+
result = {}
|
26
|
+
result["sources"] = CfHelper.clean(@sources.generate) unless @sources.nil?
|
27
|
+
result["commands"] = @commands.generate unless @commands.nil?
|
28
|
+
result["files"] = @files.generate unless @files.nil?
|
29
|
+
result["packages"] = @packages.generate unless @packages.nil?
|
30
|
+
result
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
2
|
+
require 'cf_factory/base/cf_inner'
|
3
|
+
require 'cf_factory/base/cf_helper'
|
4
|
+
|
5
|
+
class CfCloudFormationFile
|
6
|
+
include CfInner
|
7
|
+
|
8
|
+
def get_name
|
9
|
+
@name
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(name, content, group, owner, mode, options = {})
|
13
|
+
@name = name
|
14
|
+
@content = content
|
15
|
+
@group = group
|
16
|
+
@owner = owner
|
17
|
+
@mode = mode
|
18
|
+
@source = options[:source]
|
19
|
+
#
|
20
|
+
@additional_indent = 6
|
21
|
+
#TODO: authentication + encoding missing
|
22
|
+
end
|
23
|
+
|
24
|
+
def additional_indent
|
25
|
+
@additional_indent += 2
|
26
|
+
end
|
27
|
+
|
28
|
+
def get_cf_attributes
|
29
|
+
result = {}
|
30
|
+
result["content"] = @content
|
31
|
+
result["group"] = @group
|
32
|
+
result["owner"] = @owner
|
33
|
+
result["mode"] = @mode
|
34
|
+
result["source"] = @source unless @source.nil?
|
35
|
+
result
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
2
|
+
require 'cf_factory/base/cf_inner'
|
3
|
+
require 'cf_factory/base/cf_helper'
|
4
|
+
|
5
|
+
class CfCloudFormationFiles
|
6
|
+
include CfInner
|
7
|
+
|
8
|
+
def initialize(files)
|
9
|
+
@files = files
|
10
|
+
@additional_indent = 4
|
11
|
+
end
|
12
|
+
|
13
|
+
def additional_indent
|
14
|
+
@additional_indent += 2
|
15
|
+
end
|
16
|
+
|
17
|
+
def get_cf_attributes
|
18
|
+
result = {}
|
19
|
+
@files.each() {|file|
|
20
|
+
result[file.get_name] = file.generate
|
21
|
+
}
|
22
|
+
result
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
2
|
+
require 'cf_factory/base/cf_inner'
|
3
|
+
|
4
|
+
class CfCloudFormationInner
|
5
|
+
include CfInner
|
6
|
+
|
7
|
+
def initialize(key_value_list, indent)
|
8
|
+
@key_value_list = key_value_list
|
9
|
+
@additional_indent = indent
|
10
|
+
end
|
11
|
+
|
12
|
+
def additional_indent
|
13
|
+
@additional_indent
|
14
|
+
end
|
15
|
+
|
16
|
+
def get_cf_attributes
|
17
|
+
result = {}
|
18
|
+
puts "key_value_list = #{@key_value_list}"
|
19
|
+
@key_value_list.each() {|key_value_pair|
|
20
|
+
key = key_value_pair.keys.first
|
21
|
+
value = key_value_pair[key]
|
22
|
+
puts "key_value_pair = #{key_value_pair} key = #{key} value = #{value}"
|
23
|
+
result[key] = value
|
24
|
+
}
|
25
|
+
result
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
2
|
+
require 'cf_factory/base/cf_inner'
|
3
|
+
require 'cf_factory/base/cf_helper'
|
4
|
+
|
5
|
+
class CfCloudFormationPackage
|
6
|
+
include CfInner
|
7
|
+
|
8
|
+
def get_package_type
|
9
|
+
@package_type
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(package_type, package_name, versions, options = {})
|
13
|
+
@package_type = package_type
|
14
|
+
@package_name = package_name
|
15
|
+
@versions = versions
|
16
|
+
#
|
17
|
+
@additional_indent = 6
|
18
|
+
#TODO: authentication + encoding missing
|
19
|
+
end
|
20
|
+
|
21
|
+
def additional_indent
|
22
|
+
@additional_indent += 12
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_cf_attributes
|
26
|
+
result = {}
|
27
|
+
result["#{@package_name}"] = @versions.inspect
|
28
|
+
result
|
29
|
+
end
|
30
|
+
|
31
|
+
def generate
|
32
|
+
CfGenerator.indent(self.additional_indent, "\"#{@package_name}\" : #{@versions.inspect}")
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
2
|
+
require 'cf_factory/base/cf_inner'
|
3
|
+
require 'cf_factory/base/cf_helper'
|
4
|
+
|
5
|
+
class CfCloudFormationPackages
|
6
|
+
include CfInner
|
7
|
+
|
8
|
+
def initialize(package_definitions)
|
9
|
+
@package_definitions = package_definitions
|
10
|
+
#
|
11
|
+
@additional_indent = 6
|
12
|
+
end
|
13
|
+
|
14
|
+
def additional_indent
|
15
|
+
@additional_indent
|
16
|
+
end
|
17
|
+
|
18
|
+
def get_cf_attributes
|
19
|
+
result = {}
|
20
|
+
sort_packages_by_type()
|
21
|
+
@packages_by_type.keys.each() {|package_type|
|
22
|
+
result["#{package_type}"] = "{\n#{CfHelper.generate_inner_list(@packages_by_type[package_type])}\n#{" "*(@additional_indent+10)}}"
|
23
|
+
}
|
24
|
+
result
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def sort_packages_by_type
|
30
|
+
@packages_by_type = {}
|
31
|
+
@package_definitions.each() {|package_definition|
|
32
|
+
packages_of_type = @packages_by_type[package_definition.get_package_type]
|
33
|
+
if packages_of_type.nil?
|
34
|
+
packages_of_type = []
|
35
|
+
@packages_by_type[package_definition.get_package_type] = packages_of_type
|
36
|
+
end
|
37
|
+
packages_of_type << package_definition
|
38
|
+
}
|
39
|
+
@packages_by_type
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
2
|
+
require 'cf_factory/base/cf_inner'
|
3
|
+
|
4
|
+
class CfCloudFormationSources
|
5
|
+
include CfInner
|
6
|
+
|
7
|
+
def initialize(source_list, additional_indent = 6)
|
8
|
+
@source_list = source_list
|
9
|
+
@additional_indent = additional_indent
|
10
|
+
end
|
11
|
+
|
12
|
+
def additional_indent
|
13
|
+
6
|
14
|
+
end
|
15
|
+
|
16
|
+
def add_additional_indent
|
17
|
+
@additional_indent += 2
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_cf_attributes
|
21
|
+
result = {}
|
22
|
+
@source_list.each() {|key_value|
|
23
|
+
key = key_value.keys.first
|
24
|
+
value = key_value[key]
|
25
|
+
result[key] = value
|
26
|
+
}
|
27
|
+
result
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
class CfInitScript
|
2
|
+
# Every parameter-string will be transformed into something like { "Ref" : "<parameter>" }
|
3
|
+
def initialize(script, parameter_array)
|
4
|
+
@script = script
|
5
|
+
@parameter_array = parameter_array
|
6
|
+
prepare
|
7
|
+
end
|
8
|
+
|
9
|
+
def user_data
|
10
|
+
@user_data
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.create_basic(resource_id, access_key, secret_key)
|
14
|
+
stack = CfHelper.generate_ref("AWS::StackName")
|
15
|
+
CfInitScript.new(basic_script(), [stack, resource_id, access_key, secret_key])
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def validate
|
21
|
+
if @script.occurences_of("<!par!") != @parameter_array.size
|
22
|
+
raise Exception.new("the number of parameters does not correspond to the number of placeholders in the script")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Looks for all occurences of <!#par#!> in the script and builds a string that is base64-encoded and joined
|
27
|
+
# and where all those occurences are replaced with the parameter name specified in the constructor.
|
28
|
+
def prepare
|
29
|
+
#divide along parameters
|
30
|
+
#@script.strip!()
|
31
|
+
divided_script = @script.split("<!par!>")
|
32
|
+
script_with_params = []
|
33
|
+
count = 0
|
34
|
+
divided_script.each() {|part|
|
35
|
+
#puts "part [#{count}] = #{part}"
|
36
|
+
part.split("\n").each() {|line|
|
37
|
+
next if line.strip.size == 0
|
38
|
+
script_with_params << "#{line.lstrip} " #TODO: make this work with the line-breaks
|
39
|
+
script_with_params << "\n"
|
40
|
+
}
|
41
|
+
script_with_params.delete_at(script_with_params.size()-1)
|
42
|
+
script_with_params << @parameter_array[count]
|
43
|
+
count += 1
|
44
|
+
}
|
45
|
+
|
46
|
+
join = CfHelper.join(script_with_params)
|
47
|
+
|
48
|
+
@user_data = join
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.basic_script
|
52
|
+
init_script = "
|
53
|
+
#!/bin/bash -v
|
54
|
+
/opt/aws/bin/cfn-init -s <!par!> -r <!par!>
|
55
|
+
--access-key <!par!>
|
56
|
+
--secret-key <!par!>
|
57
|
+
|| error_exit 'Failed to run cfn-init'
|
58
|
+
"
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.basic_script_with_update
|
62
|
+
init_script = "
|
63
|
+
#!/bin/bash -v
|
64
|
+
yum update -y aws-cfn-bootstrap
|
65
|
+
# Run cfn-init for config
|
66
|
+
/opt/aws/bin/cfn-init -s <!par!> -r <!par!>
|
67
|
+
--access-key <!par!>
|
68
|
+
--secret-key <!par!>
|
69
|
+
|| error_exit 'Failed to run cfn-init'
|
70
|
+
"
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'cf_factory/base/cf_inner'
|
2
|
+
|
3
|
+
class CfCacheBehavior
|
4
|
+
include CfInner
|
5
|
+
|
6
|
+
attr_reader(:id)
|
7
|
+
|
8
|
+
def additional_indent
|
9
|
+
6
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.create_basic(target_origin_id, path_pattern, options = {})
|
13
|
+
CfCacheBehavior.new(target_origin_id, CfForwardedValues.new(true), "allow-all", path_pattern, options)
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize(target_origin_id, forwarded_values, viewer_protocol_policy, path_pattern, options)
|
17
|
+
@target_origin_id = target_origin_id
|
18
|
+
@forwarded_values = forwarded_values
|
19
|
+
@forwarded_values.add(2)
|
20
|
+
@view_protocol_policy = viewer_protocol_policy
|
21
|
+
@path_pattern = path_pattern
|
22
|
+
@min_ttl = options[:min_ttl]
|
23
|
+
@trusted_signers = options[:trusted_signers]
|
24
|
+
end
|
25
|
+
|
26
|
+
def get_cf_attributes
|
27
|
+
result = {}
|
28
|
+
result["TargetOriginId"] = @target_origin_id
|
29
|
+
result["ForwardedValues"] = @forwarded_values.generate
|
30
|
+
result["ViewerProtocolPolicy"] = @view_protocol_policy
|
31
|
+
result["PathPattern"] = @path_pattern
|
32
|
+
result["MinTTL"] = @min_ttl unless @min_ttl.nil?
|
33
|
+
result["TrustedSigners"] = @trusted_signers unless @trusted_signers.nil?
|
34
|
+
result
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'cf_factory/base/cf_inner'
|
2
|
+
|
3
|
+
class CfDefaultCacheBehaviors
|
4
|
+
include CfInner
|
5
|
+
|
6
|
+
def additional_indent
|
7
|
+
4
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize(target_origin_id, forwarded_values, viewer_protocol_policy, options = {})
|
11
|
+
@target_origin_id = target_origin_id
|
12
|
+
@forwarded_values = forwarded_values
|
13
|
+
@viewer_protocol_policy = viewer_protocol_policy
|
14
|
+
|
15
|
+
@min_ttl = options[:min_ttl]
|
16
|
+
@trusted_signers = options[:trusted_signers]
|
17
|
+
end
|
18
|
+
|
19
|
+
def get_cf_attributes
|
20
|
+
result = {}
|
21
|
+
result["TargetOriginId"] = @target_origin_id
|
22
|
+
result["ForwardedValues"] = @forwarded_values.generate
|
23
|
+
result["ViewerProtocolPolicy"] = @viewer_protocol_policy
|
24
|
+
result["MinTTL"] = @min_ttl unless @min_ttl.nil?
|
25
|
+
result
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
2
|
+
|
3
|
+
class CfCloudfrontDistribution
|
4
|
+
include CfBase
|
5
|
+
|
6
|
+
def initialize(name, distribution_details)
|
7
|
+
@name = name
|
8
|
+
@distribution = distribution_details
|
9
|
+
end
|
10
|
+
|
11
|
+
def set_tags(tag_list)
|
12
|
+
@tag_list = tag_list
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.create_s3_distribution(name, s3_bucket, origin_options = {}, cache_behaviour_options = {}, distribution_options = {})
|
16
|
+
s3_origin = CfS3OriginConfig.new
|
17
|
+
origin_config = CfOrigin.new(s3_bucket.short_domain_name(),s3_bucket.generate_ref,s3_origin, origin_options)
|
18
|
+
default_cache_behavior = CfDefaultCacheBehavior.new(origin_config.id,CfForwardedValues.new(true),"allow-all", cache_behaviour_options)
|
19
|
+
distribution_details = CfDistributionConfig.new([origin_config],default_cache_behavior, true, distribution_options)
|
20
|
+
CfCloudfrontDistribution.new(name, distribution_details)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.create_elb_distribution(name, elb, origin_options = {}, cache_behaviour_options = {}, distribution_options = {})
|
24
|
+
custom_origin = CfCustomOriginConfig.new("http-only")
|
25
|
+
origin_config = CfOrigin.new(elb.retrieve_attribute("DNSName"),elb.generate_ref,custom_origin,origin_options)
|
26
|
+
default_cache_behavior = CfDefaultCacheBehavior.new(origin_config.id,CfForwardedValues.new(true),"allow-all", cache_behaviour_options)
|
27
|
+
distribution_details = CfDistributionConfig.new([origin_config],default_cache_behavior, true, distribution_options)
|
28
|
+
CfCloudfrontDistribution.new(name, distribution_details)
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.create_domain_distribution(name, origin_domain, origin_id, origin_options = {}, cache_behaviour_options = {}, distribution_options = {})
|
32
|
+
custom_origin = CfCustomOriginConfig.new("http-only")
|
33
|
+
origin_config = CfOrigin.new(origin_domain,origin_id,custom_origin,origin_options)
|
34
|
+
default_cache_behavior = CfDefaultCacheBehavior.new(origin_config.id,CfForwardedValues.new(true),"allow-all", cache_behaviour_options)
|
35
|
+
distribution_details = CfDistributionConfig.new([origin_config],default_cache_behavior, true, distribution_options)
|
36
|
+
CfCloudfrontDistribution.new(name, distribution_details)
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.create_multi_origin_distribution(name, origins, default_cache_behavior, cache_behaviors, distribution_options = {})
|
40
|
+
distribution_details = CfDistributionConfig.new(origins,default_cache_behavior, true, distribution_options.merge({:cache_behaviors => cache_behaviors}))
|
41
|
+
CfCloudfrontDistribution.new(name, distribution_details)
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.create_multi_origin_distribution_old(name, origins, cache_behaviour_options = {}, distribution_options = {})
|
45
|
+
default_cache_behavior = CfDefaultCacheBehavior.new("XXX was origin_config.id",CfForwardedValues.new(true),"allow-all", cache_behaviour_options)
|
46
|
+
distribution_details = CfDistributionConfig.new(origins,default_cache_behavior, true, distribution_options)
|
47
|
+
CfCloudfrontDistribution.new(name, distribution_details)
|
48
|
+
end
|
49
|
+
|
50
|
+
def get_cf_type
|
51
|
+
"AWS::CloudFront::Distribution"
|
52
|
+
end
|
53
|
+
|
54
|
+
def get_cf_attributes
|
55
|
+
result = super
|
56
|
+
end
|
57
|
+
|
58
|
+
def get_cf_properties
|
59
|
+
result = {}
|
60
|
+
result["DistributionConfig"] = @distribution.generate
|
61
|
+
result
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'cf_factory/base/cf_inner'
|
2
|
+
|
3
|
+
class CfCustomOriginConfig
|
4
|
+
PROTOCOL_VALUES = ["http-only","match-viewer"]
|
5
|
+
include CfInner
|
6
|
+
|
7
|
+
def additional_indent
|
8
|
+
6
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
def initialize(protocol, options = {})
|
13
|
+
@protocol = protocol
|
14
|
+
@http_port = options[:http_port]
|
15
|
+
@https_port = options[:https_port]
|
16
|
+
validate()
|
17
|
+
end
|
18
|
+
|
19
|
+
def get_cf_attributes
|
20
|
+
result = {}
|
21
|
+
result["OriginProtocolPolicy"] = @protocol
|
22
|
+
result["HTTPPort"] = @http_port unless @http_port.nil?
|
23
|
+
result["HTTPSPort"] = @https_port unless @https_port.nil?
|
24
|
+
result
|
25
|
+
end
|
26
|
+
|
27
|
+
def is_custom?
|
28
|
+
true
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def validate
|
34
|
+
raise Exception.new("protocol must be within #{PROTOCOL_VALUES}") unless PROTOCOL_VALUES.include?(@protocol)
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'cf_factory/base/cf_inner'
|
2
|
+
|
3
|
+
class CfDefaultCacheBehavior
|
4
|
+
include CfInner
|
5
|
+
|
6
|
+
def additional_indent
|
7
|
+
4
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.create_basic(target_origin_id)
|
11
|
+
CfDefaultCacheBehavior.new(target_origin_id,CfForwardedValues.new(true),"allow-all")
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(target_origin_id, forwarded_values, viewer_protocol_policy, options = {})
|
15
|
+
@target_origin_id = target_origin_id
|
16
|
+
@forwarded_values = forwarded_values
|
17
|
+
@viewer_protocol_policy = viewer_protocol_policy
|
18
|
+
|
19
|
+
@min_ttl = options[:min_ttl]
|
20
|
+
@trusted_signers = options[:trusted_signers]
|
21
|
+
end
|
22
|
+
|
23
|
+
def get_cf_attributes
|
24
|
+
result = {}
|
25
|
+
result["TargetOriginId"] = @target_origin_id
|
26
|
+
result["ForwardedValues"] = @forwarded_values.generate
|
27
|
+
result["ViewerProtocolPolicy"] = @viewer_protocol_policy
|
28
|
+
result["MinTTL"] = @min_ttl unless @min_ttl.nil?
|
29
|
+
result
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'cf_factory/base/cf_inner'
|
2
|
+
|
3
|
+
class CfDistributionConfig
|
4
|
+
include CfInner
|
5
|
+
|
6
|
+
def additional_indent
|
7
|
+
2
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize(origins, default_cache_behaviour, enabled = true, options = {})
|
11
|
+
@origins = origins
|
12
|
+
@default_cache_behaviour = default_cache_behaviour
|
13
|
+
@enabled = enabled
|
14
|
+
|
15
|
+
@cache_behaviors = options[:cache_behaviors]
|
16
|
+
@aliases = options[:aliases]
|
17
|
+
@logging = options[:logging]
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_cf_attributes
|
21
|
+
result = {}
|
22
|
+
result["Origins"] = CfHelper.generate_inner_array(@origins)
|
23
|
+
result["DefaultCacheBehavior"] = @default_cache_behaviour.generate
|
24
|
+
result["Enabled"] = @enabled
|
25
|
+
result["Logging"] = @logging.generate unless @logging.nil?
|
26
|
+
result["Aliases"] = @aliases.inspect unless @aliases.nil?
|
27
|
+
result["CacheBehaviors"] = CfHelper.generate_inner_array(@cache_behaviors)
|
28
|
+
result
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'cf_factory/base/cf_inner'
|
2
|
+
|
3
|
+
class CfForwardedValues
|
4
|
+
include CfInner
|
5
|
+
|
6
|
+
def additional_indent
|
7
|
+
@additional_indent
|
8
|
+
end
|
9
|
+
|
10
|
+
def add(add_indent)
|
11
|
+
@additional_indent += add_indent
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(query_string)
|
15
|
+
@query_string = query_string
|
16
|
+
@additional_indent = 6
|
17
|
+
end
|
18
|
+
|
19
|
+
def get_cf_attributes
|
20
|
+
result = {}
|
21
|
+
result["QueryString"] = @query_string
|
22
|
+
result
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|