# frozen_string_literal: true require_relative 'base' require_relative '../options/global' module RubyTerraform module Commands # Wraps the +terraform state rm+ command which removes one or more items # from the Terraform state, causing Terraform to "forget" those items # without first destroying them in the remote system. # # This command removes one or more resource instances from the Terraform # state based on the addresses given. You can view and list the available # instances with {StateList}. # # If you give the address of an entire module then all of the instances in # that module and any of its child modules will be removed from the state. # # If you give the address of a resource that has "count" or "for_each" set, # all of the instances of that resource will be removed from the state. # # For options accepted on construction, see {#initialize}. # # When executing an instance of {StateRemove} via {#execute}, the following # options are supported: # # * +:address+: the module address or absolute resource address of the # resource instance to remove; required unless +:addresses+ is supplied; # if both +:address+ and +:addresses+ are provided, all addresses will be # passed to Terraform. # * +:addresses+: an array of module addresses or absolute resource # addresses of the resource instances to remove; required unless # +:address+ is supplied; if both +:address+ and +:addresses+ are # provided, all addresses will be passed to Terraform. # * +:chdir+: the path of a working directory to switch to before executing # the given subcommand. # * +:dry+run+: when +true+, prints out what would've been removed but # doesn't actually remove anything; defaults to +false+. # * +:backup+: the path where Terraform should write the backup state. # * +:lock+: when +true+, locks the state file when locking is supported; # when +false+, does not lock the state file; defaults to +true+. # * +:lock_timeout+: the duration to retry a state lock; defaults to +"0s"+. # * +:state+: the path to the state file to update; defaults to the current # workspace state. # * +:ignore_remote_version+: whether or not to continue even if remote and # local Terraform versions are incompatible; this may result in an # unusable workspace, and should be used with extreme caution; defaults to # +false+. # # The {#execute} method accepts an optional second parameter which is a map # of invocation options. Currently, the only supported option is # +:environment+ which is a map of environment variables to expose during # invocation of the command. # # @example Basic Invocation # RubyTerraform::Commands::StateRemove.new.execute( # address: 'packet_device.worker') # class StateRemove < Base include RubyTerraform::Options::Global # @!visibility private def subcommands %w[state rm] end # @!visibility private def options %w[ -dry-run -backup -lock -lock-timeout -state -ignore-remote-version ] + super end # @!visibility private def arguments(parameters) [parameters[:address], parameters[:addresses]] end end end end