cloud_former 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +51 -0
- data/.rspec +3 -0
- data/Gemfile +4 -0
- data/LICENSE +21 -0
- data/LICENSE.txt +22 -0
- data/README.md +30 -0
- data/Rakefile +1 -0
- data/cloud_former.gemspec +26 -0
- data/lib/cloud_former/boolean.rb +5 -0
- data/lib/cloud_former/functions/base_64.rb +28 -0
- data/lib/cloud_former/functions/find_in_map.rb +36 -0
- data/lib/cloud_former/functions/function.rb +5 -0
- data/lib/cloud_former/functions/get_att.rb +19 -0
- data/lib/cloud_former/functions/get_azs.rb +14 -0
- data/lib/cloud_former/functions/join.rb +36 -0
- data/lib/cloud_former/has_properties_and_attributes.rb +104 -0
- data/lib/cloud_former/makes_json.rb +64 -0
- data/lib/cloud_former/metadata_resources/cloud_formation/authentication.rb +28 -0
- data/lib/cloud_former/metadata_resources/cloud_formation/authentication_item.rb +29 -0
- data/lib/cloud_former/metadata_resources/cloud_formation/config_set.rb +35 -0
- data/lib/cloud_former/metadata_resources/cloud_formation/config_set_command.rb +27 -0
- data/lib/cloud_former/metadata_resources/cloud_formation/config_set_file.rb +29 -0
- data/lib/cloud_former/metadata_resources/cloud_formation/config_set_group.rb +17 -0
- data/lib/cloud_former/metadata_resources/cloud_formation/config_set_item.rb +70 -0
- data/lib/cloud_former/metadata_resources/cloud_formation/config_set_service.rb +27 -0
- data/lib/cloud_former/metadata_resources/cloud_formation/config_set_user.rb +24 -0
- data/lib/cloud_former/metadata_resources/cloud_formation/init.rb +33 -0
- data/lib/cloud_former/metadata_resources/metadata_resource.rb +15 -0
- data/lib/cloud_former/parameters/commma_delimited_list_parameter.rb +9 -0
- data/lib/cloud_former/parameters/number_parameter.rb +9 -0
- data/lib/cloud_former/parameters/parameter.rb +30 -0
- data/lib/cloud_former/parameters/string_parameter.rb +9 -0
- data/lib/cloud_former/property_or_attribute.rb +49 -0
- data/lib/cloud_former/pseudo_parameters/account_id_parameter.rb +7 -0
- data/lib/cloud_former/pseudo_parameters/no_value_parameter.rb +7 -0
- data/lib/cloud_former/pseudo_parameters/notification_arns_parameter.rb +7 -0
- data/lib/cloud_former/pseudo_parameters/pseudo_parameter.rb +5 -0
- data/lib/cloud_former/pseudo_parameters/region_parameter.rb +7 -0
- data/lib/cloud_former/pseudo_parameters/stack_id_parameter.rb +7 -0
- data/lib/cloud_former/pseudo_parameters/stack_name_parameter.rb +7 -0
- data/lib/cloud_former/resource_properties/auto_scaling/block_device_mapping.rb +11 -0
- data/lib/cloud_former/resource_properties/auto_scaling/ebs_block_device.rb +12 -0
- data/lib/cloud_former/resource_properties/auto_scaling/metrics_collection.rb +9 -0
- data/lib/cloud_former/resource_properties/auto_scaling/notification_configuration.rb +16 -0
- data/lib/cloud_former/resource_properties/auto_scaling/tag.rb +10 -0
- data/lib/cloud_former/resource_properties/cloud_formation/resource_tag.rb +9 -0
- data/lib/cloud_former/resource_properties/cloud_front/cache_behavior.rb +15 -0
- data/lib/cloud_former/resource_properties/cloud_front/custom_error_response.rb +13 -0
- data/lib/cloud_former/resource_properties/cloud_front/custom_origin.rb +10 -0
- data/lib/cloud_former/resource_properties/cloud_front/default_cache_behavior.rb +14 -0
- data/lib/cloud_former/resource_properties/cloud_front/distribution_configuration.rb +27 -0
- data/lib/cloud_former/resource_properties/cloud_front/forwarded_values.rb +9 -0
- data/lib/cloud_former/resource_properties/cloud_front/forwarded_values_cookies.rb +9 -0
- data/lib/cloud_former/resource_properties/cloud_front/geo_restriction.rb +9 -0
- data/lib/cloud_former/resource_properties/cloud_front/logging.rb +10 -0
- data/lib/cloud_former/resource_properties/cloud_front/origin.rb +11 -0
- data/lib/cloud_former/resource_properties/cloud_front/restriction.rb +8 -0
- data/lib/cloud_former/resource_properties/cloud_front/s3_origin.rb +8 -0
- data/lib/cloud_former/resource_properties/cloud_front/viewer_certificate.rb +10 -0
- data/lib/cloud_former/resource_properties/cloud_watch/metric_dimension.rb +9 -0
- data/lib/cloud_former/resource_properties/ec2/security_group_rule.rb +15 -0
- data/lib/cloud_former/resource_properties/elastic_load_balancing/access_logging_policy.rb +11 -0
- data/lib/cloud_former/resource_properties/elastic_load_balancing/app_cookie_stickiness_policy.rb +9 -0
- data/lib/cloud_former/resource_properties/elastic_load_balancing/connection_draining_policy.rb +9 -0
- data/lib/cloud_former/resource_properties/elastic_load_balancing/health_check.rb +12 -0
- data/lib/cloud_former/resource_properties/elastic_load_balancing/lb_cookie_stickiness_policy.rb +9 -0
- data/lib/cloud_former/resource_properties/elastic_load_balancing/listener.rb +13 -0
- data/lib/cloud_former/resource_properties/elastic_load_balancing/policy.rb +12 -0
- data/lib/cloud_former/resource_properties/resource_property.rb +13 -0
- data/lib/cloud_former/resource_properties/s3/cors_configuration.rb +8 -0
- data/lib/cloud_former/resource_properties/s3/cors_rule.rb +13 -0
- data/lib/cloud_former/resource_properties/s3/lifecycle_configuration.rb +8 -0
- data/lib/cloud_former/resource_properties/s3/lifecycle_rule.rb +13 -0
- data/lib/cloud_former/resource_properties/s3/lifecycle_rule_transition.rb +10 -0
- data/lib/cloud_former/resource_properties/s3/logging_configuration.rb +9 -0
- data/lib/cloud_former/resource_properties/s3/notification_configuration.rb +11 -0
- data/lib/cloud_former/resource_properties/s3/notification_topic_configuration.rb +9 -0
- data/lib/cloud_former/resource_properties/s3/versioning_configuration.rb +8 -0
- data/lib/cloud_former/resource_properties/s3/website_configuration.rb +16 -0
- data/lib/cloud_former/resource_properties/s3/website_configuration_redirect_all_requests_to.rb +9 -0
- data/lib/cloud_former/resource_properties/s3/website_configuration_routing_rules.rb +13 -0
- data/lib/cloud_former/resource_properties/s3/website_configuration_routing_rules_redirect_rule.rb +12 -0
- data/lib/cloud_former/resource_properties/s3/website_configuration_routing_rules_routing_rule_condition.rb +9 -0
- data/lib/cloud_former/resource_properties/sns/subscription.rb +9 -0
- data/lib/cloud_former/resources/auto_scaling/auto_scaling_group.rb +31 -0
- data/lib/cloud_former/resources/auto_scaling/launch_configuration.rb +26 -0
- data/lib/cloud_former/resources/cloud_formation/wait_condition.rb +10 -0
- data/lib/cloud_former/resources/cloud_formation/wait_condition_handle.rb +7 -0
- data/lib/cloud_former/resources/cloud_front/distribution.rb +9 -0
- data/lib/cloud_former/resources/cloud_watch/alarm.rb +22 -0
- data/lib/cloud_former/resources/ec2/security_group.rb +21 -0
- data/lib/cloud_former/resources/elastic_load_balancing/load_balancer.rb +35 -0
- data/lib/cloud_former/resources/iam/access_key.rb +10 -0
- data/lib/cloud_former/resources/iam/group.rb +13 -0
- data/lib/cloud_former/resources/iam/policy.rb +12 -0
- data/lib/cloud_former/resources/iam/user.rb +15 -0
- data/lib/cloud_former/resources/resource.rb +31 -0
- data/lib/cloud_former/resources/s3/bucket.rb +29 -0
- data/lib/cloud_former/resources/sns/topic.rb +10 -0
- data/lib/cloud_former/template.rb +42 -0
- data/lib/cloud_former/version.rb +3 -0
- data/lib/cloud_former.rb +134 -0
- data/spec/metadata_spec.rb +152 -0
- data/spec/parameter_spec.rb +46 -0
- data/spec/resources/auto_scaling/auto_scaling_group_spec.rb +33 -0
- data/spec/resources/auto_scaling/launch_configuration_spec.rb +11 -0
- data/spec/resources/auto_scaling/notification_configuration_spec.rb +20 -0
- data/spec/resources/iam/access_key_spec.rb +43 -0
- data/spec/resources/iam/user_spec.rb +141 -0
- data/spec/spec_helper.rb +81 -0
- data/spec/template_spec.rb +53 -0
- data/spec/type_enforcement.rb +8 -0
- metadata +223 -0
@@ -0,0 +1,12 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-health-check.html
|
2
|
+
module CloudFormer
|
3
|
+
module ElasticLoadBalancing
|
4
|
+
class HealthCheck < ResourceProperty
|
5
|
+
aws_attribute :healthy_threshold, type: String
|
6
|
+
aws_attribute :interval, type: String
|
7
|
+
aws_attribute :target, type: String
|
8
|
+
aws_attribute :timeout, type: String
|
9
|
+
aws_attribute :unhealthy_threshold, type: String
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/lib/cloud_former/resource_properties/elastic_load_balancing/lb_cookie_stickiness_policy.rb
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-LBCookieStickinessPolicy.html
|
2
|
+
module CloudFormer
|
3
|
+
module ElasticLoadBalancing
|
4
|
+
class LbCookieStickinessPolicy < ResourceProperty
|
5
|
+
aws_attribute :cookie_expiration_period, type: String
|
6
|
+
aws_attribute :policy_name, type: String
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-listener.html
|
2
|
+
module CloudFormer
|
3
|
+
module ElasticLoadBalancing
|
4
|
+
class Listener < ResourceProperty
|
5
|
+
aws_attribute :instance_port, type: String
|
6
|
+
aws_attribute :instance_protocol, type: String
|
7
|
+
aws_attribute :load_balancer_port, type: String
|
8
|
+
aws_attribute :policy_names, list: true, type: String
|
9
|
+
aws_attribute :protocol, type: String
|
10
|
+
aws_attribute :ssl_certificate_id, name: 'SSLCertificateId', type: String
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-policy.html
|
2
|
+
module CloudFormer
|
3
|
+
module ElasticLoadBalancing
|
4
|
+
class Policy < ResourceProperty
|
5
|
+
aws_attribute :attributes, list: true, type: String
|
6
|
+
aws_attribute :instance_ports, list: true, type: String
|
7
|
+
aws_attribute :load_balancer_ports, list: true, type: String
|
8
|
+
aws_attribute :policy_name, type: String
|
9
|
+
aws_attribute :policy_type, type: String
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-cors-corsrule.html
|
2
|
+
module CloudFormer
|
3
|
+
module S3
|
4
|
+
class CorsRule < ResourceProperty
|
5
|
+
aws_attribute :allowed_headers, list: true, type: String
|
6
|
+
aws_attribute :allowed_methods, list: true, type: String
|
7
|
+
aws_attribute :allowed_origins, list: true, type: String
|
8
|
+
aws_attribute :exposed_headers, list: true, type: String
|
9
|
+
aws_attribute :id, type: String
|
10
|
+
aws_attribute :max_age, type: Integer
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig.html
|
2
|
+
module CloudFormer
|
3
|
+
module S3
|
4
|
+
class LifecycleConfiguration < ResourceProperty
|
5
|
+
aws_attribute :rules, embed: true, list: true, type: LifecycleRule
|
6
|
+
end
|
7
|
+
end
|
8
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html
|
2
|
+
module CloudFormer
|
3
|
+
module S3
|
4
|
+
class LifecycleRule < ResourceProperty
|
5
|
+
aws_attribute :expiration_date, type: String
|
6
|
+
aws_attribute :expiration_in_days, type: Integer
|
7
|
+
aws_attribute :id, type: String
|
8
|
+
aws_attribute :prefix, type: String
|
9
|
+
aws_attribute :status, type: String
|
10
|
+
aws_attribute :transition, embed: true, type: LifecycleRuleTransition
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule-transition.html
|
2
|
+
module CloudFormer
|
3
|
+
module S3
|
4
|
+
class LifecycleRuleTransition < ResourceProperty
|
5
|
+
aws_attribute :storage_class, type: String
|
6
|
+
aws_attribute :transition_date, type: String
|
7
|
+
aws_attribute :transition_in_days, type: Integer
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-loggingconfig.html
|
2
|
+
module CloudFormer
|
3
|
+
module S3
|
4
|
+
class LoggingConfiguration < ResourceProperty
|
5
|
+
aws_attribute :destination_bucket_name, type: String
|
6
|
+
aws_attribute :log_file_prefix, type: String
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig.html
|
2
|
+
module CloudFormer
|
3
|
+
module S3
|
4
|
+
class NotificationConfiguration < ResourceProperty
|
5
|
+
aws_attribute :topic_configurations,
|
6
|
+
embed: true,
|
7
|
+
list: true,
|
8
|
+
type: NotificationTopicConfiguration
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-topicconfig.html
|
2
|
+
module CloudFormer
|
3
|
+
module S3
|
4
|
+
class NotificationTopicConfiguration < ResourceProperty
|
5
|
+
aws_attribute :event, type: String
|
6
|
+
aws_attribute :topic, type: String
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration.html
|
2
|
+
module CloudFormer
|
3
|
+
module S3
|
4
|
+
class WebsiteConfiguration < ResourceProperty
|
5
|
+
aws_attribute :error_document, type: String
|
6
|
+
aws_attribute :index_document, type: String
|
7
|
+
aws_attribute :redirect_all_requests_to,
|
8
|
+
embed: true,
|
9
|
+
type: WebsiteConfigurationRedirectAllRequestsTo
|
10
|
+
aws_attribute :routing_rules,
|
11
|
+
embed: true,
|
12
|
+
list: true,
|
13
|
+
type: WebsiteConfigurationRoutingRules
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/cloud_former/resource_properties/s3/website_configuration_redirect_all_requests_to.rb
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-redirectallrequeststo.html
|
2
|
+
module CloudFormer
|
3
|
+
module S3
|
4
|
+
class WebsiteConfigurationRedirectAllRequestsTo < ResourceProperty
|
5
|
+
aws_attribute :host_name, type: String
|
6
|
+
aws_attribute :protocol, type: String
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules.html
|
2
|
+
module CloudFormer
|
3
|
+
module S3
|
4
|
+
class WebsiteConfigurationRoutingRules < ResourceProperty
|
5
|
+
aws_attribute :redirect_rule,
|
6
|
+
embed: true,
|
7
|
+
type: WebsiteConfigurationRoutingRulesRedirectRule
|
8
|
+
aws_attribute :routing_rule_condition,
|
9
|
+
embed: true,
|
10
|
+
type: WebsiteConfigurationRoutingRulesRoutingRuleCondition
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/cloud_former/resource_properties/s3/website_configuration_routing_rules_redirect_rule.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules-redirectrule.html
|
2
|
+
module CloudFormer
|
3
|
+
module S3
|
4
|
+
class WebsiteConfigurationRoutingRulesRedirectRule < ResourceProperty
|
5
|
+
aws_attribute :host_name, type: String
|
6
|
+
aws_attribute :http_redirect_code, type: String
|
7
|
+
aws_attribute :protocol, type: String
|
8
|
+
aws_attribute :replace_key_prefix_with, type: String
|
9
|
+
aws_attribute :replace_key_with, type: String
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules-routingrulecondition.html
|
2
|
+
module CloudFormer
|
3
|
+
module S3
|
4
|
+
class WebsiteConfigurationRoutingRulesRoutingRuleCondition < ResourceProperty
|
5
|
+
aws_attribute :http_error_code_returned_equals, type: String
|
6
|
+
aws_attribute :key_prefix_equals, type: String
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-subscription.html
|
2
|
+
module CloudFormer
|
3
|
+
module SNS
|
4
|
+
class Subscription < ResourceProperty
|
5
|
+
aws_attribute :endpoint, type: String
|
6
|
+
aws_attribute :protocol, type: String
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html
|
2
|
+
module CloudFormer
|
3
|
+
module AutoScaling
|
4
|
+
class AutoScalingGroup < Resource
|
5
|
+
|
6
|
+
aws_property :availability_zones, required: true, list: true, type: String
|
7
|
+
aws_property :cooldown, type: String
|
8
|
+
aws_property :desired_capacity, type: String
|
9
|
+
aws_property :health_check_grace_period, type: Integer
|
10
|
+
aws_property :health_check_type, type: String
|
11
|
+
aws_property :instance_id, type: String
|
12
|
+
aws_property :launch_configuration_name, type: String
|
13
|
+
aws_property :load_balancer_names, list: true, type: String
|
14
|
+
aws_property :max_size, required: true, type: String
|
15
|
+
aws_property :metrics_collection,
|
16
|
+
list: true,
|
17
|
+
type: AutoScaling::MetricsCollection
|
18
|
+
aws_property :min_size, required: true, type: String
|
19
|
+
aws_property :notification_configuration,
|
20
|
+
embed: true,
|
21
|
+
type: AutoScaling::NotificationConfiguration
|
22
|
+
aws_property :placement_group, type: String
|
23
|
+
aws_property :tags, list: true, type: AutoScaling::Tag
|
24
|
+
aws_property :termination_policies, list: true, type: String
|
25
|
+
aws_property :vpc_zone_identifier,
|
26
|
+
name: 'VPCZoneIdentifier',
|
27
|
+
list: true,
|
28
|
+
type: String
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html
|
2
|
+
module CloudFormer
|
3
|
+
module AutoScaling
|
4
|
+
class LaunchConfiguration < Resource
|
5
|
+
aws_property :associate_public_ip_address, type: Boolean
|
6
|
+
aws_property :block_device_mappings,
|
7
|
+
embed: true,
|
8
|
+
list: true,
|
9
|
+
type: BlockDeviceMapping
|
10
|
+
aws_property :ebs_optimized, type: Boolean
|
11
|
+
aws_property :iam_instance_profile, type: String
|
12
|
+
aws_property :image_id, type: String
|
13
|
+
aws_property :instance_id, type: String
|
14
|
+
aws_property :instance_monitoring, type: Boolean
|
15
|
+
aws_property :instance_type, type: String
|
16
|
+
aws_property :kernel_id, type: String
|
17
|
+
aws_property :key_name, type: String
|
18
|
+
aws_property :ram_disk_id, type: String
|
19
|
+
aws_property :security_groups,
|
20
|
+
list: true,
|
21
|
+
type: EC2::SecurityGroup
|
22
|
+
aws_property :spot_price, type: String
|
23
|
+
aws_property :user_data, type: String
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waitcondition.html
|
2
|
+
module CloudFormer
|
3
|
+
module CloudFormation
|
4
|
+
class WaitCondition < Resource
|
5
|
+
aws_property :count, type: String
|
6
|
+
aws_property :handle, required: true, type: String
|
7
|
+
aws_property :timeout, required: true, type: String
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html
|
2
|
+
module CloudFormer
|
3
|
+
module CloudWatch
|
4
|
+
class Alarm < Resource
|
5
|
+
aws_property :actions_enabled, type: Boolean
|
6
|
+
aws_property :alarm_actions, list: true, type: String
|
7
|
+
aws_property :alarm_description, type: String
|
8
|
+
aws_property :alarm_name, type: String
|
9
|
+
aws_property :comparison_operator, type: String
|
10
|
+
aws_property :dimensions, embed: true, list: true, type: MetricDimension
|
11
|
+
aws_property :evaluation_periods, type: String
|
12
|
+
aws_property :insufficient_data_actions, list: true, type: String
|
13
|
+
aws_property :metric_name, type: String
|
14
|
+
aws_property :namespace, type: String
|
15
|
+
aws_property :ok_actions, name: 'OKActions', list: true, type: String
|
16
|
+
aws_property :period, type: String
|
17
|
+
aws_property :statistic, type: String
|
18
|
+
aws_property :threshold, type: String
|
19
|
+
aws_property :unit, type: String
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html
|
2
|
+
module CloudFormer
|
3
|
+
module EC2
|
4
|
+
class SecurityGroup < Resource
|
5
|
+
aws_property :group_description, type: String
|
6
|
+
aws_property :security_group_egress,
|
7
|
+
embed: true,
|
8
|
+
list: true,
|
9
|
+
type: SecurityGroupRule
|
10
|
+
aws_property :security_group_ingress,
|
11
|
+
embed: true,
|
12
|
+
list: true,
|
13
|
+
type: SecurityGroupRule
|
14
|
+
aws_property :tags,
|
15
|
+
embed: true,
|
16
|
+
list: true,
|
17
|
+
type: CloudFormation::ResourceTag
|
18
|
+
aws_property :vpc_id, type: String
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html
|
2
|
+
module CloudFormer
|
3
|
+
module ElasticLoadBalancing
|
4
|
+
class LoadBalancer < Resource
|
5
|
+
aws_property :access_logging_policy,
|
6
|
+
embed: true,
|
7
|
+
type: AccessLoggingPolicy
|
8
|
+
aws_property :app_cookie_stickiness_policy,
|
9
|
+
embed: true,
|
10
|
+
list: true,
|
11
|
+
type: AppCookieStickinessPolicy
|
12
|
+
aws_property :availability_zones, list: true, type: String
|
13
|
+
aws_property :connection_draining_policy,
|
14
|
+
embed: true,
|
15
|
+
type: ConnectionDrainingPolicy
|
16
|
+
aws_property :cross_zone, type: Boolean
|
17
|
+
aws_property :health_check, embed: true, type: HealthCheck
|
18
|
+
aws_property :instances, list: true, type: String
|
19
|
+
aws_property :lb_cookie_stickiness_policy,
|
20
|
+
embed: true,
|
21
|
+
name: 'LBCookieStickinessPolicy',
|
22
|
+
list: true,
|
23
|
+
type: LbCookieStickinessPolicy
|
24
|
+
aws_property :load_balancer_name, type: String
|
25
|
+
aws_property :listeners, embed: true, list: true, type: Listener
|
26
|
+
aws_property :policies,
|
27
|
+
embed: true,
|
28
|
+
list: true,
|
29
|
+
type: Policy
|
30
|
+
aws_property :scheme, type: String
|
31
|
+
aws_property :security_groups, list: true, type: EC2::SecurityGroup
|
32
|
+
aws_property :subnets, list: true, type: String
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-accesskey.html
|
2
|
+
module CloudFormer
|
3
|
+
module IAM
|
4
|
+
class AccessKey < Resource
|
5
|
+
aws_property :serial, type: Integer
|
6
|
+
aws_property :status, required: true, type: String
|
7
|
+
aws_property :user_name, required: true, type: String
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html
|
2
|
+
module CloudFormer
|
3
|
+
module IAM
|
4
|
+
class Group < Resource
|
5
|
+
aws_property :path, type: String
|
6
|
+
aws_property :policies,
|
7
|
+
embed: true,
|
8
|
+
skip_properties: true,
|
9
|
+
list: true,
|
10
|
+
type: Policy
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html
|
2
|
+
module CloudFormer
|
3
|
+
module IAM
|
4
|
+
class Policy < Resource
|
5
|
+
aws_property :groups, required: true, list: true, type: String
|
6
|
+
aws_property :policy_document, required: true, type: Hash
|
7
|
+
aws_property :policy_name, required: true, type: String
|
8
|
+
aws_property :roles, list: true, type: String
|
9
|
+
aws_property :users, required: true, list: true, type: String
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html
|
2
|
+
module CloudFormer
|
3
|
+
module IAM
|
4
|
+
class User < Resource
|
5
|
+
aws_property :path, type: String
|
6
|
+
aws_property :groups, list: true, type: Group
|
7
|
+
aws_property :login_profile, type: Hash
|
8
|
+
aws_property :policies,
|
9
|
+
embed: true,
|
10
|
+
skip_properties: true,
|
11
|
+
list: true,
|
12
|
+
type: Policy
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module CloudFormer
|
2
|
+
class Resource
|
3
|
+
|
4
|
+
include HasPropertiesAndAttributes
|
5
|
+
include MakesJson
|
6
|
+
|
7
|
+
json_attribute :aws_type, name: 'Type'
|
8
|
+
|
9
|
+
attr_reader :name
|
10
|
+
attr_reader :aws_type
|
11
|
+
attr_reader :metadata_items
|
12
|
+
|
13
|
+
aws_attribute :depends_on
|
14
|
+
|
15
|
+
def initialize(name, &block)
|
16
|
+
@name = name
|
17
|
+
if name.nil? || name.empty?
|
18
|
+
raise ArgumentError.new("Attempting to create a resource of type #{self.class.name} with no name")
|
19
|
+
end
|
20
|
+
@metadata_items = []
|
21
|
+
@aws_type = self.class.name.sub('CloudFormer', 'AWS')
|
22
|
+
if block_given?
|
23
|
+
self.instance_eval(&block)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def add_metadata(metadata)
|
28
|
+
@metadata_items << metadata
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html
|
2
|
+
module CloudFormer
|
3
|
+
module S3
|
4
|
+
class Bucket < Resource
|
5
|
+
aws_property :access_control, type: String
|
6
|
+
aws_property :bucket_name, type: String
|
7
|
+
aws_property :cors_configuration, embed: true, type: CorsConfiguration
|
8
|
+
aws_property :lifecycle_configuration,
|
9
|
+
embed: true,
|
10
|
+
type: LifecycleConfiguration
|
11
|
+
aws_property :logging_configuration,
|
12
|
+
embed: true,
|
13
|
+
type: LoggingConfiguration
|
14
|
+
aws_property :notification_configuration,
|
15
|
+
embed: true,
|
16
|
+
type: NotificationConfiguration
|
17
|
+
aws_property :tags,
|
18
|
+
embed: true,
|
19
|
+
list: true,
|
20
|
+
type: CloudFormation::ResourceTag
|
21
|
+
aws_property :versioning_configuration,
|
22
|
+
embed: true,
|
23
|
+
type: VersioningConfiguration
|
24
|
+
aws_property :website_configuration,
|
25
|
+
embed: true,
|
26
|
+
type: WebsiteConfiguration
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html
|
2
|
+
module CloudFormer
|
3
|
+
module SNS
|
4
|
+
class Topic < Resource
|
5
|
+
aws_property :display_name, type: String
|
6
|
+
aws_property :subscription, embed: true, list: true, type: Subscription
|
7
|
+
aws_property :topic_name, type: String
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module CloudFormer
|
2
|
+
class Template
|
3
|
+
|
4
|
+
def initialize
|
5
|
+
@resources = []
|
6
|
+
@parameters = []
|
7
|
+
@mappings = []
|
8
|
+
@outputs = []
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_parameter(parameter)
|
12
|
+
@parameters << parameter
|
13
|
+
end
|
14
|
+
|
15
|
+
def add_resource(resource)
|
16
|
+
@resources << resource
|
17
|
+
end
|
18
|
+
|
19
|
+
def dump_json
|
20
|
+
res = { 'AWSTemplateFormatVersion' => '2010-09-09' }
|
21
|
+
|
22
|
+
if @parameters.any?
|
23
|
+
parameter_res = {}
|
24
|
+
@parameters.each do |param|
|
25
|
+
parameter_res[param.name] = param.dump_json
|
26
|
+
end
|
27
|
+
res['Parameters'] = parameter_res
|
28
|
+
end
|
29
|
+
|
30
|
+
if @resources.any?
|
31
|
+
resource_res = {}
|
32
|
+
@resources.each do |resource|
|
33
|
+
resource_res[resource.name] = resource.dump_json
|
34
|
+
end
|
35
|
+
res['Resources'] = resource_res
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
res
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|