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,18 +1,83 @@
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 plan+ command which generates a speculative execution
9
+ # plan, showing what actions Terraform would take to apply the current
10
+ # configuration. This command will not actually perform the planned actions.
11
+ #
12
+ # You can optionally save the plan to a file, which you can then pass to
13
+ # the {Apply} command to perform exactly the actions described in the plan.
14
+ #
15
+ # For options accepted on construction, see {#initialize}.
16
+ #
17
+ # When executing an instance of {Plan} via {#execute}, the following
18
+ # options are supported:
19
+ #
20
+ # * +:directory+: the path to a directory containing terraform
21
+ # configuration (deprecated in terraform 0.14, removed in terraform 0.15,
22
+ # use +:chdir+ instead).
23
+ # * +:chdir+: the path of a working directory to switch to before executing
24
+ # the given subcommand.
25
+ # * +:compact_warnings+: when +true+, if terraform produces any warnings
26
+ # that are not accompanied by errors, they are shown in a more compact
27
+ # form that includes only the summary messages; defaults to +false+.
28
+ # * +:destroy+: when +true+, a plan will be generated to destroy all
29
+ # resources managed by the given configuration and state; defaults to
30
+ # +false+.
31
+ # * +:detailed_exitcode+: whether or not to return detailed exit codes when
32
+ # the command exits; this will change the meaning of exit codes to:
33
+ # 0 - Succeeded, diff is empty (no changes); 1 - Errored; 2 - Succeeded,
34
+ # there is a diff; defaults to +false+.
35
+ # * +:input+: when +false+, will not ask for input for variables not
36
+ # directly set; defaults to +true+.
37
+ # * +:lock+: when +true+, locks the state file when locking is supported;
38
+ # when +false+, does not lock the state file; defaults to +true+.
39
+ # * +:lock_timeout+: the duration to retry a state lock; defaults to +"0s"+.
40
+ # * +:no_color+: whether or not the output from the command should be in
41
+ # color; defaults to +false+.
42
+ # * +:parallelism+: the number of parallel resource operations; defaults to
43
+ # +10+.
44
+ # * +:plan+: the path to output the plan if it should be saved to a file.
45
+ # * +:refresh+: when +true+, updates state prior to checking for
46
+ # differences; when +false+ uses locally available state; defaults to
47
+ # +true+; this has no effect when +:plan+ is provided.
48
+ # * +:state+: the path to the state file from which to read state and in
49
+ # which to store state (unless +:state_out+ is specified); defaults to
50
+ # +"terraform.tfstate"+.
51
+ # * +:target+: the address of a resource to target; if both +:target+ and
52
+ # +:targets+ are provided, all targets will be passed to terraform.
53
+ # * +:targets+: an array of resource addresses to target; if both +:target+
54
+ # and +:targets+ are provided, all targets will be passed to terraform.
55
+ # * +:vars+: a map of variables to be passed to the terraform configuration.
56
+ # * +:var_file+: the path to a terraform var file; if both +:var_file+ and
57
+ # +:var_files+ are provided, all var files will be passed to terraform.
58
+ # * +:var_files+: an array of paths to terraform var files; if both
59
+ # +:var_file+ and +:var_files+ are provided, all var files will be passed
60
+ # to terraform.
61
+ #
62
+ # @example Basic Invocation
63
+ # RubyTerraform::Commands::Plan.new.execute(
64
+ # directory: 'infra/networking',
65
+ # vars: {
66
+ # region: 'eu-central'
67
+ # })
68
+ #
8
69
  class Plan < Base
9
- include RubyTerraform::Options::Common
70
+ include RubyTerraform::Options::Global
10
71
 
72
+ # @!visibility private
11
73
  def subcommands
12
74
  %w[plan]
13
75
  end
14
76
 
15
- def options # rubocop:disable Metrics/MethodLength
77
+ # rubocop:disable Metrics/MethodLength
78
+
79
+ # @!visibility private
80
+ def options
16
81
  %w[
17
82
  -compact-warnings
18
83
  -destroy
@@ -31,10 +96,14 @@ module RubyTerraform
31
96
  ] + super
32
97
  end
33
98
 
99
+ # rubocop:enable Metrics/MethodLength
100
+
101
+ # @!visibility private
34
102
  def arguments(parameters)
35
103
  [parameters[:directory]]
36
104
  end
37
105
 
106
+ # @!visibility private
38
107
  def parameter_defaults(_parameters)
39
108
  { vars: {}, var_files: [], targets: [] }
40
109
  end
@@ -1,16 +1,44 @@
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 providers+ command which prints out a tree of modules
9
+ # in the referenced configuration annotated with their provider
10
+ # requirements.
11
+ #
12
+ # This provides an overview of all of the provider requirements across all
13
+ # referenced modules, as an aid to understanding why particular provider
14
+ # plugins are needed and why particular versions are selected.
15
+ #
16
+ # For options accepted on construction, see {#initialize}.
17
+ #
18
+ # When executing an instance of {Plan} via {#execute}, the following
19
+ # options are supported:
20
+ #
21
+ # * +:directory+: the path to a directory containing terraform
22
+ # configuration (deprecated in terraform 0.14, removed in terraform 0.15,
23
+ # use +:chdir+ instead).
24
+ # * +:chdir+: the path of a working directory to switch to before executing
25
+ # the given subcommand.
26
+ #
27
+ # @example Basic Invocation
28
+ # RubyTerraform::Commands::Providers.new.execute
29
+ #
8
30
  class Providers < Base
9
- include RubyTerraform::Options::Common
31
+ include RubyTerraform::Options::Global
10
32
 
33
+ # @!visibility private
11
34
  def subcommands
12
35
  %w[providers]
13
36
  end
37
+
38
+ # @!visibility private
39
+ def arguments(parameters)
40
+ [parameters[:directory]]
41
+ end
14
42
  end
15
43
  end
16
44
  end
@@ -1,17 +1,85 @@
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 providers lock+ command which writes out dependency
9
+ # locks for the configured providers.
10
+ #
11
+ # Normally the dependency lock file (.terraform.lock.hcl) is updated
12
+ # automatically by "terraform init", but the information available to the
13
+ # normal provider installer can be constrained when you're installing
14
+ # providers from filesystem or network mirrors, and so the generated lock
15
+ # file can end up incomplete.
16
+ #
17
+ # The "providers lock" subcommand addresses that by updating the lock file
18
+ # based on the official packages available in the origin registry, ignoring
19
+ # the currently-configured installation strategy.
20
+ #
21
+ # After this command succeeds, the lock file will contain suitable checksums
22
+ # to allow installation of the providers needed by the current configuration
23
+ # on all of the selected platforms.
24
+ #
25
+ # By default this command updates the lock file for every provider declared
26
+ # in the configuration. You can override that behavior by providing one or
27
+ # more provider source addresses on the command line.
28
+ #
29
+ # For options accepted on construction, see {#initialize}.
30
+ #
31
+ # When executing an instance of {ProvidersLock} via {#execute}, the
32
+ # following options are supported:
33
+ #
34
+ # * +:provider+: the provider source address for which the lock file
35
+ # should be updated; if both +:provider+ and +:providers+ are provided,
36
+ # all providers will be passed to Terraform.
37
+ # * +:providers+: an array of provider source addresses for which the lock
38
+ # file should be updated; if both +:provider+ and +:providers+ are
39
+ # provided, all providers will be passed to Terraform.
40
+ # * +:chdir+: the path of a working directory to switch to before executing
41
+ # the given subcommand.
42
+ # * +:fs_mirror+: if provided, consults the given filesystem mirror
43
+ # directory instead of the origin registry for each of the given
44
+ # providers; this would be necessary to generate lock file entries for
45
+ # a provider that is available only via a mirror, and not published in an
46
+ # upstream registry; in this case, the set of valid checksums will be
47
+ # limited only to what Terraform can learn from the data in the mirror
48
+ # directory.
49
+ # * +:net_mirror+: if provided, consults the given network mirror (given as
50
+ # a base URL) instead of the origin registry for each of the given
51
+ # providers; this would be necessary to generate lock file entries for a
52
+ # provider that is available only via a mirror, and not published in an
53
+ # upstream registry; in this case, the set of valid checksums will be
54
+ # limited only to what Terraform can learn from the data in the mirror
55
+ # indices.
56
+ # * +:platform+: the target platform to request package checksums for; by
57
+ # default Terraform will request package checksums suitable only for the
58
+ # platform where you run this command; target names consist of an
59
+ # operating system and a CPU architecture; for example, "linux_amd64"
60
+ # selects the Linux operating system running on an AMD64 or x86_64 CPU;
61
+ # each provider is available only for a limited set of target platforms;
62
+ # if both +:platform+ and +:platforms+ are provided, all platforms will be
63
+ # passed to Terraform.
64
+ # * +:platforms+: an array of target platforms to request package checksums
65
+ # for; see +:platform+ for more details; if both +:platform+ and
66
+ # +:platforms+ are provided, all platforms will be passed to Terraform.
67
+ #
68
+ # @example Basic Invocation
69
+ # RubyTerraform::Commands::ProvidersLock.new.execute(
70
+ # fs_mirror: "/usr/local/terraform/providers",
71
+ # platforms: ["windows_amd64", "darwin_amd64", "linux_amd64"],
72
+ # provider: "tf.example.com/ourcompany/ourplatform")
73
+ #
8
74
  class ProvidersLock < Base
9
- include RubyTerraform::Options::Common
75
+ include RubyTerraform::Options::Global
10
76
 
77
+ # @!visibility private
11
78
  def subcommands
12
79
  %w[providers lock]
13
80
  end
14
81
 
82
+ # @!visibility private
15
83
  def options
16
84
  %w[
17
85
  -fs-mirror
@@ -20,8 +88,9 @@ module RubyTerraform
20
88
  ] + super
21
89
  end
22
90
 
91
+ # @!visibility private
23
92
  def arguments(parameters)
24
- [parameters[:providers]]
93
+ [parameters[:provider], parameters[:providers]]
25
94
  end
26
95
  end
27
96
  end
@@ -1,21 +1,63 @@
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 providers mirror+ command which saves local copies of
9
+ # all required provider plugins.
10
+ #
11
+ # Populates a local directory with copies of the provider plugins needed for
12
+ # the current configuration, so that the directory can be used either
13
+ # directly as a filesystem mirror or as the basis for a network mirror and
14
+ # thus obtain those providers without access to their origin registries in
15
+ # future.
16
+ #
17
+ # The mirror directory will contain JSON index files that can be published
18
+ # along with the mirrored packages on a static HTTP file server to produce a
19
+ # network mirror. Those index files will be ignored if the directory is used
20
+ # instead as a local filesystem mirror.
21
+ #
22
+ # For options accepted on construction, see {#initialize}.
23
+ #
24
+ # When executing an instance of {ProvidersMirror} via {#execute}, the
25
+ # following options are supported:
26
+ #
27
+ # * +:directory+: the directory to populate with the mirrored provider
28
+ # plugins.
29
+ # * +:chdir+: the path of a working directory to switch to before executing
30
+ # the given subcommand.
31
+ # * +:platform+: the target platform to build a mirror for; by default
32
+ # Terraform will obtain plugin packages suitable for the platform where
33
+ # you run this command; target names consist of an operating system and a
34
+ # CPU architecture; for example, "linux_amd64" selects the Linux operating
35
+ # system running on an AMD64 or x86_64 CPU; each provider is available
36
+ # only for a limited set of target platforms; if both +:platform+ and
37
+ # +:platforms+ are provided, all platforms will be passed to Terraform.
38
+ # * +:platforms+: an array of target platforms to build a mirror for for;
39
+ # see +:platform+ for more details; if both +:platform+ and +:platforms+
40
+ # are provided, all platforms will be passed to Terraform.
41
+ #
42
+ # @example Basic Invocation
43
+ # RubyTerraform::Commands::ProvidersMirror.new.execute(
44
+ # directory: './plugins',
45
+ # platforms: ["windows_amd64", "darwin_amd64", "linux_amd64"])
46
+ #
8
47
  class ProvidersMirror < Base
9
- include RubyTerraform::Options::Common
48
+ include RubyTerraform::Options::Global
10
49
 
50
+ # @!visibility private
11
51
  def subcommands
12
52
  %w[providers mirror]
13
53
  end
14
54
 
55
+ # @!visibility private
15
56
  def options
16
57
  %w[-platform] + super
17
58
  end
18
59
 
60
+ # @!visibility private
19
61
  def arguments(parameters)
20
62
  [parameters[:directory]]
21
63
  end
@@ -1,21 +1,40 @@
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 providers schema+ command which prints out a json
9
+ # representation of the schemas for all providers used in the current
10
+ # configuration.
11
+ #
12
+ # For options accepted on construction, see {#initialize}.
13
+ #
14
+ # When executing an instance of {ProvidersSchema} via {#execute}, the
15
+ # following options are supported:
16
+ #
17
+ # * +:chdir+: the path of a working directory to switch to before executing
18
+ # the given subcommand.
19
+ #
20
+ # @example Basic Invocation
21
+ # RubyTerraform::Commands::ProvidersSchema.new.execute(
22
+ # directory: 'infra/networking')
23
+ #
8
24
  class ProvidersSchema < Base
9
- include RubyTerraform::Options::Common
25
+ include RubyTerraform::Options::Global
10
26
 
27
+ # @!visibility private
11
28
  def subcommands
12
29
  %w[providers schema]
13
30
  end
14
31
 
32
+ # @!visibility private
15
33
  def options
16
34
  %w[-json] + super
17
35
  end
18
36
 
37
+ # @!visibility private
19
38
  def parameter_overrides(_parameters)
20
39
  # Terraform 0.15 - at this time, the -json flag is a required option.
21
40
  { json: true }
@@ -1,18 +1,80 @@
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 refresh+ command which updates the state file of your
9
+ # infrastructure with metadata that matches the physical resources they are
10
+ # tracking.
11
+ #
12
+ # This will not modify your infrastructure, but it can modify your state
13
+ # file to update metadata. This metadata might cause new changes to occur
14
+ # when you generate a plan or call apply next.
15
+ #
16
+ # For options accepted on construction, see {#initialize}.
17
+ #
18
+ # When executing an instance of {Refresh} via {#execute}, the following
19
+ # options are supported:
20
+ #
21
+ # * +:directory+: the path to a directory containing terraform configuration
22
+ # (deprecated in terraform 0.14, removed in terraform 0.15, use +:chdir+
23
+ # instead).
24
+ # * +:chdir+: the path of a working directory to switch to before executing
25
+ # the given subcommand.
26
+ # * +:backup+: the path to backup the existing state file before modifying;
27
+ # defaults to the +:state_out+ path with +".backup"+ extension; set
28
+ # +:no_backup+ to +true+ to skip backups entirely (legacy).
29
+ # * +:compact_warnings+: when +true+, if terraform produces any warnings
30
+ # that are not accompanied by errors, they are shown in a more compact
31
+ # form that includes only the summary messages; defaults to +false+.
32
+ # * +:input+: when +false+, will not ask for input for variables not
33
+ # directly set; defaults to +true+.
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
+ # * +:no_backup+: when +true+, no backup file will be written; defaults to
38
+ # +false+ (legacy).
39
+ # * +:no_color+: whether or not the output from the command should be in
40
+ # color; defaults to +false+.
41
+ # * +:parallelism+: the number of parallel resource operations; defaults to
42
+ # +10+.
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"+ (legacy).
46
+ # * +:state_out+: the path to write state to that is different than
47
+ # +:state+; this can be used to preserve the old state (legacy).
48
+ # * +:target+: the address of a resource to target; if both +:target+ and
49
+ # +:targets+ are provided, all targets will be passed to terraform.
50
+ # * +:targets+: an array of resource addresses to target; if both +:target+
51
+ # and +:targets+ are provided, all targets will be passed to terraform.
52
+ # * +:vars+: a map of variables to be passed to the terraform configuration.
53
+ # * +:var_file+: the path to a terraform var file; if both +:var_file+ and
54
+ # +:var_files+ are provided, all var files will be passed to terraform.
55
+ # * +:var_files+: an array of paths to terraform var files; if both
56
+ # +:var_file+ and +:var_files+ are provided, all var files will be passed
57
+ # to terraform.
58
+ #
59
+ # @example Basic Invocation
60
+ # RubyTerraform::Commands::Refresh.new.execute(
61
+ # directory: 'infra/networking',
62
+ # vars: {
63
+ # region: 'eu-central'
64
+ # })
65
+ #
8
66
  class Refresh < Base
9
- include RubyTerraform::Options::Common
67
+ include RubyTerraform::Options::Global
10
68
 
69
+ # @!visibility private
11
70
  def subcommands
12
71
  %w[refresh]
13
72
  end
14
73
 
15
- def options # rubocop:disable Metrics/MethodLength
74
+ # rubocop:disable Metrics/MethodLength
75
+
76
+ # @!visibility private
77
+ def options
16
78
  %w[
17
79
  -backup
18
80
  -compact-warnings
@@ -29,14 +91,19 @@ module RubyTerraform
29
91
  ] + super
30
92
  end
31
93
 
94
+ # rubocop:enable Metrics/MethodLength
95
+
96
+ # @!visibility private
32
97
  def arguments(parameters)
33
98
  [parameters[:directory]]
34
99
  end
35
100
 
101
+ # @!visibility private
36
102
  def parameter_defaults(_parameters)
37
103
  { vars: {}, var_files: [], targets: [] }
38
104
  end
39
105
 
106
+ # @!visibility private
40
107
  def parameter_overrides(parameters)
41
108
  { backup: parameters[:no_backup] ? '-' : parameters[:backup] }
42
109
  end