ruby-terraform 0.65.0.pre.7 → 0.65.0.pre.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -0
  3. data/Gemfile.lock +11 -6
  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 +61 -4
  8. data/lib/ruby_terraform/commands.rb +31 -8
  9. data/lib/ruby_terraform/commands/apply.rb +19 -12
  10. data/lib/ruby_terraform/commands/base.rb +32 -39
  11. data/lib/ruby_terraform/commands/clean.rb +4 -2
  12. data/lib/ruby_terraform/commands/destroy.rb +24 -13
  13. data/lib/ruby_terraform/commands/force_unlock.rb +24 -0
  14. data/lib/ruby_terraform/commands/format.rb +16 -12
  15. data/lib/ruby_terraform/commands/get.rb +13 -8
  16. data/lib/ruby_terraform/commands/graph.rb +24 -0
  17. data/lib/ruby_terraform/commands/import.rb +22 -11
  18. data/lib/ruby_terraform/commands/init.rb +21 -9
  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 +17 -15
  22. data/lib/ruby_terraform/commands/plan.rb +20 -9
  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 +23 -8
  28. data/lib/ruby_terraform/commands/remote_config.rb +8 -6
  29. data/lib/ruby_terraform/commands/show.rb +13 -9
  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 +14 -13
  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 +28 -3
  48. data/lib/ruby_terraform/options/common.rb +11 -0
  49. data/lib/ruby_terraform/options/definition.rb +170 -0
  50. data/lib/ruby_terraform/options/definitions.rb +103 -0
  51. data/lib/ruby_terraform/options/factory.rb +12 -101
  52. data/lib/ruby_terraform/options/name.rb +13 -19
  53. data/lib/ruby_terraform/options/types.rb +27 -0
  54. data/lib/ruby_terraform/options/types/base.rb +8 -13
  55. data/lib/ruby_terraform/options/types/flag.rb +3 -3
  56. data/lib/ruby_terraform/options/types/standard.rb +3 -27
  57. data/lib/ruby_terraform/options/values.rb +38 -0
  58. data/lib/ruby_terraform/options/values/base.rb +15 -0
  59. data/lib/ruby_terraform/options/values/boolean.rb +15 -11
  60. data/lib/ruby_terraform/options/values/complex.rb +19 -0
  61. data/lib/ruby_terraform/options/values/key_value.rb +21 -0
  62. data/lib/ruby_terraform/options/values/string.rb +17 -0
  63. data/lib/ruby_terraform/output.rb +9 -7
  64. data/lib/ruby_terraform/version.rb +3 -1
  65. data/ruby_terraform.gemspec +59 -0
  66. metadata +64 -6
  67. data/lib/ruby_terraform/commands/workspace.rb +0 -24
  68. data/lib/ruby_terraform/options/types/boolean.rb +0 -16
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+ require_relative '../options/common'
5
+
6
+ module RubyTerraform
7
+ module Commands
8
+ class Untaint < Base
9
+ include RubyTerraform::Options::Common
10
+
11
+ def subcommands
12
+ %w[untaint]
13
+ end
14
+
15
+ def options
16
+ %w[
17
+ -allow-missing
18
+ -backup
19
+ -lock
20
+ -lock-timeout
21
+ -no-color
22
+ -state
23
+ -state-out
24
+ -ignore-remote-version
25
+ ] + super
26
+ end
27
+
28
+ def arguments(parameters)
29
+ [parameters[:name]]
30
+ end
31
+
32
+ def parameter_overrides(parameters)
33
+ { backup: parameters[:no_backup] ? '-' : parameters[:backup] }
34
+ end
35
+ end
36
+ end
37
+ end
@@ -1,28 +1,29 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base'
4
+ require_relative '../options/common'
2
5
 
3
6
  module RubyTerraform
4
7
  module Commands
5
8
  class Validate < Base
6
- def switches
9
+ include RubyTerraform::Options::Common
10
+
11
+ def subcommands
12
+ %w[validate]
13
+ end
14
+
15
+ def options
7
16
  %w[
8
- -check-variables
9
17
  -json
10
18
  -no-color
11
- -state
12
- -var
13
- -var-file
14
- ]
15
- end
16
-
17
- def subcommands(_values)
18
- %w[validate]
19
+ ] + super
19
20
  end
20
21
 
21
- def arguments(values)
22
- [values[:directory]]
22
+ def arguments(parameters)
23
+ [parameters[:directory]]
23
24
  end
24
25
 
25
- def option_default_values(_opts)
26
+ def parameter_defaults(_parameters)
26
27
  { vars: {}, var_files: [] }
27
28
  end
28
29
  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 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
@@ -1,5 +1,30 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'options/name'
2
- require_relative 'options/types/flag'
3
- require_relative 'options/types/boolean'
4
- require_relative 'options/types/standard'
4
+ require_relative 'options/types'
5
+ require_relative 'options/values'
6
+ require_relative 'options/definition'
5
7
  require_relative 'options/factory'
8
+ require_relative 'options/common'
9
+
10
+ module RubyTerraform
11
+ module Options
12
+ def self.name(name)
13
+ Name.new(name)
14
+ end
15
+
16
+ def self.definition(opts)
17
+ Definition.new(opts)
18
+ end
19
+
20
+ def self.types
21
+ Types
22
+ end
23
+
24
+ def self.values
25
+ Values
26
+ end
27
+ end
28
+ end
29
+
30
+ require_relative 'options/definitions'
@@ -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,170 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'immutable-struct'
4
+
5
+ require_relative 'name'
6
+ require_relative 'types'
7
+ require_relative 'values'
8
+
9
+ module RubyTerraform
10
+ module Options
11
+ # rubocop:disable Metrics/ClassLength
12
+ class Definition < ImmutableStruct.new(
13
+ :name,
14
+ :option_type,
15
+ :value_type,
16
+ :override_keys,
17
+ :extra_keys,
18
+ :separator,
19
+ :repeatable?
20
+ )
21
+ def initialize(opts) # rubocop:disable Metrics/MethodLength
22
+ raise 'Missing name.' unless opts[:name]
23
+
24
+ super(
25
+ name: Name.new(opts[:name]),
26
+ option_type: Types.resolve(opts[:option_type]) || Types::Standard,
27
+ value_type: Values.resolve(opts[:value_type]) || Values::String,
28
+ repeatable: opts[:repeatable] || false,
29
+ separator: opts[:separator],
30
+ extra_keys:
31
+ { singular: [], plural: [] }
32
+ .merge(opts[:extra_keys] || {}),
33
+ override_keys:
34
+ { singular: nil, plural: nil }
35
+ .merge(opts[:override_keys] || {})
36
+ )
37
+ end
38
+
39
+ def matches?(name)
40
+ @name == Name.new(name)
41
+ end
42
+
43
+ def build(parameters)
44
+ build_singular_options(parameters) + build_plural_options(parameters)
45
+ end
46
+
47
+ private
48
+
49
+ def resolved_singular_key
50
+ if override_keys[:singular] == false
51
+ nil
52
+ else
53
+ override_keys[:singular] || name.as_singular_key
54
+ end
55
+ end
56
+
57
+ def all_singular_keys
58
+ ([resolved_singular_key] + extra_keys[:singular]).compact
59
+ end
60
+
61
+ def resolved_plural_key
62
+ if override_keys[:plural] == false
63
+ nil
64
+ else
65
+ override_keys[:plural] || name.as_plural_key
66
+ end
67
+ end
68
+
69
+ def all_plural_keys
70
+ ([resolved_plural_key] + extra_keys[:plural]).compact
71
+ end
72
+
73
+ def too_many_values?(values)
74
+ !repeatable? && values.length > 1
75
+ end
76
+
77
+ def values(parameters, keys)
78
+ keys.map { |k| parameters[k] }.compact
79
+ end
80
+
81
+ def needs_plural?(value)
82
+ repeatable? && !value.nil?
83
+ end
84
+
85
+ def only_singular?(value)
86
+ !needs_plural?(value)
87
+ end
88
+
89
+ def key_valued?(value)
90
+ value.respond_to?(:keys)
91
+ end
92
+
93
+ def multi_valued?(value)
94
+ value.respond_to?(:each)
95
+ end
96
+
97
+ def build_option(value)
98
+ option_type.new(name, value, separator: separator)
99
+ end
100
+
101
+ def build_value(value)
102
+ value_type.new(value)
103
+ end
104
+
105
+ def build_key_value(key, value)
106
+ Values::KeyValue.new(key, build_value(value))
107
+ end
108
+
109
+ def build_singular(value)
110
+ build_single_option(value)
111
+ end
112
+
113
+ def build_singulars(values)
114
+ values.map { |p| build_singular(p) }.flatten
115
+ end
116
+
117
+ def build_singular_options(parameters)
118
+ keys = all_singular_keys
119
+ values = values(parameters, keys)
120
+
121
+ if too_many_values?(values)
122
+ raise "Multiple values provided for '#{name}' " \
123
+ "(with keys #{keys}) and option not repeatable."
124
+ end
125
+
126
+ build_singulars(values)
127
+ end
128
+
129
+ def build_plural(value)
130
+ if only_singular?(value)
131
+ build_no_options
132
+ elsif key_valued?(value)
133
+ build_key_value_options(value)
134
+ elsif multi_valued?(value)
135
+ build_multiple_options(value)
136
+ else
137
+ build_single_option(value)
138
+ end
139
+ end
140
+
141
+ def build_plurals(values)
142
+ values.map { |p| build_plural(p) }.flatten
143
+ end
144
+
145
+ def build_plural_options(parameters)
146
+ keys = all_plural_keys
147
+ values = values(parameters, keys)
148
+
149
+ build_plurals(values)
150
+ end
151
+
152
+ def build_key_value_options(value)
153
+ value.map { |k, v| build_option(build_key_value(k, v)) }
154
+ end
155
+
156
+ def build_multiple_options(value)
157
+ value.map { |v| build_option(build_value(v)) }
158
+ end
159
+
160
+ def build_single_option(value)
161
+ [build_option(build_value(value))]
162
+ end
163
+
164
+ def build_no_options
165
+ []
166
+ end
167
+ end
168
+ # rubocop:enable Metrics/ClassLength
169
+ end
170
+ end