cloudformation-dsl 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.
@@ -0,0 +1,100 @@
1
+ require 'json'
2
+ module CloudFormationDSL
3
+ class Template
4
+ include CloudFormationDSL::Helpers
5
+
6
+ # You can supply:
7
+ # - filename
8
+ # - block
9
+ # The file located at the filename is evaluated
10
+ # The block will also be evaluated
11
+ #
12
+ # If both filename and block are passed, then the filename
13
+ # is evaluated first before the block is evaluated.
14
+ def initialize(filename = nil, &block)
15
+ @template_file = filename
16
+ @template_block = block
17
+ @dict = {}
18
+ end
19
+
20
+ def aws_region
21
+ ENV['EC2_REGION'] || ENV['AWS_DEFAULT_REGION'] || 'us-east-1'
22
+ end
23
+
24
+ def evaluated_data
25
+ # Once evaluated, treat this as immutable. This allows us to lazy eval the template.
26
+ return @dict unless @dict.empty?
27
+
28
+ # See: http://stackoverflow.com/questions/4667158/ruby-instance-eval-a-file-while-maintaining-fileline-in-stacktrace
29
+ instance_eval(File.read(@template_file), @template_file) if @template_file
30
+ instance_eval(@template_block) if @template_block
31
+ return @dict
32
+ end
33
+
34
+ def value(values)
35
+ @dict.update(values)
36
+ end
37
+
38
+ def default(key, value)
39
+ @dict[key] ||= value
40
+ end
41
+
42
+ def to_json(*args)
43
+ evaluated_data.to_json(*args)
44
+ end
45
+
46
+ def print()
47
+ puts JSON.pretty_generate(self)
48
+ end
49
+
50
+
51
+ # DSL for major sections
52
+ def parameter(name, options)
53
+ default(:Parameters, {})[name] = options
54
+ end
55
+
56
+ def condition(name, options) default(:Conditions, {})[name] = options end
57
+
58
+ def resource(name, options) default(:Resources, {})[name] = options end
59
+
60
+ def output(name, options) default(:Outputs, {})[name] = options end
61
+
62
+ def mapping(name, options)
63
+ # if options is a string and a valid file then the script will process the external file.
64
+ default(:Mappings, {})[name] = if options.is_a?(Hash)
65
+ options
66
+ elsif options.is_a?(String)
67
+ load_from_file(options)['Mappings'][name]
68
+ else
69
+ raise("Options for mapping #{name} is neither a string or a hash. Error!")
70
+ end
71
+ end
72
+
73
+ def tag(tag)
74
+ tag.each do | name, value |
75
+ default(:Tags, {})[name] = value
76
+ end
77
+ end
78
+
79
+ # Cleanup
80
+
81
+ # Find parameters where the specified attribute is true then remove the attribute from the cfn template.
82
+ def excise_parameter_attribute!(attribute)
83
+ marked_parameters = []
84
+ @dict.fetch(:Parameters, {}).each do |param, options|
85
+ if options.delete(attribute.to_sym) or options.delete(attribute.to_s)
86
+ marked_parameters << param
87
+ end
88
+ end
89
+ marked_parameters
90
+ end
91
+
92
+ def excise_tags!
93
+ tags = @dict.fetch(:Tags, {})
94
+ @dict.delete(:Tags)
95
+ tags
96
+ end
97
+ end
98
+
99
+ end
100
+
@@ -0,0 +1,19 @@
1
+ # Copyright 2013-2014 Bazaarvoice, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ # Streamlined by Ho-Sheng Hsiao <talktohosh@gmail.com>
16
+
17
+ module CloudFormationDSL
18
+ VERSION = "0.1.0"
19
+ end
metadata ADDED
@@ -0,0 +1,114 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cloudformation-dsl
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Shawn Smith
8
+ - Dave Barcelo
9
+ - Morgan Fletcher
10
+ - Csongor Gyuricza
11
+ - Igor Polishchuk
12
+ - Nathaniel Eliot
13
+ - Jona Fenocchi
14
+ - Tony Cui
15
+ - Ho-Sheng Hsiao
16
+ autorequire:
17
+ bindir: bin
18
+ cert_chain: []
19
+ date: 2015-06-22 00:00:00.000000000 Z
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: json
23
+ requirement: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ type: :runtime
29
+ prerelease: false
30
+ version_requirements: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ - !ruby/object:Gem::Dependency
36
+ name: bundler
37
+ requirement: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ type: :runtime
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ description: Ruby DSL library that provides a wrapper around the CloudFormation.
50
+ email:
51
+ - Shawn.Smith@bazaarvoice.com
52
+ - Dave.Barcelo@bazaarvoice.com
53
+ - Morgan.Fletcher@bazaarvoice.com
54
+ - Csongor.Gyuricza@bazaarvoice.com
55
+ - Igor.Polishchuk@bazaarvoice.com
56
+ - Nathaniel.Eliot@bazaarvoice.com
57
+ - Jona.Fenocchi@bazaarvoice.com
58
+ - Tony.Cui@bazaarvoice.com
59
+ - talktohosh@gmail.com
60
+ executables:
61
+ - cfntemplate-to-ruby
62
+ extensions: []
63
+ extra_rdoc_files: []
64
+ files:
65
+ - ".gitignore"
66
+ - Gemfile
67
+ - LICENSE.txt
68
+ - README.md
69
+ - Rakefile
70
+ - bin/cfntemplate-to-ruby
71
+ - cloudformation-dsl.gemspec
72
+ - docs/Contributing.md
73
+ - docs/Releasing.md
74
+ - examples/cloudformation-ruby-script.rb
75
+ - examples/maps/map.json
76
+ - examples/maps/map.rb
77
+ - examples/maps/map.yaml
78
+ - examples/maps/more_maps/map1.json
79
+ - examples/maps/more_maps/map2.json
80
+ - examples/maps/more_maps/map3.json
81
+ - examples/maps/table.txt
82
+ - examples/maps/vpc.txt
83
+ - examples/userdata.sh
84
+ - initial_contributions.md
85
+ - lib/cloudformation-dsl.rb
86
+ - lib/cloudformation-dsl/helpers.rb
87
+ - lib/cloudformation-dsl/template.rb
88
+ - lib/cloudformation-dsl/version.rb
89
+ homepage: http://github.com/hosh/cloudformation-dsl-rb
90
+ licenses: []
91
+ metadata: {}
92
+ post_install_message:
93
+ rdoc_options: []
94
+ require_paths:
95
+ - lib
96
+ - bin
97
+ required_ruby_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ required_rubygems_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ requirements: []
108
+ rubyforge_project:
109
+ rubygems_version: 2.2.2
110
+ signing_key:
111
+ specification_version: 4
112
+ summary: Ruby DSL library that provides a wrapper around the CloudFormation. Written
113
+ by [Bazaarvoice](http://www.bazaarvoice.com).
114
+ test_files: []