cfndsl 0.0.16 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []