前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >terraform apply后的state file与refresh后的state file不一致问题探究

terraform apply后的state file与refresh后的state file不一致问题探究

原创
作者头像
金鹏
修改2024-08-25 08:07:34
880
修改2024-08-25 08:07:34
举报
文章被收录于专栏:SDLC技术探究

一 terraform apply的是什么?

我们正常在使用terraform时,先init初始化本地配置,再执行plan生成一个plan文件以供审阅,看看那些东西是变更了,比如哪些东西是创建,哪些要更新,哪些要被摧毁等,我们可以apply执行此时审阅后的plan文件,然后就是可以得到 我们期待的资源。

一个问题是apply的是什么?从上面的描述我们知道,apply会执行terraform中的配置文件,比如创建/更新/摧毁资源,所以aplly时会与provider交互,调用相应的api进行资源管理,API执行完毕后,会返回对应资源的ID等信息,terraform cli再将信息搜集后存储到state file,就形成了最初的state file。

二 terraform refresh 干了什么事?

我们都清楚refresh会根据本地的资源state file文件,到infra上查找对应的资源,如果资源不存在则从state file移除对应的状态,如果资源有变更,则会同步最新的infra上的资源信息到state file,这样就得到了refresh后的state file,基本是跟infra上是一致的,但是我说的是基本,如果有些资源不是terraform创建的,则需要terraform另外的import功能,将资源纳入state file 管理,这个另当别论。

三 为什么不一致?

根据上面的分析,我们知道:

1. 如果资源被terraform创建后,存在人为的变更,那么就会导致状态不一致,所以这个时候的资源state file跟实际是不一样。

2.还有一种情况,就是refresh调用的API跟apply返回的数据是一样的。但是apply主要作用是应用并反馈plan的变更,而refresh反馈的是真实的infra的状态。比如资源一共ABCD四个字段,apply时变更返回了A,B,C三个重要配置字段 ;但是在refresh时返回的是全字段A,B,C,D;所以这也是导致差异的一个 重要原因。

3.最后比较恶劣的情况,就是state file被人篡改了,这是不允许的。

四 总结

本文简单臆测了apply后的state file不一致的推测原因,真正的缘由还需要看源码实地探究,以上内容为个人臆测,如有雷同纯属意外。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 terraform apply的是什么?
  • 二 terraform refresh 干了什么事?
  • 三 为什么不一致?
  • 四 总结
相关产品与服务
云资源自动化 for Terraform
云资源自动化 for Terraform(Infrastructure Automation for Terraform)是腾讯云基于全球备受欢迎的基础设施即代码(Infrastructure as Code)工具 Terraform 插件扩展体系下,提供的腾讯云资源部署、实施和管理的自动化能力,将 Terraform 完善成熟的基础设施自动化工具能力和腾讯云的云资源服务能力相互联接,让客户可以方便地实施 DevOps 和多云部署等模式。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档