skywriter 1.0.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.
Files changed (154) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +8 -0
  5. data/CHANGES.md +5 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.md +22 -0
  8. data/README.md +139 -0
  9. data/Rakefile +7 -0
  10. data/lib/skywriter/function.rb +133 -0
  11. data/lib/skywriter/resource/auto_scaling/auto_scaling_group.rb +28 -0
  12. data/lib/skywriter/resource/auto_scaling/launch_configuration.rb +28 -0
  13. data/lib/skywriter/resource/auto_scaling/scaling_policy.rb +18 -0
  14. data/lib/skywriter/resource/auto_scaling/scheduled_action.rb +21 -0
  15. data/lib/skywriter/resource/auto_scaling/trigger.rb +26 -0
  16. data/lib/skywriter/resource/cloud_formation/authentication.rb +46 -0
  17. data/lib/skywriter/resource/cloud_formation/custom_resource.rb +17 -0
  18. data/lib/skywriter/resource/cloud_formation/stack.rb +15 -0
  19. data/lib/skywriter/resource/cloud_formation/wait_condition.rb +15 -0
  20. data/lib/skywriter/resource/cloud_formation/wait_condition_handle.rb +12 -0
  21. data/lib/skywriter/resource/cloud_front/distribution.rb +13 -0
  22. data/lib/skywriter/resource/cloud_watch/alarm.rb +27 -0
  23. data/lib/skywriter/resource/dynamo_db/table.rb +18 -0
  24. data/lib/skywriter/resource/ec2/customer_gateway.rb +16 -0
  25. data/lib/skywriter/resource/ec2/dhcp_options.rb +18 -0
  26. data/lib/skywriter/resource/ec2/eip.rb +14 -0
  27. data/lib/skywriter/resource/ec2/eip_association.rb +17 -0
  28. data/lib/skywriter/resource/ec2/instance.rb +34 -0
  29. data/lib/skywriter/resource/ec2/internet_gateway.rb +13 -0
  30. data/lib/skywriter/resource/ec2/network_acl.rb +14 -0
  31. data/lib/skywriter/resource/ec2/network_acl_entry.rb +20 -0
  32. data/lib/skywriter/resource/ec2/network_interface.rb +20 -0
  33. data/lib/skywriter/resource/ec2/network_interface_attachment.rb +16 -0
  34. data/lib/skywriter/resource/ec2/route.rb +17 -0
  35. data/lib/skywriter/resource/ec2/route_table.rb +14 -0
  36. data/lib/skywriter/resource/ec2/security_group.rb +17 -0
  37. data/lib/skywriter/resource/ec2/security_group_egress.rb +23 -0
  38. data/lib/skywriter/resource/ec2/security_group_ingress.rb +26 -0
  39. data/lib/skywriter/resource/ec2/subnet.rb +16 -0
  40. data/lib/skywriter/resource/ec2/subnet_network_acl_association.rb +14 -0
  41. data/lib/skywriter/resource/ec2/subnet_route_table_association.rb +14 -0
  42. data/lib/skywriter/resource/ec2/volume.rb +18 -0
  43. data/lib/skywriter/resource/ec2/volume_attachment.rb +15 -0
  44. data/lib/skywriter/resource/ec2/vpc.rb +17 -0
  45. data/lib/skywriter/resource/ec2/vpc_dhcp_options_association.rb +14 -0
  46. data/lib/skywriter/resource/ec2/vpc_gateway_attachment.rb +15 -0
  47. data/lib/skywriter/resource/ec2/vpn_connection.rb +17 -0
  48. data/lib/skywriter/resource/ec2/vpn_connection_route.rb +14 -0
  49. data/lib/skywriter/resource/ec2/vpn_gateway.rb +14 -0
  50. data/lib/skywriter/resource/ec2/vpn_gateway_route_propagation.rb +14 -0
  51. data/lib/skywriter/resource/elasti_cache/cache_cluster.rb +27 -0
  52. data/lib/skywriter/resource/elastic_beanstalk/application.rb +14 -0
  53. data/lib/skywriter/resource/elastic_beanstalk/application_version.rb +15 -0
  54. data/lib/skywriter/resource/elastic_beanstalk/configuration_template.rb +18 -0
  55. data/lib/skywriter/resource/elastic_beanstalk/environment.rb +21 -0
  56. data/lib/skywriter/resource/elastic_load_balancing/load_balancer.rb +25 -0
  57. data/lib/skywriter/resource/elasticache/parameter_group.rb +15 -0
  58. data/lib/skywriter/resource/elasticache/security_group.rb +13 -0
  59. data/lib/skywriter/resource/elasticache/security_group_ingress.rb +15 -0
  60. data/lib/skywriter/resource/elasticache/subnet_group.rb +14 -0
  61. data/lib/skywriter/resource/iam/access_key.rb +16 -0
  62. data/lib/skywriter/resource/iam/group.rb +15 -0
  63. data/lib/skywriter/resource/iam/instance_profile.rb +15 -0
  64. data/lib/skywriter/resource/iam/policy.rb +18 -0
  65. data/lib/skywriter/resource/iam/role.rb +13 -0
  66. data/lib/skywriter/resource/iam/user.rb +17 -0
  67. data/lib/skywriter/resource/iam/user_to_group_addition.rb +15 -0
  68. data/lib/skywriter/resource/logical_name_pointer.rb +11 -0
  69. data/lib/skywriter/resource/pointer.rb +23 -0
  70. data/lib/skywriter/resource/rds/db_instance.rb +37 -0
  71. data/lib/skywriter/resource/rds/db_parameter_group.rb +17 -0
  72. data/lib/skywriter/resource/rds/db_security_group.rb +17 -0
  73. data/lib/skywriter/resource/rds/db_security_group_ingress.rb +18 -0
  74. data/lib/skywriter/resource/rds/db_subnet_group.rb +16 -0
  75. data/lib/skywriter/resource/redshift/cluster.rb +37 -0
  76. data/lib/skywriter/resource/redshift/cluster_parameter_group.rb +16 -0
  77. data/lib/skywriter/resource/redshift/cluster_security_group.rb +14 -0
  78. data/lib/skywriter/resource/redshift/cluster_security_group_ingress.rb +17 -0
  79. data/lib/skywriter/resource/redshift/cluster_subnet_group.rb +15 -0
  80. data/lib/skywriter/resource/ref_pointer.rb +11 -0
  81. data/lib/skywriter/resource/route_53/record_set.rb +24 -0
  82. data/lib/skywriter/resource/route_53/record_set_group.rb +17 -0
  83. data/lib/skywriter/resource/s3/bucket.rb +17 -0
  84. data/lib/skywriter/resource/s3/bucket_policy.rb +15 -0
  85. data/lib/skywriter/resource/sdb/domain.rb +13 -0
  86. data/lib/skywriter/resource/sns/topic.rb +16 -0
  87. data/lib/skywriter/resource/sns/topic_policy.rb +15 -0
  88. data/lib/skywriter/resource/sqs/queue.rb +18 -0
  89. data/lib/skywriter/resource/sqs/queue_policy.rb +15 -0
  90. data/lib/skywriter/resource.rb +165 -0
  91. data/lib/skywriter/resource_property/README.md +64 -0
  92. data/lib/skywriter/resource_property/auto_scaling/block_device_mapping.rb +12 -0
  93. data/lib/skywriter/resource_property/auto_scaling/ebs_block_device.rb +17 -0
  94. data/lib/skywriter/resource_property/auto_scaling/notification_configuration.rb +11 -0
  95. data/lib/skywriter/resource_property/auto_scaling/tag.rb +15 -0
  96. data/lib/skywriter/resource_property/cloud_formation/resource_tag.rb +12 -0
  97. data/lib/skywriter/resource_property/cloud_front/cache_behavior.rb +14 -0
  98. data/lib/skywriter/resource_property/cloud_front/custom_origin.rb +11 -0
  99. data/lib/skywriter/resource_property/cloud_front/default_cache_behavior.rb +13 -0
  100. data/lib/skywriter/resource_property/cloud_front/distribution_config.rb +16 -0
  101. data/lib/skywriter/resource_property/cloud_front/forwarded_value.rb +13 -0
  102. data/lib/skywriter/resource_property/cloud_front/logging.rb +10 -0
  103. data/lib/skywriter/resource_property/cloud_front/origin.rb +12 -0
  104. data/lib/skywriter/resource_property/cloud_front/s3_origin.rb +9 -0
  105. data/lib/skywriter/resource_property/cloud_watch/metric_dimension.rb +10 -0
  106. data/lib/skywriter/resource_property/dynamo_db/attribute_definition.rb +12 -0
  107. data/lib/skywriter/resource_property/dynamo_db/global_secondary_index.rb +14 -0
  108. data/lib/skywriter/resource_property/dynamo_db/key_schema.rb +10 -0
  109. data/lib/skywriter/resource_property/dynamo_db/local_secondary_index.rb +13 -0
  110. data/lib/skywriter/resource_property/dynamo_db/projection.rb +12 -0
  111. data/lib/skywriter/resource_property/dynamo_db/provisioned_throughput.rb +10 -0
  112. data/lib/skywriter/resource_property/ec2/block_device_mapping.rb +12 -0
  113. data/lib/skywriter/resource_property/ec2/ebs_block_device.rb +15 -0
  114. data/lib/skywriter/resource_property/ec2/icmp.rb +10 -0
  115. data/lib/skywriter/resource_property/ec2/mount_point.rb +10 -0
  116. data/lib/skywriter/resource_property/ec2/network_interface.rb +18 -0
  117. data/lib/skywriter/resource_property/ec2/network_interface_association.rb +12 -0
  118. data/lib/skywriter/resource_property/ec2/network_interface_attachment.rb +10 -0
  119. data/lib/skywriter/resource_property/ec2/network_interface_group_item.rb +10 -0
  120. data/lib/skywriter/resource_property/ec2/network_interface_private_ip_specification.rb +10 -0
  121. data/lib/skywriter/resource_property/ec2/port_range.rb +10 -0
  122. data/lib/skywriter/resource_property/ec2/security_group_rule.rb +12 -0
  123. data/lib/skywriter/resource_property/ec2/tag.rb +10 -0
  124. data/lib/skywriter/resource_property/elastic_beanstalk/environment_tier.rb +11 -0
  125. data/lib/skywriter/resource_property/elastic_beanstalk/option_setting.rb +13 -0
  126. data/lib/skywriter/resource_property/elastic_beanstalk/source_bundle.rb +10 -0
  127. data/lib/skywriter/resource_property/elastic_beanstalk/source_configuration.rb +10 -0
  128. data/lib/skywriter/resource_property/elastic_load_balancing/app_cookie_stickiness_policy.rb +10 -0
  129. data/lib/skywriter/resource_property/elastic_load_balancing/health_check.rb +13 -0
  130. data/lib/skywriter/resource_property/elastic_load_balancing/lb_cookie_stickiness_policy.rb +10 -0
  131. data/lib/skywriter/resource_property/elastic_load_balancing/listener.rb +14 -0
  132. data/lib/skywriter/resource_property/elastic_load_balancing/policy.rb +13 -0
  133. data/lib/skywriter/resource_property/rds/security_group_rule.rb +12 -0
  134. data/lib/skywriter/resource_property/redshift/parameter.rb +10 -0
  135. data/lib/skywriter/resource_property/route53/alias_target.rb +10 -0
  136. data/lib/skywriter/resource_property/s3/website_configuration_policy.rb +16 -0
  137. data/lib/skywriter/resource_property/sns/subscription.rb +10 -0
  138. data/lib/skywriter/resource_property/sqs/redrive_policy.rb +10 -0
  139. data/lib/skywriter/resource_property.rb +57 -0
  140. data/lib/skywriter/template.rb +143 -0
  141. data/lib/skywriter/version.rb +3 -0
  142. data/lib/skywriter.rb +8 -0
  143. data/skywriter.gemspec +29 -0
  144. data/spec/skywriter/function_spec.rb +99 -0
  145. data/spec/skywriter/resource/cloud_formation/authentication_spec.rb +36 -0
  146. data/spec/skywriter/resource/cloud_formation/custom_resource_spec.rb +30 -0
  147. data/spec/skywriter/resource/logical_name_pointer_spec.rb +15 -0
  148. data/spec/skywriter/resource/ref_pointer_spec.rb +15 -0
  149. data/spec/skywriter/resource_property/ec2/security_group_rule_spec.rb +7 -0
  150. data/spec/skywriter/resource_property_spec.rb +153 -0
  151. data/spec/skywriter/resource_spec.rb +236 -0
  152. data/spec/skywriter/template_spec.rb +246 -0
  153. data/spec/spec_helper.rb +29 -0
  154. metadata +306 -0
@@ -0,0 +1,165 @@
1
+ module Skywriter
2
+ module Resource
3
+ module DSL
4
+ # Declare a Resource property
5
+ #
6
+ # @param name [Symbol] The property name as it exists in the AWS documentation
7
+ def property(name)
8
+ property_definitions << PropertyDefinition.new(name)
9
+ end
10
+
11
+ # A list of PropertyDefinition instances defined for this Resource
12
+ #
13
+ def property_definitions
14
+ @property_definitions ||= []
15
+ end
16
+
17
+ private
18
+
19
+ def self.extended(base)
20
+ type_name = base.name.gsub("Skywriter::Resource", "AWS")
21
+
22
+ base.send(:define_method, :type) do
23
+ type_name
24
+ end
25
+ end
26
+
27
+ class PropertyDefinition
28
+ attr_reader :name, :key
29
+
30
+ def initialize(name)
31
+ @name = name.to_s
32
+ @key = name.to_s.underscore.to_sym
33
+ end
34
+ end
35
+ end
36
+
37
+ attr_reader :logical_name
38
+
39
+ # @param [String] logical_name The logical name of this Resource. Will be
40
+ # used as the hash key in the 'Resources' hash
41
+ # @param [Hash] options Options hash. Valid values depend on the
42
+ # implementing class - see the AWS documentation at
43
+ # http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html
44
+ # for details. Additionally, you can pass `:additional_dependencies` as
45
+ # described in the README. And `:deletion_policy`, `:metadata` and
46
+ # `:update_policy`.
47
+ #
48
+ def initialize(logical_name, options = {})
49
+ @logical_name = logical_name
50
+
51
+ @additional_dependencies = Set.new(Array(delete_liberally(options, :additional_dependencies)))
52
+ @deletion_policy = delete_liberally(options, :deletion_policy)
53
+ @metadata = delete_liberally(options, :metadata)
54
+ @update_policy = delete_liberally(options, :update_policy)
55
+
56
+ @options = options.freeze
57
+ end
58
+
59
+ # Returns a hash representing the Resource
60
+ #
61
+ # @return [Hash] A JSON-able hash
62
+ #
63
+ def as_json(*)
64
+ Thread.current[:skywriter_as_json_context] = self
65
+
66
+ { logical_name =>
67
+ {
68
+ 'Type' => type,
69
+ 'Properties' => properties.as_json,
70
+ 'DependsOn' => all_dependencies,
71
+ 'Metadata' => metadata,
72
+ 'DeletionPolicy' => deletion_policy,
73
+ 'UpdatePolicy' => update_policy,
74
+ }.reject { |key, value| value.nil? }
75
+ }
76
+ ensure
77
+ Thread.current[:skywriter_as_json_context] = nil
78
+ end
79
+
80
+ # Returns a pointer to this Resource
81
+ #
82
+ # Pointers represent references to resources defined elsewhere in
83
+ # a template. In most cases pointers serialize to something like
84
+ #
85
+ # @example
86
+ # { "Ref" => "logical_name" }
87
+ #
88
+ # In some cases, you might need to refer to a resource using its
89
+ # logical name directly (as opposed to nested in a hash as shown),
90
+ # in which case you can tell `as_pointer` to point with the resource's
91
+ # logical name:
92
+ #
93
+ # @example
94
+ # resource.as_pointer(with: :logical_name)
95
+ #
96
+ # @param with [:ref, :logical_name] How this pointer should be
97
+ # rendered in JSON. Use `:ref` to generate {"Ref": "foo"},
98
+ # and `:logical_name` to generate "foo"
99
+ #
100
+ # @return [Skywriter::Resource::Pointer] A pointer to this resource
101
+ #
102
+ def as_pointer(options = {})
103
+ with = options[:with] || :ref
104
+ case with
105
+ when :ref
106
+ Skywriter::Resource::RefPointer.new(self)
107
+ when :logical_name
108
+ Skywriter::Resource::LogicalNamePointer.new(self)
109
+ else
110
+ raise ArgumentError, "Unrecognized 'with' value '#{with}'"
111
+ end
112
+ end
113
+
114
+ # @api private
115
+ #
116
+ # @param dependency [Skywriter::Resource] A Resource upon which this resource depends.
117
+ #
118
+ def register_dependency(dependency)
119
+ magical_dependencies << dependency.logical_name
120
+ end
121
+
122
+ private
123
+
124
+ attr_reader :options, :additional_dependencies, :deletion_policy, :metadata,
125
+ :update_policy
126
+
127
+ def self.included(base)
128
+ base.extend(DSL)
129
+ end
130
+
131
+ def all_dependencies
132
+ (additional_dependencies + magical_dependencies).to_a
133
+ end
134
+
135
+ def delete_liberally(hash, key)
136
+ hash.delete(key.to_sym) ||
137
+ hash.delete(key.to_s) ||
138
+ hash.delete(key.to_s.camelcase) ||
139
+ hash.delete(key.to_s.camelcase.to_sym)
140
+ end
141
+
142
+ def magical_dependencies
143
+ @magical_dependencies ||= Set.new
144
+ end
145
+
146
+ def properties
147
+ @properties ||= property_definitions.each_with_object({}) do |property_definition, hash|
148
+ if (value = property_value(property_definition))
149
+ hash[property_definition.name] = value
150
+ end
151
+ end
152
+ end
153
+
154
+ def property_value(property_definition)
155
+ options[property_definition.key.to_sym] ||
156
+ options[property_definition.key.to_s] ||
157
+ options[property_definition.name.to_sym] ||
158
+ options[property_definition.name.to_s]
159
+ end
160
+
161
+ def property_definitions
162
+ self.class.property_definitions
163
+ end
164
+ end
165
+ end
@@ -0,0 +1,64 @@
1
+ # ResourceProperty Conversions
2
+
3
+ The AWS CloudFormation documentation uses inconsistent naming conventions
4
+ for Resource Properties. We've attempted to normalize these names, and have
5
+ provided the following mapping for reference.
6
+
7
+ Amazon Name | Skywalker Class | Naming Comments
8
+ ----------- | --------------- | ---------------
9
+ AWS CloudFormation AutoScaling Block Device Mapping Property Type | |
10
+ AWS CloudFormation AutoScaling EBS Block Device Property Type | |
11
+ Auto Scaling NotificationConfiguration Property Type | |
12
+ Auto Scaling Tags Property Type | |
13
+ CloudFormation Stack Parameters Property Type | |
14
+ CloudFront CacheBehavior Type | |
15
+ CloudFront ForwardedValues Type | |
16
+ CloudFront CustomOrigin Type | *::CloudFront::CustomOrigin | dropped 'Type'
17
+ CloudFront DefaultCacheBehavior Type | *::CloudFront::DefaultCacheBehavior | dropped 'Type'
18
+ CloudFront DistributionConfig Type | *::CloudFront::DistributionConfig | dropped 'Type'
19
+ CloudFront Logging Type | *::CloudFront::Logging | dropped 'Type'
20
+ CloudFront Origin Type | *::CloudFront::Origin | dropped 'Type'
21
+ CloudFront S3Origin Type | *::CloudFront::S3Origin | dropped 'Type'
22
+ CloudWatch Metric Dimension Property Type | *::CloudWatch::MetricDimension | dropped 'Property Type'
23
+ DynamoDB Attribute Definitions | *::DynamoDB::AttributeDefinition |
24
+ DynamoDB Global Secondary Indexes | *::DynamoDB::GlobalSecondaryIndex | made singular
25
+ DynamoDB Key Schema | *::DynamoDB::KeySchema |
26
+ DynamoDB Local Secondary Indexes | *::DynamoDB::LocalSecondaryIndex | made singular
27
+ DynamoDB Projection Object | *::DynamoDB::Projection | dropped 'Object'
28
+ DynamoDB Provisioned Throughput | *::DynamoDB::ProvisionedThroughput |
29
+ AWS CloudFormation EC2 Block Device Mapping Property Type | *::EC2::BlockDeviceMapping | dropped 'Type'
30
+ AWS CloudFormation EC2 Block Device Property Type | *::EC2::EBSBlockDevice | dropped 'Type'
31
+ EC2 ICMP Property Type | *::EC2::ICMP | dropped 'Type'
32
+ EC2 MountPoint Property Type | *::EC2::MountPoint | dropped 'Type'
33
+ EC2 NetworkInterface Embedded Property Type | *::EC2::NetworkInterface | dropped 'Type'
34
+ EC2 Network Interface Association | *::EC2::NetworkInterfaceAssociation |
35
+ EC2 Network Interface Attachment | *::EC2::NetworkInterfaceAttachment |
36
+ EC2 Network Interface Group Item | *::EC2::NetworkInterfaceGroupItem |
37
+ EC2 Network Interface Private IP Specification | *::EC2::NetworkInterfacePrivateIPSpecification |
38
+ EC2 PortRange Property Type | *::EC2::PortRange | dropped 'Type'
39
+ EC2 Security Group Rule Property Type | *::EC2::SecurityGroupRule | dropped 'Type'
40
+ EC2 Tag | *::EC2::Tag |
41
+ AWS Elastic Beanstalk Environment Tier Property Type | *::ElasticBeanstalk::EnvironmentTier | dropped 'Property Type'
42
+ AWS Elastic Beanstalk OptionSettings Property Type | *::ElasticBeanstalk::OptionSetting | dropped 'Property Type', made singular
43
+ AWS Elastic Beanstalk SourceBundle Property Type | *::ElasticBeanstalk::SourceBundle | dropped 'Property Type'
44
+ AWS Elastic Beanstalk SourceConfiguration Property Type | *::ElasticBeanstalk::SourceConfiguration | dropped 'Property Type'
45
+ ElasticLoadBalancing AppCookieStickinessPolicy Type | *::ElasticLoadBalancing::AppCookieStickinessPolicy | dropped 'Type'
46
+ ElasticLoadBalancing HealthCheck Type | *::ElasticLoadBalancing::HealthCheck | dropped 'Type'
47
+ ElasticLoadBalancing LBCookieStickinessPolicy Type | *::ElasticLoadBalancing::LBCookieStickinessPolicy | dropped 'Type'
48
+ ElasticLoadBalancing Listener Property Type | *::ElasticLoadBalancing::Listener | dropped 'Property Type'
49
+ ElasticLoadBalancing Policy Type | *::ElasticLoadBalancing::Policy | dropped 'Type'
50
+ Name Type | |
51
+ Amazon Redshift Parameter Type | *::Redshift::Parameter | dropped 'Type'
52
+ AWS CloudFormation Resource Tags Type | *::CloudFormation::ResourceTag | dropped 'Type', made singular
53
+ RDS Security Group Rule | *::RDS::SecurityGroupRule |
54
+ Route 53 AliasTarget Property Type | *::Route53::AliasTarget | dropped 'Property Type'
55
+ AWS CloudFormation Website Configuration Property Type | *::S3::WebsiteConfiguration | dropped 'Property Type', inferred namespace
56
+ SNS Subscription Property Type | *::SNS::Subscription | dropped 'Property Type'
57
+ Amazon SQS RedrivePolicy | *::SQS::RedrivePolicy |
58
+
59
+ In general, Resource Property names have been stripped of `Type`, `Property Type` and
60
+ 'Embedded Property Type', and product namespaces (ie `SQS`, `ElasticLoadBalancing`)
61
+ have been inferred from the documentation where possible. When a type is called out
62
+ as being an 'embedded property' of namespaced resource, that namespace has been adopted for
63
+ the Resource Property. In some cases plural forms have been made singular (where the
64
+ entity being described is singular).
@@ -0,0 +1,12 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module AutoScaling
4
+ class BlockDeviceMapping < Skywriter::ResourceProperty
5
+ property :DeviceName
6
+ property :Ebs
7
+ property :NoDevice
8
+ property :VirtualName
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,17 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module AutoScaling
4
+ class EBSBlockDevice < Skywriter::ResourceProperty
5
+ property :DeleteOnTermination
6
+ property :Iops
7
+ property :SnapshotId
8
+ property :VolumeSize
9
+ property :VolumeType
10
+ end
11
+
12
+ BlockDevice = EBSBlockDevice
13
+
14
+ end
15
+ end
16
+ end
17
+
@@ -0,0 +1,11 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module AutoScaling
4
+ class NotificationConfiguration < Skywriter::ResourceProperty
5
+ property :TopicARN
6
+ property :NotificationTypes
7
+ end
8
+ end
9
+ end
10
+ end
11
+
@@ -0,0 +1,15 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module AutoScaling
4
+ class Tag < Skywriter::ResourceProperty
5
+ property :Key
6
+ property :Value
7
+ property :PropagateAtLaunch
8
+ end
9
+
10
+ Tags = Tag
11
+
12
+ end
13
+ end
14
+ end
15
+
@@ -0,0 +1,12 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module CloudFormation
4
+ class ResourceTag < Skywriter::ResourceProperty
5
+ property :Key
6
+ property :Value
7
+ end
8
+
9
+ ResourceTags = ResourceTag
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,14 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module CloudFront
4
+ class CacheBehavior < Skywriter::ResourceProperty
5
+ property :TargetOriginId
6
+ property :ForwardedValues
7
+ property :TrustedSigners
8
+ property :ViewerProtocolPolicy
9
+ property :MinTTL
10
+ property :PathPattern
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,11 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module CloudFront
4
+ class CustomOrigin < Skywriter::ResourceProperty
5
+ property :HTTPPort
6
+ property :HTTPSPort
7
+ property :OriginProtocolPolicy
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module CloudFront
4
+ class DefaultCacheBehavior < Skywriter::ResourceProperty
5
+ property :TargetOriginId
6
+ property :ForwardedValues
7
+ property :TrustedSigners
8
+ property :ViewerProtocolPolicy
9
+ property :MinTTL
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,16 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module CloudFront
4
+ class DistributionConfig < Skywriter::ResourceProperty
5
+ property :Aliases
6
+ property :CacheBehaviors
7
+ property :Comment
8
+ property :DefaultCacheBehavior
9
+ property :DefaultRootObject
10
+ property :Enabled
11
+ property :Logging
12
+ property :Origins
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,13 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module CloudFront
4
+ class ForwardedValue < Skywriter::ResourceProperty
5
+ property :QueryString
6
+ end
7
+
8
+ ForwardedValues = ForwardedValue
9
+
10
+ end
11
+ end
12
+ end
13
+
@@ -0,0 +1,10 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module CloudFront
4
+ class Logging < Skywriter::ResourceProperty
5
+ property :Bucket
6
+ property :Prefix
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,12 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module CloudFront
4
+ class Origin < Skywriter::ResourceProperty
5
+ property :DomainName
6
+ property :Id
7
+ property :S3OriginConfig
8
+ property :CustomOriginConfig
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module CloudFront
4
+ class S3Origin < Skywriter::ResourceProperty
5
+ property :OriginAccessIdentity
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module CloudWatch
4
+ class MetricDimension < Skywriter::ResourceProperty
5
+ property :Name
6
+ property :Value
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,12 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module DynamoDB
4
+ class AttributeDefinition < Skywriter::ResourceProperty
5
+ property :AttributeName
6
+ property :AttributeType
7
+ end
8
+
9
+ AttributeDefinitions = AttributeDefinition
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,14 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module DynamoDB
4
+ class GlobalSecondaryIndex < Skywriter::ResourceProperty
5
+ property :IndexName
6
+ property :KeySchema
7
+ property :Projection
8
+ property :ProvisionedThroughput
9
+ end
10
+
11
+ GlobalSecondaryIndexes = GlobalSecondaryIndex
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,10 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module DynamoDB
4
+ class KeySchema < Skywriter::ResourceProperty
5
+ property :AttributeName
6
+ property :KeyType
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,13 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module DynamoDB
4
+ class LocalSecondaryIndex < Skywriter::ResourceProperty
5
+ property :IndexName
6
+ property :KeySchema
7
+ property :Projection
8
+ end
9
+
10
+ LocalSecondaryIndexes = LocalSecondaryIndex
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module DynamoDB
4
+ class Projection < Skywriter::ResourceProperty
5
+ property :NonKeyAttributes
6
+ property :ProjectionType
7
+ end
8
+
9
+ ProjectionObject = Projection
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,10 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module DynamoDB
4
+ class ProvisionedThroughput < Skywriter::ResourceProperty
5
+ property :ReadCapacityUnits
6
+ property :WriteCapacityUnits
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,12 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module EC2
4
+ class BlockDeviceMapping < Skywriter::ResourceProperty
5
+ property :DeviceName
6
+ property :Ebs
7
+ property :NoDevice
8
+ property :VirtualName
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,15 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module EC2
4
+ class EBSBlockDevice < Skywriter::ResourceProperty
5
+ property :DeleteOnTermination
6
+ property :Iops
7
+ property :SnapshotId
8
+ property :VolumeSize
9
+ property :VolumeType
10
+ end
11
+
12
+ BlockDevice = EBSBlockDevice
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,10 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module EC2
4
+ class ICMP < Skywriter::ResourceProperty
5
+ property :Code
6
+ property :Type
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module EC2
4
+ class MountPoint < Skywriter::ResourceProperty
5
+ property :Device
6
+ property :VolumeId
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,18 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module EC2
4
+ class NetworkInterface < Skywriter::ResourceProperty
5
+ property :AssociatePublicIpAddress
6
+ property :DeleteOnTermination
7
+ property :Description
8
+ property :DeviceIndex
9
+ property :GroupSet
10
+ property :NetworkInterfaceId
11
+ property :PrivateIpAddress
12
+ property :PrivateIpAddresses
13
+ property :SecondaryPrivateIpAddressCount
14
+ property :SubnetId
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,12 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module EC2
4
+ class NetworkInterfaceAssociation < Skywriter::ResourceProperty
5
+ property :AttachmentID
6
+ property :InstanceID
7
+ property :PublicIp
8
+ property :IpOwnerId
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,10 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module EC2
4
+ class NetworkInterfaceAttachment < Skywriter::ResourceProperty
5
+ property :AttachmentID
6
+ property :InstanceID
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module EC2
4
+ class NetworkInterfaceGroupItem < Skywriter::ResourceProperty
5
+ property :GroupId
6
+ property :GroupName
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module EC2
4
+ class NetworkInterfacePrivateIPSpecification < Skywriter::ResourceProperty
5
+ property :PrivateIpAddress
6
+ property :Primary
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module EC2
4
+ class PortRange < Skywriter::ResourceProperty
5
+ property :From
6
+ property :To
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,12 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module EC2
4
+ class SecurityGroupRule < Skywriter::ResourceProperty
5
+ property :FromPort
6
+ property :ToPort
7
+ property :IpProtocol
8
+ property :CidrIp
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,10 @@
1
+ module Skywriter
2
+ class ResourceProperty
3
+ module EC2
4
+ class Tag < Skywriter::ResourceProperty
5
+ property :Key
6
+ property :Value
7
+ end
8
+ end
9
+ end
10
+ end