这几天看了一些铁人赛的文章,看到一些很不错的文章,当然也看到很多不知所云的内容
观察整体趋势是劣币驱逐良币,心中五味杂陈
大家尽量维持品质,内容有所依据,不要错得离谱就好
不要害读者不看还好,看了文章反而被雷,技术开倒车
本章会特别短,将介绍 state 最後常用的功能 taint / untaint / apply -replace="resource address"
课程内容与代码会放在 Github 上: https://github.com/chechiachang/terraform-30-days
赛後文章会整理放到个人的部落格上 http://chechia.net/
Terraform 官方文件 已经依照 state manipulation 的使用情境做了分类,有以下几个类别
在 terraform 正常工作流程中,在不需要 destroy + create 的情形下,terraform 会尽量 update 计有的 resource。
然而,有时我们管理 infrastructrue 的时候,就是会需要强制 recreate 的动作,terraform 提供了 state taint / state untaint 来满足需求
使用 taint 可以标记一个已经存在的 state address,在下次 plan / apply 时,terraform 会强制 replace 这个 state 相关的 resource
相同的 resource address 下,会删除原先的 remote resource,并 create 一个全新的 remote resource,并把 state 放在原本的 resource address 下
一样使用用到烂的 azure/foundation/compute_network
示范
cd azure/foundation/compute_network
terragrunt state list
module.network.data.azurerm_resource_group.network
module.network.azurerm_subnet.subnet[0]
module.network.azurerm_subnet.subnet[1]
module.network.azurerm_subnet.subnet[2]
module.network.azurerm_virtual_network.vnet
terragrunt taint "module.network.azurerm_subnet.subnet[0]"
Resource instance module.network.azurerm_subnet.subnet[0] has been marked as tainted.
terragrunt state list
module.network.data.azurerm_resource_group.network
module.network.azurerm_subnet.subnet[0]
module.network.azurerm_subnet.subnet[1]
module.network.azurerm_subnet.subnet[2]
module.network.azurerm_virtual_network.vnet
terragrunt plan
-/+ destroy and then create replacement
Terraform will perform the following actions:
# module.network.azurerm_subnet.subnet[0] is tainted, so must be replaced
-/+ resource "azurerm_subnet" "subnet" {
~ address_prefix = "10.2.1.0/24" -> (known after apply)
~ id = "/subscriptions/6fce7237-7e8e-4053-8e7d-ecf8a7c392ce/resourceGroups/terraform-30-days/providers/Microsoft.Network/virtualNetworks/acctvnet/subnets/dev-1" -> (known after apply)
name = "dev-1"
- service_endpoint_policy_ids = [] -> null
# (6 unchanged attributes hidden)
- timeouts {}
}
Plan: 1 to add, 0 to change, 1 to destroy.
Changes to Outputs:
~ vnet_subnets = [
- "/subscriptions/6fce7237-7e8e-4053-8e7d-ecf8a7c392ce/resourceGroups/terraform-30-days/providers/Microsoft.Network/virtualNetworks/acctvnet/subnets/dev-1",
+ (known after apply),
"/subscriptions/6fce7237-7e8e-4053-8e7d-ecf8a7c392ce/resourceGroups/terraform-30-days/providers/Microsoft.Network/virtualNetworks/acctvnet/subnets/dev-2",
# (1 unchanged element hidden)
]
─────────────────────────────────────────────────────────────────────────────
module.network.azurerm_subnet.subnet[0]
如果 apply,terraform 就会执行 destroy + create
tained
的机制tainted
标记如果此时想要人为介入,便可以使用 untaint 来移除 tainted 标记
ignore_change
},使用 taint 可以强制 resource update在 Terraform v0.15.2 之後,terraform 提供了新的方法来操作 taint
terraform apply -replace="aws_instance.example[0]"
今天先来介绍一个,我第一次看到之後有点被吓到的工具 Hotjar Hotjar是一个质化的网站分析工...
完成後来试着用这些组建建立一个基本的 Dashbord 看起来还有很多要调整的地方... 在使用上 ...
昨天把购物车的资料表建好了(表 car)。 今天购物车制作的理想步骤应该是: 按下"加到购...
简单工厂模式,顾名思义就是抽象工厂的简单版~ 共有三个环节~ 分别是 抽象产品、具体产品、生产产品~...
这篇文章会介绍利用CSS定位的属性来控制html元素的位置,在之前的文章中有利用过padding和m...