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

Sign up to get free protection for your applications and to get access to all the features.
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