cfndsl 0.17.5 → 1.0.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +4 -4
  4. data/.travis.yml +6 -1
  5. data/CHANGELOG.md +32 -34
  6. data/README.md +68 -21
  7. data/Rakefile +25 -3
  8. data/TODO.md +18 -0
  9. data/UPGRADING.md +22 -0
  10. data/cfndsl.gemspec +3 -3
  11. data/exe/cfndsl +5 -0
  12. data/lib/cfndsl.rb +2 -116
  13. data/lib/cfndsl/aws/cloud_formation_template.rb +8 -1
  14. data/lib/cfndsl/aws/patches/000_sam.spec.json +574 -0
  15. data/lib/cfndsl/aws/patches/100_sam.spec_DeploymentPreference_patch.json +64 -0
  16. data/lib/cfndsl/aws/patches/500_Cognito_IdentityPoolRoleAttachment_patches.json +25 -0
  17. data/lib/cfndsl/aws/patches/500_IoT1Click_patch_PlacementTemplate_DeviceTemplates.json +20 -0
  18. data/lib/cfndsl/aws/patches/500_SAM_Serverless_Function_S3Event_Events_patch.json +16 -0
  19. data/lib/cfndsl/aws/patches/500_SAM_Serverless_Function_S3Location_Version_patch.json +16 -0
  20. data/lib/cfndsl/aws/patches/500_SSM_AssociationName_patch.json +16 -0
  21. data/lib/cfndsl/aws/patches/500_VPCEndpoint_patch.json +17 -0
  22. data/lib/cfndsl/aws/patches/510_ElasticSearch_Domain_patches.json +15 -0
  23. data/lib/cfndsl/aws/patches/600_RefKinds_patch.json +3654 -0
  24. data/lib/cfndsl/aws/patches/700_SAM_Serverless_Function_InlineCode_patch.json +20 -0
  25. data/lib/cfndsl/aws/patches/800_List_types_patch.json +115 -0
  26. data/lib/cfndsl/aws/resource_specification.json +35809 -11627
  27. data/lib/cfndsl/aws/types.rb +3 -3
  28. data/lib/cfndsl/cfnlego.rb +34 -0
  29. data/lib/{cfnlego → cfndsl/cfnlego}/cloudformation.erb +0 -0
  30. data/lib/{cfnlego → cfndsl/cfnlego}/cloudformation.rb +0 -0
  31. data/lib/{cfnlego → cfndsl/cfnlego}/resource.rb +3 -8
  32. data/lib/cfndsl/cloudformation.rb +107 -0
  33. data/lib/cfndsl/conditions.rb +11 -1
  34. data/lib/cfndsl/creation_policy.rb +1 -1
  35. data/lib/cfndsl/deep_merge.rb +4 -0
  36. data/lib/cfndsl/external_parameters.rb +4 -13
  37. data/lib/cfndsl/globals.rb +48 -9
  38. data/lib/cfndsl/jsonable.rb +22 -60
  39. data/lib/cfndsl/mappings.rb +1 -1
  40. data/lib/cfndsl/module.rb +16 -5
  41. data/lib/cfndsl/orchestration_template.rb +185 -83
  42. data/lib/cfndsl/outputs.rb +5 -1
  43. data/lib/cfndsl/parameters.rb +1 -1
  44. data/lib/cfndsl/plurals.rb +12 -1
  45. data/lib/cfndsl/properties.rb +1 -1
  46. data/lib/cfndsl/rake_task.rb +206 -12
  47. data/lib/cfndsl/ref_check.rb +19 -11
  48. data/lib/cfndsl/resources.rb +6 -19
  49. data/lib/cfndsl/rules.rb +1 -1
  50. data/lib/cfndsl/runner.rb +143 -0
  51. data/lib/cfndsl/specification.rb +80 -95
  52. data/lib/cfndsl/types.rb +205 -91
  53. data/lib/cfndsl/update_policy.rb +1 -1
  54. data/lib/cfndsl/version.rb +1 -1
  55. data/sample/autoscale.rb +0 -1
  56. data/sample/autoscale2.rb +0 -1
  57. data/sample/config_service.rb +2 -2
  58. data/sample/t1.rb +1 -1
  59. data/sample/vpc_example.rb +1 -1
  60. data/sample/vpc_with_vpn_example.rb +1 -1
  61. data/spec/aws/list_type_patches_spec.rb +35 -0
  62. data/spec/aws/nested_arrays_spec.rb +155 -3
  63. data/spec/aws/serverless_spec.rb +0 -2
  64. data/spec/cfndsl_spec.rb +94 -78
  65. data/spec/cli_spec.rb +16 -54
  66. data/spec/cloud_formation_template_spec.rb +233 -0
  67. data/spec/condition_spec.rb +24 -0
  68. data/spec/direct_ruby_spec.rb +19 -0
  69. data/spec/external_parameters_spec.rb +2 -15
  70. data/spec/fixtures/condition-assertion.json +1 -0
  71. data/spec/fixtures/test.rb +2 -1
  72. data/spec/generate_spec.rb +4 -2
  73. data/spec/resources_spec.rb +0 -7
  74. data/spec/spec_helper.rb +2 -7
  75. data/spec/support/shared_examples/orchestration_template.rb +15 -2
  76. data/spec/types_definition_spec.rb +3 -6
  77. metadata +52 -23
  78. data/bin/cfndsl +0 -160
  79. data/lib/cfndsl/errors.rb +0 -31
  80. data/lib/cfndsl/os/heat_template.rb +0 -18
  81. data/lib/cfndsl/os/types.rb +0 -14
  82. data/lib/cfndsl/os/types.yaml +0 -2423
  83. data/lib/cfndsl/patches.rb +0 -226
  84. data/lib/cfnlego.rb +0 -44
  85. data/spec/fixtures/heattest.rb +0 -24
  86. data/spec/heat_template_spec.rb +0 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 56d40841f56346fda76c7dcde85f56dac170f079fdd9e1d3b28a8490156b5270
4
- data.tar.gz: 0e3d020906e298b19a8ad0997aa5a212e95b562d0c03d28a985f805d6aa46af7
3
+ metadata.gz: 84bb2754062bcfe3c1e94d9416c7a1ef31110422e092ed272bd9acf205801588
4
+ data.tar.gz: 582d059bd1bc0735b72379b55109d90e99ceb712811d488bbf7093de473fdd58
5
5
  SHA512:
6
- metadata.gz: 0be26c030a243009ed13706ffa296174b04241752e46e32b804a2ad81e6d4bcf096a9903f4115f083228493f7a99acf55af7377fa1c1fe127298e894d7e4b752
7
- data.tar.gz: 8a420860e7ea49557a9b69ee15f132c4ebfcebd5d67eb8651d825fb9be49670f8bf7bb1311d40ba640b5c6ebca30612662b94ab48abcde487ffd9bbdfc23ee44
6
+ metadata.gz: d82c1dab6b7a6ed165e57b24848e5d497b9d34c8208ecac944c76a12ac02801edb762d00bd099a68d7dccc218428ad10b07190c1ab292354b12b4fe747e21491
7
+ data.tar.gz: 1d91a0eda349c5fdfbca5c4bbd824468c7239b949f1b60c068490a69a659459e4dce64db0d7e0e5987f3d778873932481ae1ad2cc406771aafd2a51c206bfd12
data/.gitignore CHANGED
@@ -5,5 +5,6 @@ tmp/
5
5
  coverage/
6
6
  *.swp
7
7
  *.swo
8
+ .idea/
8
9
  vendor
9
10
  .bundle
data/.rubocop.yml CHANGED
@@ -21,14 +21,14 @@ Naming/VariableName:
21
21
  Naming/MethodName:
22
22
  Enabled: false
23
23
 
24
- # Because of the way FnFormat was developed
25
- Style/FormatStringToken:
26
- Enabled: false
27
-
28
24
  # Lone String
29
25
  Lint/Void:
30
26
  Enabled: false
31
27
 
28
+ Style/SafeNavigation:
29
+ Enabled: false
30
+
32
31
  AllCops:
32
+ TargetRubyVersion: 2.3
33
33
  Exclude:
34
34
  - 'tmp/**/*'
data/.travis.yml CHANGED
@@ -1,7 +1,12 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.3.3
3
+ - 2.4
4
+ - 2.5
5
+ - 2.6
4
6
  sudo: false
7
+ before_install:
8
+ - gem update --system
9
+ - gem install bundler
5
10
  deploy:
6
11
  provider: rubygems
7
12
  api_key:
data/CHANGELOG.md CHANGED
@@ -1,36 +1,7 @@
1
1
  # Change Log
2
2
 
3
- ## [0.17.5](https://github.com/cfndsl/cfndsl/tree/0.17.5) (2019-12-27)
4
- [Full Changelog](https://github.com/cfndsl/cfndsl/compare/v1.0.0.pre.1...0.17.5)
5
-
6
- **Fixed bugs:**
7
-
8
- - VPCZoneIdentifier is always an array - 1.0.0.pre [\#428](https://github.com/cfndsl/cfndsl/issues/428)
9
-
10
- **Closed issues:**
11
-
12
- - Where should we define custom helper methods? [\#433](https://github.com/cfndsl/cfndsl/issues/433)
13
- - undefined method `EC2\_LaunchTemplate' for \#\<CfnDsl::CloudFormationTemplate:...\> \(NoMethodError\) [\#431](https://github.com/cfndsl/cfndsl/issues/431)
14
- - cfndsl fails with "uninitialized constant CfnDsl::AWS::Types::AWSWAFv2IPSetTag \(NameError\)" [\#430](https://github.com/cfndsl/cfndsl/issues/430)
15
-
16
- **Merged pull requests:**
17
-
18
- - add tag types to new WAFv2, as AWS are not explicitly defining them in the spec [\#435](https://github.com/cfndsl/cfndsl/pull/435) ([gergnz](https://github.com/gergnz))
19
-
20
- ## [v1.0.0.pre.1](https://github.com/cfndsl/cfndsl/tree/v1.0.0.pre.1) (2019-10-27)
21
- [Full Changelog](https://github.com/cfndsl/cfndsl/compare/v1.0.0.pre.2...v1.0.0.pre.1)
22
-
23
- ## [v1.0.0.pre.2](https://github.com/cfndsl/cfndsl/tree/v1.0.0.pre.2) (2019-10-27)
24
- [Full Changelog](https://github.com/cfndsl/cfndsl/compare/v0.17.4...v1.0.0.pre.2)
25
-
26
- **Merged pull requests:**
27
-
28
- - 1.0.0 pre rake and spec [\#427](https://github.com/cfndsl/cfndsl/pull/427) ([lwoggardner](https://github.com/lwoggardner))
29
- - 1.0.0.pre merge fix403 [\#426](https://github.com/cfndsl/cfndsl/pull/426) ([lwoggardner](https://github.com/lwoggardner))
30
- - 1.0.0.pre merge with master [\#425](https://github.com/cfndsl/cfndsl/pull/425) ([lwoggardner](https://github.com/lwoggardner))
31
-
32
- ## [v0.17.4](https://github.com/cfndsl/cfndsl/tree/v0.17.4) (2019-10-06)
33
- [Full Changelog](https://github.com/cfndsl/cfndsl/compare/v0.17.3...v0.17.4)
3
+ ## [0.17.4](https://github.com/cfndsl/cfndsl/tree/0.17.4) (2019-10-06)
4
+ [Full Changelog](https://github.com/cfndsl/cfndsl/compare/v0.17.3...0.17.4)
34
5
 
35
6
  **Closed issues:**
36
7
 
@@ -132,7 +103,7 @@
132
103
  - handle simple resource types [\#397](https://github.com/cfndsl/cfndsl/pull/397) ([gergnz](https://github.com/gergnz))
133
104
 
134
105
  ## [v0.16.10](https://github.com/cfndsl/cfndsl/tree/v0.16.10) (2019-02-13)
135
- [Full Changelog](https://github.com/cfndsl/cfndsl/compare/v0.16.9...v0.16.10)
106
+ [Full Changelog](https://github.com/cfndsl/cfndsl/compare/v1.0.0.pre...v0.16.10)
136
107
 
137
108
  **Implemented enhancements:**
138
109
 
@@ -142,26 +113,53 @@
142
113
 
143
114
  - confirm we are using gzip download of cloudfomration specification. [\#394](https://github.com/cfndsl/cfndsl/issues/394)
144
115
  - support a version for cfndsl -u [\#393](https://github.com/cfndsl/cfndsl/issues/393)
116
+
117
+ ## [v1.0.0.pre](https://github.com/cfndsl/cfndsl/tree/v1.0.0.pre) (2019-01-19)
118
+ [Full Changelog](https://github.com/cfndsl/cfndsl/compare/v0.17.pre.6...v1.0.0.pre)
119
+
120
+ **Closed issues:**
121
+
145
122
  - 'require': cannot load such file -- hana \(0.17.pre.5\) [\#387](https://github.com/cfndsl/cfndsl/issues/387)
146
123
 
124
+ ## [v0.17.pre.6](https://github.com/cfndsl/cfndsl/tree/v0.17.pre.6) (2018-12-10)
125
+ [Full Changelog](https://github.com/cfndsl/cfndsl/compare/v0.17.pre.5...v0.17.pre.6)
126
+
127
+ ## [v0.17.pre.5](https://github.com/cfndsl/cfndsl/tree/v0.17.pre.5) (2018-12-09)
128
+ [Full Changelog](https://github.com/cfndsl/cfndsl/compare/v0.17.pre.4...v0.17.pre.5)
129
+
130
+ ## [v0.17.pre.4](https://github.com/cfndsl/cfndsl/tree/v0.17.pre.4) (2018-12-09)
131
+ [Full Changelog](https://github.com/cfndsl/cfndsl/compare/v0.17.pre.3...v0.17.pre.4)
132
+
133
+ ## [v0.17.pre.3](https://github.com/cfndsl/cfndsl/tree/v0.17.pre.3) (2018-12-09)
134
+ [Full Changelog](https://github.com/cfndsl/cfndsl/compare/v0.17.pre.2...v0.17.pre.3)
135
+
147
136
  **Merged pull requests:**
148
137
 
149
138
  - implement json patch for patches and pull in patches from CDK [\#386](https://github.com/cfndsl/cfndsl/pull/386) ([gergnz](https://github.com/gergnz))
150
139
 
140
+ ## [v0.17.pre.2](https://github.com/cfndsl/cfndsl/tree/v0.17.pre.2) (2018-12-09)
141
+ [Full Changelog](https://github.com/cfndsl/cfndsl/compare/v0.16.9...v0.17.pre.2)
142
+
151
143
  ## [v0.16.9](https://github.com/cfndsl/cfndsl/tree/v0.16.9) (2018-12-07)
152
- [Full Changelog](https://github.com/cfndsl/cfndsl/compare/v0.16.8...v0.16.9)
144
+ [Full Changelog](https://github.com/cfndsl/cfndsl/compare/v0.17-pre...v0.16.9)
153
145
 
154
146
  **Closed issues:**
155
147
 
156
148
  - uninitialized constant CfnDsl::AWS::Types::Map [\#382](https://github.com/cfndsl/cfndsl/issues/382)
157
149
  - Can't get -D option to work [\#360](https://github.com/cfndsl/cfndsl/issues/360)
158
- - rubocop 0.50.0 errors [\#347](https://github.com/cfndsl/cfndsl/issues/347)
159
150
  - CFN schema [\#264](https://github.com/cfndsl/cfndsl/issues/264)
160
151
 
161
152
  **Merged pull requests:**
162
153
 
163
154
  - fix \#382, add Map primitive type [\#383](https://github.com/cfndsl/cfndsl/pull/383) ([gergnz](https://github.com/gergnz))
164
155
 
156
+ ## [v0.17-pre](https://github.com/cfndsl/cfndsl/tree/v0.17-pre) (2018-12-03)
157
+ [Full Changelog](https://github.com/cfndsl/cfndsl/compare/v0.16.8...v0.17-pre)
158
+
159
+ **Closed issues:**
160
+
161
+ - rubocop 0.50.0 errors [\#347](https://github.com/cfndsl/cfndsl/issues/347)
162
+
165
163
  ## [v0.16.8](https://github.com/cfndsl/cfndsl/tree/v0.16.8) (2018-11-21)
166
164
  [Full Changelog](https://github.com/cfndsl/cfndsl/compare/v0.16.7...v0.16.8)
167
165
 
data/README.md CHANGED
@@ -24,7 +24,7 @@ templates by running ruby.
24
24
 
25
25
  ## Getting Started
26
26
 
27
- ruby version > 2.3.0 is required to run cfndsl, you should look at using rbenv example for installing with rbenv
27
+ ruby version > 2.4 is required to run cfndsl, you should look at using rbenv example for installing with rbenv
28
28
 
29
29
  rbenv exec gem install cfndsl
30
30
 
@@ -38,7 +38,7 @@ Update the the cloudformation specification to the latest version.
38
38
 
39
39
  or update to a specific version
40
40
 
41
- cfndsl -u 2.21.0
41
+ cfndsl -u 7.1.0
42
42
 
43
43
  Now write a template in the dsl
44
44
 
@@ -442,13 +442,11 @@ The cfndsl command line program now accepts some command line options.
442
442
  Usage: cfndsl [options] FILE
443
443
  -o, --output FILE Write output to file
444
444
  -y, --yaml FILE Import yaml file as local variables
445
- -r, --ruby FILE Evaluate ruby file before template
446
445
  -j, --json FILE Import json file as local variables
447
446
  -p, --pretty Pretty-format output JSON
448
447
  -f, --format FORMAT Specify the output format (JSON default)
449
448
  -D, --define "VARIABLE=VALUE" Directly set local VARIABLE as VALUE
450
449
  -v, --verbose Turn on verbose ouptut
451
- -b, --disable-binding Disable binding configuration
452
450
  -m, --disable-deep-merge Disable deep merging of yaml
453
451
  -s, --specification-file FILE Location of Cloudformation Resource Specification file
454
452
  -u [VERSION], Update the Resource Specification file to latest, or specific version
@@ -569,38 +567,87 @@ would generate a template with 5 instances declared.
569
567
  Specifying multiple -y options will default deep_merge all the yaml in the order specified.
570
568
  You can disable this with -m.
571
569
 
572
- Finally, the -r option gives you the opportunity to execute some
573
- arbitrary ruby code in the evaluation context before the cloudformation
574
- template is evaluated (this is not available if `--disable-binding` is used).
575
-
576
570
  ### Rake task
577
571
  Simply add the following to your `Rakefile`:
578
572
 
579
573
  ```ruby
580
574
  require 'cfndsl/rake_task'
581
575
 
582
- CfnDsl::RakeTask.new do |t|
583
- t.cfndsl_opts = {
584
- verbose: true,
585
- files: [{
586
- filename: 'templates/application.rb',
587
- output: 'application.json'
588
- }],
589
- extras: [
590
- [ :yaml, 'templates/default_params.yml' ]
591
- ]
592
- }
576
+ namespace(:cfndsl) do
577
+ CfnDsl::RakeTask.new do |t|
578
+ # Use a custom specification file
579
+ t.specification(file: 'tmp/cloudformation_resources.json')
580
+
581
+ desc 'Generate CloudFormation Json'
582
+ t.json(name: :json, files: FileList.new('sample/*.rb'), pathmap: 'tmp/%f.json')
583
+
584
+ # Generate yaml output, loading an extra file that matches the source file
585
+ t.yaml(name: :yaml, files: 'sample/t1.rb', pathmap: 'tmp/%f.yaml', extras: '%X.yaml')
586
+ end
593
587
  end
594
588
  ```
595
589
 
596
590
  And then use rake to generate the cloudformation:
597
591
 
598
592
  ```bash
599
- $ bin/rake generate
593
+ $ bin/rake cfndsl:generate
594
+ ```
595
+
596
+ ### Embedded Ruby
597
+ ```ruby
598
+
599
+ # Optionally before requiring 'cfndsl' set global options
600
+ require `cfndsl/globals`
601
+ CfnDsl.specification_file(file) # Override location of json spec file
602
+ CfnDsl.disable_deep_merge # Prevent monkey patching of Hash with deep merge capabilities
603
+
604
+ require `cfndsl`
605
+
606
+ # As a function that takes a block of DSL
607
+ template = CloudFormation do
608
+ # Some CfnDsl
609
+ end
610
+ puts JSON.pretty_generate(template.validate)
611
+
612
+ # As a class that is a template
613
+ class MyTemplate < CfnDsl::CloudFormationTemplate
614
+ def initialize
615
+ super do
616
+ # Base DSL
617
+ end
618
+ end
619
+
620
+ def instance(logical_id)
621
+ this = self
622
+ EC2_Instance(logical_id) do
623
+ self.class.name # << 'CfnDsl::ResourceDefinition' not 'MyTemplate' !
624
+ InstanceType this.instance_type
625
+ end
626
+ end
627
+
628
+ #do not make this private!
629
+ def instance_type
630
+ 't3.large'
631
+ end
632
+ end
633
+
634
+ # As a builder class
635
+ class Builder
636
+ include CfnDsl::CloudFormation
637
+
638
+ def model
639
+ this = self # the DSL blocks are executed via instance_eval
640
+ ref_param = Ref('param') # and other Fn::*
641
+ template = CloudFormation do
642
+ # Some DSL
643
+ end
644
+ template.validate.to_json
645
+ end
646
+ end
600
647
  ```
601
648
 
602
649
  ### Generating CloudFormation resources from cfndsl
603
- By supplying the -g paramater you are now able to generate cloudformation resources for supported objects, for a list of supported resources run cfndsl -l
650
+ By supplying the -g parameter you are now able to generate cloudformation resources for supported objects, for a list of supported resources run cfndsl -l
604
651
 
605
652
  Example
606
653
  ```bash
data/Rakefile CHANGED
@@ -6,6 +6,7 @@ require 'cfndsl/version'
6
6
  require 'rubocop/rake_task'
7
7
  require 'yamllint/rake_task'
8
8
  require 'github_changelog_generator/task'
9
+ require 'cfndsl/rake_task'
9
10
 
10
11
  RSpec::Core::RakeTask.new
11
12
  RuboCop::RakeTask.new
@@ -18,16 +19,37 @@ end
18
19
 
19
20
  YamlLint::RakeTask.new do |t|
20
21
  t.paths = %w[
21
- lib/cfndsl/aws/types.yaml
22
- lib/cfndsl/os/types.yaml
23
22
  sample/t1.yaml
24
23
  .travis.yml
25
24
  .rubocop.yml
26
25
  ]
27
26
  end
28
27
 
29
- task default: %i[spec rubocop yamllint]
28
+ task default: %i[clean spec rubocop yamllint samples:generate]
30
29
 
30
+ # Test our own rake task and samples
31
+
32
+ directory 'tmp'
33
+
34
+ namespace :samples do
35
+ source_files = FileList.new('sample/*.rb') { |fl| fl.exclude('**/circular.rb') }
36
+
37
+ CfnDsl::RakeTask.new do |t|
38
+ t.specification(file: 'tmp/cloudformation_resources.json')
39
+ desc 'Generate CloudFormation Json'
40
+ t.json(name: :json, files: source_files, pathmap: 'tmp/%f.json', pretty: true, extras: FileList.new('sample/*.yaml'))
41
+ t.yaml(name: :yaml, files: 'sample/t1.rb', pathmap: 'tmp/%f.yaml', extras: '%X.yaml')
42
+ end
43
+ end
44
+
45
+ CLEAN.add 'tmp/*.rb.{json,yaml}', 'tmp/cloudformation_resources.json'
46
+
47
+ CfnDsl::RakeTask.new do |t|
48
+ desc 'Update Embedded Cloudformation specification'
49
+ t.specification(name: :update_cfn_spec, file: CfnDsl::LOCAL_SPEC_FILE, version: 'latest')
50
+ end
51
+
52
+ # TODO: Bump should ensure we have the latest upstream resource spec
31
53
  task :bump, :type do |_, args|
32
54
  type = args[:type].downcase
33
55
  version_path = 'lib/cfndsl/version.rb'
data/TODO.md ADDED
@@ -0,0 +1,18 @@
1
+ # 1.0.0 Release Changes
2
+
3
+ ## Prepare for Machine Ingestable Types
4
+
5
+ ## ~~Remove OS Heat Support~~
6
+
7
+ ## Remove Ruby/Constant Interpolation
8
+
9
+ ## ~~Better Ruby Api~~
10
+
11
+ ## 100% Test Coverage
12
+
13
+ ## Use Ruby Contracts for Resource Validation
14
+
15
+ ## Style Guide/Wiki/README/Examples Update
16
+
17
+ ## Fully implement ExternalParameters as a Mash
18
+
data/UPGRADING.md ADDED
@@ -0,0 +1,22 @@
1
+ # Major version upgrades
2
+
3
+ ## 0.x to 1.x
4
+
5
+ ### Deprecations
6
+
7
+ * FnFormat => FnSub
8
+ * addTag => add_tag
9
+ * checkRefs => check_refs
10
+ * Ruby versions < 2.4
11
+ * Legacy cfndsl resource specification files
12
+
13
+ ### Validation
14
+
15
+ * Tighter validation including for null values and cyclic references in Resources, Outputs, Rules and Conditions
16
+ * Tighter definition of duplicates. eg. Route must be EC2_Route because another service now has a Route resource.
17
+ * Requires the specification file to exist at the time it is explicitly set with CfnDsl.specification_file=
18
+
19
+ #### Spec version
20
+
21
+ The AWS cloudformation spec will be regularly updated on every release
22
+
data/cfndsl.gemspec CHANGED
@@ -16,11 +16,11 @@ Gem::Specification.new do |s|
16
16
  s.license = 'MIT'
17
17
  s.test_files = s.files.grep(%r{^(test|spec|features)/})
18
18
  s.require_paths = ['lib']
19
+ s.bindir = 'exe'
19
20
  s.required_ruby_version = '~> 2.3'
20
21
 
21
22
  s.executables << 'cfndsl'
22
23
 
23
- s.add_development_dependency 'bundler', '~> 2.1'
24
-
25
- s.post_install_message = "'addTag' is now deprecated in favour of 'add_tag'. 'addTag' will be removed in the next major version."
24
+ s.add_development_dependency 'bundler', '~> 2.0'
25
+ s.add_runtime_dependency 'hana', '~> 1.3'
26
26
  end
data/exe/cfndsl ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'cfndsl/runner'
5
+ CfnDsl::Runner.invoke!
data/lib/cfndsl.rb CHANGED
@@ -1,118 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'forwardable'
4
- require 'json'
5
-
6
- require 'deep_merge/deep_merge'
7
- require 'cfndsl/globals'
8
- require 'cfndsl/module'
9
- require 'cfndsl/errors'
10
- require 'cfndsl/ref_check'
11
- require 'cfndsl/jsonable'
12
- require 'cfndsl/properties'
13
- require 'cfndsl/update_policy'
14
- require 'cfndsl/creation_policy'
15
- require 'cfndsl/conditions'
16
- require 'cfndsl/mappings'
17
- require 'cfndsl/resources'
18
- require 'cfndsl/rules'
19
- require 'cfndsl/parameters'
20
- require 'cfndsl/outputs'
21
- require 'cfndsl/patches'
22
- require 'cfndsl/specification'
23
- require 'cfndsl/aws/cloud_formation_template'
24
- require 'cfndsl/os/heat_template'
25
- require 'cfndsl/external_parameters'
26
- require 'cfndsl/version'
27
-
28
- # CfnDsl
29
- module CfnDsl
30
- # This function handles the eval of the template file and returns the
31
- # results. It does this with a ruby "eval", but it builds up a customized
32
- # binding environment before it calls eval. The environment can be
33
- # customized by passing a list of customizations in the extras parameter.
34
- #
35
- # These customizations are expressed as an array of pairs of
36
- # (type,filename). They are evaluated in the order they appear in the
37
- # extras array. The types are as follows
38
- #
39
- # :yaml - the second element is treated as a file name, which is loaded
40
- # as a yaml file. The yaml file should contain a top level
41
- # dictionary. Each of the keys of the top level dictionary is
42
- # used as a local variable in the evalation context.
43
- #
44
- # :json - the second element is treated as a file name, which is loaded
45
- # as a json file. The yaml file should contain a top level
46
- # dictionary. Each of the keys of the top level dictionary is
47
- # used as a local variable in the evalation context.
48
- #
49
- # :ruby - the second element is treated as a file name which is evaluated
50
- # as a ruby file. Any assigments (or other binding affecting
51
- # side effects) will persist into the context where the template
52
- # is evaluated
53
- #
54
- # :raw - the second element is treated as a ruby statement and is
55
- # evaluated in the binding context, similar to the contents of
56
- # a ruby file.
57
- #
58
- # Note that the order is important, as later extra sections can overwrite
59
- # or even undo things that were done by earlier sections.
60
-
61
- # rubocop:disable all
62
- def self.eval_file_with_extras(filename, extras = [], logstream = nil)
63
- b = binding
64
- params = CfnDsl::ExternalParameters.refresh!
65
- extras.each do |type, file|
66
- case type
67
- when :yaml, :json
68
- klass_name = type.to_s.upcase
69
- logstream.puts("Loading #{klass_name} file #{file}") if logstream
70
- params.load_file file
71
- params.add_to_binding(b, logstream) unless disable_binding?
72
- when :ruby
73
- if disable_binding?
74
- logstream.puts("Interpreting Ruby files was disabled. #{file} will not be read") if logstream
75
- else
76
- logstream.puts("Running ruby file #{file}") if logstream
77
- b.eval(File.read(file), file)
78
- end
79
- when :raw
80
- file_parts = file.split("=")
81
- params.set_param(file_parts[0],file_parts[1..-1].join("="))
82
- unless disable_binding?
83
- logstream.puts("Running raw ruby code #{file}") if logstream
84
- b.eval(file, 'raw code')
85
- end
86
- end
87
- end
88
-
89
- logstream.puts("Loading template file #{filename}") if logstream
90
- b.eval(File.read(filename), filename)
91
- end
92
- end
93
-
94
- def CloudFormation(&block)
95
- x = CfnDsl::CloudFormationTemplate.new
96
- x.declare(&block)
97
- invalid_references = x.check_refs
98
- if invalid_references
99
- abort invalid_references.join("\n")
100
- elsif CfnDsl::Errors.errors?
101
- abort CfnDsl::Errors.errors.join("\n")
102
- else
103
- return x
104
- end
105
- end
106
-
107
- def Heat(&block)
108
- x = CfnDsl::HeatTemplate.new
109
- x.declare(&block)
110
- invalid_references = x.check_refs
111
- if invalid_references
112
- abort invalid_references.join("\n")
113
- elsif CfnDsl::Errors.errors?
114
- abort CfnDsl::Errors.errors.join("\n")
115
- else
116
- return x
117
- end
118
- end
3
+ require_relative 'cfndsl/cloudformation'
4
+ require_relative 'cfndsl/cfnlego'