cfndsl 0.0.16 → 0.1.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7b265f1255b48223c012215b895145a7d520249c
4
+ data.tar.gz: ca61f61cda439daec8d124369f5d5f28f9b31c80
5
+ SHA512:
6
+ metadata.gz: f0df157ea4421e9b3d8426f65d7f30fa57ae27ebf372bcda3699507001b36429b4cfb752096ce95c0add85055f357338478a230a5028ecdcadd4361c5717432e
7
+ data.tar.gz: 48e9633475ed557c62380ff07c0277fb904ad3f63743daaeaeaf2e333b47335e2070e72c472ed782a692a2fd78cc00b313704bb59ed1626f78e2576dc705c7d7
data/lib/cfndsl.rb CHANGED
@@ -6,25 +6,25 @@ require 'cfndsl/RefCheck'
6
6
  require 'cfndsl/JSONable'
7
7
  require 'cfndsl/Types'
8
8
  require 'cfndsl/Properties'
9
+ require 'cfndsl/UpdatePolicy'
10
+ require 'cfndsl/Conditions'
9
11
  require 'cfndsl/Mappings'
10
12
  require 'cfndsl/Resources'
11
13
  require 'cfndsl/Metadata'
12
14
  require 'cfndsl/Parameters'
13
15
  require 'cfndsl/Outputs'
14
- require 'cfndsl/CloudFormationTemplate'
16
+ require 'cfndsl/CloudFormationTemplate'
15
17
 
16
18
  def CloudFormation(&block)
17
19
  x = CfnDsl::CloudFormationTemplate.new
18
20
  x.declare(&block)
19
21
  invalid_references = x.checkRefs()
20
22
  if( invalid_references ) then
21
- puts invalid_references.join("\n");
22
- exit(-1)
23
+ abort invalid_references.join("\n")
23
24
  elsif( CfnDsl::Errors.errors? ) then
24
- CfnDsl::Errors.report
25
+ abort CfnDsl::Errors.errors.join("\n")
25
26
  else
26
27
  x.generateOutput
27
28
  end
28
29
  end
29
30
 
30
-
@@ -1,26 +1,28 @@
1
1
  require 'cfndsl/JSONable'
2
2
  require 'cfndsl/names'
3
3
 
4
- module CfnDsl
5
- class CloudFormationTemplate < JSONable
4
+ module CfnDsl
5
+ class CloudFormationTemplate < JSONable
6
6
  ##
7
7
  # Handles the overall template object
8
8
  dsl_attr_setter :AWSTemplateFormatVersion, :Description
9
- dsl_content_object :Parameter, :Output, :Resource, :Mapping
10
-
9
+ dsl_content_object :Condition, :Parameter, :Output, :Resource, :Mapping
10
+
11
11
  def initialize
12
12
  @AWSTemplateFormatVersion = "2010-09-09"
13
13
  end
14
-
15
- def generateOutput()
14
+
15
+ def generateOutput()
16
16
  puts self.to_json # uncomment for pretty printing # {:space => ' ', :indent => ' ', :object_nl => "\n", :array_nl => "\n" }
17
17
  end
18
18
 
19
- @@globalRefs = {
20
- "AWS::NotificationARNs" => 1,
19
+ @@globalRefs = {
20
+ "AWS::NotificationARNs" => 1,
21
21
  "AWS::Region" => 1,
22
22
  "AWS::StackId" => 1,
23
- "AWS::StackName" => 1
23
+ "AWS::StackName" => 1,
24
+ "AWS::AccountId" => 1,
25
+ "AWS::NoValue" => 1
24
26
  }
25
27
 
26
28
  def isValidRef( ref, origin=nil)
@@ -30,15 +32,15 @@ module CfnDsl
30
32
  return true if @@globalRefs.has_key?( ref )
31
33
 
32
34
  return true if @Parameters && @Parameters.has_key?( ref )
33
-
35
+
34
36
  if( @Resources.has_key?( ref ) ) then
35
- return !origin || !@_ResourceRefs || !@_ResourceRefs[ref] || !@_ResourceRefs[ref].has_key?(origin)
37
+ return !origin || !@_ResourceRefs || !@_ResourceRefs[ref] || !@_ResourceRefs[ref].has_key?(origin)
36
38
  end
37
39
 
38
40
  return false
39
41
  end
40
42
 
41
- def checkRefs()
43
+ def checkRefs()
42
44
  invalids = []
43
45
  @_ResourceRefs = {}
44
46
  if(@Resources) then
@@ -62,10 +64,10 @@ module CfnDsl
62
64
  end
63
65
  end
64
66
  end
65
- return invalids.length>0 ? invalids : nil
67
+ return invalids.length>0 ? invalids : nil
66
68
  end
67
69
 
68
-
70
+
69
71
  names = {}
70
72
  nametypes = {}
71
73
  CfnDsl::Types::AWS_Types["Resources"].each_pair do |name, type|
@@ -77,11 +79,11 @@ module CfnDsl
77
79
  if( ptype.instance_of? String )
78
80
  create_klass = CfnDsl::Types.const_get( ptype );
79
81
 
80
- klass.class_eval do
82
+ klass.class_eval do
81
83
  CfnDsl::methodNames(pname) do |method|
82
84
  define_method(method) do |*values, &block|
83
85
  if( values.length <1 ) then
84
- values.push create_klass.new
86
+ values.push create_klass.new
85
87
  end
86
88
  @Properties ||= {}
87
89
  @Properties[pname] ||= CfnDsl::PropertyDefinition.new( *values )
@@ -124,7 +126,7 @@ module CfnDsl
124
126
 
125
127
  end
126
128
  parts = name.split "::"
127
- while( parts.length > 0)
129
+ while( parts.length > 0)
128
130
  abreve_name = parts.join "_"
129
131
  if( names.has_key? abreve_name ) then
130
132
  # this only happens if there is an ambiguity
@@ -138,7 +140,7 @@ module CfnDsl
138
140
 
139
141
 
140
142
  end
141
-
143
+
142
144
  #Define property setter methods for each of the unambiguous type names
143
145
  names.each_pair do |typename,type|
144
146
  if(type) then
@@ -0,0 +1,19 @@
1
+ require 'cfndsl/JSONable'
2
+
3
+ module CfnDsl
4
+ class ConditionDefinition < JSONable
5
+ #
6
+ # Handles condition objects
7
+ #
8
+ # Usage:
9
+ # Condition :ConditionName, FnEqual(Ref(:ParameterName), 'helloworld')
10
+
11
+ def initialize(value)
12
+ @value = value
13
+ end
14
+
15
+ def to_json(*a)
16
+ @value.to_json(*a)
17
+ end
18
+ end
19
+ end
data/lib/cfndsl/Errors.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  module CfnDsl
2
2
  module Errors
3
3
  @@errors = []
4
-
5
- def self.error( err, idx=nil )
4
+
5
+ def self.error( err, idx=nil )
6
6
  if(idx.nil?) then
7
7
  @@errors.push ( err + "\n" + caller.join("\n") + "\n" )
8
8
  else
@@ -11,19 +11,17 @@ module CfnDsl
11
11
  else
12
12
  err_loc = caller[idx]
13
13
  end
14
-
14
+
15
15
  @@errors.push ( err_loc + " " + err + "\n" )
16
16
  end
17
17
  end
18
-
18
+
19
19
  def self.clear()
20
20
  @@errors = []
21
21
  end
22
22
 
23
- def self.report()
24
- @@errors.each do |err|
25
- puts err
26
- end
23
+ def self.errors()
24
+ @@errors
27
25
  end
28
26
 
29
27
  def self.errors?()
@@ -6,64 +6,106 @@ module CfnDsl
6
6
  ##
7
7
  # These functions are available anywhere inside
8
8
  # a block for a JSONable object.
9
- def Ref(value)
9
+ def Ref(value)
10
10
  ##
11
11
  # Equivalent to the CloudFormation template built in function Ref
12
12
  RefDefinition.new(value)
13
13
  end
14
-
14
+
15
15
  def FnBase64( value )
16
16
  ##
17
17
  # Equivalent to the CloudFormation template built in function Fn::Base64
18
18
  Fn.new("Base64", value);
19
19
  end
20
-
20
+
21
21
  def FnFindInMap( map, key, value)
22
22
  ##
23
23
  # Equivalent to the CloudFormation template built in function Fn::FindInMap
24
24
  Fn.new("FindInMap", [map,key,value] )
25
- end
26
-
25
+ end
26
+
27
27
  def FnGetAtt(logicalResource, attribute)
28
28
  ##
29
29
  # Equivalent to the CloudFormation template built in function Fn::GetAtt
30
- Fn.new( "GetAtt", [logicalResource, attribute], [logicalResource] )
30
+ Fn.new( "GetAtt", [logicalResource, attribute] )
31
31
  end
32
-
32
+
33
33
  def FnGetAZs(region)
34
34
  ##
35
35
  # Equivalent to the CloudFormation template built in function Fn::GetAZs
36
36
  Fn.new("GetAZs", region)
37
37
  end
38
-
38
+
39
39
  def FnJoin(string, array)
40
40
  ##
41
41
  # Equivalent to the CloudFormation template built in function Fn::Join
42
42
  Fn.new("Join", [ string, array] )
43
43
  end
44
44
 
45
+ def FnAnd(array)
46
+ ##
47
+ # Equivalent to the CloudFormation template built in function Fn::And
48
+ if !array || array.count < 2 || array.count > 10
49
+ raise 'The array passed to Fn::And must have at least 2 elements and no more than 10'
50
+ end
51
+ Fn.new("And", array)
52
+ end
53
+
54
+ def FnEquals(value1, value2)
55
+ ##
56
+ # Equivalent to the Cloudformation template built in function Fn::Equals
57
+ Fn.new("Equals", [value1, value2])
58
+ end
59
+
60
+ def FnIf(conditionName, trueValue, falseValue)
61
+ ##
62
+ # Equivalent to the Cloudformation template built in function Fn::If
63
+ Fn.new("If", [conditionName, trueValue, falseValue])
64
+ end
65
+
66
+ def FnNot(value)
67
+ ##
68
+ # Equivalent to the Cloudformation template built in function Fn::Not
69
+ Fn.new("Not", value)
70
+ end
71
+
72
+ def FnOr(array)
73
+ ##
74
+ # Equivalent to the CloudFormation template built in function Fn::Or
75
+ if !array || array.count < 2 || array.count > 10
76
+ raise 'The array passed to Fn::Or must have at least 2 elements and no more than 10'
77
+ end
78
+ Fn.new("Or", array)
79
+ end
80
+
81
+ def FnSelect(index, array)
82
+ ##
83
+ # Equivalent to the CloudFormation template built in function Fn::Select
84
+ Fn.new("Select", [ index, array] )
85
+ end
86
+
45
87
  def FnFormat(string, *arguments)
46
88
  ##
47
89
  # Usage
48
90
  # FnFormat( "This is a %0. It is 100%% %1","test", "effective")
49
91
  # or
50
- # FnFormat( "This is a %{test}. It is 100%% %{effective},
51
- # :test=>"test",
92
+ # FnFormat( "This is a %{test}. It is 100%% %{effective},
93
+ # :test=>"test",
52
94
  # :effective=>"effective")
53
95
  #
54
96
  # These will each generate a call to Fn::Join that when
55
97
  # evaluated will produce the string "This is a test. It is 100%
56
98
  # effective."
57
99
  #
58
- # Think of this as %0,%1, etc in the format string being replaced by the
100
+ # Think of this as %0,%1, etc in the format string being replaced by the
59
101
  # corresponding arguments given after the format string. '%%' is replaced
60
- # by the '%' character.
61
- #
102
+ # by the '%' character.
103
+ #
62
104
  # The actual Fn::Join call corresponding to the above FnFormat call would be
63
105
  # {"Fn::Join": ["",["This is a ","test",". It is 100","%"," ","effective"]]}
64
106
  #
65
107
  # If no arguments are given, or if a hash is given and the format
66
- # variable name does not exist in the hash, it is used as a Ref
108
+ # variable name does not exist in the hash, it is used as a Ref
67
109
  # to an existing resource or parameter.
68
110
  #
69
111
  array = [];
@@ -77,7 +119,7 @@ module CfnDsl
77
119
  elsif( $3 ) then
78
120
  array.push hash[ $4 ] || hash[ $4.to_sym ] || Ref( $4 )
79
121
  end
80
- end
122
+ end
81
123
  else
82
124
  string.scan( /(.*?)(%(%|\d+)|\z)/m ) do |x,y|
83
125
  array.push $1 if $1 && $1 != ""
@@ -86,7 +128,7 @@ module CfnDsl
86
128
  elsif( $3 ) then
87
129
  array.push arguments[ $3.to_i ]
88
130
  end
89
- end
131
+ end
90
132
  end
91
133
  Fn.new("Join", ["", array])
92
134
  end
@@ -94,7 +136,7 @@ module CfnDsl
94
136
 
95
137
  class JSONable
96
138
  ##
97
- # This is the base class for just about everything useful in the
139
+ # This is the base class for just about everything useful in the
98
140
  # DSL. It knows how to turn DSL Objects into the corresponding
99
141
  # json, and it lets you create new built in function objects
100
142
  # from inside the context of a dsl object.
@@ -112,7 +154,7 @@ module CfnDsl
112
154
  hash = {}
113
155
  self.instance_variables.each do |var|
114
156
  name = var[1..-1]
115
-
157
+
116
158
  if( name =~ /^__/ ) then
117
159
  # if a variable starts with double underscore, strip one off
118
160
  name = name[1..-1]
@@ -120,7 +162,7 @@ module CfnDsl
120
162
  # Hide variables that start with single underscore
121
163
  name = nil
122
164
  end
123
-
165
+
124
166
  hash[name] = self.instance_variable_get var if name
125
167
  end
126
168
  hash.to_json(*a)
@@ -134,17 +176,17 @@ module CfnDsl
134
176
  self.instance_eval &block if block_given?
135
177
  end
136
178
 
137
- def method_missing(meth,*args,&block)
179
+ def method_missing(meth,*args,&block)
138
180
  if(args) then
139
181
  arg = "(" + args.inspect[1..-2] + ")"
140
- else
182
+ else
141
183
  arg = ""
142
184
  end
143
185
  CfnDsl::Errors.error( "Undefined symbol: #{meth}#{arg}", 1 )
144
186
  end
145
187
  end
146
188
 
147
-
189
+
148
190
  class Fn < JSONable
149
191
  ##
150
192
  # Handles all of the Fn:: objects
@@ -153,7 +195,7 @@ module CfnDsl
153
195
  @argument = argument
154
196
  @_refs = refs
155
197
  end
156
-
198
+
157
199
  def to_json(*a)
158
200
  hash = {}
159
201
  hash["Fn::#{@function}"] = @argument
@@ -172,7 +214,7 @@ module CfnDsl
172
214
  class RefDefinition < JSONable
173
215
  ##
174
216
  # Handles the Ref objects
175
- def initialize( value )
217
+ def initialize( value )
176
218
  @Ref = value
177
219
  end
178
220
 
@@ -180,5 +222,5 @@ module CfnDsl
180
222
  [@Ref]
181
223
  end
182
224
  end
183
-
225
+
184
226
  end
@@ -1,11 +1,11 @@
1
1
  require 'cfndsl/JSONable'
2
2
 
3
- module CfnDsl
3
+ module CfnDsl
4
4
  class OutputDefinition < JSONable
5
5
  ##
6
6
  # Handles Output objects
7
- dsl_attr_setter :Value, :Description
8
-
7
+ dsl_attr_setter :Value, :Description, :Condition
8
+
9
9
  def initialize( value=nil)
10
10
  @Value = value if value
11
11
  end
@@ -8,9 +8,12 @@ module CfnDsl
8
8
  "Metadata" => "Metadata",
9
9
  "Property" => "Properties",
10
10
  "Policy" => "Policies",
11
+ "PolicyDocument" => "PolicyDocument",
12
+ "AssumeRolePolicyDocument" => "AssumeRolePolicyDocument",
11
13
  "SecurityGroupIngress" => "SecurityGroupIngress",
12
14
  "SecurityGroupEgress" => "SecurityGroupEgress",
13
- "DBSecurityGroupIngress" => "DBSecurityGroupIngress"
15
+ "DBSecurityGroupIngress" => "DBSecurityGroupIngress",
16
+ "UpdatePolicy" => "UpdatePolicy"
14
17
  }
15
18
 
16
19
  @@singles = {}
@@ -1,13 +1,14 @@
1
1
  require 'cfndsl/JSONable'
2
2
  require 'cfndsl/Metadata'
3
3
  require 'cfndsl/Properties'
4
+ require 'cfndsl/UpdatePolicy'
4
5
 
5
- module CfnDsl
6
+ module CfnDsl
6
7
  class ResourceDefinition < JSONable
7
8
  ##
8
9
  # Handles Resource objects
9
- dsl_attr_setter :Type, :DependsOn, :DeletionPolicy
10
- dsl_content_object :Property, :Metadata
10
+ dsl_attr_setter :Type, :DependsOn, :DeletionPolicy, :Condition
11
+ dsl_content_object :Property, :Metadata, :UpdatePolicy
11
12
 
12
13
  def addTag(name, value, propagate=nil)
13
14
  self.send(:Tag) {
@@ -27,7 +28,7 @@ module CfnDsl
27
28
  end
28
29
 
29
30
  if( @DependsOn.instance_of?(String) ) then
30
- refs.push @DependsOn
31
+ refs.push @DependsOn
31
32
  end
32
33
  end
33
34
  refs
@@ -0,0 +1,29 @@
1
+ require 'cfndsl/JSONable'
2
+
3
+ module CfnDsl
4
+ class UpdatePolicyDefinition < JSONable
5
+ ##
6
+ # Handles autoscaling group update policy objects for Resources
7
+ #
8
+ # Usage
9
+ # Resource("aaa") {
10
+ # UpdatePolicy("AutoScalingRollingUpdate", {
11
+ # "MinInstancesInService" => "1",
12
+ # "MaxBatchSize" => "1",
13
+ # "PauseTime" => "PT12M5S"
14
+ # })
15
+ # }
16
+ #
17
+ def initialize(value)
18
+ @value = value;
19
+ end
20
+
21
+ def value
22
+ return @value
23
+ end
24
+
25
+ def to_json(*a)
26
+ @value.to_json(*a)
27
+ end
28
+ end
29
+ end
@@ -1,5 +1,7 @@
1
1
  Resources:
2
2
  "AWS::AutoScaling::AutoScalingGroup" :
3
+ UpdatePolicy:
4
+ AutoScalingRollingUpdate: JSON
3
5
  Properties:
4
6
  AvailabilityZones: [ String ]
5
7
  Cooldown: String
@@ -7,7 +9,7 @@ Resources:
7
9
  HealthCheckGracePeriod: Integer
8
10
  HealthCheckType: String
9
11
  LaunchConfigurationName: String
10
- LoadBalancers: [ String ]
12
+ LoadBalancerNames: [ String ]
11
13
  MaxSize: Integer
12
14
  MinSize: Integer
13
15
  NotificationConfiguration: String
@@ -15,21 +17,32 @@ Resources:
15
17
  VPCZoneIdentifier: [ String ]
16
18
  "AWS::AutoScaling::LaunchConfiguration" :
17
19
  Properties:
20
+ AssociatePublicIpAddress: Boolean
18
21
  BlockDeviceMappings: [ BlockDeviceMapping ]
19
22
  ImageId: String
23
+ InstanceMonitoring: Boolean
20
24
  InstanceType: String
21
25
  KernelId: String
22
26
  KeyName: String
23
27
  RamDiskId: String
24
28
  SecurityGroups: [ String ]
25
29
  UserData: String
26
- "AWS::Autoscaling::ScalingPolicy" :
30
+ "AWS::AutoScaling::ScalingPolicy" :
27
31
  Properties:
28
32
  AdjustmentType: String
29
33
  AutoScalingGroupName: String
30
34
  Cooldown: String
31
35
  ScalingAdjustment: String
32
- "AWS::Autoscaling::Trigger" :
36
+ "AWS::AutoScaling::ScheduledAction" :
37
+ Properties:
38
+ AutoScalingGroupName: String
39
+ DesiredCapacity: Integer
40
+ EndTime: String
41
+ MaxSize: Integer
42
+ MinSize: Integer
43
+ Recurrence: String
44
+ StartTime: String
45
+ "AWS::AutoScaling::Trigger" :
33
46
  Properties:
34
47
  Dimensions: [ MetricDimension ]
35
48
  MetricName: String
@@ -93,11 +106,13 @@ Resources:
93
106
  Properties:
94
107
  AvailabilityZone: String
95
108
  DisableApiTermination: String
109
+ IamInstanceProfile: String
96
110
  ImageId: String
97
111
  InstanceType: String
98
112
  KernelId: String
99
113
  KeyName: String
100
114
  Monitoring: String
115
+ NetworkInterfaces: JSON
101
116
  PlacementGroupName: String
102
117
  PrivateIpAddress: String
103
118
  RamDiskId: String
@@ -143,7 +158,7 @@ Resources:
143
158
  DestinationSecurityGroupId: String
144
159
  FromPort: Number
145
160
  ToPort: Number
146
- "AWS::EC2::SecurityGroupIngress":
161
+ "AWS::EC2::SecurityGroupIngress" :
147
162
  Properties:
148
163
  GroupName: String
149
164
  GroupId: String
@@ -206,7 +221,7 @@ Resources:
206
221
  "AWS::ElastiCache::SecurityGroup" :
207
222
  Properties:
208
223
  Decription: String
209
- "AWS::ElastiCache::SecurityGrouIngress" :
224
+ "AWS::ElastiCache::SecurityGroupIngress" :
210
225
  Properties:
211
226
  CacheSecurityGroupName: String
212
227
  EC2SecurityGroupName: String
@@ -227,11 +242,13 @@ Resources:
227
242
  "AWS::ElasticLoadBalancing::LoadBalancer" :
228
243
  Properties:
229
244
  AvailabilityZones: [String]
245
+ CrossZone: Boolean
230
246
  HealthCheck: HealthCheck
231
247
  Instances: [String]
232
248
  Listeners: [ Listener ]
233
249
  AppCookieStickinessPolicy: AppCookieStickinessPolicy
234
250
  LBCookieStickinessPolicy: LBCookieStickinessPolicy
251
+ Scheme: String
235
252
  SecurityGroups: [ String ]
236
253
  Subnets: [ String ]
237
254
  Attributes:
@@ -253,15 +270,28 @@ Resources:
253
270
  Policies: [ IAMEmbeddedPolicy ]
254
271
  Attributes:
255
272
  Arn : String
273
+ "AWS::IAM::InstanceProfile" :
274
+ Properties:
275
+ Path: String
276
+ Roles: [ String ]
277
+ Attributes:
278
+ Arn : String
256
279
  "AWS::IAM::Policy" :
257
280
  Properties:
258
281
  PolicyName: String
259
- PolocyDocument: JSON
282
+ PolicyDocument: JSON
260
283
  Groups: [ String ]
261
284
  Users: [ String ]
285
+ "AWS::IAM::Role" :
286
+ Properties:
287
+ AssumeRolePolicyDocument: JSON
288
+ Path: String
289
+ Policies: [ IAMEmbeddedPolicy ]
290
+ Attributes:
291
+ Arn : String
262
292
  "AWS::IAM::UserToGroupAddition" :
263
293
  Properties:
264
- Group: String
294
+ GroupName: String
265
295
  Users: [String]
266
296
  "AWS::IAM::User" :
267
297
  Properties:
@@ -475,8 +505,3 @@ Types:
475
505
  IAMEmbeddedPolicy:
476
506
  PolicyDocument: JSON
477
507
  PolicyName: String
478
-
479
-
480
-
481
-
482
-
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cfndsl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.16
5
- prerelease:
4
+ version: 0.1.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Chris Howe
@@ -10,7 +9,35 @@ autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
11
  date: 2013-05-16 00:00:00.000000000 Z
13
- dependencies: []
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: test-unit
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
14
41
  description: DSL for creating AWS Cloudformation templates
15
42
  email: chris@howeville.com
16
43
  executables:
@@ -25,6 +52,7 @@ files:
25
52
  - lib/cfndsl/RefCheck.rb
26
53
  - lib/cfndsl/Types.rb
27
54
  - lib/cfndsl/Properties.rb
55
+ - lib/cfndsl/Conditions.rb
28
56
  - lib/cfndsl/Mappings.rb
29
57
  - lib/cfndsl/Resources.rb
30
58
  - lib/cfndsl/Metadata.rb
@@ -34,29 +62,29 @@ files:
34
62
  - lib/cfndsl/Plurals.rb
35
63
  - lib/cfndsl/names.rb
36
64
  - lib/cfndsl/CloudFormationTemplate.rb
65
+ - lib/cfndsl/UpdatePolicy.rb
37
66
  - bin/cfndsl
38
- homepage: https://github.com/howech/cfndsl
67
+ homepage: https://github.com/stevenjack/cfndsl
39
68
  licenses: []
69
+ metadata: {}
40
70
  post_install_message:
41
71
  rdoc_options: []
42
72
  require_paths:
43
73
  - lib
44
74
  required_ruby_version: !ruby/object:Gem::Requirement
45
- none: false
46
75
  requirements:
47
- - - ! '>='
76
+ - - '>='
48
77
  - !ruby/object:Gem::Version
49
78
  version: '0'
50
79
  required_rubygems_version: !ruby/object:Gem::Requirement
51
- none: false
52
80
  requirements:
53
- - - ! '>='
81
+ - - '>='
54
82
  - !ruby/object:Gem::Version
55
83
  version: '0'
56
84
  requirements: []
57
85
  rubyforge_project:
58
- rubygems_version: 1.8.23
86
+ rubygems_version: 2.0.3
59
87
  signing_key:
60
- specification_version: 3
88
+ specification_version: 4
61
89
  summary: AWS Cloudformation DSL
62
90
  test_files: []