tfdsl 0.1.11 → 0.2.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/.gitignore +1 -0
- data/.rubocop.yml +24 -21
- data/CLAUDE.md +86 -0
- data/Gemfile +7 -3
- data/README.md +144 -35
- data/Rakefile +4 -5
- data/bin/console +3 -9
- data/lib/terraform_dsl/action.rb +7 -0
- data/lib/terraform_dsl/block.rb +64 -0
- data/lib/terraform_dsl/check.rb +7 -0
- data/lib/terraform_dsl/data_source.rb +7 -0
- data/lib/terraform_dsl/ephemeral.rb +7 -0
- data/lib/terraform_dsl/formatter.rb +26 -0
- data/lib/terraform_dsl/import.rb +8 -0
- data/lib/terraform_dsl/json_syntax.rb +33 -0
- data/lib/terraform_dsl/locals.rb +7 -0
- data/lib/terraform_dsl/moved.rb +8 -0
- data/lib/terraform_dsl/output.rb +7 -0
- data/lib/terraform_dsl/provider.rb +7 -0
- data/lib/terraform_dsl/removed.rb +8 -0
- data/lib/terraform_dsl/resource.rb +7 -0
- data/lib/terraform_dsl/stack.rb +40 -0
- data/lib/terraform_dsl/template.rb +74 -0
- data/lib/terraform_dsl/terraform.rb +7 -0
- data/lib/terraform_dsl/tfmodule.rb +7 -0
- data/lib/terraform_dsl/variable.rb +8 -0
- data/lib/terraform_dsl/version.rb +5 -0
- data/lib/terraform_dsl.rb +34 -0
- data/lib/tfdsl.rb +5 -29
- data/tfdsl.gemspec +9 -28
- metadata +32 -155
- data/.travis.yml +0 -8
- data/Gemfile.lock +0 -73
- data/lib/tfdsl/block.rb +0 -88
- data/lib/tfdsl/data_formatter.rb +0 -63
- data/lib/tfdsl/data_source.rb +0 -4
- data/lib/tfdsl/formatter.rb +0 -77
- data/lib/tfdsl/kind_translator.rb +0 -20
- data/lib/tfdsl/locals.rb +0 -4
- data/lib/tfdsl/output.rb +0 -4
- data/lib/tfdsl/provider.rb +0 -4
- data/lib/tfdsl/resource.rb +0 -4
- data/lib/tfdsl/stack.rb +0 -36
- data/lib/tfdsl/template.rb +0 -46
- data/lib/tfdsl/terraform.rb +0 -4
- data/lib/tfdsl/tfmodule.rb +0 -4
- data/lib/tfdsl/variable.rb +0 -4
- data/lib/tfdsl/version.rb +0 -3
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module TerraformDSL
|
|
4
|
+
# A collection of top level terraform blocks, rendered as one .tf file.
|
|
5
|
+
class Stack
|
|
6
|
+
BLOCKS = {
|
|
7
|
+
terraform: Terraform, provider: Provider, variable: Variable, locals: Locals,
|
|
8
|
+
tfmodule: TFModule, datasource: DataSource, resource: Resource, output: Output,
|
|
9
|
+
moved: Moved, import: Import, removed: Removed, check: Check,
|
|
10
|
+
ephemeral: Ephemeral, action: Action
|
|
11
|
+
}.freeze
|
|
12
|
+
|
|
13
|
+
def initialize(&block)
|
|
14
|
+
@objects = []
|
|
15
|
+
instance_eval(&block) if block
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
BLOCKS.each do |name, cls|
|
|
19
|
+
define_method(name) do |type = nil, *labels, &block|
|
|
20
|
+
@objects << cls.new(type, *labels, &block)
|
|
21
|
+
@objects.last
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
alias data datasource
|
|
25
|
+
|
|
26
|
+
def to_s
|
|
27
|
+
@objects.map(&:to_tf).join("\n")
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def to_h
|
|
31
|
+
@objects.each_with_object({}) do |block, hash|
|
|
32
|
+
JsonSyntax.insert(hash, [block.class::KEYWORD, block.__type__, *block.__labels__].compact, block.to_h)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def to_json(*)
|
|
37
|
+
JSON.pretty_generate(to_h)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module TerraformDSL
|
|
4
|
+
# Renders Ruby values as HCL values.
|
|
5
|
+
#
|
|
6
|
+
# String -> "quoted" (heredoc when it ends with a newline)
|
|
7
|
+
# Symbol -> raw expression, e.g. :'aws_vpc.main.id' or :string
|
|
8
|
+
# Numeric, true, false -> as is
|
|
9
|
+
# nil -> null
|
|
10
|
+
# Array -> [ ... ]
|
|
11
|
+
# Hash -> { key = value }
|
|
12
|
+
module Template
|
|
13
|
+
module_function
|
|
14
|
+
|
|
15
|
+
IDENTIFIER = /\A[A-Za-z_][\w-]*\z/.freeze
|
|
16
|
+
ESCAPES = { '"' => '\"', '\\' => '\\\\', "\n" => '\n', "\r" => '\r', "\t" => '\t' }.freeze
|
|
17
|
+
|
|
18
|
+
def value(value, depth = 0)
|
|
19
|
+
case value
|
|
20
|
+
when Hash then map(value, depth)
|
|
21
|
+
when Array then list(value, depth)
|
|
22
|
+
when String then string(value, depth)
|
|
23
|
+
when nil then 'null'
|
|
24
|
+
else value.to_s # Symbol (raw expression), Numeric, true, false
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def string(str, depth = 0)
|
|
29
|
+
return heredoc(str, depth) if str.end_with?("\n")
|
|
30
|
+
|
|
31
|
+
%("#{str.gsub(/["\\\n\r\t]/, ESCAPES)}")
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def heredoc(str, depth)
|
|
35
|
+
pad = INDENT * depth
|
|
36
|
+
"<<-EOT\n#{str.gsub(/^(?!$)/, pad + INDENT)}#{pad}EOT"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def list(array, depth)
|
|
40
|
+
return '[]' if array.empty?
|
|
41
|
+
|
|
42
|
+
pad = INDENT * depth
|
|
43
|
+
items = array.map { |v| "#{pad}#{INDENT}#{value(v, depth + 1)}" }
|
|
44
|
+
"[\n#{items.join(",\n")}\n#{pad}]"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def map(hash, depth)
|
|
48
|
+
return '{}' if hash.empty?
|
|
49
|
+
|
|
50
|
+
pad = INDENT * depth
|
|
51
|
+
items = hash.map { |k, v| [key(k), value(v, depth + 1)] }
|
|
52
|
+
"{\n#{assignments(items, pad + INDENT).join("\n")}\n#{pad}}"
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Renders [name, value] pairs as "name = value" lines, aligning the equals
|
|
56
|
+
# signs the way terraform fmt does: consecutive single-line values share a
|
|
57
|
+
# column, a multi-line value ({ or [) breaks the run and is not aligned.
|
|
58
|
+
def assignments(pairs, pad)
|
|
59
|
+
pairs.slice_when { |a, b| multiline?(a[1]) || multiline?(b[1]) }.flat_map do |run|
|
|
60
|
+
width = run.map { |name, _| name.size }.max
|
|
61
|
+
run.map { |name, value| "#{pad}#{name.ljust(width)} = #{value}" }
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def multiline?(value)
|
|
66
|
+
value.start_with?("{\n", "[\n")
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def key(key)
|
|
70
|
+
key = key.to_s
|
|
71
|
+
key.match?(IDENTIFIER) ? key : string(key)
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'json'
|
|
4
|
+
require_relative 'terraform_dsl/version'
|
|
5
|
+
|
|
6
|
+
# A Chef like DSL that renders Terraform (HCL) configuration.
|
|
7
|
+
module TerraformDSL
|
|
8
|
+
INDENT = ' '
|
|
9
|
+
|
|
10
|
+
require_relative 'terraform_dsl/template'
|
|
11
|
+
require_relative 'terraform_dsl/json_syntax'
|
|
12
|
+
require_relative 'terraform_dsl/formatter'
|
|
13
|
+
require_relative 'terraform_dsl/block'
|
|
14
|
+
require_relative 'terraform_dsl/terraform'
|
|
15
|
+
require_relative 'terraform_dsl/provider'
|
|
16
|
+
require_relative 'terraform_dsl/variable'
|
|
17
|
+
require_relative 'terraform_dsl/locals'
|
|
18
|
+
require_relative 'terraform_dsl/tfmodule'
|
|
19
|
+
require_relative 'terraform_dsl/data_source'
|
|
20
|
+
require_relative 'terraform_dsl/resource'
|
|
21
|
+
require_relative 'terraform_dsl/output'
|
|
22
|
+
require_relative 'terraform_dsl/moved'
|
|
23
|
+
require_relative 'terraform_dsl/import'
|
|
24
|
+
require_relative 'terraform_dsl/removed'
|
|
25
|
+
require_relative 'terraform_dsl/check'
|
|
26
|
+
require_relative 'terraform_dsl/ephemeral'
|
|
27
|
+
require_relative 'terraform_dsl/action'
|
|
28
|
+
require_relative 'terraform_dsl/stack'
|
|
29
|
+
|
|
30
|
+
# Shortcut for Stack.new
|
|
31
|
+
def self.stack(&block)
|
|
32
|
+
Stack.new(&block)
|
|
33
|
+
end
|
|
34
|
+
end
|
data/lib/tfdsl.rb
CHANGED
|
@@ -1,31 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
require 'yaml'
|
|
3
|
-
require 'erb'
|
|
1
|
+
# frozen_string_literal: true
|
|
4
2
|
|
|
5
|
-
#
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
# Entry point for the tfdsl gem. TFDSL is kept as an alias for code written
|
|
4
|
+
# against tfdsl 0.1.x.
|
|
5
|
+
require_relative 'terraform_dsl'
|
|
8
6
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
require "#{LIB_DIR}/template"
|
|
12
|
-
require "#{LIB_DIR}/data_formatter"
|
|
13
|
-
require "#{LIB_DIR}/kind_translator"
|
|
14
|
-
require "#{LIB_DIR}/formatter"
|
|
15
|
-
require "#{LIB_DIR}/block"
|
|
16
|
-
require "#{LIB_DIR}/resource"
|
|
17
|
-
require "#{LIB_DIR}/variable"
|
|
18
|
-
require "#{LIB_DIR}/output"
|
|
19
|
-
require "#{LIB_DIR}/data_source"
|
|
20
|
-
require "#{LIB_DIR}/provider"
|
|
21
|
-
require "#{LIB_DIR}/tfmodule"
|
|
22
|
-
require "#{LIB_DIR}/locals"
|
|
23
|
-
require "#{LIB_DIR}/terraform"
|
|
24
|
-
require "#{LIB_DIR}/stack"
|
|
25
|
-
|
|
26
|
-
def stack(&block)
|
|
27
|
-
Stack.new do
|
|
28
|
-
instance_eval(&block) if block_given?
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
7
|
+
TFDSL = TerraformDSL
|
data/tfdsl.gemspec
CHANGED
|
@@ -1,43 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
lib = File.expand_path('lib', __dir__)
|
|
2
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
3
|
-
require '
|
|
5
|
+
require 'terraform_dsl/version'
|
|
4
6
|
|
|
5
7
|
Gem::Specification.new do |spec|
|
|
6
8
|
spec.name = 'tfdsl'
|
|
7
|
-
spec.version =
|
|
9
|
+
spec.version = TerraformDSL::VERSION
|
|
8
10
|
spec.authors = ['Tiago Lopo']
|
|
9
11
|
spec.email = ['tlopo@github.com']
|
|
10
12
|
|
|
11
13
|
spec.summary = 'A chef like DSL for terraform'
|
|
12
|
-
spec.description = 'A
|
|
13
|
-
spec.homepage = 'https://github.com/tlopo-ruby/
|
|
14
|
+
spec.description = 'A Ruby DSL that renders Terraform (HCL) configuration'
|
|
15
|
+
spec.homepage = 'https://github.com/tlopo-ruby/terraform-dsl'
|
|
14
16
|
spec.license = 'MIT'
|
|
17
|
+
spec.required_ruby_version = '>= 2.7'
|
|
18
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
|
15
19
|
|
|
16
|
-
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
|
17
|
-
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
|
18
|
-
if spec.respond_to?(:metadata)
|
|
19
|
-
# spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
|
|
20
|
-
else
|
|
21
|
-
raise 'RubyGems 2.0 or newer is required to protect against ' \
|
|
22
|
-
'public gem pushes.'
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
# Specify which files should be added to the gem when it is released.
|
|
26
|
-
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
|
27
20
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
|
28
|
-
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
21
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|\.github)/}) }
|
|
29
22
|
end
|
|
30
|
-
spec.bindir = 'exe'
|
|
31
|
-
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
32
23
|
spec.require_paths = ['lib']
|
|
33
|
-
|
|
34
|
-
spec.add_dependency 'deep_merge', '~> 1.2'
|
|
35
|
-
spec.add_development_dependency 'bundler', '~> 1.16'
|
|
36
|
-
spec.add_development_dependency 'coveralls', '~> 0.8'
|
|
37
|
-
spec.add_development_dependency 'minitest', '~> 5.0'
|
|
38
|
-
spec.add_development_dependency 'pry', '~> 0.12'
|
|
39
|
-
spec.add_development_dependency 'pry-coolline', '~> 0.2'
|
|
40
|
-
spec.add_development_dependency 'rake', '~> 13.0'
|
|
41
|
-
spec.add_development_dependency 'rubocop', '~> 0.63'
|
|
42
|
-
spec.add_development_dependency 'simplecov', '~> 0.16'
|
|
43
24
|
end
|
metadata
CHANGED
|
@@ -1,142 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: tfdsl
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tiago Lopo
|
|
8
|
-
|
|
9
|
-
bindir: exe
|
|
8
|
+
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
12
|
-
dependencies:
|
|
13
|
-
|
|
14
|
-
name: deep_merge
|
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
|
16
|
-
requirements:
|
|
17
|
-
- - "~>"
|
|
18
|
-
- !ruby/object:Gem::Version
|
|
19
|
-
version: '1.2'
|
|
20
|
-
type: :runtime
|
|
21
|
-
prerelease: false
|
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
-
requirements:
|
|
24
|
-
- - "~>"
|
|
25
|
-
- !ruby/object:Gem::Version
|
|
26
|
-
version: '1.2'
|
|
27
|
-
- !ruby/object:Gem::Dependency
|
|
28
|
-
name: bundler
|
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
|
30
|
-
requirements:
|
|
31
|
-
- - "~>"
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: '1.16'
|
|
34
|
-
type: :development
|
|
35
|
-
prerelease: false
|
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - "~>"
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: '1.16'
|
|
41
|
-
- !ruby/object:Gem::Dependency
|
|
42
|
-
name: coveralls
|
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
|
44
|
-
requirements:
|
|
45
|
-
- - "~>"
|
|
46
|
-
- !ruby/object:Gem::Version
|
|
47
|
-
version: '0.8'
|
|
48
|
-
type: :development
|
|
49
|
-
prerelease: false
|
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
-
requirements:
|
|
52
|
-
- - "~>"
|
|
53
|
-
- !ruby/object:Gem::Version
|
|
54
|
-
version: '0.8'
|
|
55
|
-
- !ruby/object:Gem::Dependency
|
|
56
|
-
name: minitest
|
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
|
58
|
-
requirements:
|
|
59
|
-
- - "~>"
|
|
60
|
-
- !ruby/object:Gem::Version
|
|
61
|
-
version: '5.0'
|
|
62
|
-
type: :development
|
|
63
|
-
prerelease: false
|
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
-
requirements:
|
|
66
|
-
- - "~>"
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: '5.0'
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: pry
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - "~>"
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
version: '0.12'
|
|
76
|
-
type: :development
|
|
77
|
-
prerelease: false
|
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
-
requirements:
|
|
80
|
-
- - "~>"
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: '0.12'
|
|
83
|
-
- !ruby/object:Gem::Dependency
|
|
84
|
-
name: pry-coolline
|
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
|
86
|
-
requirements:
|
|
87
|
-
- - "~>"
|
|
88
|
-
- !ruby/object:Gem::Version
|
|
89
|
-
version: '0.2'
|
|
90
|
-
type: :development
|
|
91
|
-
prerelease: false
|
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
-
requirements:
|
|
94
|
-
- - "~>"
|
|
95
|
-
- !ruby/object:Gem::Version
|
|
96
|
-
version: '0.2'
|
|
97
|
-
- !ruby/object:Gem::Dependency
|
|
98
|
-
name: rake
|
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
|
100
|
-
requirements:
|
|
101
|
-
- - "~>"
|
|
102
|
-
- !ruby/object:Gem::Version
|
|
103
|
-
version: '13.0'
|
|
104
|
-
type: :development
|
|
105
|
-
prerelease: false
|
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
-
requirements:
|
|
108
|
-
- - "~>"
|
|
109
|
-
- !ruby/object:Gem::Version
|
|
110
|
-
version: '13.0'
|
|
111
|
-
- !ruby/object:Gem::Dependency
|
|
112
|
-
name: rubocop
|
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
|
114
|
-
requirements:
|
|
115
|
-
- - "~>"
|
|
116
|
-
- !ruby/object:Gem::Version
|
|
117
|
-
version: '0.63'
|
|
118
|
-
type: :development
|
|
119
|
-
prerelease: false
|
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
-
requirements:
|
|
122
|
-
- - "~>"
|
|
123
|
-
- !ruby/object:Gem::Version
|
|
124
|
-
version: '0.63'
|
|
125
|
-
- !ruby/object:Gem::Dependency
|
|
126
|
-
name: simplecov
|
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
|
128
|
-
requirements:
|
|
129
|
-
- - "~>"
|
|
130
|
-
- !ruby/object:Gem::Version
|
|
131
|
-
version: '0.16'
|
|
132
|
-
type: :development
|
|
133
|
-
prerelease: false
|
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
-
requirements:
|
|
136
|
-
- - "~>"
|
|
137
|
-
- !ruby/object:Gem::Version
|
|
138
|
-
version: '0.16'
|
|
139
|
-
description: A chef like DSL for terraform
|
|
10
|
+
date: 2026-10-11 00:00:00.000000000 Z
|
|
11
|
+
dependencies: []
|
|
12
|
+
description: A Ruby DSL that renders Terraform (HCL) configuration
|
|
140
13
|
email:
|
|
141
14
|
- tlopo@github.com
|
|
142
15
|
executables: []
|
|
@@ -145,37 +18,42 @@ extra_rdoc_files: []
|
|
|
145
18
|
files:
|
|
146
19
|
- ".gitignore"
|
|
147
20
|
- ".rubocop.yml"
|
|
148
|
-
-
|
|
21
|
+
- CLAUDE.md
|
|
149
22
|
- CODE_OF_CONDUCT.md
|
|
150
23
|
- Gemfile
|
|
151
|
-
- Gemfile.lock
|
|
152
24
|
- LICENSE.txt
|
|
153
25
|
- README.md
|
|
154
26
|
- Rakefile
|
|
155
27
|
- bin/console
|
|
156
28
|
- bin/setup
|
|
29
|
+
- lib/terraform_dsl.rb
|
|
30
|
+
- lib/terraform_dsl/action.rb
|
|
31
|
+
- lib/terraform_dsl/block.rb
|
|
32
|
+
- lib/terraform_dsl/check.rb
|
|
33
|
+
- lib/terraform_dsl/data_source.rb
|
|
34
|
+
- lib/terraform_dsl/ephemeral.rb
|
|
35
|
+
- lib/terraform_dsl/formatter.rb
|
|
36
|
+
- lib/terraform_dsl/import.rb
|
|
37
|
+
- lib/terraform_dsl/json_syntax.rb
|
|
38
|
+
- lib/terraform_dsl/locals.rb
|
|
39
|
+
- lib/terraform_dsl/moved.rb
|
|
40
|
+
- lib/terraform_dsl/output.rb
|
|
41
|
+
- lib/terraform_dsl/provider.rb
|
|
42
|
+
- lib/terraform_dsl/removed.rb
|
|
43
|
+
- lib/terraform_dsl/resource.rb
|
|
44
|
+
- lib/terraform_dsl/stack.rb
|
|
45
|
+
- lib/terraform_dsl/template.rb
|
|
46
|
+
- lib/terraform_dsl/terraform.rb
|
|
47
|
+
- lib/terraform_dsl/tfmodule.rb
|
|
48
|
+
- lib/terraform_dsl/variable.rb
|
|
49
|
+
- lib/terraform_dsl/version.rb
|
|
157
50
|
- lib/tfdsl.rb
|
|
158
|
-
- lib/tfdsl/block.rb
|
|
159
|
-
- lib/tfdsl/data_formatter.rb
|
|
160
|
-
- lib/tfdsl/data_source.rb
|
|
161
|
-
- lib/tfdsl/formatter.rb
|
|
162
|
-
- lib/tfdsl/kind_translator.rb
|
|
163
|
-
- lib/tfdsl/locals.rb
|
|
164
|
-
- lib/tfdsl/output.rb
|
|
165
|
-
- lib/tfdsl/provider.rb
|
|
166
|
-
- lib/tfdsl/resource.rb
|
|
167
|
-
- lib/tfdsl/stack.rb
|
|
168
|
-
- lib/tfdsl/template.rb
|
|
169
|
-
- lib/tfdsl/terraform.rb
|
|
170
|
-
- lib/tfdsl/tfmodule.rb
|
|
171
|
-
- lib/tfdsl/variable.rb
|
|
172
|
-
- lib/tfdsl/version.rb
|
|
173
51
|
- tfdsl.gemspec
|
|
174
|
-
homepage: https://github.com/tlopo-ruby/
|
|
52
|
+
homepage: https://github.com/tlopo-ruby/terraform-dsl
|
|
175
53
|
licenses:
|
|
176
54
|
- MIT
|
|
177
|
-
metadata:
|
|
178
|
-
|
|
55
|
+
metadata:
|
|
56
|
+
rubygems_mfa_required: 'true'
|
|
179
57
|
rdoc_options: []
|
|
180
58
|
require_paths:
|
|
181
59
|
- lib
|
|
@@ -183,15 +61,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
183
61
|
requirements:
|
|
184
62
|
- - ">="
|
|
185
63
|
- !ruby/object:Gem::Version
|
|
186
|
-
version: '
|
|
64
|
+
version: '2.7'
|
|
187
65
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
188
66
|
requirements:
|
|
189
67
|
- - ">="
|
|
190
68
|
- !ruby/object:Gem::Version
|
|
191
69
|
version: '0'
|
|
192
70
|
requirements: []
|
|
193
|
-
rubygems_version: 3.
|
|
194
|
-
signing_key:
|
|
71
|
+
rubygems_version: 3.6.2
|
|
195
72
|
specification_version: 4
|
|
196
73
|
summary: A chef like DSL for terraform
|
|
197
74
|
test_files: []
|
data/.travis.yml
DELETED
data/Gemfile.lock
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
PATH
|
|
2
|
-
remote: .
|
|
3
|
-
specs:
|
|
4
|
-
tfdsl (0.1.11)
|
|
5
|
-
deep_merge (~> 1.2)
|
|
6
|
-
|
|
7
|
-
GEM
|
|
8
|
-
remote: https://rubygems.org/
|
|
9
|
-
specs:
|
|
10
|
-
ast (2.4.0)
|
|
11
|
-
coderay (1.1.2)
|
|
12
|
-
coolline (0.5.0)
|
|
13
|
-
unicode_utils (~> 1.4)
|
|
14
|
-
coveralls (0.8.22)
|
|
15
|
-
json (>= 1.8, < 3)
|
|
16
|
-
simplecov (~> 0.16.1)
|
|
17
|
-
term-ansicolor (~> 1.3)
|
|
18
|
-
thor (~> 0.19.4)
|
|
19
|
-
tins (~> 1.6)
|
|
20
|
-
deep_merge (1.2.1)
|
|
21
|
-
docile (1.3.1)
|
|
22
|
-
jaro_winkler (1.5.2)
|
|
23
|
-
json (2.1.0)
|
|
24
|
-
method_source (0.9.2)
|
|
25
|
-
minitest (5.11.3)
|
|
26
|
-
parallel (1.13.0)
|
|
27
|
-
parser (2.6.0.0)
|
|
28
|
-
ast (~> 2.4.0)
|
|
29
|
-
powerpack (0.1.2)
|
|
30
|
-
pry (0.12.2)
|
|
31
|
-
coderay (~> 1.1.0)
|
|
32
|
-
method_source (~> 0.9.0)
|
|
33
|
-
pry-coolline (0.2.5)
|
|
34
|
-
coolline (~> 0.5)
|
|
35
|
-
rainbow (3.0.0)
|
|
36
|
-
rake (13.0.1)
|
|
37
|
-
rubocop (0.63.1)
|
|
38
|
-
jaro_winkler (~> 1.5.1)
|
|
39
|
-
parallel (~> 1.10)
|
|
40
|
-
parser (>= 2.5, != 2.5.1.1)
|
|
41
|
-
powerpack (~> 0.1)
|
|
42
|
-
rainbow (>= 2.2.2, < 4.0)
|
|
43
|
-
ruby-progressbar (~> 1.7)
|
|
44
|
-
unicode-display_width (~> 1.4.0)
|
|
45
|
-
ruby-progressbar (1.10.0)
|
|
46
|
-
simplecov (0.16.1)
|
|
47
|
-
docile (~> 1.1)
|
|
48
|
-
json (>= 1.8, < 3)
|
|
49
|
-
simplecov-html (~> 0.10.0)
|
|
50
|
-
simplecov-html (0.10.2)
|
|
51
|
-
term-ansicolor (1.7.1)
|
|
52
|
-
tins (~> 1.0)
|
|
53
|
-
thor (0.19.4)
|
|
54
|
-
tins (1.20.2)
|
|
55
|
-
unicode-display_width (1.4.1)
|
|
56
|
-
unicode_utils (1.4.0)
|
|
57
|
-
|
|
58
|
-
PLATFORMS
|
|
59
|
-
ruby
|
|
60
|
-
|
|
61
|
-
DEPENDENCIES
|
|
62
|
-
bundler (~> 1.16)
|
|
63
|
-
coveralls (~> 0.8)
|
|
64
|
-
minitest (~> 5.0)
|
|
65
|
-
pry (~> 0.12)
|
|
66
|
-
pry-coolline (~> 0.2)
|
|
67
|
-
rake (~> 13.0)
|
|
68
|
-
rubocop (~> 0.63)
|
|
69
|
-
simplecov (~> 0.16)
|
|
70
|
-
tfdsl!
|
|
71
|
-
|
|
72
|
-
BUNDLED WITH
|
|
73
|
-
1.17.2
|
data/lib/tfdsl/block.rb
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
module TFDSL
|
|
2
|
-
# This class is the representation of terraform configuration block
|
|
3
|
-
# https://www.terraform.io/docs/configuration/
|
|
4
|
-
class Block
|
|
5
|
-
attr_reader :__type__, :__labels__
|
|
6
|
-
@@formatter = Formatter.new
|
|
7
|
-
def initialize(&block)
|
|
8
|
-
@__blocks__ = []
|
|
9
|
-
instance_eval(&block) if block_given?
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def method_missing(method_name, *args, &block)
|
|
13
|
-
super if [:respond_to_missing?].include? method_name
|
|
14
|
-
return method_missing_handler(method_name, *args, &block)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def method_missing_handler(method_name, *args, &block)
|
|
18
|
-
method = method_name.to_s.gsub(/=$/, '')
|
|
19
|
-
|
|
20
|
-
if block_given?
|
|
21
|
-
r = Block.new
|
|
22
|
-
r.__type__ = method
|
|
23
|
-
r.__labels__ = args
|
|
24
|
-
@__blocks__ << r
|
|
25
|
-
return r.instance_eval(&block)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
return instance_variable_set "@#{method}", *args unless args.empty?
|
|
29
|
-
return instance_variable_get "@#{method}" if args.empty?
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def timeout(*args, &block)
|
|
33
|
-
method_missing_handler :timeout, *args, &block
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def respond_to_missing?(_method_name, _include_private = true)
|
|
37
|
-
true
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def to_tf
|
|
41
|
-
@@formatter.format self
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def to_str
|
|
45
|
-
to_tf
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def to_s
|
|
49
|
-
to_tf
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def to_json_repr(depth = 0)
|
|
53
|
-
block = { 'tmp' => {} }
|
|
54
|
-
|
|
55
|
-
ref = block['tmp']
|
|
56
|
-
|
|
57
|
-
labels = __labels__.dup
|
|
58
|
-
labels = [__type__] + labels if !__type__.empty? && depth.zero?
|
|
59
|
-
|
|
60
|
-
labels.each do |l|
|
|
61
|
-
ref[l] = {} if ref[l].nil?
|
|
62
|
-
ref = ref[l]
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
instance_variables.each do |var|
|
|
66
|
-
var_name = var.to_s.gsub(/^@/, '')
|
|
67
|
-
next if var_name =~ /^__/
|
|
68
|
-
|
|
69
|
-
ref[var_name] = send var_name
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
__blocks__.each do |b|
|
|
73
|
-
json = b.to_json_repr depth + 1
|
|
74
|
-
if b.__labels__.empty?
|
|
75
|
-
if ref[b.__type__].nil?
|
|
76
|
-
ref[b.__type__] = json
|
|
77
|
-
else
|
|
78
|
-
ref[b.__type__] = [ref[b.__type__], json].flatten
|
|
79
|
-
end
|
|
80
|
-
else
|
|
81
|
-
ref[b.__type__] = [] if ref[b.__type__].nil?
|
|
82
|
-
ref[b.__type__] << json
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
block['tmp']
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
end
|