Ansible调用新版Terraform销毁资源因-force弃用报错的解决方案
问题根因
Ansible 旧版社区terraform模块执行state: absent销毁操作时,硬编码传递Terraform已废弃的-force参数。Terraform v0.15及以上版本已移除destroy子命令的-force参数,统一替换为-auto-approve,参数不兼容是触发本次报错的直接原因。
解决方案
按优先级从高到低可选择以下方案处理:
方案1:升级社区Terraform模块版本(最优解,零业务逻辑修改)
升级community.general集合到1.5.0及以上版本,新版模块已经完成Terraform版本适配,会自动匹配-auto-approve参数,无需修改现有Playbook逻辑。执行升级命令:ansible-galaxy collection install community.general --upgrade升级完成后直接运行原有销毁Playbook即可正常执行。
方案2:绕过模块原生销毁逻辑(临时规避方案)
若暂时无法升级Ansible集合包,可拆分原有销毁逻辑,先用terraform模块完成初始化,再通过command模块直接调用适配新版Terraform的销毁命令,修改后的销毁段代码参考:- block: - name: Init terraform with remote backend terraform: project_path: xxxxx state: init force_init: true backend_config: resource_group_name: "rg-poc-automation" storage_account_name: "smartopsazureautomation" container_name: "terraformstatefile" key: "{{ _customer }}-{{ enviornment }}-vm-config.tfstate" - name: Execute terraform destroy command: terraform destroy -auto-approve args: chdir: xxxxx environment: "{{ env }}"该写法和原有逻辑完全对齐,不会出现状态不一致问题。
方案3:版本降级(不推荐)
若既不能升级Ansible模块也不能修改Playbook,可将执行节点上的Terraform版本降级到v0.14及更早版本,该版本区间仍支持-force参数。但旧版Terraform缺少后续的功能更新、Bug修复和安全补丁,非强约束场景不建议使用。
报错参考

内容的提问来源于stack exchange,提问作者Maya Ray
相关产品推荐
相关产品推荐

