惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 司徒正美
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
腾讯CDC
WordPress大学
WordPress大学
爱范儿
爱范儿
GbyAI
GbyAI
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 聂微东
Google DeepMind News
Google DeepMind News
Recent Announcements
Recent Announcements
Latest news
Latest news
Last Week in AI
Last Week in AI
V2EX - 技术
V2EX - 技术
I
InfoQ
N
News | PayPal Newsroom
SecWiki News
SecWiki News
Microsoft Azure Blog
Microsoft Azure Blog
美团技术团队
T
Troy Hunt's Blog
H
Hacker News: Front Page
S
SegmentFault 最新的问题
TaoSecurity Blog
TaoSecurity Blog
V
Visual Studio Blog
Martin Fowler
Martin Fowler
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园_首页
S
Security @ Cisco Blogs
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
小众软件
小众软件
L
LangChain Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tor Project blog
L
LINUX DO - 热门话题
月光博客
月光博客
S
Schneier on Security
Y
Y Combinator Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
P
Proofpoint News Feed
Forbes - Security
Forbes - Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hugging Face - Blog
Hugging Face - Blog
A
Arctic Wolf
Webroot Blog
Webroot Blog
博客园 - 叶小钗
F
Fortinet All Blogs
S
Securelist
AI
AI
B
Blog RSS Feed
Security Latest
Security Latest

DevOps

复制企业级 Linux 开发环境:如何实现严格开发环境与生产环境一致性的基础架构策略 - V2EX 带有账密的 ISP 住宅代理,海外服务器请求正常, macOS 本地 curl 持续失败 A lock-file-based plugin manager for Jenkins 从 2022 年至今, DevOps 技术栈有什么新的发展吗 oracle 1U1G 机器能吗? 各位都是怎样优雅的 pull 容器镜像的 Gisia 新版发布,增加看板功能,欢迎提意见 内部做一个新的环境,在更新生产环境前先把生产服务等先在这个服务上过一遍,确认没问题后再上生产,这个环境叫什么环境?这种流程叫什么流程? 使用 containerd 配置镜像加速不生效问题 一个 Jenkins 技术问题,要被搞疯了 推荐一款轻量级 DevOps 平台 tg 上运维/sre/devops 相关的交流群 有哪些能满足要求的 DevOps 平台? 国内参加 CKA/CKAD 考试有无推荐的代理提供商 关于 Java 项目的健康检查、自愈和轻量级管理 drone 构建一直卡住,心力憔悴 [Terraform/腾讯云] 有用 Terraform 来管理腾讯云的朋友吗,它这个频率限制真的没问题吗? 遇到一点证书问题,望运维大佬给看看 - V2EX 关于 CMDB 如何保证数据一致性的讨论 Red Hat Access 文档下载求助 各位 Linux 运维的巨佬工作用 mac 吗 - V2EX 在单服务器搭最小规模的 CICD 的技术栈是什么 - V2EX 遇到一个 Redis 跨 VPC 读取的问题 好奇 Linux 运维 修改配置一般有做版本控制吗 - V2EX 私有化 SaaS 系统应该支持随便换域名吗 - V2EX 请教一个关于容器化部署的问题 官方 helm charts V.S. bitnami helm charts V.S. 官方 operator,大家一般倾向于用哪个? 私有化部署太难搞了 - V2EX Google SRE 的 on-call 方法和工具 开发转做运维开发,有什么需要注意的?需要额外学习和掌握什么? 大家的 CI 都是怎么搭建的? 开源 CMDB 新增支持多种认证方式: CAS、OAuth2.0、OIDC,并已兼容测试 casdoor 很好奇还有没有类似 Jenkins 的 配置 Freestyle 项目的 CI/CD 工具 坚持为「专业性」买单,就是最大的降本增效! KCL 社区最新动态速递 | IDE 插件支持引用查找和重命名、CNCF ArtifactHub KCL 集成 - V2EX cmdb vs rpa ? 国内有没有类似 FreeIPA 和 Keycloak 的产品? 求推荐一个可以管理多个 Linux 系统的平台 ipv6 访问 docker 最优雅的姿势是啥? 私有化部署术语大家一般用 self-host(及其变种)还是 on-premise? 上线时需要将迭代期内的各种配置改动同步到生产环境,有没有好用的配置备忘录的工具? 有没有数据库 CICD 方面比较好的实践 Nexus Repository 3 权限管理思路, LDAP 集成与单点,助力 CI/CD 加速 sonarqube 与 gitlab 的账号单点认证与项目集成详解 如何设置 azure devops 上 创建的 pull request 在满足某些条件时, 自动能够完成合并到目标分支 jenkins pipeline 如何在 stage3 错误的时候,返回 stage2 重新执行 4 位硬科技创始人对谈 DevOps 硬件实战 jenkins 如何在一个任务中创建多个构建触发器,并且每个构建触发器对应的步骤是不同的 Unity 单元测试和 Gitlab 自动化集成示例 怎么做好运维 Windows Server 如何做 CI/CD?
terraform 原理的一点儿思考
jojojoin · 2024-06-24 · via DevOps

结合 GPT 多了一些思考

terraform 的核心是三个文件,
1. 一个是开发者自己定义的 tf 文件
2. 第二个是.tfstate 文件
3. 第三个是云资源的真实状态

首先读取.tf 文件配置确认期望状态,然后 读取 tfstate 文件中的当前状态(.tf 有,.tfstate 没有,那么会创建;.tf 没有,.tfstate 有,那么会删除),这个时候还没有真正开始操作

然后通过 provider 获取真实的资源状态(这里获取真实资源状态,那么获取哪些资源呢,scope 是什么,scope 就是.state 文件里的 “资源对象+对象名”,以这个作为标识符,不在 tfstate 里面的 terraform 会认为资源不存在,并且按照.tf 定义的进行执行 )

这里读取的.tfstate ,我认为主要就是看看上一次受 terraform 管理的资源 scope

然后进行比较

比较什么呢,
简化理解:
A (以 state 文件 里面的内容为 scope ,通过 provider 从远程真实云资源状态获取信息)
B (.tf 文件的定义状态)

看看 A 是否和 B 定义的一样

这里有个问题,因为 A 的数据很全,有些属性是创建后才知道的,B 都是人员自己定义的,没有那么全
有些情况就算你什么都没变,后面再次 terraform apply 时候会发现如下这些

- identity {
- identity_ids = [] -> null
- principal_id = "xxxxxxxxxxx" -> null
- tenant_id = "xxxxxxxxxxx" -> null
- type = "xxxxxxxxxxx" -> null
}

# (4 unchanged blocks hidden)
}

这是因为 B 定义的没有,A 里面有,所以要改成 null

--------------

下面是 chatgpt 回答

1. 期望状态:
• Terraform 解析 main.tf ,期望有一个 AMI ID 为 ami-0c55b159cbfafe1f0 的 t2.micro 实例。
2. 当前状态:
• Terraform 读取 .tfstate 文件,假设当前状态文件记录了一个 t2.micro 实例,AMI ID 为 ami-0c55b159cbfafe1f0 。
3. 真实状态:
• Terraform 通过 AWS 提供者插件调用 AWS API 获取实际的实例信息。如果在 AWS 控制台中手动删除了该实例,AWS 提供者插件将返回实例不存在的信息。
4. 比较:
• Terraform 发现期望状态与真实状态不一致(实例已被删除),于是它决定创建一个新的实例。
5. 执行计划:
• Terraform 执行计划,创建一个新的 t2.micro 实例,AMI ID 为 ami-0c55b159cbfafe1f0 。
6. 更新状态文件:
• Terraform 更新 .tfstate 文件,记录新创建的实例信息。