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
data/lib/tfdsl/data_formatter.rb
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
module TFDSL
|
|
2
|
-
# This will format hash maps, lists and elements in HCL format
|
|
3
|
-
class DataFormatter
|
|
4
|
-
def initialize
|
|
5
|
-
@sio = StringIO.new
|
|
6
|
-
@indent = ' ' * 4
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def format(input, level = 0, last = false, parent_is_list = false)
|
|
10
|
-
if input.class == Hash
|
|
11
|
-
handle_hash input, level, last, parent_is_list
|
|
12
|
-
elsif input.class == Array
|
|
13
|
-
handle_list input, level, last, parent_is_list
|
|
14
|
-
else
|
|
15
|
-
handle_element input, level, last, parent_is_list
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
return @sio.string if level.zero?
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def handle_element(input, _level, last, parent_is_list)
|
|
22
|
-
if last
|
|
23
|
-
@sio << %("#{input}"\n)
|
|
24
|
-
elsif parent_is_list
|
|
25
|
-
@sio << %("#{input}",\n)
|
|
26
|
-
else
|
|
27
|
-
@sio << %("#{input}"\n)
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def handle_list(input, level, _last, _parent_is_list)
|
|
32
|
-
@sio << "[\n#{@indent * (level + 1)}"
|
|
33
|
-
input.each_with_index do |e, i|
|
|
34
|
-
if i == input.size - 1
|
|
35
|
-
format e, level + 1, true, true
|
|
36
|
-
else
|
|
37
|
-
format e, level + 1, false, true
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
@sio << @indent * (level + 1) unless i == input.size - 1
|
|
41
|
-
end
|
|
42
|
-
@sio << "#{@indent * level}]\n"
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def handle_hash(input, level, last, _parent_is_list)
|
|
46
|
-
@sio << "{\n"
|
|
47
|
-
input.each_with_index do |e, i|
|
|
48
|
-
k, v = e
|
|
49
|
-
@sio << "#{@indent * (level + 1)}#{k} = "
|
|
50
|
-
if i == input.size - 1
|
|
51
|
-
format v, level + 1, true
|
|
52
|
-
else
|
|
53
|
-
format v, level + 1
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
if last || level.zero?
|
|
57
|
-
@sio << @indent * level + "}\n"
|
|
58
|
-
else
|
|
59
|
-
@sio << @indent * level + "},\n"
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
data/lib/tfdsl/data_source.rb
DELETED
data/lib/tfdsl/formatter.rb
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
module TFDSL
|
|
2
|
-
# Class responsible for formatting the string representation of terraform blocks
|
|
3
|
-
class Formatter
|
|
4
|
-
def kind(cls)
|
|
5
|
-
KindTranslator.kind cls
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
def format(tf_block)
|
|
9
|
-
@depth ||= 0
|
|
10
|
-
str = []
|
|
11
|
-
|
|
12
|
-
if @depth.zero?
|
|
13
|
-
str << first_line(tf_block)
|
|
14
|
-
close = true
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
str << local_vars(tf_block) unless local_vars(tf_block).empty?
|
|
18
|
-
|
|
19
|
-
str << child_blocks(tf_block) unless tf_block.__blocks__.empty?
|
|
20
|
-
str[1..-1] = str[1..-1].map { |line| line.gsub(/^/, ' ' * 4) } unless str[1..-1].nil?
|
|
21
|
-
str << "}\n\n" if close
|
|
22
|
-
str.join("\n")
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
private
|
|
26
|
-
|
|
27
|
-
def first_line(tf_block)
|
|
28
|
-
labels = tf_block.__labels__.nil? ? [] : tf_block.__labels__
|
|
29
|
-
labels_str = labels.map { |l| %("#{l}") }.join ' '
|
|
30
|
-
kind = kind tf_block.class
|
|
31
|
-
type = tf_block.__type__.to_s.empty? ? '' : %( "#{tf_block.__type__}" )
|
|
32
|
-
"#{kind}#{type}#{labels_str} {"
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def local_vars(tf_block)
|
|
36
|
-
str = []
|
|
37
|
-
tf_block.instance_variables.sort.each do |var_name|
|
|
38
|
-
next if var_name =~ /@__/
|
|
39
|
-
|
|
40
|
-
var = tf_block.instance_variable_get var_name
|
|
41
|
-
var_name = var_name.to_s.delete('@')
|
|
42
|
-
|
|
43
|
-
str << Template.list(var_name, var) if var.class == Array
|
|
44
|
-
str << Template.map(var_name, var) if var.class == Hash
|
|
45
|
-
unless [Array, Hash].include? var.class
|
|
46
|
-
safe_var = safe_quote safe_multiline var.to_s
|
|
47
|
-
str << Template.value(var_name, safe_var)
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
str.join "\n"
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def safe_multiline(str)
|
|
54
|
-
str.gsub "\n", '\n'
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def safe_quote(str)
|
|
58
|
-
# Don't escape when string is interpolation
|
|
59
|
-
return str if str =~ /^\s*\$\{/
|
|
60
|
-
|
|
61
|
-
str.gsub(/([^\\])"/, '\1\"').gsub(/([^\\])"/, '\1\"')
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def child_blocks(tf_block)
|
|
65
|
-
str = []
|
|
66
|
-
tf_block.__blocks__.each do |b|
|
|
67
|
-
@depth += 1
|
|
68
|
-
indent = ' ' * 4
|
|
69
|
-
child = Template.child_block b
|
|
70
|
-
child = child.gsub(/^/, indent) if @depth > 1
|
|
71
|
-
str << child
|
|
72
|
-
@depth -= 1
|
|
73
|
-
end
|
|
74
|
-
str.join("\n")
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
end
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
module TFDSL
|
|
2
|
-
# Translates Class names into terraform block types
|
|
3
|
-
module KindTranslator
|
|
4
|
-
module_function
|
|
5
|
-
|
|
6
|
-
def kind(cls)
|
|
7
|
-
kinds = {
|
|
8
|
-
Provider => 'provider',
|
|
9
|
-
TFModule => 'module',
|
|
10
|
-
Locals => 'locals',
|
|
11
|
-
Resource => 'resource',
|
|
12
|
-
Variable => 'variable',
|
|
13
|
-
DataSource => 'data',
|
|
14
|
-
Output => 'output',
|
|
15
|
-
Terraform => 'terraform'
|
|
16
|
-
}
|
|
17
|
-
kinds[cls]
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
data/lib/tfdsl/locals.rb
DELETED
data/lib/tfdsl/output.rb
DELETED
data/lib/tfdsl/provider.rb
DELETED
data/lib/tfdsl/resource.rb
DELETED
data/lib/tfdsl/stack.rb
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
require 'deep_merge'
|
|
2
|
-
module TFDSL
|
|
3
|
-
# This class is the representation of a terraform stack, or in another words
|
|
4
|
-
# is a collection of terraform configuration blocks
|
|
5
|
-
class Stack
|
|
6
|
-
def initialize(&block)
|
|
7
|
-
@objects = []
|
|
8
|
-
instance_eval(&block) if block_given?
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
%w[Provider Variable Locals TFModule DataSource Resource Output Terraform].each do |word|
|
|
12
|
-
define_method word.downcase do |type = '', *labels, &b|
|
|
13
|
-
cls = Object.const_get "TFDSL::#{word}"
|
|
14
|
-
w = cls.new
|
|
15
|
-
w.__type__ = type
|
|
16
|
-
w.__labels__ = labels
|
|
17
|
-
@objects << w
|
|
18
|
-
w.instance_eval(&b) unless b.nil?
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def to_s
|
|
23
|
-
@objects.each_with_object('') { |o, str| str << o }
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def to_json
|
|
27
|
-
stack = {}
|
|
28
|
-
@objects.each do |obj|
|
|
29
|
-
key = KindTranslator.kind obj.class
|
|
30
|
-
stack[key] = {} if stack[key].nil?
|
|
31
|
-
stack[key] = stack[key].deep_merge obj.to_json_repr
|
|
32
|
-
end
|
|
33
|
-
JSON.pretty_generate(stack)
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
data/lib/tfdsl/template.rb
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
module TFDSL
|
|
2
|
-
# Collection of small templates to be used on to_s / to_str of blocks
|
|
3
|
-
module Template
|
|
4
|
-
module_function
|
|
5
|
-
|
|
6
|
-
def list(name, value)
|
|
7
|
-
template = <<-TEXT.gsub(/^ {6}/, '')
|
|
8
|
-
<%=name%> = <%=DataFormatter.new.format value%>
|
|
9
|
-
TEXT
|
|
10
|
-
ERB.new(template, trim_mode: '-').result(binding).strip
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def map(name, value)
|
|
14
|
-
template = <<-TEXT.gsub(/^ {6}/, '')
|
|
15
|
-
<%=name%> = <%=DataFormatter.new.format value%>
|
|
16
|
-
TEXT
|
|
17
|
-
ERB.new(template, trim_mode: '-').result(binding).strip
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def child_block(value)
|
|
21
|
-
labels = value.__labels__.nil? ? [] : value.__labels__
|
|
22
|
-
labels_str = labels.map { |l| %("#{l}") }.join ' '
|
|
23
|
-
type = value.__type__.nil? ? '' : %( #{value.__type__} )
|
|
24
|
-
|
|
25
|
-
# This is just to get ride of the warning of unused variables
|
|
26
|
-
# The variable are used, but as part of binding
|
|
27
|
-
_ = "#{labels_str}, #{type}"
|
|
28
|
-
|
|
29
|
-
template = <<-TEXT.gsub(/^ {6}/, '')
|
|
30
|
-
<%=type%><%=labels_str%> {
|
|
31
|
-
<%- unless value.to_s.empty? -%>
|
|
32
|
-
<%=value.to_tf.strip.gsub(/^/,' ')%>
|
|
33
|
-
<%- end -%>
|
|
34
|
-
}
|
|
35
|
-
TEXT
|
|
36
|
-
ERB.new(template, trim_mode: '-').result(binding).strip
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def value(name, value)
|
|
40
|
-
template = <<-TEXT.gsub(/^ {6}/, '')
|
|
41
|
-
<%=name%> = "<%=value%>"
|
|
42
|
-
TEXT
|
|
43
|
-
ERB.new(template, trim_mode: '-').result(binding).strip
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
data/lib/tfdsl/terraform.rb
DELETED
data/lib/tfdsl/tfmodule.rb
DELETED
data/lib/tfdsl/variable.rb
DELETED
data/lib/tfdsl/version.rb
DELETED