ruby-terraform 0.65.0.pre.10 → 0.65.0.pre.15

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.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +18 -10
  3. data/README.md +2 -19
  4. data/lib/ruby_terraform.rb +691 -18
  5. data/lib/ruby_terraform/commands/apply.rb +75 -1
  6. data/lib/ruby_terraform/commands/base.rb +18 -15
  7. data/lib/ruby_terraform/commands/destroy.rb +67 -1
  8. data/lib/ruby_terraform/commands/force_unlock.rb +28 -0
  9. data/lib/ruby_terraform/commands/format.rb +39 -0
  10. data/lib/ruby_terraform/commands/get.rb +31 -0
  11. data/lib/ruby_terraform/commands/graph.rb +38 -0
  12. data/lib/ruby_terraform/commands/import.rb +95 -1
  13. data/lib/ruby_terraform/commands/init.rb +72 -1
  14. data/lib/ruby_terraform/commands/login.rb +24 -0
  15. data/lib/ruby_terraform/commands/logout.rb +21 -0
  16. data/lib/ruby_terraform/commands/output.rb +34 -4
  17. data/lib/ruby_terraform/commands/plan.rb +67 -1
  18. data/lib/ruby_terraform/commands/providers.rb +22 -0
  19. data/lib/ruby_terraform/commands/providers_lock.rb +66 -0
  20. data/lib/ruby_terraform/commands/providers_mirror.rb +42 -0
  21. data/lib/ruby_terraform/commands/taint.rb +2 -1
  22. data/lib/ruby_terraform/options.rb +25 -3
  23. data/lib/ruby_terraform/options/common.rb +1 -0
  24. data/lib/ruby_terraform/options/definition.rb +172 -0
  25. data/lib/ruby_terraform/options/definitions.rb +103 -0
  26. data/lib/ruby_terraform/options/factory.rb +10 -102
  27. data/lib/ruby_terraform/options/name.rb +11 -19
  28. data/lib/ruby_terraform/options/types.rb +27 -0
  29. data/lib/ruby_terraform/options/types/base.rb +6 -13
  30. data/lib/ruby_terraform/options/types/flag.rb +1 -3
  31. data/lib/ruby_terraform/options/types/standard.rb +1 -27
  32. data/lib/ruby_terraform/options/values.rb +38 -0
  33. data/lib/ruby_terraform/options/values/base.rb +15 -0
  34. data/lib/ruby_terraform/options/values/boolean.rb +13 -11
  35. data/lib/ruby_terraform/options/values/complex.rb +19 -0
  36. data/lib/ruby_terraform/options/values/key_value.rb +21 -0
  37. data/lib/ruby_terraform/options/values/string.rb +17 -0
  38. data/lib/ruby_terraform/version.rb +1 -1
  39. data/ruby_terraform.gemspec +3 -1
  40. metadata +40 -5
  41. data/lib/ruby_terraform/options/types/boolean.rb +0 -18
@@ -1,118 +1,26 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'name'
4
- require_relative 'types/boolean'
5
- require_relative 'types/flag'
6
- require_relative 'types/standard'
7
4
 
8
5
  module RubyTerraform
9
6
  module Options
10
7
  class Factory
11
- PLURAL_OPTIONS =
12
- Set.new(
13
- %w[
14
- -var
15
- -target
16
- -var-file
17
- -platform
18
- ]
19
- ).freeze
20
-
21
- BOOLEAN_OPTIONS =
22
- Set.new(
23
- %w[
24
- -auto-approve
25
- -backend
26
- -get
27
- -get-plugins
28
- -input
29
- -list
30
- -lock
31
- -refresh
32
- -upgrade
33
- -verify-plugins
34
- -write
35
- ]
36
- ).freeze
37
-
38
- FLAG_OPTIONS =
39
- Set.new(
40
- %w[
41
- -allow-missing
42
- -allow-missing-config
43
- -check
44
- -compact-warnings
45
- -destroy
46
- -detailed-exitcode
47
- -diff
48
- -draw-cycles
49
- -force
50
- -force-copy
51
- -ignore-remote-version
52
- -json
53
- -no-color
54
- -raw
55
- -reconfigure
56
- -recursive
57
- -update
58
- ]
59
- ).freeze
60
-
61
- OVERRIDE_OPTIONS =
62
- {
63
- config: :directory,
64
- out: :plan
65
- }.freeze
66
-
67
- def self.from(names, parameters)
68
- new(names, parameters).from
69
- end
70
-
71
- private_class_method :new
72
-
73
- def initialize(names, parameters)
74
- @names = names.map { |name| Name.new(name) }
75
- @parameters = parameters
8
+ def initialize(definitions)
9
+ @definitions = definitions
76
10
  end
77
11
 
78
- def from
79
- names.each_with_object([]) do |name, options|
80
- options.append(*options_from_name(name))
81
- end
12
+ def resolve(names, parameters)
13
+ names
14
+ .map { |name| Name.new(name) }
15
+ .inject([]) do |options, name|
16
+ options + resolve_name(name, parameters)
17
+ end
82
18
  end
83
19
 
84
20
  private
85
21
 
86
- attr_reader :names, :parameters
87
-
88
- def options_from_name(name)
89
- return plural_options(name) if PLURAL_OPTIONS.include?(name)
90
- return boolean_option(name) if BOOLEAN_OPTIONS.include?(name)
91
- return flag_option(name) if FLAG_OPTIONS.include?(name)
92
- return override_option(name) if OVERRIDE_OPTIONS.key?(name.as_key)
93
-
94
- standard_option(name, name.as_key)
95
- end
96
-
97
- def boolean_option(name)
98
- [Types::Boolean.new(name.to_s, parameters[name.as_key])]
99
- end
100
-
101
- def flag_option(name)
102
- [Types::Flag.new(name.to_s, parameters[name.as_key])]
103
- end
104
-
105
- def standard_option(name, hash_key)
106
- [Types::Standard.new(name.to_s, parameters[hash_key])]
107
- end
108
-
109
- def override_option(name)
110
- standard_option(name, OVERRIDE_OPTIONS[name.as_key])
111
- end
112
-
113
- def plural_options(name)
114
- standard_option(name.to_s, name.as_key) +
115
- standard_option(name.to_s, name.as_plural_key)
22
+ def resolve_name(name, parameters)
23
+ @definitions.find { |d| d.matches?(name) }.build(parameters)
116
24
  end
117
25
  end
118
26
  end
@@ -1,21 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'immutable-struct'
4
+
3
5
  module RubyTerraform
4
6
  module Options
5
- class Name
7
+ class Name < ImmutableStruct.new(:name)
6
8
  def initialize(name)
7
- @name = name
8
- end
9
-
10
- def without_prefix
11
- @name[0] == '-' ? @name[1..] : @name
9
+ super(name: name.to_s)
12
10
  end
13
11
 
14
- def to_s
12
+ def name
15
13
  "-#{without_prefix}"
16
14
  end
17
15
 
18
- def as_key
16
+ alias to_s name
17
+
18
+ def as_singular_key
19
19
  snake_case.to_sym
20
20
  end
21
21
 
@@ -23,20 +23,12 @@ module RubyTerraform
23
23
  "#{snake_case}s".to_sym
24
24
  end
25
25
 
26
- def ==(other)
27
- to_s == other
28
- end
29
-
30
- def eql?(other)
31
- to_s == other
32
- end
26
+ private
33
27
 
34
- def hash
35
- to_s.hash
28
+ def without_prefix
29
+ @name.sub(/^-+/, '')
36
30
  end
37
31
 
38
- private
39
-
40
32
  def snake_case
41
33
  without_prefix.gsub('-', '_')
42
34
  end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'types/base'
4
+ require_relative 'types/standard'
5
+ require_relative 'types/flag'
6
+
7
+ module RubyTerraform
8
+ module Options
9
+ module Types
10
+ def self.standard(name, value, **opts)
11
+ Standard.new(name, value, **opts)
12
+ end
13
+
14
+ def self.flag(name, value)
15
+ Flag.new(name, value)
16
+ end
17
+
18
+ def self.resolve(type)
19
+ case type
20
+ when :standard then Types::Standard
21
+ when :flag then Types::Flag
22
+ else type
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,24 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'immutable-struct'
4
+
3
5
  module RubyTerraform
4
6
  module Options
5
7
  module Types
6
- class Base
7
- def initialize(name, value)
8
- @name = name
9
- coerce_value(value)
8
+ class Base < ImmutableStruct.new(:name, :value, :separator)
9
+ def initialize(name, value, **opts)
10
+ super(name: name, value: value, separator: opts[:separator])
10
11
  end
11
12
 
12
13
  def apply(_builder)
13
- raise 'not implemented'
14
- end
15
-
16
- private
17
-
18
- attr_reader :name, :value
19
-
20
- def coerce_value(value)
21
- @value = value
14
+ raise 'Not implemented.'
22
15
  end
23
16
  end
24
17
  end
@@ -7,10 +7,8 @@ module RubyTerraform
7
7
  module Options
8
8
  module Types
9
9
  class Flag < Base
10
- include Values::Boolean
11
-
12
10
  def apply(builder)
13
- value ? builder.with_flag(name) : builder
11
+ value.resolve ? builder.with_flag(name) : builder
14
12
  end
15
13
  end
16
14
  end
@@ -9,33 +9,7 @@ module RubyTerraform
9
9
  module Types
10
10
  class Standard < Base
11
11
  def apply(builder)
12
- if value.respond_to?(:keys)
13
- apply_hash(builder)
14
- elsif value.respond_to?(:each)
15
- apply_array(builder)
16
- else
17
- builder.with_option(name, value)
18
- end
19
- end
20
-
21
- private
22
-
23
- def apply_hash(builder)
24
- builder.with_repeated_option(
25
- name,
26
- value.map do |hash_key, hash_value|
27
- "'#{hash_key}=#{as_string(hash_value)}'"
28
- end,
29
- separator: ' '
30
- )
31
- end
32
-
33
- def apply_array(builder)
34
- builder.with_repeated_option(name, value)
35
- end
36
-
37
- def as_string(value)
38
- value.is_a?(String) ? value : JSON.generate(value)
12
+ builder.with_option(name, value.render, separator: separator)
39
13
  end
40
14
  end
41
15
  end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'values/boolean'
4
+ require_relative 'values/string'
5
+ require_relative 'values/complex'
6
+ require_relative 'values/key_value'
7
+
8
+ module RubyTerraform
9
+ module Options
10
+ module Values
11
+ def self.boolean(value)
12
+ Boolean.new(value)
13
+ end
14
+
15
+ def self.string(value)
16
+ String.new(value)
17
+ end
18
+
19
+ def self.complex(value)
20
+ Complex.new(value)
21
+ end
22
+
23
+ def self.key_value(key, value)
24
+ KeyValue.new(key, value)
25
+ end
26
+
27
+ def self.resolve(type)
28
+ case type
29
+ when :string then Values::String
30
+ when :boolean then Values::Boolean
31
+ when :complex then Values::Complex
32
+ when :key_value then Values::KeyValue
33
+ else type
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'immutable-struct'
4
+
5
+ module RubyTerraform
6
+ module Options
7
+ module Values
8
+ class Base < ImmutableStruct.new(:value)
9
+ def initialize(value)
10
+ super(value: value)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,23 +1,25 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'base'
4
+
3
5
  module RubyTerraform
4
6
  module Options
5
7
  module Values
6
- module Boolean
7
- def coerce_value(value)
8
- @value = to_boolean(value)
9
- end
10
-
11
- private
12
-
13
- def to_boolean(value)
14
- return nil if value.nil?
15
- return value if a_boolean?(value)
16
- return true if true_as_string?(value)
8
+ class Boolean < Base
9
+ def resolve
10
+ return nil if @value.nil?
11
+ return @value if a_boolean?(@value)
12
+ return true if true_as_string?(@value)
17
13
 
18
14
  false
19
15
  end
20
16
 
17
+ def render
18
+ resolve.nil? ? nil : resolve.to_s
19
+ end
20
+
21
+ private
22
+
21
23
  def a_boolean?(value)
22
24
  value.is_a?(TrueClass) || value.is_a?(FalseClass)
23
25
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+
5
+ module RubyTerraform
6
+ module Options
7
+ module Values
8
+ class Complex < Base
9
+ def resolve
10
+ @value
11
+ end
12
+
13
+ def render
14
+ @value.is_a?(::String) ? @value : JSON.generate(value)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyTerraform
4
+ module Options
5
+ module Values
6
+ class KeyValue < ImmutableStruct.new(:key, :value)
7
+ def initialize(key, value)
8
+ super(key: key, value: value)
9
+ end
10
+
11
+ def resolve
12
+ { key => value.resolve }
13
+ end
14
+
15
+ def render
16
+ "'#{key}=#{value.render}'"
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+
5
+ module RubyTerraform
6
+ module Options
7
+ module Values
8
+ class String < Base
9
+ def resolve
10
+ @value.to_s
11
+ end
12
+
13
+ alias render resolve
14
+ end
15
+ end
16
+ end
17
+ end