1.6.18.2.1. mv

terraform state mv命令可以在状态文件中移动资源。该命令可以移动单个资源对象、多实例资源对象中特定实例、整个模块以及其他对象。该命令也可以在不同的状态文件之间移动对象,以配合代码重构。

1.6.18.2.1.1. 用法

terraform state mv [options] SOURCE DESTINATION

该命令将会把资源对象从SOURCE地址移动到DESTINATION地址。这可以用来实现单个简单资源的重命名、在模块之间移动对象、移动整个模块等操作。它也可以用来在Terraform管理的不同基础设施栈之间移动对象。

该命令在进行任意修改之前会先生成一个备份文件。备份机制不可关闭。如果是在不同状态文件之间移动对象,那么每个状态文件都会生成一个备份。

该命令的SOURCE与DESTINATION是必填参数,必须是合法的资源地址。

该命令提供以下可选参数:

  • -backup=path:指定源状态文件的备份地址,默认为源状态文件加上".backup"后缀
  • -bakcup-out=path:指定目标状态文件的备份地址,默认为目标状态文件加上".backup"后缀
  • -state=path:源状态文件地址,默认为当前Backend或是"terraform.tfstate"
  • -state-out=path:目标状态文件地址。如果不指定则使用源状态文件。可以是一个已经存在的文件或新建一个文件

1.6.18.2.1.2. 例子:重命名一个资源

$ terraform state mv 'packet_device.worker' 'packet_device.helper'

1.6.18.2.1.3. 例子:将一个资源移动进一个模块

以下例子展示了将packet_device.worker资源移动进名为app的模块。如果模块目前不存在,则会创建模块。

$ terraform state mv 'packet_device.worker' 'module.app.packet_device.worker'

1.6.18.2.1.4. 例子:移动一个模块进入另一个模块

$ terraform state mv 'module.app' 'module.parent.module.app'

1.6.18.2.1.5. 例子:移动一个模块到另一个状态文件

$ terraform state mv -state-out=other.tfstate 'module.app' 'module.app'

1.6.18.2.1.6. 移动一个带有count参数的资源

$ terraform state mv 'packet_device.worker[0]' 'packet_device.helper[0]'

1.6.18.2.1.7. 移动一个带有for_each参数的资源

Linux、MacOS以及Unix:

$ terraform state mv 'packet_device.worker["example123"]' 'packet_device.helper["example456"]'

PowerShell:

$ terraform state mv 'packet_device.worker[\"example123\"]' 'packet_device.helper[\"example456\"]'

Windows命令行:

$ terraform state mv packet_device.worker[\"example123\"] packet_device.helper[\"example456\"]

results matching ""

    No results matching ""