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

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -0
  3. data/Gemfile.lock +8 -5
  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 +50 -3
  8. data/lib/ruby_terraform/commands.rb +31 -8
  9. data/lib/ruby_terraform/commands/apply.rb +29 -10
  10. data/lib/ruby_terraform/commands/base.rb +33 -30
  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 +28 -8
  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 +35 -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 +119 -0
  50. data/lib/ruby_terraform/options/name.rb +45 -0
  51. data/lib/ruby_terraform/{command_line/option → options/types}/base.rb +8 -6
  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/{command_line/option → options/types}/standard.rb +14 -11
  55. data/lib/ruby_terraform/{command_line/option/boolean_value.rb → options/values/boolean.rb} +7 -5
  56. data/lib/ruby_terraform/output.rb +10 -7
  57. data/lib/ruby_terraform/version.rb +3 -1
  58. data/ruby_terraform.gemspec +58 -0
  59. metadata +50 -13
  60. data/lib/ruby_terraform/command_line/builder.rb +0 -55
  61. data/lib/ruby_terraform/command_line/option/boolean.rb +0 -16
  62. data/lib/ruby_terraform/command_line/option/flag.rb +0 -16
  63. data/lib/ruby_terraform/command_line/option/switch.rb +0 -43
  64. data/lib/ruby_terraform/command_line/options_factory.rb +0 -79
  65. data/lib/ruby_terraform/commands/workspace.rb +0 -24
@@ -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 WorkspaceDelete < Base
9
+ include RubyTerraform::Options::Common
10
+
11
+ def subcommands
12
+ %w[workspace delete]
13
+ end
14
+
15
+ def options
16
+ %w[
17
+ -force
18
+ -lock
19
+ -lock-timeout
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 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
@@ -0,0 +1,119 @@
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'
7
+
8
+ module RubyTerraform
9
+ module Options
10
+ 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
76
+ end
77
+
78
+ def from
79
+ names.each_with_object([]) do |name, options|
80
+ options.append(*options_from_name(name))
81
+ end
82
+ end
83
+
84
+ private
85
+
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)
116
+ end
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyTerraform
4
+ module Options
5
+ class Name
6
+ def initialize(name)
7
+ @name = name
8
+ end
9
+
10
+ def without_prefix
11
+ @name[0] == '-' ? @name[1..] : @name
12
+ end
13
+
14
+ def to_s
15
+ "-#{without_prefix}"
16
+ end
17
+
18
+ def as_key
19
+ snake_case.to_sym
20
+ end
21
+
22
+ def as_plural_key
23
+ "#{snake_case}s".to_sym
24
+ end
25
+
26
+ def ==(other)
27
+ to_s == other
28
+ end
29
+
30
+ def eql?(other)
31
+ to_s == other
32
+ end
33
+
34
+ def hash
35
+ to_s.hash
36
+ end
37
+
38
+ private
39
+
40
+ def snake_case
41
+ without_prefix.gsub('-', '_')
42
+ end
43
+ end
44
+ end
45
+ end
@@ -1,19 +1,21 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RubyTerraform
2
- module CommandLine
3
- module Option
4
+ module Options
5
+ module Types
4
6
  class Base
5
- def initialize(switch, value)
6
- @switch = switch
7
+ def initialize(name, value)
8
+ @name = name
7
9
  coerce_value(value)
8
10
  end
9
11
 
10
- def add_to_subcommand(_sub)
12
+ def apply(_builder)
11
13
  raise 'not implemented'
12
14
  end
13
15
 
14
16
  private
15
17
 
16
- attr_reader :switch, :value
18
+ attr_reader :name, :value
17
19
 
18
20
  def coerce_value(value)
19
21
  @value = value
@@ -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
@@ -1,25 +1,28 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'json'
4
+
2
5
  require_relative 'base'
3
6
 
4
7
  module RubyTerraform
5
- module CommandLine
6
- module Option
8
+ module Options
9
+ module Types
7
10
  class Standard < Base
8
- def add_to_subcommand(sub)
11
+ def apply(builder)
9
12
  if value.respond_to?(:keys)
10
- add_hash_to_subcommand(sub)
13
+ apply_hash(builder)
11
14
  elsif value.respond_to?(:each)
12
- add_array_to_subcommand(sub)
15
+ apply_array(builder)
13
16
  else
14
- sub.with_option(switch, value)
17
+ builder.with_option(name, value)
15
18
  end
16
19
  end
17
20
 
18
21
  private
19
22
 
20
- def add_hash_to_subcommand(sub)
21
- sub.with_repeated_option(
22
- switch,
23
+ def apply_hash(builder)
24
+ builder.with_repeated_option(
25
+ name,
23
26
  value.map do |hash_key, hash_value|
24
27
  "'#{hash_key}=#{as_string(hash_value)}'"
25
28
  end,
@@ -27,8 +30,8 @@ module RubyTerraform
27
30
  )
28
31
  end
29
32
 
30
- def add_array_to_subcommand(sub)
31
- sub.with_repeated_option(switch, value)
33
+ def apply_array(builder)
34
+ builder.with_repeated_option(name, value)
32
35
  end
33
36
 
34
37
  def as_string(value)