Terraform plan、destroy与state文件的关联及运行机制相关技术问询
Terraform 相关问题解答
问题1:terraform plan的状态比对逻辑
terraform plan默认会同时读取state文件、调用azurerm API拉取云侧资源实时状态,再和配置文件定义的期望状态做三方比对,不是只依赖其中某一个。- 执行plan时默认开启
-refresh=true参数,第一步会先调用Azure API拉取所有当前state中记录的托管资源的实时状态,更新state的临时缓存,再和配置文件的期望状态对比,最终生成变更计划。如果期间你手动在Azure门户修改过资源属性,plan也能识别到和state记录不一致的地方,体现在变更计划里。
问题2:首次执行plan无state文件的校验逻辑
- 首次执行plan还没有生成state文件时,Terraform会判定配置中定义的所有资源都还未被纳入托管,此时会直接生成创建所有配置中定义资源的变更计划。
- 如果你配置中定义的资源已经提前在Azure中手动创建好了,Terraform此时也不会识别到云侧的已有资源,依旧会提示要创建新的同名资源,只有你提前将现有资源通过
terraform import命令导入到state中后,才会正常比对已有资源的配置差异。
问题3:terraform destroy的依赖逻辑
- 执行
terraform destroy时不会参考你编写的期望配置文件,只以state文件中记录的所有Terraform托管资源列表为依据。 - 执行时会先调用Azure API校验state中记录的资源是否还在云侧实际存在,确认存在后就会生成销毁这些资源的计划,哪怕你当前目录下的配置文件已经被删除、修改,也不会影响destroy的执行逻辑。
内容的提问来源于stack exchange,提问作者Vowneee
相关产品推荐
相关产品推荐

