ruby-terraform 0.65.0.pre.15 → 1.0.0.pre.1

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 +15 -15
  3. data/README.md +148 -397
  4. data/Rakefile +25 -0
  5. data/lib/ruby_terraform.rb +707 -45
  6. data/lib/ruby_terraform/commands.rb +0 -2
  7. data/lib/ruby_terraform/commands/apply.rb +7 -7
  8. data/lib/ruby_terraform/commands/base.rb +4 -1
  9. data/lib/ruby_terraform/commands/destroy.rb +6 -5
  10. data/lib/ruby_terraform/commands/force_unlock.rb +6 -4
  11. data/lib/ruby_terraform/commands/format.rb +8 -4
  12. data/lib/ruby_terraform/commands/get.rb +6 -4
  13. data/lib/ruby_terraform/commands/graph.rb +11 -3
  14. data/lib/ruby_terraform/commands/import.rb +8 -7
  15. data/lib/ruby_terraform/commands/init.rb +16 -6
  16. data/lib/ruby_terraform/commands/login.rb +2 -2
  17. data/lib/ruby_terraform/commands/logout.rb +2 -2
  18. data/lib/ruby_terraform/commands/output.rb +2 -2
  19. data/lib/ruby_terraform/commands/plan.rb +6 -3
  20. data/lib/ruby_terraform/commands/providers.rb +9 -3
  21. data/lib/ruby_terraform/commands/providers_lock.rb +10 -7
  22. data/lib/ruby_terraform/commands/providers_mirror.rb +3 -3
  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 +3 -1
  43. data/lib/ruby_terraform/options/definitions.rb +12 -3
  44. data/lib/ruby_terraform/options/{common.rb → global.rb} +1 -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 +2 -2
  50. metadata +9 -12
  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,13 +1,35 @@
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 state pull+ command which pulls the state from its
9
+ # location, upgrades the local copy, and outputs it to stdout.
10
+ #
11
+ # This command "pulls" the current state and outputs it to stdout. As part
12
+ # of this process, Terraform will upgrade the state format of the local copy
13
+ # to the current version.
14
+ #
15
+ # The primary use of this is for state stored remotely. This command will
16
+ # still work with local state but is less useful for this.
17
+ #
18
+ # For options accepted on construction, see {#initialize}.
19
+ #
20
+ # When executing an instance of {StatePull} via {#execute}, the following
21
+ # options are supported:
22
+ #
23
+ # * +:chdir+: the path of a working directory to switch to before executing
24
+ # the given subcommand.
25
+ #
26
+ # @example Basic Invocation
27
+ # RubyTerraform::Commands::StatePull.new.execute
28
+ #
8
29
  class StatePull < Base
9
- include RubyTerraform::Options::Common
30
+ include RubyTerraform::Options::Global
10
31
 
32
+ # @!visibility private
11
33
  def subcommands
12
34
  %w[state pull]
13
35
  end
@@ -1,21 +1,67 @@
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 state push+ command which updates remote state from
9
+ # a local state file.
10
+ #
11
+ # This command "pushes" a local state and overwrites remote state with a
12
+ # local state file. The command will protect you against writing
13
+ # an older serial or a different state file lineage unless you pass +true+
14
+ # for the +:force+ option.
15
+ #
16
+ # This command works with local state (it will overwrite the local state),
17
+ # but is less useful for this use case.
18
+ #
19
+ # If +:path+ is +"-"+, then this command will read the state to push from
20
+ # stdin. Data from stdin is not streamed to the backend: it is loaded
21
+ # completely (until pipe close), verified, and then pushed.
22
+ #
23
+ # For options accepted on construction, see {#initialize}.
24
+ #
25
+ # When executing an instance of {StatePush} via {#execute}, the following
26
+ # options are supported:
27
+ #
28
+ # * +:path+: the path to the state file to push; when passed +"-"+ will
29
+ # read state from standard input.
30
+ # * +:chdir+: the path of a working directory to switch to before executing
31
+ # the given subcommand.
32
+ # * +:force+: when +true+, writes the state even if lineages don't match or
33
+ # the remote serial is higher; defaults to +false+.
34
+ # * +:lock+: when +true+, locks the state file when locking is supported;
35
+ # when +false+, does not lock the state file; defaults to +true+.
36
+ # * +:lock_timeout+: the duration to retry a state lock; defaults to +"0s"+.
37
+ # * +:ignore_remote_version+: whether or not to continue even if remote and
38
+ # local Terraform versions are incompatible; this may result in an
39
+ # unusable workspace, and should be used with extreme caution; defaults to
40
+ # +false+.
41
+ #
42
+ # @example Basic Invocation
43
+ # RubyTerraform::Commands::StatePush.new.execute(
44
+ # path: 'some/statefile.tfstate')
45
+ #
8
46
  class StatePush < Base
9
- include RubyTerraform::Options::Common
47
+ include RubyTerraform::Options::Global
10
48
 
49
+ # @!visibility private
11
50
  def subcommands
12
51
  %w[state push]
13
52
  end
14
53
 
54
+ # @!visibility private
15
55
  def options
16
- %w[-ignore-remote-version] + super
56
+ %w[
57
+ -force
58
+ -lock
59
+ -lock-timeout
60
+ -ignore-remote-version
61
+ ] + super
17
62
  end
18
63
 
64
+ # @!visibility private
19
65
  def arguments(parameters)
20
66
  [parameters[:path]]
21
67
  end
@@ -1,31 +1,79 @@
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 state rm+ command which removes one or more items
9
+ # from the Terraform state, causing Terraform to "forget" those items
10
+ # without first destroying them in the remote system.
11
+ #
12
+ # This command removes one or more resource instances from the Terraform
13
+ # state based on the addresses given. You can view and list the available
14
+ # instances with {StateList}.
15
+ #
16
+ # If you give the address of an entire module then all of the instances in
17
+ # that module and any of its child modules will be removed from the state.
18
+ #
19
+ # If you give the address of a resource that has "count" or "for_each" set,
20
+ # all of the instances of that resource will be removed from the state.
21
+ #
22
+ # For options accepted on construction, see {#initialize}.
23
+ #
24
+ # When executing an instance of {StateRemove} via {#execute}, the following
25
+ # options are supported:
26
+ #
27
+ # * +:address+: the module address or absolute resource address of the
28
+ # resource instance to remove; required unless +:addresses+ is supplied;
29
+ # if both +:address+ and +:addresses+ are provided, all addresses will be
30
+ # passed to Terraform.
31
+ # * +:addresses+: an array of module addresses or absolute resource
32
+ # addresses of the resource instances to remove; required unless
33
+ # +:address+ is supplied; if both +:address+ and +:addresses+ are
34
+ # provided, all addresses will be passed to Terraform.
35
+ # * +:chdir+: the path of a working directory to switch to before executing
36
+ # the given subcommand.
37
+ # * +:dry+run+: when +true+, prints out what would've been removed but
38
+ # doesn't actually remove anything; defaults to +false+.
39
+ # * +:backup+: the path where Terraform should write the backup state.
40
+ # * +:lock+: when +true+, locks the state file when locking is supported;
41
+ # when +false+, does not lock the state file; defaults to +true+.
42
+ # * +:lock_timeout+: the duration to retry a state lock; defaults to +"0s"+.
43
+ # * +:state+: the path to the state file to update; defaults to the current
44
+ # workspace state.
45
+ # * +:ignore_remote_version+: whether or not to continue even if remote and
46
+ # local Terraform versions are incompatible; this may result in an
47
+ # unusable workspace, and should be used with extreme caution; defaults to
48
+ # +false+.
49
+ #
50
+ # @example Basic Invocation
51
+ # RubyTerraform::Commands::StateRemove.new.execute(
52
+ # address: 'packet_device.worker')
53
+ #
8
54
  class StateRemove < Base
9
- include RubyTerraform::Options::Common
55
+ include RubyTerraform::Options::Global
10
56
 
57
+ # @!visibility private
11
58
  def subcommands
12
59
  %w[state rm]
13
60
  end
14
61
 
62
+ # @!visibility private
15
63
  def options
16
64
  %w[
65
+ -dry-run
17
66
  -backup
67
+ -lock
68
+ -lock-timeout
18
69
  -state
19
70
  -ignore-remote-version
20
71
  ] + super
21
72
  end
22
73
 
74
+ # @!visibility private
23
75
  def arguments(parameters)
24
- [parameters[:address]]
25
- end
26
-
27
- def parameter_overrides(parameters)
28
- { backup: parameters[:no_backup] ? '-' : parameters[:backup] }
76
+ [parameters[:address], parameters[:addresses]]
29
77
  end
30
78
  end
31
79
  end
@@ -1,17 +1,53 @@
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 state replace-provider+ command which replaces
9
+ # provider for resources in the Terraform state.
10
+ #
11
+ # For options accepted on construction, see {#initialize}.
12
+ #
13
+ # When executing an instance of {StateReplaceProvider} via {#execute}, the
14
+ # following options are supported:
15
+ #
16
+ # * +:from+: the fully qualified name of the provider to be replaced;
17
+ # required.
18
+ # * +:to+: the fully qualified name of the provider to replace with;
19
+ # required.
20
+ # * +:chdir+: the path of a working directory to switch to before executing
21
+ # the given subcommand.
22
+ # * +:auto_approve+: if +true+, skips interactive approval; defaults to
23
+ # +false+.
24
+ # * +:backup+: the path where Terraform should write the backup for the
25
+ # state file; this can't be disabled; if not set, Terraform will write it
26
+ # to the same path as the state file with a ".backup" extension.
27
+ # * +:lock+: when +true+, locks the state file when locking is supported;
28
+ # when +false+, does not lock the state file; defaults to +true+.
29
+ # * +:lock_timeout+: the duration to retry a state lock; defaults to +"0s"+.
30
+ # * +:state+: the path to the state file to update; defaults to the current
31
+ # workspace state.
32
+ # * +:ignore_remote_version+: whether or not to continue even if remote and
33
+ # local Terraform versions are incompatible; this may result in an
34
+ # unusable workspace, and should be used with extreme caution; defaults to
35
+ # +false+.
36
+ #
37
+ # @example Basic Invocation
38
+ # RubyTerraform::Commands::StateReplaceProvider.new.execute(
39
+ # from: 'hashicorp/aws',
40
+ # to: 'registry.acme.corp/acme/aws')
41
+ #
8
42
  class StateReplaceProvider < Base
9
- include RubyTerraform::Options::Common
43
+ include RubyTerraform::Options::Global
10
44
 
45
+ # @!visibility private
11
46
  def subcommands
12
47
  %w[state replace-provider]
13
48
  end
14
49
 
50
+ # @!visibility private
15
51
  def options
16
52
  %w[
17
53
  -auto-approve
@@ -23,13 +59,10 @@ module RubyTerraform
23
59
  ] + super
24
60
  end
25
61
 
62
+ # @!visibility private
26
63
  def arguments(parameters)
27
64
  [parameters[:from], parameters[:to]]
28
65
  end
29
-
30
- def parameter_overrides(parameters)
31
- { backup: parameters[:no_backup] ? '-' : parameters[:backup] }
32
- end
33
66
  end
34
67
  end
35
68
  end
@@ -1,21 +1,45 @@
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 state show+ command which shows the attributes of a
9
+ # resource in the Terraform state.
10
+ #
11
+ # This command shows the attributes of a single resource in the Terraform
12
+ # state. The +:address+ argument must be used to specify a single resource.
13
+ # You can view the list of available resources with {StateList}.
14
+ #
15
+ # For options accepted on construction, see {#initialize}.
16
+ #
17
+ # When executing an instance of {StateShow} via {#execute}, the following
18
+ # options are supported:
19
+ #
20
+ # * +:address+: the module address or absolute resource address of the
21
+ # resource instance to show; required.
22
+ # * +:chdir+: the path of a working directory to switch to before executing
23
+ # the given subcommand.
24
+ #
25
+ # @example Basic Invocation
26
+ # RubyTerraform::Commands::StateShow.new.execute(
27
+ # address: 'packet_device.worker')
28
+ #
8
29
  class StateShow < Base
9
- include RubyTerraform::Options::Common
30
+ include RubyTerraform::Options::Global
10
31
 
32
+ # @!visibility private
11
33
  def subcommands
12
34
  %w[state show]
13
35
  end
14
36
 
37
+ # @!visibility private
15
38
  def options
16
39
  %w[-state] + super
17
40
  end
18
41
 
42
+ # @!visibility private
19
43
  def arguments(parameters)
20
44
  [parameters[:address]]
21
45
  end
@@ -1,17 +1,76 @@
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 taint+ command which marks a resource instance as not
9
+ # fully functional.
10
+ #
11
+ # Terraform uses the term "tainted" to describe a resource instance which
12
+ # may not be fully functional, either because its creation partially failed
13
+ # or because you've manually marked it as such using this command.
14
+ #
15
+ # This will not modify your infrastructure directly, but subsequent
16
+ # Terraform plans will include actions to destroy the remote object and
17
+ # create a new object to replace it.
18
+ #
19
+ # You can remove the "taint" state from a resource instance using the
20
+ # {Untaint} command.
21
+ #
22
+ # The address is in the usual resource address syntax, such as:
23
+ #
24
+ # * +aws_instance.foo+
25
+ # * <tt>aws_instance.bar[1]</tt>
26
+ # * +module.foo.module.bar.aws_instance.baz+
27
+ #
28
+ # Use your shell's quoting or escaping syntax to ensure that the address
29
+ # will reach Terraform correctly, without any special interpretation.
30
+ #
31
+ # For options accepted on construction, see {#initialize}.
32
+ #
33
+ # When executing an instance of {Taint} via {#execute}, the following
34
+ # options are supported:
35
+ #
36
+ # * +:address+: the module address or absolute resource address of the
37
+ # resource instance to taint; required.
38
+ # * +:chdir+: the path of a working directory to switch to before executing
39
+ # the given subcommand.
40
+ # * +:allow_missing+: if +true+, the command will succeed (i.e., will not
41
+ # throw an {RubyTerraform::Errors::ExecutionError}) even if the resource
42
+ # is missing; defaults to +false+.
43
+ # * +:backup+: the path to backup the existing state file before modifying;
44
+ # defaults to the +:state_out+ path with +".backup"+ extension; set
45
+ # +:no_backup+ to +true+ to skip backups entirely.
46
+ # * +:lock+: when +true+, locks the state file when locking is supported;
47
+ # when +false+, does not lock the state file; defaults to +true+.
48
+ # * +:lock_timeout+: the duration to retry a state lock; defaults to +"0s"+.
49
+ # * +:no_backup+: when +true+, no backup file will be written; defaults to
50
+ # +false+.
51
+ # * +:state+: the path to the state file from which to read state and in
52
+ # which to store state (unless +:state_out+ is specified); defaults to
53
+ # +"terraform.tfstate"+.
54
+ # * +:state_out+: the path to write state to that is different than
55
+ # +:state+; this can be used to preserve the old state.
56
+ # * +:ignore_remote_version+: whether or not to continue even if remote and
57
+ # local Terraform versions are incompatible; this may result in an
58
+ # unusable workspace, and should be used with extreme caution; defaults to
59
+ # +false+.
60
+ #
61
+ # @example Basic Invocation
62
+ # RubyTerraform::Commands::Taint.new.execute(
63
+ # address: 'aws_security_group.allow_all')
64
+ #
8
65
  class Taint < Base
9
- include RubyTerraform::Options::Common
66
+ include RubyTerraform::Options::Global
10
67
 
68
+ # @!visibility private
11
69
  def subcommands
12
70
  %w[taint]
13
71
  end
14
72
 
73
+ # @!visibility private
15
74
  def options
16
75
  %w[
17
76
  -allow-missing
@@ -24,10 +83,12 @@ module RubyTerraform
24
83
  ] + super
25
84
  end
26
85
 
86
+ # @!visibility private
27
87
  def arguments(parameters)
28
88
  [parameters[:address]]
29
89
  end
30
90
 
91
+ # @!visibility private
31
92
  def parameter_overrides(parameters)
32
93
  { backup: parameters[:no_backup] ? '-' : parameters[:backup] }
33
94
  end
@@ -1,17 +1,68 @@
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 untaint+ command which removes the 'tainted' state
9
+ # from a resource instance.
10
+ #
11
+ # Terraform uses the term "tainted" to describe a resource instance
12
+ # which may not be fully functional, either because its creation partially
13
+ # failed or because you've manually marked it as such using the {Taint}
14
+ # command.
15
+ #
16
+ # This command removes that state from a resource instance, causing
17
+ # Terraform to see it as fully-functional and not in need of replacement.
18
+ #
19
+ # This will not modify your infrastructure directly. It only avoids
20
+ # Terraform planning to replace a tainted instance in a future operation.
21
+ #
22
+ # For options accepted on construction, see {#initialize}.
23
+ #
24
+ # When executing an instance of {Untaint} via {#execute}, the following
25
+ # options are supported:
26
+ #
27
+ # * +:name+: the name of the resource instance to untaint; required.
28
+ # * +:chdir+: the path of a working directory to switch to before executing
29
+ # the given subcommand.
30
+ # * +:allow_missing+: if +true+, the command will succeed (i.e., will not
31
+ # throw an {RubyTerraform::Errors::ExecutionError}) even if the resource
32
+ # is missing; defaults to +false+.
33
+ # * +:backup+: the path to backup the existing state file before modifying;
34
+ # defaults to the +:state_out+ path with +".backup"+ extension; set
35
+ # +:no_backup+ to +true+ to skip backups entirely.
36
+ # * +:lock+: when +true+, locks the state file when locking is supported;
37
+ # when +false+, does not lock the state file; defaults to +true+.
38
+ # * +:lock_timeout+: the duration to retry a state lock; defaults to +"0s"+.
39
+ # * +:no_backup+: when +true+, no backup file will be written; defaults to
40
+ # +false+.
41
+ # * +:no_color+: whether or not the output from the command should be in
42
+ # color; defaults to +false+.
43
+ # * +:state+: the path to the state file from which to read state and in
44
+ # which to store state (unless +:state_out+ is specified); defaults to
45
+ # +"terraform.tfstate"+.
46
+ # * +:state_out+: the path to write state to that is different than
47
+ # +:state+; this can be used to preserve the old state.
48
+ # * +:ignore_remote_version+: whether or not to continue even if remote and
49
+ # local Terraform versions are incompatible; this may result in an
50
+ # unusable workspace, and should be used with extreme caution; defaults to
51
+ # +false+.
52
+ #
53
+ # @example Basic Invocation
54
+ # RubyTerraform::Commands::Untaint.new.execute(
55
+ # name: 'aws_security_group.allow_all')
56
+ #
8
57
  class Untaint < Base
9
- include RubyTerraform::Options::Common
58
+ include RubyTerraform::Options::Global
10
59
 
60
+ # @!visibility private
11
61
  def subcommands
12
62
  %w[untaint]
13
63
  end
14
64
 
65
+ # @!visibility private
15
66
  def options
16
67
  %w[
17
68
  -allow-missing
@@ -25,10 +76,12 @@ module RubyTerraform
25
76
  ] + super
26
77
  end
27
78
 
79
+ # @!visibility private
28
80
  def arguments(parameters)
29
81
  [parameters[:name]]
30
82
  end
31
83
 
84
+ # @!visibility private
32
85
  def parameter_overrides(parameters)
33
86
  { backup: parameters[:no_backup] ? '-' : parameters[:backup] }
34
87
  end