terrafied 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: aa12b3fc8d644221d181c0bc52794c6f78df5b1e
4
+ data.tar.gz: 7ea639dc3ee90264fb77ac0f0b07f92bd6d28b31
5
+ SHA512:
6
+ metadata.gz: 5bfb2e99cf7f3cd01b15ce395f3bd5f65b017bedbb281bd82c280e3b2d455e183cd1d91309dcda9b5e02eda70658a684420d66ccffe315a0c8734db93916e2f9
7
+ data.tar.gz: 0f0a29ad22a430e447e2d92755af2342e44185732a449b6d6a349ffe9f4006cc72337c0f2b87f18bcc82f829e9823c8a96689ee190a6d87e9021af88c28b1745
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.5
4
+ before_install: gem install bundler -v 1.10.6
@@ -0,0 +1,13 @@
1
+ # Contributor Code of Conduct
2
+
3
+ As contributors and maintainers of this project, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.
4
+
5
+ We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, or religion.
6
+
7
+ Examples of unacceptable behavior by participants include the use of sexual language or imagery, derogatory comments or personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct.
8
+
9
+ Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. Project maintainers who do not follow the Code of Conduct may be removed from the project team.
10
+
11
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers.
12
+
13
+ This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.0.0, available at [http://contributor-covenant.org/version/1/0/0/](http://contributor-covenant.org/version/1/0/0/)
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in terrafied.gemspec
4
+ gemspec
data/Guardfile ADDED
@@ -0,0 +1,22 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ ## Uncomment and set this to only include directories you want to watch
5
+ # directories %w(app lib config test spec features) \
6
+ # .select{|d| Dir.exists?(d) ? d : UI.warning("Directory #{d} does not exist")}
7
+
8
+ ## Note: if you are using the `directories` clause above and you are not
9
+ ## watching the project directory ('.'), then you will want to move
10
+ ## the Guardfile to a watched dir and symlink it back, e.g.
11
+ #
12
+ # $ mkdir config
13
+ # $ mv Guardfile config/
14
+ # $ ln -s config/Guardfile .
15
+ #
16
+ # and, you'll have to watch "config/Guardfile" instead of "Guardfile"
17
+
18
+ guard :minitest do
19
+ watch(%r{^test/(.*)\/?test_(.*)\.rb$})
20
+ watch(%r{^lib/(.*/)?([^/]+)\.rb$}) { 'test' }
21
+ watch(%r{^test/test_helper\.rb$}) { 'test' }
22
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 thattommyhall
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,181 @@
1
+ # Terrafied
2
+
3
+ A simple Ruby DSL for [Terraform](), somewhere in-between
4
+ [Terraframe](https://github.com/eropple/terraframe/) and
5
+ [Terrafiddle](https://github.com/glenjamin/terrafiddle)
6
+
7
+ It avoids using `method_missing` and does not dynamically define the
8
+ helper methods to make debugging easier.
9
+
10
+ ## Installation
11
+
12
+ Add this line to your application's Gemfile:
13
+
14
+ ```ruby
15
+ gem 'terrafied'
16
+ ```
17
+
18
+ And then execute:
19
+
20
+ $ bundle
21
+
22
+ Or install it yourself as:
23
+
24
+ $ gem install terrafied
25
+
26
+ ## Usage
27
+
28
+ Once you import the module the `provider` and `resource` methods are
29
+ available.
30
+
31
+ `resource` takes 3 arguments - a type, a name for the resource and a
32
+ 'spec' hash.
33
+
34
+ `provider` takes 2 arguments - a type and a 'spec' hash
35
+
36
+
37
+ ```ruby
38
+ require 'terrafied'
39
+
40
+ resource "type", "name",
41
+ foo: "one",
42
+ bar: false
43
+ ```
44
+
45
+ Outputs:
46
+
47
+ ```
48
+ {
49
+ "provider": {
50
+ },
51
+ "resource": {
52
+ "type": {
53
+ "name": {
54
+ "foo": "one",
55
+ "bar": false
56
+ }
57
+ }
58
+ }
59
+ }
60
+ ```
61
+
62
+ There are 2 helper methods (borrowed from terraframe) for looking up
63
+ resource attributes.
64
+
65
+ `output-of`:
66
+
67
+ ```ruby
68
+ output_of('aws_elb', 'name', 'dns_name')
69
+ # => "${aws_elb.name.dns_name}"
70
+ ```
71
+
72
+ `id-of`:
73
+
74
+ ```ruby
75
+ id_of('aws_elb', 'name')
76
+ # => "${aws_elb.name.id}"
77
+ ```
78
+
79
+ If you call `use_resource_shortcuts!` then most aws resources have
80
+ shortcut methods you can use.
81
+
82
+ Where possible I have defaulted the `name` parameter to be the
83
+ resource name (and the description if you are forced to provide one),
84
+ hope you find it useful.
85
+
86
+ ```ruby
87
+ require 'terrafied'
88
+ use_resource_shortcuts!
89
+
90
+ provider 'aws',
91
+ region: 'eu-west-1',
92
+ access_key: "BLAH",
93
+ secret_key: "BLAGBLOOPBLAH"
94
+
95
+ VPC_NAME = 'example'
96
+ aws_vpc VPC_NAME,
97
+ tags: { Name: VPC_NAME },
98
+ cidr_block: '172.20.0.0/20'
99
+
100
+ aws_internet_gateway 'production',
101
+ vpc_id: id_of('aws_vpc', VPC_NAME)
102
+ ```
103
+
104
+ Outputs:
105
+
106
+ ```
107
+ {
108
+ "provider": {
109
+ "aws": {
110
+ "region": "eu-west-1",
111
+ "access_key": "BLAH",
112
+ "secret_key": "BLAGBLOOPBLAH"
113
+ }
114
+ },
115
+ "resource": {
116
+ "aws_vpc": {
117
+ "example": {
118
+ "tags": {
119
+ "Name": "example"
120
+ },
121
+ "cidr_block": "172.20.0.0/20"
122
+ }
123
+ },
124
+ "aws_internet_gateway": {
125
+ "production": {
126
+ "vpc_id": "${aws_vpc.example.id}"
127
+ }
128
+ }
129
+ }
130
+ }
131
+ ```
132
+
133
+ You can add new aliases with `add_resource_alias` (Please add them in
134
+ and do a pull request though)
135
+
136
+ ```ruby
137
+ require 'terrafied'
138
+
139
+ add_resource_alias 'new_resource_type'
140
+
141
+ new_resource_type 'name',
142
+ name: "Something",
143
+ foo: false
144
+
145
+ ## Outputs
146
+ # {
147
+ # "provider": {
148
+ # },
149
+ # "resource": {
150
+ # "new_resource_type": {
151
+ # "name": {
152
+ # "name": "Something",
153
+ # "foo": false
154
+ # }
155
+ # }
156
+ # }
157
+ # }
158
+
159
+ ```
160
+
161
+
162
+ ## Development
163
+
164
+ To install this gem onto your local machine, run `bundle exec rake
165
+ install`. To release a new version, update the version number in
166
+ `version.rb`, and then run `bundle exec rake release`, which will
167
+ create a git tag for the version, push git commits and tags, and push
168
+ the `.gem` file to [rubygems.org](https://rubygems.org).
169
+
170
+ ## Contributing
171
+
172
+ Bug reports and pull requests are welcome on GitHub at
173
+ https://github.com/thattommyhall/terrafied. This project is intended
174
+ to be a safe, welcoming space for collaboration, and contributors are
175
+ expected to adhere to the
176
+ [Contributor Covenant](contributor-covenant.org) code of conduct.
177
+
178
+ ## License
179
+
180
+ The gem is available as open source under the terms of the
181
+ [MIT License](http://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << "test"
6
+ t.libs << "lib"
7
+ t.test_files = FileList['test/**/*_test.rb']
8
+ end
9
+
10
+ task :default => :test
@@ -0,0 +1,21 @@
1
+ require 'terrafied'
2
+
3
+ add_resource_alias 'new_resource_type'
4
+
5
+ new_resource_type 'name',
6
+ name: "Something",
7
+ foo: false
8
+
9
+ ## Outputs
10
+ # {
11
+ # "provider": {
12
+ # },
13
+ # "resource": {
14
+ # "new_resource_type": {
15
+ # "name": {
16
+ # "name": "Something",
17
+ # "foo": false
18
+ # }
19
+ # }
20
+ # }
21
+ # }
@@ -0,0 +1,41 @@
1
+ require 'terrafied'
2
+ use_resource_shortcuts!
3
+
4
+ provider 'aws',
5
+ region: 'eu-west-1',
6
+ access_key: "BLAH",
7
+ secret_key: "BLAGBLOOPBLAH"
8
+
9
+ VPC_NAME = 'example'
10
+ aws_vpc VPC_NAME,
11
+ tags: { Name: VPC_NAME },
12
+ cidr_block: '172.20.0.0/20'
13
+
14
+ aws_internet_gateway 'production',
15
+ vpc_id: id_of('aws_vpc', VPC_NAME)
16
+
17
+ ## Outputs
18
+ # {
19
+ # "provider": {
20
+ # "aws": {
21
+ # "region": "eu-west-1",
22
+ # "access_key": "BLAH",
23
+ # "secret_key": "BLAGBLOOPBLAH"
24
+ # }
25
+ # },
26
+ # "resource": {
27
+ # "aws_vpc": {
28
+ # "example": {
29
+ # "tags": {
30
+ # "Name": "example"
31
+ # },
32
+ # "cidr_block": "172.20.0.0/20"
33
+ # }
34
+ # },
35
+ # "aws_internet_gateway": {
36
+ # "production": {
37
+ # "vpc_id": "${aws_vpc.example.id}"
38
+ # }
39
+ # }
40
+ # }
41
+ # }
@@ -0,0 +1,20 @@
1
+ require 'terrafied'
2
+
3
+ resource "type", "name",
4
+ foo: "one",
5
+ bar: false
6
+
7
+
8
+ ## Outputs
9
+ # {
10
+ # "provider": {
11
+ # },
12
+ # "resource": {
13
+ # "type": {
14
+ # "name": {
15
+ # "foo": "one",
16
+ # "bar": false
17
+ # }
18
+ # }
19
+ # }
20
+ # }
data/lib/terrafied.rb ADDED
@@ -0,0 +1,2 @@
1
+ require "terrafied/version"
2
+ require "terrafied/builder"
@@ -0,0 +1,40 @@
1
+ @output = { "provider" => {},
2
+ "resource" => {}
3
+ }
4
+
5
+ class << self
6
+ def provider(name, spec={})
7
+ @output["provider"][name.to_s] = spec
8
+ end
9
+
10
+ def resource(type, name, spec={})
11
+ @output["resource"][type.to_s] ||= {}
12
+ if @output["resource"][type.to_s][name.to_s]
13
+ throw "Tried to create a resource of type #{type} called '#{name}' when one already exists"
14
+ end
15
+ @output["resource"][type.to_s][name.to_s] = spec
16
+ end
17
+
18
+ def id_of(type,name)
19
+ "${#{type}.#{name}.id}"
20
+ end
21
+
22
+ def output_of(type, name, *values)
23
+ "${#{type}.#{name}.#{values.join(".")}}"
24
+ end
25
+
26
+ def add_resource_alias(type)
27
+ define_singleton_method type.to_sym do |name, spec={}|
28
+ resource(type, name, spec)
29
+ end
30
+ end
31
+
32
+ def use_resource_shortcuts!
33
+ require_relative 'resource_shortcuts'
34
+ end
35
+ end
36
+
37
+ at_exit do
38
+ require 'json'
39
+ puts JSON.pretty_generate(@output)
40
+ end
@@ -0,0 +1,774 @@
1
+ class Hash
2
+ def deep_merge(other_hash)
3
+ self.merge(other_hash) do |key, oldval, newval|
4
+ oldval = oldval.to_hash if oldval.respond_to?(:to_hash)
5
+ newval = newval.to_hash if newval.respond_to?(:to_hash)
6
+ oldval.class.to_s == 'Hash' &&
7
+ newval.class.to_s == 'Hash' ? oldval.deep_merge(newval) : newval
8
+ end
9
+ end
10
+ end
11
+
12
+ class << self
13
+ def aws_api_gateway_account(name, spec={})
14
+ default_spec = { name: name }
15
+ resource 'aws_api_gateway_account', name,
16
+ default_spec.deep_merge(spec)
17
+ end
18
+
19
+ def aws_api_gateway_api_key(name, spec={})
20
+ default_spec = { name: name }
21
+ resource 'aws_api_gateway_api_key', name,
22
+ default_spec.deep_merge(spec)
23
+ end
24
+
25
+ def aws_api_gateway_authorizer(name, spec={})
26
+ default_spec = { name: name }
27
+ resource 'aws_api_gateway_authorizer', name,
28
+ default_spec.deep_merge(spec)
29
+ end
30
+
31
+ def aws_api_gateway_deployment(name, spec={})
32
+ resource 'aws_api_gateway_deployment', name, spec
33
+ end
34
+
35
+ def aws_api_gateway_integration(name, spec={})
36
+ resource 'aws_api_gateway_integration', name, spec
37
+ end
38
+
39
+ def aws_api_gateway_integration_response(name, spec={})
40
+ resource 'aws_api_gateway_integration_response', name, spec
41
+ end
42
+
43
+ def aws_api_gateway_method(name, spec={})
44
+ resource 'aws_api_gateway_method', name, spec
45
+ end
46
+
47
+ def aws_api_gateway_method_response(name, spec={})
48
+ resource 'aws_api_gateway_method_response', name, spec
49
+ end
50
+
51
+ def aws_api_gateway_model(name, spec={})
52
+ default_spec = { name: name }
53
+ resource 'aws_api_gateway_model', name,
54
+ default_spec.deep_merge(spec)
55
+ end
56
+
57
+ def aws_api_gateway_resource(name, spec={})
58
+ resource 'aws_api_gateway_resource', name, spec
59
+ end
60
+
61
+ def aws_api_gateway_rest_api(name, spec={})
62
+ default_spec = { name: name }
63
+ resource 'aws_api_gateway_rest_api', name,
64
+ default_spec.deep_merge(spec)
65
+ end
66
+
67
+ def aws_cloudformation_stack(name, spec={})
68
+ default_spec = { name: name }
69
+ resource 'aws_cloudformation_stack', name,
70
+ default_spec.deep_merge(spec)
71
+ end
72
+
73
+ def aws_cloudfront_distribution(name, spec={})
74
+ resource 'aws_cloudfront_distribution', name, spec
75
+ end
76
+
77
+ def aws_cloudfront_origin_access_identity(name, spec={})
78
+ resource 'aws_cloudfront_origin_access_identity', name, spec
79
+ end
80
+
81
+ def aws_cloudtrail(name, spec={})
82
+ default_spec = { name: name }
83
+ resource 'aws_cloudtrail', name,
84
+ default_spec.deep_merge(spec)
85
+ end
86
+
87
+ def aws_cloudwatch_event_rule(name, spec={})
88
+ default_spec = { name: name }
89
+ resource 'aws_cloudwatch_event_rule', name,
90
+ default_spec.deep_merge(spec)
91
+ end
92
+
93
+ def aws_cloudwatch_event_target(name, spec={})
94
+ resource 'aws_cloudwatch_event_target', name, spec
95
+ end
96
+
97
+ def aws_cloudwatch_log_group(name, spec={})
98
+ default_spec = { name: name }
99
+ resource 'aws_cloudwatch_log_group', name,
100
+ default_spec.deep_merge(spec)
101
+ end
102
+
103
+ def aws_cloudwatch_log_subscription_filter(name, spec={})
104
+ default_spec = { name: name }
105
+ resource 'aws_cloudwatch_log_subscription_filter', name,
106
+ default_spec.deep_merge(spec)
107
+ end
108
+
109
+ def aws_cloudwatch_log_metric_filter(name, spec={})
110
+ default_spec = { name: name }
111
+ resource 'aws_cloudwatch_log_metric_filter', name,
112
+ default_spec.deep_merge(spec)
113
+ end
114
+
115
+ def aws_cloudwatch_metric_alarm(name, spec={})
116
+ default_spec = { alarm_name: name }
117
+ resource 'aws_cloudwatch_metric_alarm', name,
118
+ default_spec.deep_merge(spec)
119
+ end
120
+
121
+ def aws_codecommit_repository(name, spec={})
122
+ default_spec = { repository_name: name }
123
+ resource 'aws_codecommit_repository', name,
124
+ default_spec.deep_merge(spec)
125
+ end
126
+
127
+ def aws_codedeploy_app(name, spec={})
128
+ default_spec = { name: name }
129
+ resource 'aws_codedeploy_app', name,
130
+ default_spec.deep_merge(spec)
131
+ end
132
+
133
+ def aws_codedeploy_deployment_group(name, spec={})
134
+ default_spec = { app_name: name }
135
+ resource 'aws_codedeploy_deployment_group', name,
136
+ default_spec.deep_merge(spec)
137
+ end
138
+
139
+ def aws_directory_service_directory(name, spec={})
140
+ default_spec = { name: name }
141
+ resource 'aws_directory_service_directory', name,
142
+ default_spec.deep_merge(spec)
143
+ end
144
+
145
+ def aws_dynamodb_table(name, spec={})
146
+ default_spec = { name: name }
147
+ resource 'aws_dynamodb_table', name,
148
+ default_spec.deep_merge(spec)
149
+ end
150
+
151
+ def aws_ami(name, spec={})
152
+ default_spec = { name: name }
153
+ resource 'aws_ami', name,
154
+ default_spec.deep_merge(spec)
155
+ end
156
+
157
+ def aws_ami_copy(name, spec={})
158
+ default_spec = { name: name }
159
+ resource 'aws_ami_copy', name,
160
+ default_spec.deep_merge(spec)
161
+ end
162
+
163
+ def aws_ami_from_instance(name, spec={})
164
+ default_spec = { name: name }
165
+ resource 'aws_ami_from_instance', name,
166
+ default_spec.deep_merge(spec)
167
+ end
168
+
169
+ def aws_app_cookie_stickiness_policy(name, spec={})
170
+ default_spec = { name: name }
171
+ resource 'aws_app_cookie_stickiness_policy', name,
172
+ default_spec.deep_merge(spec)
173
+ end
174
+
175
+ def aws_autoscaling_group(name, spec={})
176
+ default_spec = { name: name }
177
+ resource 'aws_autoscaling_group', name,
178
+ default_spec.deep_merge(spec)
179
+ end
180
+
181
+ def aws_autoscaling_lifecycle_hook(name, spec={})
182
+ default_spec = { name: name }
183
+ resource 'aws_autoscaling_lifecycle_hook', name,
184
+ default_spec.deep_merge(spec)
185
+ end
186
+
187
+ def aws_autoscaling_notification(name, spec={})
188
+ resource 'aws_autoscaling_notification', name, spec
189
+ end
190
+
191
+ def aws_autoscaling_policy(name, spec={})
192
+ default_spec = { name: name }
193
+ resource 'aws_autoscaling_policy', name,
194
+ default_spec.deep_merge(spec)
195
+ end
196
+
197
+ def aws_autoscaling_schedule(name, spec={})
198
+ resource 'aws_autoscaling_schedule', name, spec
199
+ end
200
+
201
+ def aws_ebs_volume(name, spec={})
202
+ resource 'aws_ebs_volume', name, spec
203
+ end
204
+
205
+ def aws_eip_association(name, spec={})
206
+ resource 'aws_eip_association', name, spec
207
+ end
208
+
209
+ def aws_eip(name, spec={})
210
+ resource 'aws_eip', name, spec
211
+ end
212
+
213
+ def aws_elb(name, spec={})
214
+ default_spec = { name: name }
215
+ resource 'aws_elb', name,
216
+ default_spec.deep_merge(spec)
217
+ end
218
+
219
+ def aws_instance(name, spec={})
220
+ resource 'aws_instance', name, spec
221
+ end
222
+
223
+ def aws_key_pair(name, spec={})
224
+ default_spec = { key_name: name }
225
+ resource 'aws_key_pair', name,
226
+ default_spec.deep_merge(spec)
227
+ end
228
+
229
+ def aws_launch_configuration(name, spec={})
230
+ default_spec = { name: name }
231
+ resource 'aws_launch_configuration', name,
232
+ default_spec.deep_merge(spec)
233
+ end
234
+
235
+ def aws_lb_cookie_stickiness_policy(name, spec={})
236
+ default_spec = { name: name }
237
+ resource 'aws_lb_cookie_stickiness_policy', name,
238
+ default_spec.deep_merge(spec)
239
+ end
240
+
241
+ def aws_placement_group(name, spec={})
242
+ default_spec = { name: name }
243
+ resource 'aws_placement_group', name,
244
+ default_spec.deep_merge(spec)
245
+ end
246
+
247
+ def aws_proxy_protocol_policy(name, spec={})
248
+ resource 'aws_proxy_protocol_policy', name, spec
249
+ end
250
+
251
+ def aws_spot_instance_request(name, spec={})
252
+ resource 'aws_spot_instance_request', name, spec
253
+ end
254
+
255
+ def aws_volume_attachment(name, spec={})
256
+ resource 'aws_volume_attachment', name, spec
257
+ end
258
+
259
+ def aws_ecs_cluster(name, spec={})
260
+ default_spec = { name: name }
261
+ resource 'aws_ecs_cluster', name,
262
+ default_spec.deep_merge(spec)
263
+ end
264
+
265
+ def aws_ecs_service(name, spec={})
266
+ default_spec = { name: name }
267
+ resource 'aws_ecs_service', name,
268
+ default_spec.deep_merge(spec)
269
+ end
270
+
271
+ def aws_ecs_task_definition(name, spec={})
272
+ default_spec = { family: name }
273
+ resource 'aws_ecs_task_definition', name,
274
+ default_spec.deep_merge(spec)
275
+ end
276
+
277
+ def aws_ecr_repository(name, spec={})
278
+ default_spec = { name: name }
279
+ resource 'aws_ecr_repository', name,
280
+ default_spec.deep_merge(spec)
281
+ end
282
+
283
+ def aws_ecr_repository_policy(name, spec={})
284
+ resource 'aws_ecr_repository_policy', name, spec
285
+ end
286
+
287
+ def aws_efs_file_system(name, spec={})
288
+ resource 'aws_efs_file_system', name, spec
289
+ end
290
+
291
+ def aws_efs_mount_target(name, spec={})
292
+ resource 'aws_efs_mount_target', name, spec
293
+ end
294
+
295
+ def aws_elasticache_cluster(name, spec={})
296
+ default_spec = { cluster_id: name }
297
+ resource 'aws_elasticache_cluster', name,
298
+ default_spec.deep_merge(spec)
299
+ end
300
+
301
+ def aws_elasticache_parameter_group(name, spec={})
302
+ default_spec = { name: name }
303
+ resource 'aws_elasticache_parameter_group', name,
304
+ default_spec.deep_merge(spec)
305
+ end
306
+
307
+ def aws_elasticache_security_group(name, spec={})
308
+ default_spec = { name: name }
309
+ resource 'aws_elasticache_security_group', name,
310
+ default_spec.deep_merge(spec)
311
+ end
312
+
313
+ def aws_elasticache_subnet_group(name, spec={})
314
+ default_spec = { name: name }
315
+ resource 'aws_elasticache_subnet_group', name,
316
+ default_spec.deep_merge(spec)
317
+ end
318
+
319
+ def aws_elastic_beanstalk_application(name, spec={})
320
+ default_spec = { name: name }
321
+ resource 'aws_elastic_beanstalk_application', name,
322
+ default_spec.deep_merge(spec)
323
+ end
324
+
325
+ def aws_elastic_beanstalk_configuration_template(name, spec={})
326
+ default_spec = { name: name }
327
+ resource 'aws_elastic_beanstalk_configuration_template', name,
328
+ default_spec.deep_merge(spec)
329
+ end
330
+
331
+ def aws_elastic_beanstalk_environment(name, spec={})
332
+ default_spec = { name: name }
333
+ resource 'aws_elastic_beanstalk_environment', name,
334
+ default_spec.deep_merge(spec)
335
+ end
336
+
337
+ def aws_elasticsearch_domain(name, spec={})
338
+ default_spec = { domain_name: name }
339
+ resource 'aws_elasticsearch_domain', name,
340
+ default_spec.deep_merge(spec)
341
+ end
342
+
343
+ def aws_glacier_vault(name, spec={})
344
+ default_spec = { name: name }
345
+ resource 'aws_glacier_vault', name,
346
+ default_spec.deep_merge(spec)
347
+ end
348
+
349
+ def aws_iam_access_key(name, spec={})
350
+ resource 'aws_iam_access_key', name, spec
351
+ end
352
+
353
+ def aws_iam_account_password_policy(name, spec={})
354
+ resource 'aws_iam_account_password_policy', name, spec
355
+ end
356
+
357
+ def aws_iam_group(name, spec={})
358
+ default_spec = { name: name }
359
+ resource 'aws_iam_group', name,
360
+ default_spec.deep_merge(spec)
361
+ end
362
+
363
+ def aws_iam_group_policy(name, spec={})
364
+ default_spec = { name: name }
365
+ resource 'aws_iam_group_policy', name,
366
+ default_spec.deep_merge(spec)
367
+ end
368
+
369
+ def aws_iam_group_membership(name, spec={})
370
+ default_spec = { name: name }
371
+ resource 'aws_iam_group_membership', name,
372
+ default_spec.deep_merge(spec)
373
+ end
374
+
375
+ def aws_iam_instance_profile(name, spec={})
376
+ default_spec = { name: name }
377
+ resource 'aws_iam_instance_profile', name,
378
+ default_spec.deep_merge(spec)
379
+ end
380
+
381
+ def aws_iam_policy(name, spec={})
382
+ default_spec = { name: name }
383
+ resource 'aws_iam_policy', name,
384
+ default_spec.deep_merge(spec)
385
+ end
386
+
387
+ def aws_iam_policy_attachment(name, spec={})
388
+ default_spec = { name: name }
389
+ resource 'aws_iam_policy_attachment', name,
390
+ default_spec.deep_merge(spec)
391
+ end
392
+
393
+ def aws_iam_role(name, spec={})
394
+ default_spec = { name: name }
395
+ resource 'aws_iam_role', name,
396
+ default_spec.deep_merge(spec)
397
+ end
398
+
399
+ def aws_iam_role_policy(name, spec={})
400
+ default_spec = { name: name }
401
+ resource 'aws_iam_role_policy', name,
402
+ default_spec.deep_merge(spec)
403
+ end
404
+
405
+ def aws_iam_saml_provider(name, spec={})
406
+ default_spec = { name: name }
407
+ resource 'aws_iam_saml_provider', name,
408
+ default_spec.deep_merge(spec)
409
+ end
410
+
411
+ def aws_iam_server_certificate(name, spec={})
412
+ default_spec = { name: name }
413
+ resource 'aws_iam_server_certificate', name,
414
+ default_spec.deep_merge(spec)
415
+ end
416
+
417
+ def aws_iam_user(name, spec={})
418
+ default_spec = { name: name }
419
+ resource 'aws_iam_user', name,
420
+ default_spec.deep_merge(spec)
421
+ end
422
+
423
+ def aws_iam_user_policy(name, spec={})
424
+ default_spec = { name: name }
425
+ resource 'aws_iam_user_policy', name,
426
+ default_spec.deep_merge(spec)
427
+ end
428
+
429
+ def aws_iam_user_ssh_key(name, spec={})
430
+ default_spec = { username: name }
431
+ resource 'aws_iam_user_ssh_key', name,
432
+ default_spec.deep_merge(spec)
433
+ end
434
+
435
+ def aws_kinesis_stream(name, spec={})
436
+ default_spec = { name: name }
437
+ resource 'aws_kinesis_stream', name,
438
+ default_spec.deep_merge(spec)
439
+ end
440
+
441
+ def aws_kinesis_firehose_delivery_stream(name, spec={})
442
+ default_spec = { name: name }
443
+ resource 'aws_kinesis_firehose_delivery_stream', name,
444
+ default_spec.deep_merge(spec)
445
+ end
446
+
447
+ def aws_kms_key(name, spec={})
448
+ resource 'aws_kms_key', name, spec
449
+ end
450
+
451
+ def aws_kms_alias(name, spec={})
452
+ default_spec = { name: name }
453
+ resource 'aws_kms_alias', name,
454
+ default_spec.deep_merge(spec)
455
+ end
456
+
457
+ def aws_lambda_alias(name, spec={})
458
+ default_spec = { name: name }
459
+ resource 'aws_lambda_alias', name,
460
+ default_spec.deep_merge(spec)
461
+ end
462
+
463
+ def aws_lambda_function(name, spec={})
464
+ resource 'aws_lambda_function', name, spec
465
+ end
466
+
467
+ def aws_lambda_event_source_mapping(name, spec={})
468
+ resource 'aws_lambda_event_source_mapping', name, spec
469
+ end
470
+
471
+ def aws_lambda_permission(name, spec={})
472
+ resource 'aws_lambda_permission', name, spec
473
+ end
474
+
475
+ def aws_opsworks_custom_layer(name, spec={})
476
+ default_spec = { name: name }
477
+ resource 'aws_opsworks_custom_layer', name,
478
+ default_spec.deep_merge(spec)
479
+ end
480
+
481
+ def aws_opsworks_ganglia_layer(name, spec={})
482
+ default_spec = { name: name }
483
+ resource 'aws_opsworks_ganglia_layer', name,
484
+ default_spec.deep_merge(spec)
485
+ end
486
+
487
+ def aws_opsworks_haproxy_layer(name, spec={})
488
+ default_spec = { name: name }
489
+ resource 'aws_opsworks_haproxy_layer', name,
490
+ default_spec.deep_merge(spec)
491
+ end
492
+
493
+ def aws_opsworks_instance(name, spec={})
494
+ resource 'aws_opsworks_instance', name, spec
495
+ end
496
+
497
+ def aws_opsworks_java_app_layer(name, spec={})
498
+ default_spec = { name: name }
499
+ resource 'aws_opsworks_java_app_layer', name,
500
+ default_spec.deep_merge(spec)
501
+ end
502
+
503
+ def aws_opsworks_memcached_layer(name, spec={})
504
+ default_spec = { name: name }
505
+ resource 'aws_opsworks_memcached_layer', name,
506
+ default_spec.deep_merge(spec)
507
+ end
508
+
509
+ def aws_opsworks_mysql_layer(name, spec={})
510
+ default_spec = { name: name }
511
+ resource 'aws_opsworks_mysql_layer', name,
512
+ default_spec.deep_merge(spec)
513
+ end
514
+
515
+ def aws_opsworks_nodejs_app_layer(name, spec={})
516
+ default_spec = { name: name }
517
+ resource 'aws_opsworks_nodejs_app_layer', name,
518
+ default_spec.deep_merge(spec)
519
+ end
520
+
521
+ def aws_opsworks_php_app_layer(name, spec={})
522
+ default_spec = { name: name }
523
+ resource 'aws_opsworks_php_app_layer', name,
524
+ default_spec.deep_merge(spec)
525
+ end
526
+
527
+ def aws_opsworks_rails_app_layer(name, spec={})
528
+ default_spec = { name: name }
529
+ resource 'aws_opsworks_rails_app_layer', name,
530
+ default_spec.deep_merge(spec)
531
+ end
532
+
533
+ def aws_opsworks_stack(name, spec={})
534
+ default_spec = { name: name }
535
+ resource 'aws_opsworks_stack', name,
536
+ default_spec.deep_merge(spec)
537
+ end
538
+
539
+ def aws_opsworks_static_web_layer(name, spec={})
540
+ default_spec = { name: name }
541
+ resource 'aws_opsworks_static_web_layer', name,
542
+ default_spec.deep_merge(spec)
543
+ end
544
+
545
+ def aws_opsworks_application(name, spec={})
546
+ default_spec = { name: name }
547
+ resource 'aws_opsworks_application', name,
548
+ default_spec.deep_merge(spec)
549
+ end
550
+
551
+ def aws_db_instance(name, spec={})
552
+ resource 'aws_db_instance', name, spec
553
+ end
554
+
555
+ def aws_db_event_subscription(name, spec={})
556
+ default_spec = { name: name }
557
+ resource 'aws_db_event_subscription', name,
558
+ default_spec.deep_merge(spec)
559
+ end
560
+
561
+ def aws_db_option_group(name, spec={})
562
+ default_spec = { name: name }
563
+ resource 'aws_db_option_group', name,
564
+ default_spec.deep_merge(spec)
565
+ end
566
+
567
+ def aws_db_parameter_group(name, spec={})
568
+ default_spec = { name: name,
569
+ description: name
570
+ }
571
+ resource 'aws_db_parameter_group', name,
572
+ default_spec.deep_merge(spec)
573
+ end
574
+
575
+ def aws_db_security_group(name, spec={})
576
+ default_spec = { name: name,
577
+ description: name
578
+ }
579
+ resource 'aws_db_security_group', name,
580
+ default_spec.deep_merge(spec)
581
+ end
582
+
583
+ def aws_db_subnet_group(name, spec={})
584
+ default_spec = { name: name,
585
+ description: name
586
+ }
587
+ resource 'aws_db_subnet_group', name,
588
+ default_spec.deep_merge(spec)
589
+ end
590
+
591
+ def aws_rds_cluster(name, spec={})
592
+ default_spec = { cluster_identifier: name.downcase }
593
+ resource 'aws_rds_cluster', name,
594
+ default_spec.deep_merge(spec)
595
+ end
596
+
597
+ def aws_rds_cluster_instance(name, spec={})
598
+ resource 'aws_rds_cluster_instance', name, spec
599
+ end
600
+
601
+ def aws_redshift_cluster(name, spec={})
602
+ resource 'aws_redshift_cluster', name, spec
603
+ end
604
+
605
+ def aws_redshift_parameter_group(name, spec={})
606
+ default_spec = { name: name }
607
+ resource 'aws_redshift_parameter_group', name,
608
+ default_spec.deep_merge(spec)
609
+ end
610
+
611
+ def aws_redshift_security_group(name, spec={})
612
+ default_spec = { name: name,
613
+ description: name
614
+ }
615
+ resource 'aws_redshift_security_group', name,
616
+ default_spec.deep_merge(spec)
617
+ end
618
+
619
+ def aws_redshift_subnet_group(name, spec={})
620
+ default_spec = { name: name,
621
+ description: name
622
+ }
623
+ resource 'aws_redshift_subnet_group', name,
624
+ default_spec.deep_merge(spec)
625
+ end
626
+
627
+ def aws_route53_delegation_set(name, spec={})
628
+ resource 'aws_route53_delegation_set', name, spec
629
+ end
630
+
631
+ def aws_route53_health_check(name, spec={})
632
+ resource 'aws_route53_health_check', name, spec
633
+ end
634
+
635
+ def aws_route53_record(name, spec={})
636
+ default_spec = { name: name }
637
+ resource 'aws_route53_record', name,
638
+ default_spec.deep_merge(spec)
639
+ end
640
+
641
+ def aws_route53_zone(name, spec={})
642
+ default_spec = { name: name }
643
+ resource 'aws_route53_zone', name,
644
+ default_spec.deep_merge(spec)
645
+ end
646
+
647
+ def aws_route53_zone_association(name, spec={})
648
+ resource 'aws_route53_zone_association', name, spec
649
+ end
650
+
651
+ def aws_s3_bucket(name, spec={})
652
+ resource 'aws_s3_bucket', name, spec
653
+ end
654
+
655
+ def aws_s3_bucket_object(name, spec={})
656
+ resource 'aws_s3_bucket_object', name, spec
657
+ end
658
+
659
+ def aws_s3_bucket_notification(name, spec={})
660
+ resource 'aws_s3_bucket_notification', name, spec
661
+ end
662
+
663
+ def aws_sns_topic(name, spec={})
664
+ default_spec = { name: name }
665
+ resource 'aws_sns_topic', name,
666
+ default_spec.deep_merge(spec)
667
+ end
668
+
669
+ def aws_sns_topic_subscription(name, spec={})
670
+ resource 'aws_sns_topic_subscription', name, spec
671
+ end
672
+
673
+ def aws_sqs_queue(name, spec={})
674
+ default_spec = { name: name }
675
+ resource 'aws_sqs_queue', name,
676
+ default_spec.deep_merge(spec)
677
+ end
678
+
679
+ def aws_customer_gateway(name, spec={})
680
+ resource 'aws_customer_gateway', name, spec
681
+ end
682
+
683
+ def aws_flow_log(name, spec={})
684
+ resource 'aws_flow_log', name, spec
685
+ end
686
+
687
+ def aws_internet_gateway(name, spec={})
688
+ resource 'aws_internet_gateway', name, spec
689
+ end
690
+
691
+ def aws_main_route_table_association(name, spec={})
692
+ resource 'aws_main_route_table_association', name, spec
693
+ end
694
+
695
+ def aws_nat_gateway(name, spec={})
696
+ resource 'aws_nat_gateway', name, spec
697
+ end
698
+
699
+ def aws_default_network_acl(name, spec={})
700
+ resource 'aws_default_network_acl', name, spec
701
+ end
702
+
703
+ def aws_network_acl(name, spec={})
704
+ resource 'aws_network_acl', name, spec
705
+ end
706
+
707
+ def aws_network_acl_rule(name, spec={})
708
+ resource 'aws_network_acl_rule', name, spec
709
+ end
710
+
711
+ def aws_network_interface(name, spec={})
712
+ resource 'aws_network_interface', name, spec
713
+ end
714
+
715
+ def aws_route(name, spec={})
716
+ resource 'aws_route', name, spec
717
+ end
718
+
719
+ def aws_route_table(name, spec={})
720
+ resource 'aws_route_table', name, spec
721
+ end
722
+
723
+ def aws_route_table_association(name, spec={})
724
+ resource 'aws_route_table_association', name, spec
725
+ end
726
+
727
+ def aws_security_group(name, spec={})
728
+ default_spec = { name: name,
729
+ tags: { Name: name }
730
+ }
731
+ resource('aws_security_group', name,
732
+ default_spec.deep_merge(spec={}))
733
+ end
734
+
735
+ def aws_security_group_rule(name, spec={})
736
+ resource 'aws_security_group_rule', name, spec
737
+ end
738
+
739
+ def aws_subnet(name, spec={})
740
+ resource 'aws_subnet', name, spec
741
+ end
742
+
743
+ def aws_vpc(name, spec={})
744
+ resource 'aws_vpc', name, spec
745
+ end
746
+
747
+ def aws_vpc_dhcp_options(name, spec={})
748
+ resource 'aws_vpc_dhcp_options', name, spec
749
+ end
750
+
751
+ def aws_vpc_dhcp_options_association(name, spec={})
752
+ resource 'aws_vpc_dhcp_options_association', name, spec
753
+ end
754
+
755
+ def aws_vpc_endpoint(name, spec={})
756
+ resource 'aws_vpc_endpoint', name, spec
757
+ end
758
+
759
+ def aws_vpc_peering_connection(name, spec={})
760
+ resource 'aws_vpc_peering_connection', name, spec
761
+ end
762
+
763
+ def aws_vpn_connection(name, spec={})
764
+ resource 'aws_vpn_connection', name, spec
765
+ end
766
+
767
+ def aws_vpn_connection_route(name, spec={})
768
+ resource 'aws_vpn_connection_route', name, spec
769
+ end
770
+
771
+ def aws_vpn_gateway(name, spec={})
772
+ resource 'aws_vpn_gateway', name, spec
773
+ end
774
+ end
@@ -0,0 +1,3 @@
1
+ module Terrafied
2
+ VERSION = "0.1.0"
3
+ end
data/terrafied.gemspec ADDED
@@ -0,0 +1,35 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'terrafied/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "terrafied"
8
+ spec.version = Terrafied::VERSION
9
+ spec.authors = ["thattommyhall"]
10
+ spec.email = ["thattommyhall@gmail.com"]
11
+
12
+ spec.summary = %q{Simple Ruby DSL for terraform}
13
+ spec.description = %q{}
14
+ spec.homepage = "https://github.com/thattommyhall/terrafied"
15
+ spec.license = "MIT"
16
+
17
+ # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
18
+ # delete this section to allow pushing this gem to any host.
19
+ if spec.respond_to?(:metadata)
20
+ spec.metadata['allowed_push_host'] = "https://rubygems.org"
21
+ else
22
+ raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
23
+ end
24
+
25
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
26
+ spec.bindir = "exe"
27
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
+ spec.require_paths = ["lib"]
29
+
30
+ spec.add_development_dependency "bundler", "~> 1.10"
31
+ spec.add_development_dependency "rake", "~> 10.0"
32
+ spec.add_development_dependency "minitest"
33
+ spec.add_development_dependency "guard"
34
+ spec.add_development_dependency "guard-minitest"
35
+ end
metadata ADDED
@@ -0,0 +1,131 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: terrafied
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - thattommyhall
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-07-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.10'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: guard
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: guard-minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: ''
84
+ email:
85
+ - thattommyhall@gmail.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - ".gitignore"
91
+ - ".travis.yml"
92
+ - CODE_OF_CONDUCT.md
93
+ - Gemfile
94
+ - Guardfile
95
+ - LICENSE.txt
96
+ - README.md
97
+ - Rakefile
98
+ - examples/add_resource_type.rb
99
+ - examples/resource_aliases.rb
100
+ - examples/simple.rb
101
+ - lib/terrafied.rb
102
+ - lib/terrafied/builder.rb
103
+ - lib/terrafied/resource_shortcuts.rb
104
+ - lib/terrafied/version.rb
105
+ - terrafied.gemspec
106
+ homepage: https://github.com/thattommyhall/terrafied
107
+ licenses:
108
+ - MIT
109
+ metadata:
110
+ allowed_push_host: https://rubygems.org
111
+ post_install_message:
112
+ rdoc_options: []
113
+ require_paths:
114
+ - lib
115
+ required_ruby_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ required_rubygems_version: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ requirements: []
126
+ rubyforge_project:
127
+ rubygems_version: 2.5.1
128
+ signing_key:
129
+ specification_version: 4
130
+ summary: Simple Ruby DSL for terraform
131
+ test_files: []