cfer 0.8.0 → 1.0.0

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