tfdsl 0.1.10 → 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 -80
- 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.10)
|
|
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,80 +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
|
-
method = method_name.to_s.gsub(/=$/, '')
|
|
15
|
-
|
|
16
|
-
if block_given?
|
|
17
|
-
r = Block.new
|
|
18
|
-
r.__type__ = method
|
|
19
|
-
r.__labels__ = args
|
|
20
|
-
@__blocks__ << r
|
|
21
|
-
return r.instance_eval(&block)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
return instance_variable_set "@#{method}", *args unless args.empty?
|
|
25
|
-
return instance_variable_get "@#{method}" if args.empty?
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def respond_to_missing?(_method_name, _include_private = true)
|
|
29
|
-
true
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def to_tf
|
|
33
|
-
@@formatter.format self
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def to_str
|
|
37
|
-
to_tf
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def to_s
|
|
41
|
-
to_tf
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def to_json_repr(depth = 0)
|
|
45
|
-
block = { 'tmp' => {} }
|
|
46
|
-
|
|
47
|
-
ref = block['tmp']
|
|
48
|
-
|
|
49
|
-
labels = __labels__.dup
|
|
50
|
-
labels = [__type__] + labels if !__type__.empty? && depth.zero?
|
|
51
|
-
|
|
52
|
-
labels.each do |l|
|
|
53
|
-
ref[l] = {} if ref[l].nil?
|
|
54
|
-
ref = ref[l]
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
instance_variables.each do |var|
|
|
58
|
-
var_name = var.to_s.gsub(/^@/, '')
|
|
59
|
-
next if var_name =~ /^__/
|
|
60
|
-
|
|
61
|
-
ref[var_name] = send var_name
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
__blocks__.each do |b|
|
|
65
|
-
json = b.to_json_repr depth + 1
|
|
66
|
-
if b.__labels__.empty?
|
|
67
|
-
if ref[b.__type__].nil?
|
|
68
|
-
ref[b.__type__] = json
|
|
69
|
-
else
|
|
70
|
-
ref[b.__type__] = [ref[b.__type__], json].flatten
|
|
71
|
-
end
|
|
72
|
-
else
|
|
73
|
-
ref[b.__type__] = [] if ref[b.__type__].nil?
|
|
74
|
-
ref[b.__type__] << json
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
block['tmp']
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
end
|