ruby-terraform 0.65.0.pre.12 → 1.0.0

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 (53) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +23 -17
  3. data/README.md +148 -414
  4. data/Rakefile +25 -0
  5. data/lib/ruby_terraform.rb +1365 -41
  6. data/lib/ruby_terraform/commands.rb +0 -2
  7. data/lib/ruby_terraform/commands/apply.rb +78 -4
  8. data/lib/ruby_terraform/commands/base.rb +13 -2
  9. data/lib/ruby_terraform/commands/destroy.rb +71 -4
  10. data/lib/ruby_terraform/commands/force_unlock.rb +33 -3
  11. data/lib/ruby_terraform/commands/format.rb +45 -2
  12. data/lib/ruby_terraform/commands/get.rb +35 -2
  13. data/lib/ruby_terraform/commands/graph.rb +48 -2
  14. data/lib/ruby_terraform/commands/import.rb +98 -3
  15. data/lib/ruby_terraform/commands/init.rb +84 -3
  16. data/lib/ruby_terraform/commands/login.rb +26 -2
  17. data/lib/ruby_terraform/commands/logout.rb +23 -2
  18. data/lib/ruby_terraform/commands/output.rb +34 -2
  19. data/lib/ruby_terraform/commands/plan.rb +72 -3
  20. data/lib/ruby_terraform/commands/providers.rb +30 -2
  21. data/lib/ruby_terraform/commands/providers_lock.rb +72 -3
  22. data/lib/ruby_terraform/commands/providers_mirror.rb +44 -2
  23. data/lib/ruby_terraform/commands/providers_schema.rb +21 -2
  24. data/lib/ruby_terraform/commands/refresh.rb +70 -3
  25. data/lib/ruby_terraform/commands/show.rb +26 -3
  26. data/lib/ruby_terraform/commands/state_list.rb +54 -3
  27. data/lib/ruby_terraform/commands/state_move.rb +64 -6
  28. data/lib/ruby_terraform/commands/state_pull.rb +24 -2
  29. data/lib/ruby_terraform/commands/state_push.rb +49 -3
  30. data/lib/ruby_terraform/commands/state_remove.rb +55 -7
  31. data/lib/ruby_terraform/commands/state_replace_provider.rb +39 -6
  32. data/lib/ruby_terraform/commands/state_show.rb +26 -2
  33. data/lib/ruby_terraform/commands/taint.rb +63 -2
  34. data/lib/ruby_terraform/commands/untaint.rb +55 -2
  35. data/lib/ruby_terraform/commands/validate.rb +51 -6
  36. data/lib/ruby_terraform/commands/workspace_delete.rb +29 -7
  37. data/lib/ruby_terraform/commands/workspace_list.rb +21 -6
  38. data/lib/ruby_terraform/commands/workspace_new.rb +28 -7
  39. data/lib/ruby_terraform/commands/workspace_select.rb +23 -7
  40. data/lib/ruby_terraform/commands/workspace_show.rb +17 -2
  41. data/lib/ruby_terraform/options.rb +1 -1
  42. data/lib/ruby_terraform/options/definition.rb +6 -2
  43. data/lib/ruby_terraform/options/definitions.rb +12 -3
  44. data/lib/ruby_terraform/options/{common.rb → global.rb} +2 -1
  45. data/lib/ruby_terraform/options/types.rb +0 -1
  46. data/lib/ruby_terraform/options/types/flag.rb +8 -4
  47. data/lib/ruby_terraform/options/types/standard.rb +20 -6
  48. data/lib/ruby_terraform/version.rb +1 -1
  49. data/ruby_terraform.gemspec +3 -2
  50. metadata +25 -14
  51. data/lib/ruby_terraform/commands/clean.rb +0 -26
  52. data/lib/ruby_terraform/commands/remote_config.rb +0 -25
  53. data/lib/ruby_terraform/options/types/base.rb +0 -19
@@ -1,23 +1,39 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'base'
4
- require_relative '../options/common'
4
+ require_relative '../options/global'
5
5
 
6
6
  module RubyTerraform
7
7
  module Commands
8
+ # Wraps the +terraform workspace select+ command which selects a workspace.
9
+ #
10
+ # For options accepted on construction, see {#initialize}.
11
+ #
12
+ # When executing an instance of {WorkspaceSelect} via {#execute}, the
13
+ # following options are supported:
14
+ #
15
+ # * +:name+: the name of the workspace to select; required.
16
+ # * +:directory+: the path to a directory containing terraform configuration
17
+ # (deprecated in terraform 0.14, removed in terraform 0.15, use +:chdir+
18
+ # instead).
19
+ # * +:chdir+: the path of a working directory to switch to before executing
20
+ # the given subcommand.
21
+ #
22
+ # @example BasicInvocation
23
+ # RubyTerraform::Commands::WorkspaceSelect.new.execute(
24
+ # name: 'example')
25
+ #
8
26
  class WorkspaceSelect < Base
9
- include RubyTerraform::Options::Common
27
+ include RubyTerraform::Options::Global
10
28
 
29
+ # @!visibility private
11
30
  def subcommands
12
31
  %w[workspace select]
13
32
  end
14
33
 
34
+ # @!visibility private
15
35
  def arguments(parameters)
16
- [parameters[:workspace], parameters[:directory]]
17
- end
18
-
19
- def parameter_defaults(_parameters)
20
- { directory: nil }
36
+ [parameters[:name], parameters[:directory]]
21
37
  end
22
38
  end
23
39
  end
@@ -1,13 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'base'
4
- require_relative '../options/common'
4
+ require_relative '../options/global'
5
5
 
6
6
  module RubyTerraform
7
7
  module Commands
8
+ # Wraps the +terraform workspace show+ command which shows the name of the
9
+ # current workspace.
10
+ #
11
+ # For options accepted on construction, see {#initialize}.
12
+ #
13
+ # When executing an instance of {WorkspaceSelect} via {#execute}, the
14
+ # following options are supported:
15
+ #
16
+ # * +:chdir+: the path of a working directory to switch to before executing
17
+ # the given subcommand.
18
+ #
19
+ # @example Basic Invocation
20
+ # RubyTerraform::Commands::WorkspaceShow.new.execute
21
+ #
8
22
  class WorkspaceShow < Base
9
- include RubyTerraform::Options::Common
23
+ include RubyTerraform::Options::Global
10
24
 
25
+ # @!visibility private
11
26
  def subcommands
12
27
  %w[workspace show]
13
28
  end
@@ -5,7 +5,7 @@ require_relative 'options/types'
5
5
  require_relative 'options/values'
6
6
  require_relative 'options/definition'
7
7
  require_relative 'options/factory'
8
- require_relative 'options/common'
8
+ require_relative 'options/global'
9
9
 
10
10
  module RubyTerraform
11
11
  module Options
@@ -16,9 +16,11 @@ module RubyTerraform
16
16
  :override_keys,
17
17
  :extra_keys,
18
18
  :separator,
19
+ :placement,
19
20
  :repeatable?
20
21
  )
21
- def initialize(opts) # rubocop:disable Metrics/MethodLength
22
+ # rubocop:disable Metrics/MethodLength
23
+ def initialize(opts)
22
24
  raise 'Missing name.' unless opts[:name]
23
25
 
24
26
  super(
@@ -27,6 +29,7 @@ module RubyTerraform
27
29
  value_type: Values.resolve(opts[:value_type]) || Values::String,
28
30
  repeatable: opts[:repeatable] || false,
29
31
  separator: opts[:separator],
32
+ placement: opts[:placement],
30
33
  extra_keys:
31
34
  { singular: [], plural: [] }
32
35
  .merge(opts[:extra_keys] || {}),
@@ -35,6 +38,7 @@ module RubyTerraform
35
38
  .merge(opts[:override_keys] || {})
36
39
  )
37
40
  end
41
+ # rubocop:enable Metrics/MethodLength
38
42
 
39
43
  def matches?(name)
40
44
  @name == Name.new(name)
@@ -95,7 +99,7 @@ module RubyTerraform
95
99
  end
96
100
 
97
101
  def build_option(value)
98
- option_type.new(name, value, separator: separator)
102
+ option_type.new(name, value, separator: separator, placement: placement)
99
103
  end
100
104
 
101
105
  def build_value(value)
@@ -22,7 +22,7 @@ module RubyTerraform
22
22
  end,
23
23
 
24
24
  # string repeatable options
25
- %w[-var-file -target -platform].map do |o|
25
+ %w[-var-file -target -platform -plugin-dir].map do |o|
26
26
  definition(
27
27
  name: o, option_type: :standard, value_type: :string,
28
28
  repeatable: true
@@ -56,6 +56,7 @@ module RubyTerraform
56
56
  -detailed-exitcode
57
57
  -diff
58
58
  -draw-cycles
59
+ -dry-run
59
60
  -force
60
61
  -force-copy
61
62
  -ignore-remote-version
@@ -73,14 +74,15 @@ module RubyTerraform
73
74
  %w[
74
75
  -backup
75
76
  -backup-out
76
- -chdir
77
77
  -from-module
78
78
  -fs-mirror
79
+ -id
79
80
  -lock-timeout
81
+ -lockfile
80
82
  -module-depth
81
83
  -net-mirror
82
84
  -parallelism
83
- -plugin-dir
85
+ -plan
84
86
  -provider
85
87
  -state
86
88
  -state-out
@@ -97,6 +99,13 @@ module RubyTerraform
97
99
  definition(
98
100
  name: '-out', option_type: :standard, value_type: :string,
99
101
  extra_keys: { singular: %i[plan] }
102
+ ),
103
+
104
+ # global options
105
+ definition(
106
+ name: '-chdir', option_type: :standard, value_type: :string,
107
+ placement: :after_command,
108
+ extra_keys: { singular: %i[working_directory] }
100
109
  )
101
110
  ].flatten.freeze
102
111
  end
@@ -2,7 +2,8 @@
2
2
 
3
3
  module RubyTerraform
4
4
  module Options
5
- module Common
5
+ module Global
6
+ # @!visibility private
6
7
  def options
7
8
  %w[-chdir]
8
9
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'types/base'
4
3
  require_relative 'types/standard'
5
4
  require_relative 'types/flag'
6
5
 
@@ -1,12 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'base'
4
- require_relative '../values/boolean'
5
-
6
3
  module RubyTerraform
7
4
  module Options
8
5
  module Types
9
- class Flag < Base
6
+ class Flag < ImmutableStruct.new(
7
+ :name,
8
+ :value
9
+ )
10
+ def initialize(name, value, **_opts)
11
+ super(name: name, value: value)
12
+ end
13
+
10
14
  def apply(builder)
11
15
  value.resolve ? builder.with_flag(name) : builder
12
16
  end
@@ -1,15 +1,29 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'json'
4
-
5
- require_relative 'base'
6
-
7
3
  module RubyTerraform
8
4
  module Options
9
5
  module Types
10
- class Standard < Base
6
+ class Standard < ImmutableStruct.new(
7
+ :name,
8
+ :value,
9
+ :separator,
10
+ :placement
11
+ )
12
+ def initialize(name, value, **opts)
13
+ super(
14
+ name: name, value: value,
15
+ separator: opts[:separator],
16
+ placement: opts[:placement]
17
+ )
18
+ end
19
+
11
20
  def apply(builder)
12
- builder.with_option(name, value.render, separator: separator)
21
+ builder.with_option(
22
+ name,
23
+ value.render,
24
+ separator: separator,
25
+ placement: placement
26
+ )
13
27
  end
14
28
  end
15
29
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyTerraform
4
- VERSION = '0.65.0.pre.12'
4
+ VERSION = '1.0.0'
5
5
  end
@@ -38,8 +38,8 @@ Gem::Specification.new do |spec|
38
38
 
39
39
  spec.required_ruby_version = '>= 2.6'
40
40
 
41
- spec.add_dependency 'immutable-struct', '>= 2.4'
42
- spec.add_dependency 'lino', '>= 2.5'
41
+ spec.add_dependency 'immutable-struct', '~> 2.4'
42
+ spec.add_dependency 'lino', '~> 2.7'
43
43
 
44
44
  spec.add_development_dependency 'bundler', '~> 2.0'
45
45
  spec.add_development_dependency 'faker', '~> 2.17'
@@ -56,4 +56,5 @@ Gem::Specification.new do |spec|
56
56
  spec.add_development_dependency 'rubocop-rake', '~> 0.5'
57
57
  spec.add_development_dependency 'rubocop-rspec', '~> 2.2'
58
58
  spec.add_development_dependency 'simplecov', '~> 0.21'
59
+ spec.add_development_dependency 'yard', '~> 0.9'
59
60
  end
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-terraform
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.65.0.pre.12
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Toby Clemson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-04-14 00:00:00.000000000 Z
11
+ date: 2021-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: immutable-struct
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '2.4'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.4'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: lino
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '2.5'
33
+ version: '2.7'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '2.5'
40
+ version: '2.7'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -248,6 +248,20 @@ dependencies:
248
248
  - - "~>"
249
249
  - !ruby/object:Gem::Version
250
250
  version: '0.21'
251
+ - !ruby/object:Gem::Dependency
252
+ name: yard
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - "~>"
256
+ - !ruby/object:Gem::Version
257
+ version: '0.9'
258
+ type: :development
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - "~>"
263
+ - !ruby/object:Gem::Version
264
+ version: '0.9'
251
265
  description: Wraps the Terraform CLI so that Terraform can be invoked from a Ruby
252
266
  script or Rakefile.
253
267
  email:
@@ -269,7 +283,6 @@ files:
269
283
  - lib/ruby_terraform/commands.rb
270
284
  - lib/ruby_terraform/commands/apply.rb
271
285
  - lib/ruby_terraform/commands/base.rb
272
- - lib/ruby_terraform/commands/clean.rb
273
286
  - lib/ruby_terraform/commands/destroy.rb
274
287
  - lib/ruby_terraform/commands/force_unlock.rb
275
288
  - lib/ruby_terraform/commands/format.rb
@@ -286,7 +299,6 @@ files:
286
299
  - lib/ruby_terraform/commands/providers_mirror.rb
287
300
  - lib/ruby_terraform/commands/providers_schema.rb
288
301
  - lib/ruby_terraform/commands/refresh.rb
289
- - lib/ruby_terraform/commands/remote_config.rb
290
302
  - lib/ruby_terraform/commands/show.rb
291
303
  - lib/ruby_terraform/commands/state_list.rb
292
304
  - lib/ruby_terraform/commands/state_move.rb
@@ -306,13 +318,12 @@ files:
306
318
  - lib/ruby_terraform/errors.rb
307
319
  - lib/ruby_terraform/errors/execution_error.rb
308
320
  - lib/ruby_terraform/options.rb
309
- - lib/ruby_terraform/options/common.rb
310
321
  - lib/ruby_terraform/options/definition.rb
311
322
  - lib/ruby_terraform/options/definitions.rb
312
323
  - lib/ruby_terraform/options/factory.rb
324
+ - lib/ruby_terraform/options/global.rb
313
325
  - lib/ruby_terraform/options/name.rb
314
326
  - lib/ruby_terraform/options/types.rb
315
- - lib/ruby_terraform/options/types/base.rb
316
327
  - lib/ruby_terraform/options/types/flag.rb
317
328
  - lib/ruby_terraform/options/types/standard.rb
318
329
  - lib/ruby_terraform/options/values.rb
@@ -339,9 +350,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
339
350
  version: '2.6'
340
351
  required_rubygems_version: !ruby/object:Gem::Requirement
341
352
  requirements:
342
- - - ">"
353
+ - - ">="
343
354
  - !ruby/object:Gem::Version
344
- version: 1.3.1
355
+ version: '0'
345
356
  requirements: []
346
357
  rubygems_version: 3.0.1
347
358
  signing_key:
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'fileutils'
4
-
5
- module RubyTerraform
6
- module Commands
7
- class Clean
8
- attr_reader :logger
9
-
10
- def initialize(directory: nil, logger: nil)
11
- @directory = directory || '.terraform'
12
- @logger = logger || RubyTerraform.configuration.logger
13
- end
14
-
15
- def execute(parameters = {})
16
- directory = parameters[:directory] || @directory
17
- begin
18
- logger.info "Cleaning terraform directory '#{directory}'."
19
- FileUtils.rm_r(directory, secure: true)
20
- rescue Errno::ENOENT => e
21
- logger.error "Couldn't clean '#{directory}': #{e.message}"
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'base'
4
-
5
- module RubyTerraform
6
- module Commands
7
- class RemoteConfig < Base
8
- def subcommands
9
- %w[remote config]
10
- end
11
-
12
- def options
13
- %w[
14
- -backend
15
- -backend-config
16
- -no-color
17
- ]
18
- end
19
-
20
- def parameter_defaults(_parameters)
21
- { backend_config: {} }
22
- end
23
- end
24
- end
25
- end