ruby-terraform 0.65.0.pre.6 → 0.65.0.pre.11

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 (64) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -0
  3. data/Gemfile.lock +4 -1
  4. data/Rakefile +7 -3
  5. data/bin/console +1 -0
  6. data/lib/ruby-terraform.rb +2 -0
  7. data/lib/ruby_terraform.rb +56 -3
  8. data/lib/ruby_terraform/commands.rb +31 -8
  9. data/lib/ruby_terraform/commands/apply.rb +28 -9
  10. data/lib/ruby_terraform/commands/base.rb +24 -26
  11. data/lib/ruby_terraform/commands/clean.rb +4 -2
  12. data/lib/ruby_terraform/commands/destroy.rb +29 -9
  13. data/lib/ruby_terraform/commands/force_unlock.rb +24 -0
  14. data/lib/ruby_terraform/commands/format.rb +17 -6
  15. data/lib/ruby_terraform/commands/get.rb +14 -6
  16. data/lib/ruby_terraform/commands/graph.rb +24 -0
  17. data/lib/ruby_terraform/commands/import.rb +28 -9
  18. data/lib/ruby_terraform/commands/init.rb +27 -8
  19. data/lib/ruby_terraform/commands/login.rb +20 -0
  20. data/lib/ruby_terraform/commands/logout.rb +20 -0
  21. data/lib/ruby_terraform/commands/output.rb +18 -8
  22. data/lib/ruby_terraform/commands/plan.rb +27 -7
  23. data/lib/ruby_terraform/commands/providers.rb +16 -0
  24. data/lib/ruby_terraform/commands/providers_lock.rb +28 -0
  25. data/lib/ruby_terraform/commands/providers_mirror.rb +24 -0
  26. data/lib/ruby_terraform/commands/providers_schema.rb +25 -0
  27. data/lib/ruby_terraform/commands/refresh.rb +29 -7
  28. data/lib/ruby_terraform/commands/remote_config.rb +11 -5
  29. data/lib/ruby_terraform/commands/show.rb +14 -6
  30. data/lib/ruby_terraform/commands/state_list.rb +20 -0
  31. data/lib/ruby_terraform/commands/state_move.rb +34 -0
  32. data/lib/ruby_terraform/commands/state_pull.rb +16 -0
  33. data/lib/ruby_terraform/commands/state_push.rb +24 -0
  34. data/lib/ruby_terraform/commands/state_remove.rb +32 -0
  35. data/lib/ruby_terraform/commands/state_replace_provider.rb +35 -0
  36. data/lib/ruby_terraform/commands/state_show.rb +24 -0
  37. data/lib/ruby_terraform/commands/taint.rb +36 -0
  38. data/lib/ruby_terraform/commands/untaint.rb +37 -0
  39. data/lib/ruby_terraform/commands/validate.rb +15 -7
  40. data/lib/ruby_terraform/commands/workspace_delete.rb +32 -0
  41. data/lib/ruby_terraform/commands/workspace_list.rb +24 -0
  42. data/lib/ruby_terraform/commands/workspace_new.rb +32 -0
  43. data/lib/ruby_terraform/commands/workspace_select.rb +24 -0
  44. data/lib/ruby_terraform/commands/workspace_show.rb +16 -0
  45. data/lib/ruby_terraform/errors.rb +2 -0
  46. data/lib/ruby_terraform/errors/execution_error.rb +2 -0
  47. data/lib/ruby_terraform/options.rb +8 -0
  48. data/lib/ruby_terraform/options/common.rb +11 -0
  49. data/lib/ruby_terraform/options/factory.rb +70 -67
  50. data/lib/ruby_terraform/options/{switch.rb → name.rb} +11 -7
  51. data/lib/ruby_terraform/options/types/base.rb +26 -0
  52. data/lib/ruby_terraform/options/types/boolean.rb +18 -0
  53. data/lib/ruby_terraform/options/types/flag.rb +18 -0
  54. data/lib/ruby_terraform/options/types/standard.rb +43 -0
  55. data/lib/ruby_terraform/options/values/boolean.rb +2 -0
  56. data/lib/ruby_terraform/output.rb +9 -7
  57. data/lib/ruby_terraform/version.rb +3 -1
  58. data/ruby_terraform.gemspec +58 -0
  59. metadata +46 -8
  60. data/lib/ruby_terraform/commands/workspace.rb +0 -24
  61. data/lib/ruby_terraform/options/base.rb +0 -22
  62. data/lib/ruby_terraform/options/boolean.rb +0 -14
  63. data/lib/ruby_terraform/options/flag.rb +0 -14
  64. data/lib/ruby_terraform/options/standard.rb +0 -39
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+ require_relative '../options/common'
5
+
6
+ module RubyTerraform
7
+ module Commands
8
+ class WorkspaceList < Base
9
+ include RubyTerraform::Options::Common
10
+
11
+ def subcommands
12
+ %w[workspace list]
13
+ end
14
+
15
+ def arguments(parameters)
16
+ [parameters[:directory]]
17
+ end
18
+
19
+ def parameter_defaults(_parameters)
20
+ { directory: nil }
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+ require_relative '../options/common'
5
+
6
+ module RubyTerraform
7
+ module Commands
8
+ class WorkspaceNew < Base
9
+ include RubyTerraform::Options::Common
10
+
11
+ def subcommands
12
+ %w[workspace new]
13
+ end
14
+
15
+ def options
16
+ %w[
17
+ -lock
18
+ -lock-timeout
19
+ -state
20
+ ] + super
21
+ end
22
+
23
+ def arguments(parameters)
24
+ [parameters[:workspace], parameters[:directory]]
25
+ end
26
+
27
+ def parameter_defaults(_parameters)
28
+ { directory: nil }
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+ require_relative '../options/common'
5
+
6
+ module RubyTerraform
7
+ module Commands
8
+ class WorkspaceSelect < Base
9
+ include RubyTerraform::Options::Common
10
+
11
+ def subcommands
12
+ %w[workspace select]
13
+ end
14
+
15
+ def arguments(parameters)
16
+ [parameters[:workspace], parameters[:directory]]
17
+ end
18
+
19
+ def parameter_defaults(_parameters)
20
+ { directory: nil }
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+ require_relative '../options/common'
5
+
6
+ module RubyTerraform
7
+ module Commands
8
+ class WorkspaceShow < Base
9
+ include RubyTerraform::Options::Common
10
+
11
+ def subcommands
12
+ %w[workspace show]
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'errors/execution_error'
2
4
 
3
5
  module RubyTerraform
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RubyTerraform
2
4
  module Errors
3
5
  class ExecutionError < StandardError
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'options/name'
4
+ require_relative 'options/types/flag'
5
+ require_relative 'options/types/boolean'
6
+ require_relative 'options/types/standard'
7
+ require_relative 'options/factory'
8
+ require_relative 'options/common'
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyTerraform
4
+ module Options
5
+ module Common
6
+ def options
7
+ %w[-chdir]
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,115 +1,118 @@
1
- require_relative 'switch'
2
- require_relative 'boolean'
3
- require_relative 'flag'
4
- require_relative 'standard'
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'name'
4
+ require_relative 'types/boolean'
5
+ require_relative 'types/flag'
6
+ require_relative 'types/standard'
5
7
 
6
8
  module RubyTerraform
7
9
  module Options
8
10
  class Factory
9
- PLURAL_SWITCHES =
11
+ PLURAL_OPTIONS =
10
12
  Set.new(
11
13
  %w[
12
- -var
13
- -target
14
- -var-file
15
- ]
14
+ -var
15
+ -target
16
+ -var-file
17
+ -platform
18
+ ]
16
19
  ).freeze
17
20
 
18
- BOOLEAN_SWITCHES =
21
+ BOOLEAN_OPTIONS =
19
22
  Set.new(
20
23
  %w[
21
- -auto-approve
22
- -backend
23
- -get
24
- -get-plugins
25
- -input
26
- -list
27
- -lock
28
- -refresh
29
- -upgrade
30
- -verify-plugins
31
- -write
32
- ]
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
+ ]
33
36
  ).freeze
34
37
 
35
- FLAG_SWITCHES =
38
+ FLAG_OPTIONS =
36
39
  Set.new(
37
40
  %w[
38
- -allow-missing
39
- -allow-missing-config
40
- -check
41
- -compact-warnings
42
- -destroy
43
- -detailed-exitcode
44
- -diff
45
- -draw-cycles
46
- -force
47
- -force-copy
48
- -ignore-remote-version
49
- -json
50
- -no-color
51
- -raw
52
- -reconfigure
53
- -recursive
54
- -update
55
- ]
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
+ ]
56
59
  ).freeze
57
60
 
58
- OVERRIDE_SWITCHES =
61
+ OVERRIDE_OPTIONS =
59
62
  {
60
63
  config: :directory,
61
64
  out: :plan
62
65
  }.freeze
63
66
 
64
- def self.from(values, switches)
65
- new(values, switches).from
67
+ def self.from(names, parameters)
68
+ new(names, parameters).from
66
69
  end
67
70
 
68
71
  private_class_method :new
69
72
 
70
- def initialize(values, switches)
71
- @switches = switches.map { |switch| Switch.new(switch) }
72
- @values = values
73
+ def initialize(names, parameters)
74
+ @names = names.map { |name| Name.new(name) }
75
+ @parameters = parameters
73
76
  end
74
77
 
75
78
  def from
76
- switches.each_with_object([]) do |switch, options|
77
- options.append(*options_from_switch(switch))
79
+ names.each_with_object([]) do |name, options|
80
+ options.append(*options_from_name(name))
78
81
  end
79
82
  end
80
83
 
81
84
  private
82
85
 
83
- attr_reader :switches, :values
86
+ attr_reader :names, :parameters
84
87
 
85
- def options_from_switch(switch)
86
- return plural_options(switch) if PLURAL_SWITCHES.include?(switch)
87
- return boolean_option(switch) if BOOLEAN_SWITCHES.include?(switch)
88
- return flag_option(switch) if FLAG_SWITCHES.include?(switch)
89
- return override_option(switch) if OVERRIDE_SWITCHES.key?(switch.as_key)
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)
90
93
 
91
- standard_option(switch, switch.as_key)
94
+ standard_option(name, name.as_key)
92
95
  end
93
96
 
94
- def boolean_option(switch)
95
- [Boolean.new(switch.to_s, values[switch.as_key])]
97
+ def boolean_option(name)
98
+ [Types::Boolean.new(name.to_s, parameters[name.as_key])]
96
99
  end
97
100
 
98
- def flag_option(switch)
99
- [Flag.new(switch.to_s, values[switch.as_key])]
101
+ def flag_option(name)
102
+ [Types::Flag.new(name.to_s, parameters[name.as_key])]
100
103
  end
101
104
 
102
- def standard_option(switch, hash_key)
103
- [Standard.new(switch.to_s, values[hash_key])]
105
+ def standard_option(name, hash_key)
106
+ [Types::Standard.new(name.to_s, parameters[hash_key])]
104
107
  end
105
108
 
106
- def override_option(switch)
107
- standard_option(switch, OVERRIDE_SWITCHES[switch.as_key])
109
+ def override_option(name)
110
+ standard_option(name, OVERRIDE_OPTIONS[name.as_key])
108
111
  end
109
112
 
110
- def plural_options(switch)
111
- standard_option(switch.to_s, switch.as_key) +
112
- standard_option(switch.to_s, switch.as_plural_key)
113
+ def plural_options(name)
114
+ standard_option(name.to_s, name.as_key) +
115
+ standard_option(name.to_s, name.as_plural_key)
113
116
  end
114
117
  end
115
118
  end
@@ -1,12 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RubyTerraform
2
4
  module Options
3
- class Switch
4
- def initialize(switch)
5
- @switch_without_prefix = switch[0] == '-' ? switch[1..] : switch
5
+ class Name
6
+ def initialize(name)
7
+ @name = name
8
+ end
9
+
10
+ def without_prefix
11
+ @name[0] == '-' ? @name[1..] : @name
6
12
  end
7
13
 
8
14
  def to_s
9
- "-#{switch_without_prefix}"
15
+ "-#{without_prefix}"
10
16
  end
11
17
 
12
18
  def as_key
@@ -31,10 +37,8 @@ module RubyTerraform
31
37
 
32
38
  private
33
39
 
34
- attr_reader :switch_without_prefix
35
-
36
40
  def snake_case
37
- switch_without_prefix.gsub('-', '_')
41
+ without_prefix.gsub('-', '_')
38
42
  end
39
43
  end
40
44
  end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyTerraform
4
+ module Options
5
+ module Types
6
+ class Base
7
+ def initialize(name, value)
8
+ @name = name
9
+ coerce_value(value)
10
+ end
11
+
12
+ 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
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+ require_relative '../values/boolean'
5
+
6
+ module RubyTerraform
7
+ module Options
8
+ module Types
9
+ class Boolean < Base
10
+ include Values::Boolean
11
+
12
+ def apply(builder)
13
+ builder.with_option(name, value)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+ require_relative '../values/boolean'
5
+
6
+ module RubyTerraform
7
+ module Options
8
+ module Types
9
+ class Flag < Base
10
+ include Values::Boolean
11
+
12
+ def apply(builder)
13
+ value ? builder.with_flag(name) : builder
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+
5
+ require_relative 'base'
6
+
7
+ module RubyTerraform
8
+ module Options
9
+ module Types
10
+ class Standard < Base
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)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end