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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 603fcf5d75a2213b550efd3995f32516d80a7d7c8e3fad3625d87d4679c54a6e
4
- data.tar.gz: c52dec7e2d40bc755e7dd203c183fcf78fb5ee732680bba609f9ea11bc0a1abc
3
+ metadata.gz: 2a6abc36b399fc3f0b6733ecfecb066ede795f883ca33c3701905482fa45ea4c
4
+ data.tar.gz: 03dd4c80a9ec1dc46f54fff419c66e0797a588efbd7b93a78173b579e0e636a6
5
5
  SHA512:
6
- metadata.gz: b1637ca9021a0522a2745341881a5735d2ca60052f2d584dde85654e7fe9c79e247c24e7fd52b3b6bb295b83ce3b7442ea62f1bf932bb98f6b16e37c9c9edf2d
7
- data.tar.gz: f4a49c953b84bb6a33df73c192e733d50c3ac69262db1aa09f419294e0efeb94ef2947dbd03dc265c353e9e8dc4ce3e0e6779ebc93241c3fa1a1af19c1565907
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
@@ -1,5 +1,13 @@
1
1
  # Cfer Change Log
2
2
 
3
+ ## Next
4
+ ## 1.0.0
5
+ ## 0.8.1
6
+
7
+ * Support for Ruby 3
8
+ * Deps updates
9
+ * Syntactic sugar for exporting values from a Cfn stackq
10
+
3
11
  ## 0.8.0
4
12
  Upgrade to AWS SDK v3
5
13
 
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
- [![Build Status](https://travis-ci.org/seanedwards/cfer.svg?branch=master)](https://travis-ci.org/seanedwards/cfer)
3
+ ![Build Status](https://github.com/seanedwards/cfer/actions/workflows/build.yml/badge.svg?branch=master)
4
4
  [![Gem Version](https://badge.fury.io/rb/cfer.svg)](http://badge.fury.io/rb/cfer)
5
- [![Code Climate](https://codeclimate.com/github/seanedwards/cfer/badges/gpa.svg)](https://codeclimate.com/github/seanedwards/cfer)
6
- [![Test Coverage](https://codeclimate.com/github/seanedwards/cfer/badges/coverage.svg)](https://codeclimate.com/github/seanedwards/cfer/coverage)
7
- [![Issue Count](https://codeclimate.com/github/seanedwards/cfer/badges/issue_count.svg)](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 = ['~> 2.2', '>= 2.2.5']
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.1.5'
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', '~> 2.2'
32
- spec.add_runtime_dependency 'highline', '~> 1.7'
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
@@ -63,7 +63,8 @@ module Cfer
63
63
  :parameters,
64
64
  :options,
65
65
  :lookup_output,
66
- :lookup_outputs
66
+ :lookup_outputs,
67
+ :__docile_undo_fallback__
67
68
  ].freeze
68
69
 
69
70
  # Directly sets raw properties in the underlying CloudFormation structure.
@@ -21,7 +21,7 @@ module Cfer::Core
21
21
 
22
22
  attr_reader :stack
23
23
 
24
- def initialize(name, type, stack, **options, &block)
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 = {}, &block)
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 = {}, &block)
82
+ def after(type, **options, &block)
83
83
  resource_class(type).post_hooks << options.merge(block: block)
84
84
  end
85
85
  end
@@ -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 = {}, &block)
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] :Description Information about the value
156
- def output(name, value, options = {})
157
- self[:Outputs][name] = options.merge('Value' => value)
158
- end
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
@@ -1,5 +1,5 @@
1
1
  module Cfer
2
- VERSION = "0.8.0"
2
+ VERSION = "1.0.0"
3
3
 
4
4
  begin
5
5
  require 'semantic'
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::BlockHash
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 = {}, &block)
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.8.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: 2020-02-20 00:00:00.000000000 Z
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.1.5
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.1.5
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: '2.2'
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: '2.2'
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.7'
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.7'
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
- - ".codeclimate.yml"
232
+ - ".github/dependabot.yml"
233
+ - ".github/workflows/build.yml"
234
+ - ".github/workflows/release.yml"
205
235
  - ".gitignore"
206
236
  - ".rspec"
207
- - ".rubocop.yml"
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
- rubyforge_project:
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/**/*