cfer 0.8.0 → 1.0.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 +4 -4
- data/.github/dependabot.yml +12 -0
- data/.github/workflows/build.yml +18 -0
- data/.github/workflows/release.yml +41 -0
- data/.tool-versions +1 -0
- data/CHANGELOG.md +8 -0
- data/Gemfile +0 -4
- data/README.md +13 -14
- data/cfer.gemspec +6 -4
- data/lib/cfer/block.rb +2 -1
- data/lib/cfer/core/resource.rb +3 -3
- data/lib/cfer/core/stack.rb +10 -7
- data/lib/cfer/version.rb +1 -1
- data/lib/cfer.rb +2 -1
- data/lib/cferext/aws/iam/policy_generator.rb +2 -2
- metadata +41 -16
- data/.codeclimate.yml +0 -27
- data/.rubocop.yml +0 -1168
- data/.travis.yml +0 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a6abc36b399fc3f0b6733ecfecb066ede795f883ca33c3701905482fa45ea4c
|
4
|
+
data.tar.gz: 03dd4c80a9ec1dc46f54fff419c66e0797a588efbd7b93a78173b579e0e636a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2efd4ee2bcb86c0c421f563a1487dc634915a862cc00faeb77de29fe0987e3994b5e3116034b0667801b28ab03cb716e8c87f2f99e03bc4094e8c836170f6d2a
|
7
|
+
data.tar.gz: 5089f9d86fea161d522d6e11a1cc7d9352f937a863a65cc9c467832244bd068355ca5a955b3ed461a73ebad08d41dd8000f65cf6082173d72e8fe975a2939cbd
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# To get started with Dependabot version updates, you'll need to specify which
|
2
|
+
# package ecosystems to update and where the package manifests are located.
|
3
|
+
# Please see the documentation for all configuration options:
|
4
|
+
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
5
|
+
|
6
|
+
version: 2
|
7
|
+
updates:
|
8
|
+
- package-ecosystem: "bundler" # See documentation for possible values
|
9
|
+
directory: "/" # Location of package manifests
|
10
|
+
schedule:
|
11
|
+
interval: "weekly"
|
12
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
name: Build Cfer
|
2
|
+
on: [push]
|
3
|
+
jobs:
|
4
|
+
Build:
|
5
|
+
strategy:
|
6
|
+
matrix:
|
7
|
+
os: [ubuntu, macos]
|
8
|
+
ruby: ["2.7", "3.0", "3.1"]
|
9
|
+
runs-on: ${{matrix.os}}-latest
|
10
|
+
steps:
|
11
|
+
- uses: actions/checkout@v3
|
12
|
+
- uses: ruby/setup-ruby@v1
|
13
|
+
with:
|
14
|
+
ruby-version: ${{matrix.ruby}}
|
15
|
+
bundler-cache: true
|
16
|
+
- run: bundle install --without debug --jobs=3 --retry=3
|
17
|
+
- run: bundle exec rspec
|
18
|
+
- run: bundle exec yard
|
@@ -0,0 +1,41 @@
|
|
1
|
+
name: Release Cfer
|
2
|
+
on:
|
3
|
+
workflow_dispatch:
|
4
|
+
inputs:
|
5
|
+
release_type:
|
6
|
+
type: choice
|
7
|
+
description: Type of release to run
|
8
|
+
required: true
|
9
|
+
options:
|
10
|
+
- major
|
11
|
+
- minor
|
12
|
+
- patch
|
13
|
+
jobs:
|
14
|
+
Publish:
|
15
|
+
runs-on: ubuntu-latest
|
16
|
+
permissions:
|
17
|
+
contents: write
|
18
|
+
steps:
|
19
|
+
- uses: actions/checkout@v3
|
20
|
+
- uses: ruby/setup-ruby@v1
|
21
|
+
with:
|
22
|
+
ruby-version: 3.1
|
23
|
+
bundler-cache: true
|
24
|
+
- run: bundle install --without debug --without test --jobs=3 --retry=3
|
25
|
+
- name: Bump version
|
26
|
+
run: |
|
27
|
+
git config --global user.name "CI"
|
28
|
+
git config --global user.email "seanedwards@users.noreply.github.com"
|
29
|
+
bundle exec bump ${{inputs.release_type}} --tag --tag-prefix v --changelog
|
30
|
+
git merge v$(bundle exec bump current)
|
31
|
+
git push --follow-tags
|
32
|
+
- name: Publish to RubyGems
|
33
|
+
run: |
|
34
|
+
mkdir -p $HOME/.gem
|
35
|
+
touch $HOME/.gem/credentials
|
36
|
+
chmod 0600 $HOME/.gem/credentials
|
37
|
+
printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
|
38
|
+
gem build *.gemspec
|
39
|
+
gem push *.gem
|
40
|
+
env:
|
41
|
+
GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_API_KEY}}"
|
data/.tool-versions
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby 3.1.2
|
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
@@ -7,9 +7,6 @@ group :test do
|
|
7
7
|
gem 'rspec'
|
8
8
|
gem 'rspec-mocks'
|
9
9
|
gem 'guard-rspec'
|
10
|
-
gem 'simplecov'
|
11
|
-
gem 'rubocop', '~> 0.51'
|
12
|
-
gem "codeclimate-test-reporter", "~> 1.0.0"
|
13
10
|
end
|
14
11
|
|
15
12
|
group :debug do
|
@@ -17,5 +14,4 @@ group :debug do
|
|
17
14
|
gem 'pry-byebug'
|
18
15
|
gem 'pry-rescue'
|
19
16
|
gem 'pry-stack_explorer'
|
20
|
-
gem 'travis'
|
21
17
|
end
|
data/README.md
CHANGED
@@ -1,26 +1,13 @@
|
|
1
1
|
# Cfer
|
2
2
|
|
3
|
-
|
3
|
+

|
4
4
|
[](http://badge.fury.io/rb/cfer)
|
5
|
-
[](https://codeclimate.com/github/seanedwards/cfer)
|
6
|
-
[](https://codeclimate.com/github/seanedwards/cfer/coverage)
|
7
|
-
[](https://codeclimate.com/github/seanedwards/cfer)
|
8
5
|
|
9
6
|
|
10
7
|
Cfer is a lightweight toolkit for managing CloudFormation templates.
|
11
8
|
|
12
9
|
Read about Cfer [here](https://github.com/seanedwards/cfer/blob/master/examples/vpc.md).
|
13
10
|
|
14
|
-
Sign up for the [Cfer mailing list](http://eepurl.com/bVA-Hr) to receive updates when changes are made. Cfer is a slow-moving project, so you can expect around one or two updates per year at most.
|
15
|
-
|
16
|
-
## Support
|
17
|
-
|
18
|
-
Cfer is pre-1.0 software, and may contain bugs or incomplete features. Please see the [license](https://github.com/seanedwards/cfer/blob/master/LICENSE.txt) for disclaimers.
|
19
|
-
|
20
|
-
If you would like support or guidance on Cfer, or CloudFormation in general, I offer DevOps consulting services. Please [Contact me](mailto:stedwards87+cfer@gmail.com) and I'll be happy to discuss your needs.
|
21
|
-
|
22
|
-
You can also find me at [@tilmonedwards](https://twitter.com/tilmonedwards). If you use Cfer, or are considering it, I'd love to hear from you.
|
23
|
-
|
24
11
|
## Installation
|
25
12
|
|
26
13
|
Add this line to your application's Gemfile:
|
@@ -119,12 +106,24 @@ Outputs may be defined using the `output` function:
|
|
119
106
|
output :OutputName, Fn::ref(:ResourceName)
|
120
107
|
```
|
121
108
|
|
109
|
+
Outputs may have an optional description:
|
110
|
+
|
111
|
+
```ruby
|
112
|
+
output :OutputName, Fn::ref(:ResourceName), description: 'The resource that does stuff'
|
113
|
+
```
|
114
|
+
|
122
115
|
Outputs may be retireved from other stacks anywhere in a template by using the `lookup_output` function.
|
123
116
|
|
124
117
|
```ruby
|
125
118
|
lookup_output('stack_name', 'output_name')
|
126
119
|
```
|
127
120
|
|
121
|
+
Outputs may also be exported for use by `Fn::ImportValue` in other cloudformation stacks:
|
122
|
+
|
123
|
+
```ruby
|
124
|
+
output :OutputName, Fn::ref(:ResourceName), export: Fn::sub('${AWS::StackName}-OutputName')
|
125
|
+
```
|
126
|
+
|
128
127
|
#### Including code from multiple files
|
129
128
|
|
130
129
|
Templates can get pretty large, and splitting template code into multiple
|
data/cfer.gemspec
CHANGED
@@ -14,25 +14,27 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.homepage = 'https://github.com/seanedwards/cfer'
|
15
15
|
spec.license = 'MIT'
|
16
16
|
|
17
|
-
spec.required_ruby_version = ['
|
17
|
+
spec.required_ruby_version = ['>= 2.2.5']
|
18
18
|
|
19
19
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
20
20
|
spec.bindir = 'bin'
|
21
21
|
spec.executables = ['cfer', 'json-to-cfer']
|
22
22
|
spec.require_paths = ['lib']
|
23
23
|
|
24
|
-
spec.add_runtime_dependency 'docile', '~> 1.
|
24
|
+
spec.add_runtime_dependency 'docile', '~> 1.4'
|
25
25
|
spec.add_runtime_dependency 'cri', '~> 2.7'
|
26
26
|
spec.add_runtime_dependency 'activesupport', '>= 3'
|
27
27
|
spec.add_runtime_dependency 'aws-sdk-cloudformation', '~> 1'
|
28
28
|
spec.add_runtime_dependency 'aws-sdk-s3', '~> 1'
|
29
29
|
spec.add_runtime_dependency 'preconditions', '~> 0.3.0'
|
30
30
|
spec.add_runtime_dependency 'semantic', '~> 1.4'
|
31
|
-
spec.add_runtime_dependency 'rainbow', '~>
|
32
|
-
spec.add_runtime_dependency 'highline', '~> 1
|
31
|
+
spec.add_runtime_dependency 'rainbow', '~> 3'
|
32
|
+
spec.add_runtime_dependency 'highline', '~> 2.1'
|
33
33
|
spec.add_runtime_dependency 'table_print', '~> 1.5'
|
34
34
|
spec.add_runtime_dependency 'git', '~> 1.3'
|
35
|
+
spec.add_runtime_dependency 'rexml', '~> 3'
|
35
36
|
|
36
37
|
spec.add_development_dependency 'yard'
|
37
38
|
spec.add_development_dependency 'rake'
|
39
|
+
spec.add_development_dependency 'bump'
|
38
40
|
end
|
data/lib/cfer/block.rb
CHANGED
data/lib/cfer/core/resource.rb
CHANGED
@@ -21,7 +21,7 @@ module Cfer::Core
|
|
21
21
|
|
22
22
|
attr_reader :stack
|
23
23
|
|
24
|
-
def initialize(name, type, stack,
|
24
|
+
def initialize(name, type, stack, options, &block)
|
25
25
|
@name = name
|
26
26
|
@stack = stack
|
27
27
|
|
@@ -73,13 +73,13 @@ module Cfer::Core
|
|
73
73
|
|
74
74
|
# Registers a hook that will be run before properties are set on a resource
|
75
75
|
# @param type [String] The type of resource, for example `AWS::EC2::Instance`
|
76
|
-
def before(type, options
|
76
|
+
def before(type, **options, &block)
|
77
77
|
resource_class(type).pre_hooks << options.merge(block: block)
|
78
78
|
end
|
79
79
|
|
80
80
|
# Registers a hook that will be run after properties have been set on a resource
|
81
81
|
# @param type [String] The type of resource, for example `AWS::EC2::Instance`
|
82
|
-
def after(type, options
|
82
|
+
def after(type, **options, &block)
|
83
83
|
resource_class(type).post_hooks << options.merge(block: block)
|
84
84
|
end
|
85
85
|
end
|
data/lib/cfer/core/stack.rb
CHANGED
@@ -101,7 +101,7 @@ module Cfer::Core
|
|
101
101
|
# By adding a constraint description, such as must only contain upper- and lowercase letters, and numbers, you can display a customized error message:
|
102
102
|
#
|
103
103
|
# ```Malformed input-Parameter MyParameter must only contain upper and lower case letters and numbers```
|
104
|
-
def parameter(name, options
|
104
|
+
def parameter(name, **options)
|
105
105
|
param = {}
|
106
106
|
options.each do |key, v|
|
107
107
|
next if v === nil
|
@@ -138,7 +138,7 @@ module Cfer::Core
|
|
138
138
|
# @param name [String] The name of the resource (must be alphanumeric)
|
139
139
|
# @param type [String] The type of CloudFormation resource to create.
|
140
140
|
# @param options [Hash] Additional attributes to add to the resource block (such as the `UpdatePolicy` for an `AWS::AutoScaling::AutoScalingGroup`)
|
141
|
-
def resource(name, type, options
|
141
|
+
def resource(name, type, **options, &block)
|
142
142
|
Preconditions.check_argument(/[[:alnum:]]+/ =~ name, "Resource name must be alphanumeric")
|
143
143
|
|
144
144
|
clazz = Cfer::Core::Resource.resource_class(type)
|
@@ -152,11 +152,14 @@ module Cfer::Core
|
|
152
152
|
# @param name [String] The Logical ID of the output parameter
|
153
153
|
# @param value [String] Value to return
|
154
154
|
# @param options [Hash] Extra options for this output parameter
|
155
|
-
# @option options [String] :
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
155
|
+
# @option options [String] :description Information about the value
|
156
|
+
# @option options [String] :export Name be exported for cross-stack reference
|
157
|
+
def output(name, value, **options)
|
158
|
+
opt = options.each_with_object({}) { |(k,v),h| h[k.to_s.capitalize] = v } # capitalize all keys
|
159
|
+
export = opt.has_key?('Export') ? {'Name' => opt['Export']} : nil
|
160
|
+
self[:Outputs][name] = opt.merge('Value' => value, 'Export' => export).compact
|
161
|
+
end
|
162
|
+
|
160
163
|
# Renders the stack into a CloudFormation template.
|
161
164
|
# @return [String] The final template
|
162
165
|
def to_cfn
|
data/lib/cfer/version.rb
CHANGED
data/lib/cfer.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'active_support/all'
|
2
2
|
require 'aws-sdk-cloudformation'
|
3
|
+
require 'aws-sdk-s3'
|
3
4
|
require 'logger'
|
4
5
|
require 'json'
|
5
6
|
require 'preconditions'
|
@@ -299,7 +300,7 @@ module Cfer
|
|
299
300
|
rescue SyntaxError => e
|
300
301
|
raise Cfer::Util::TemplateError.new([]), e.message
|
301
302
|
rescue StandardError => e
|
302
|
-
raise Cfer::Util::TemplateError.new(convert_backtrace(base_loc, e)), e.message
|
303
|
+
raise e #Cfer::Util::TemplateError.new(convert_backtrace(base_loc, e)), e.message
|
303
304
|
end
|
304
305
|
|
305
306
|
def convert_backtrace(base_loc, exception)
|
@@ -3,13 +3,13 @@ require 'docile'
|
|
3
3
|
module CferExt
|
4
4
|
module AWS
|
5
5
|
module IAM
|
6
|
-
class PolicyGenerator < Cfer::
|
6
|
+
class PolicyGenerator < Cfer::Block
|
7
7
|
def initialize
|
8
8
|
self[:Version] = '2012-10-17'
|
9
9
|
self[:Statement] = []
|
10
10
|
end
|
11
11
|
|
12
|
-
def statement(options
|
12
|
+
def statement(**options, &block)
|
13
13
|
statement = ::Cfer::BlockHash.new(&block)
|
14
14
|
statement.merge! options
|
15
15
|
statement.build_from_block(&block)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cfer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Edwards
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-02-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: docile
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.
|
19
|
+
version: '1.4'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.
|
26
|
+
version: '1.4'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: cri
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,28 +114,28 @@ dependencies:
|
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
117
|
+
version: '3'
|
118
118
|
type: :runtime
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
124
|
+
version: '3'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: highline
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - "~>"
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: '1
|
131
|
+
version: '2.1'
|
132
132
|
type: :runtime
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: '1
|
138
|
+
version: '2.1'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: table_print
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,6 +164,20 @@ dependencies:
|
|
164
164
|
- - "~>"
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '1.3'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: rexml
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '3'
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '3'
|
167
181
|
- !ruby/object:Gem::Dependency
|
168
182
|
name: yard
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -192,6 +206,20 @@ dependencies:
|
|
192
206
|
- - ">="
|
193
207
|
- !ruby/object:Gem::Version
|
194
208
|
version: '0'
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
name: bump
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - ">="
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '0'
|
216
|
+
type: :development
|
217
|
+
prerelease: false
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - ">="
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '0'
|
195
223
|
description: Toolkit for automating infrastructure using AWS CloudFormation
|
196
224
|
email:
|
197
225
|
- stedwards87+cfer@gmail.com
|
@@ -201,11 +229,12 @@ executables:
|
|
201
229
|
extensions: []
|
202
230
|
extra_rdoc_files: []
|
203
231
|
files:
|
204
|
-
- ".
|
232
|
+
- ".github/dependabot.yml"
|
233
|
+
- ".github/workflows/build.yml"
|
234
|
+
- ".github/workflows/release.yml"
|
205
235
|
- ".gitignore"
|
206
236
|
- ".rspec"
|
207
|
-
- ".
|
208
|
-
- ".travis.yml"
|
237
|
+
- ".tool-versions"
|
209
238
|
- ".yardopts"
|
210
239
|
- CHANGELOG.md
|
211
240
|
- CODE_OF_CONDUCT.md
|
@@ -258,9 +287,6 @@ require_paths:
|
|
258
287
|
- lib
|
259
288
|
required_ruby_version: !ruby/object:Gem::Requirement
|
260
289
|
requirements:
|
261
|
-
- - "~>"
|
262
|
-
- !ruby/object:Gem::Version
|
263
|
-
version: '2.2'
|
264
290
|
- - ">="
|
265
291
|
- !ruby/object:Gem::Version
|
266
292
|
version: 2.2.5
|
@@ -270,8 +296,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
270
296
|
- !ruby/object:Gem::Version
|
271
297
|
version: '0'
|
272
298
|
requirements: []
|
273
|
-
|
274
|
-
rubygems_version: 2.7.6.2
|
299
|
+
rubygems_version: 3.3.26
|
275
300
|
signing_key:
|
276
301
|
specification_version: 4
|
277
302
|
summary: Toolkit for automating infrastructure using AWS CloudFormation
|
data/.codeclimate.yml
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
---
|
2
|
-
engines:
|
3
|
-
duplication:
|
4
|
-
enabled: true
|
5
|
-
config:
|
6
|
-
languages:
|
7
|
-
- ruby
|
8
|
-
- javascript
|
9
|
-
- python
|
10
|
-
- php
|
11
|
-
fixme:
|
12
|
-
enabled: true
|
13
|
-
rubocop:
|
14
|
-
enabled: true
|
15
|
-
exclude_fingerprints:
|
16
|
-
- 9d7be17b9e5e786560cf0df662f55736
|
17
|
-
ratings:
|
18
|
-
paths:
|
19
|
-
- "**.inc"
|
20
|
-
- "**.js"
|
21
|
-
- "**.jsx"
|
22
|
-
- "**.module"
|
23
|
-
- "**.php"
|
24
|
-
- "**.py"
|
25
|
-
- "**.rb"
|
26
|
-
exclude_paths:
|
27
|
-
- spec/**/*
|