ruby-terraform 0.65.0.pre.12 → 1.0.0

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