convection 0.2.21 → 0.2.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 074ce594bd457dfa3a9174a47b5a9813f7a1d740
4
- data.tar.gz: 589968f7d3487cb35d9d0166ab09b3bff11ffdc6
3
+ metadata.gz: fef6875e285987d265328f4eb0fc5aebcaa8508c
4
+ data.tar.gz: 2cdd25d2e78400356af0770840830eb8026ce7cd
5
5
  SHA512:
6
- metadata.gz: 094c835c822791ea64c117a8c61e11d42a27d2aa32eecf70525ab26d33384612af68ee20a8c5422a78f3948fd94fa21091a4e9fe894038fb08a8207c23954d36
7
- data.tar.gz: eab4ff96aa467afb8113a65cc20cbcbdfe537718041efaa56609d9e0c4b3ad01cb450b0aeaeeb16aceb26717b2ac79d2eff9b96eefc8b264b4cb5a85e7939496
6
+ metadata.gz: 8636d3d6a2581bda118b8e59827cf5da3f6c0a7e17389e4d55b82fb09f8214f11b6b128b59715de158a59e828d898833d63cb909ea2063f3f8c6726f89267a55
7
+ data.tar.gz: e6053ae4416c69d5e50a059fc5a0833b706a2e084a21ef93a4838954516a8e083e295e58ec2be08b7ca273ccfe67a09a38939c10ba124f7540afa30849fa6386
@@ -352,4 +352,5 @@ require_relative 'template/mapping'
352
352
  require_relative 'template/condition'
353
353
  require_relative 'template/resource'
354
354
  require_relative 'template/resource_property'
355
+ require_relative 'template/resource_attribute'
355
356
  require_relative 'template/output'
@@ -287,6 +287,7 @@ module Convection
287
287
  attr_reader :name
288
288
  attr_reader :template
289
289
  attr_reader :properties
290
+ attr_reader :resource_attributes
290
291
  attr_reader :exist
291
292
  alias_method :exist?, :exist
292
293
 
@@ -298,6 +299,8 @@ module Convection
298
299
  @deletion_policy = nil
299
300
  @exist = false
300
301
 
302
+ @resource_attributes = []
303
+
301
304
  ## Instantiate properties
302
305
  @properties = Model::Collection.new
303
306
  resource = self
@@ -353,6 +356,7 @@ module Convection
353
356
  'Type' => type,
354
357
  'Properties' => properties.map(true, &:render)
355
358
  }.tap do |resource|
359
+ resource_attributes.map { |a| a.render resource }
356
360
  resource['DependsOn'] = @depends_on unless @depends_on.empty?
357
361
  resource['DeletionPolicy'] = @deletion_policy unless @deletion_policy.nil?
358
362
  render_condition(resource)
@@ -32,6 +32,11 @@ module Convection
32
32
  render_tags(resource)
33
33
  end
34
34
  end
35
+
36
+ def update_policy(&block)
37
+ policy = ResourceAttribute::UpdatePolicy.new(self)
38
+ policy.instance_exec(&block) if block
39
+ end
35
40
  end
36
41
  end
37
42
  end
@@ -0,0 +1,23 @@
1
+ require_relative '../resource'
2
+
3
+ module Convection
4
+ module Model
5
+ class Template
6
+ class Resource
7
+ ##
8
+ # AWS::DirectoryService::SimpleAD
9
+ ##
10
+ class DirectoryServiceSimpleAD < Resource
11
+ type 'AWS::DirectoryService::SimpleAD', :directoryservice_simple_ad
12
+ property :description, 'Description'
13
+ property :enable_sso, 'EnableSso'
14
+ property :name, 'Name'
15
+ property :password, 'Password'
16
+ property :short_name, 'ShortName'
17
+ property :size, 'Size'
18
+ property :vpc_settings, 'VpcSettings', :type => :hash
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,15 @@
1
+ module Convection
2
+ module Model
3
+ class Template
4
+ # Base class for {http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-product-attribute-reference.html}
5
+ class ResourceAttribute
6
+ def initialize(parent)
7
+ parent.resource_attributes << self
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+
14
+ ## Require all resource attributes
15
+ Dir.glob(File.expand_path('../resource_attribute/*.rb', __FILE__)).map { |r| require r }
@@ -0,0 +1,44 @@
1
+ require_relative '../resource_attribute'
2
+
3
+ module Convection
4
+ module Model
5
+ class Template
6
+ class ResourceAttribute
7
+ # Represents {http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html}
8
+ class UpdatePolicy < ResourceAttribute
9
+ @pause = 'PT5M'
10
+ @min_in_service = 0
11
+ @max_batch = 1
12
+
13
+ def pause_time(val)
14
+ @pause = val
15
+ end
16
+
17
+ def min_instances_in_service(val)
18
+ @min_in_service = val
19
+ end
20
+
21
+ def max_batch_size(val)
22
+ @max_batch = val
23
+ end
24
+
25
+ def render(resource)
26
+ resource.tap do |r|
27
+ r['UpdatePolicy'] = {
28
+ 'AutoScalingScheduledAction' => {
29
+ 'IgnoreUnmodifiedGroupSizeProperties' => true
30
+ },
31
+ 'AutoScalingRollingUpdate' => {
32
+ 'MinInstancesInService' => @min_in_service,
33
+ 'MaxBatchSize' => @max_batch,
34
+ 'WaitOnResourceSignals' => false,
35
+ 'PauseTime' => @pause
36
+ }
37
+ }
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,40 @@
1
+ require 'test_helper'
2
+ require 'json'
3
+
4
+ describe 'AWS::DirectoryService' do
5
+ let(:simple_ad_template) do
6
+ ::Convection.template do
7
+ directoryservice_simple_ad 'SimpleActiveDirectory' do
8
+ description 'Example simple AD'
9
+ enable_sso false
10
+ name 'ExampleSimpleAD'
11
+ password 'directory.password'
12
+ short_name 'directory.name'
13
+ size 'Small'
14
+
15
+ vpc_settings 'SubnetIds', ['subnet-deadb33f']
16
+ vpc_settings 'VpcId', 'vpc-deadb33f'
17
+ end
18
+ end
19
+ end
20
+
21
+ describe 'SimpleAD' do
22
+ it 'sets VpcSettings.SubnetIds' do
23
+ vpc_settings = simple_ad_json.fetch('Properties').fetch('VpcSettings')
24
+ assert_equal vpc_settings.fetch('SubnetIds'), ['subnet-deadb33f']
25
+ end
26
+
27
+ it 'sets VpcSettings.VpcId' do
28
+ vpc_settings = simple_ad_json.fetch('Properties').fetch('VpcSettings')
29
+ assert_equal vpc_settings.fetch('VpcId'), 'vpc-deadb33f'
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def simple_ad_json
36
+ JSON.parse(simple_ad_template.to_json)
37
+ .fetch('Resources')
38
+ .fetch('SimpleActiveDirectory')
39
+ end
40
+ end
@@ -0,0 +1,54 @@
1
+ require 'test_helper'
2
+ require 'json'
3
+ require 'pp'
4
+
5
+ class TestUpdatePolicies < Minitest::Test
6
+ def setup
7
+ @template = ::Convection.template do
8
+ description 'UpdatePolicies Test Template'
9
+
10
+ ec2_security_group 'MyEC2SecGroup' do
11
+ ingress_rule(:tcp, 80, 'my.ip.address')
12
+ end
13
+
14
+ auto_scaling_launch_configuration 'TestLaunchConfig' do
15
+ image_id 'ami-123'
16
+ instance_type 't2.nano'
17
+
18
+ security_group fn_ref('MyEC2SecGroup')
19
+ end
20
+
21
+ auto_scaling_auto_scaling_group 'TestAutoScalingGroup' do
22
+ launch_configuration_name fn_ref('TestLaunchConfig')
23
+
24
+ update_policy do
25
+ pause_time 'test_time'
26
+ min_instances_in_service 10
27
+ max_batch_size 2
28
+ end
29
+ end
30
+ end
31
+ end
32
+
33
+ def from_json
34
+ JSON.parse(@template.to_json)
35
+ end
36
+
37
+ def test_update_policy
38
+ json = from_json['Resources']['TestAutoScalingGroup']
39
+ type = json['Type']
40
+ assert_equal 'AWS::AutoScaling::AutoScalingGroup', type
41
+
42
+ update_policy = json['UpdatePolicy']
43
+ refute update_policy.nil?, 'UpdatePolicy does not exist in the generated template'
44
+
45
+ pause_time = json['UpdatePolicy']['AutoScalingRollingUpdate']['PauseTime']
46
+ assert_equal 'test_time', pause_time
47
+
48
+ min_in_service = json['UpdatePolicy']['AutoScalingRollingUpdate']['MinInstancesInService']
49
+ assert_equal 10, min_in_service
50
+
51
+ max_batch_size = json['UpdatePolicy']['AutoScalingRollingUpdate']['MaxBatchSize']
52
+ assert_equal 2, max_batch_size
53
+ end
54
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: convection
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.21
4
+ version: 0.2.22
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Manero
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-20 00:00:00.000000000 Z
11
+ date: 2016-04-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -132,6 +132,7 @@ files:
132
132
  - lib/convection/model/template/resource/aws_auto_scaling_scaling_policy.rb
133
133
  - lib/convection/model/template/resource/aws_cloud_watch_alarm.rb
134
134
  - lib/convection/model/template/resource/aws_cloudfront_distribution.rb
135
+ - lib/convection/model/template/resource/aws_directory_service_simple_ad.rb
135
136
  - lib/convection/model/template/resource/aws_ec2_eip.rb
136
137
  - lib/convection/model/template/resource/aws_ec2_eip_association.rb
137
138
  - lib/convection/model/template/resource/aws_ec2_instance.rb
@@ -185,6 +186,8 @@ files:
185
186
  - lib/convection/model/template/resource/aws_sns_topic_policy.rb
186
187
  - lib/convection/model/template/resource/aws_sqs_queue.rb
187
188
  - lib/convection/model/template/resource/aws_sqs_queue_policy.rb
189
+ - lib/convection/model/template/resource_attribute.rb
190
+ - lib/convection/model/template/resource_attribute/update_policy.rb
188
191
  - lib/convection/model/template/resource_property.rb
189
192
  - lib/convection/model/template/resource_property/aws_cloudfront_cachebehavior.rb
190
193
  - lib/convection/model/template/resource_property/aws_cloudfront_customerrorresponse.rb
@@ -207,6 +210,7 @@ files:
207
210
  - lib/convection/model/template/resource_property/aws_lambda_vpc_config.rb
208
211
  - lib/convection/version.rb
209
212
  - test/convection/model/test_conditions.rb
213
+ - test/convection/model/test_directory_service.rb
210
214
  - test/convection/model/test_elasticache.rb
211
215
  - test/convection/model/test_lambdas.rb
212
216
  - test/convection/model/test_loggroups.rb
@@ -214,6 +218,7 @@ files:
214
218
  - test/convection/model/test_rds.rb
215
219
  - test/convection/model/test_template.rb
216
220
  - test/convection/model/test_trust.rb
221
+ - test/convection/model/test_update_policies.rb
217
222
  - test/convection/model/test_validation.rb
218
223
  - test/convection/model/test_vpc_endpoint.rb
219
224
  - test/test_helper.rb
@@ -243,6 +248,7 @@ specification_version: 4
243
248
  summary: A fully generic, modular DSL for AWS CloudFormation
244
249
  test_files:
245
250
  - test/convection/model/test_conditions.rb
251
+ - test/convection/model/test_directory_service.rb
246
252
  - test/convection/model/test_elasticache.rb
247
253
  - test/convection/model/test_lambdas.rb
248
254
  - test/convection/model/test_loggroups.rb
@@ -250,6 +256,7 @@ test_files:
250
256
  - test/convection/model/test_rds.rb
251
257
  - test/convection/model/test_template.rb
252
258
  - test/convection/model/test_trust.rb
259
+ - test/convection/model/test_update_policies.rb
253
260
  - test/convection/model/test_validation.rb
254
261
  - test/convection/model/test_vpc_endpoint.rb
255
262
  - test/test_helper.rb