openstack - 添加新“组件”时更新现有 terraform 计算实例
问题描述
我是 terraform 的新手,但我创建了一个这样的 openstack 计算实例:
provider "openstack" {
auth_url = "https://my-auth/v2.0/"
domain_name = "default"
alias = "alias"
user_name = "username"
tenant_name = "tenantname"
password = "pwd"
region = "region"
}
# Import SSH key pair into openstack project
resource "openstack_compute_keypair_v2" "keypair" {
provider = "myprovider"
name = "keypair"
public_key = "${file("~/.ssh/id_rsa.pub")}"
}
# Create a new virtual machine
resource "openstack_compute_instance_v2" "compute_instance" {
name = "compute_instance" # Instance Name
provider = "myprovider" # Instance distr
image_name = "Centos 7" # Image name
flavor_name = "b2-7" # Machine type name
key_pair = "${openstack_compute_keypair_v2.keypair.name}"
network {
name = "Ext-Net"
}
}
出于可维护性和灵活性的原因,我想在同一个实例中添加一些“组件”,它可以是任何东西,但在这里我尝试了一个配置文件和远程执行。事实上,当我在我的计算实例中添加这个参数时,我注意到我的计算实例不会被更新。例如:
provider "openstack" {
auth_url = "https://my-auth/v2.0/"
domain_name = "default"
alias = "alias"
user_name = "username"
tenant_name = "tenantname"
password = "pwd"
region = "region"
}
resource "openstack_compute_keypair_v2" "keypair" {
provider = "myprovider"
name = "keypair"
public_key = "${file("~/.ssh/id_rsa.pub")}"
}
resource "openstack_compute_instance_v2" "compute_instance" {
name = "compute_instance" # Instance Name
provider = "myprovider" # Instance distr
image_name = "Centos 7" # Image name
flavor_name = "b2-7" # Machine type name
key_pair = "${openstack_compute_keypair_v2.keypair.name}"
network {
name = "Ext-Net"
}
# Add a provisionner file on the ressource
provisioner "file" {
source = "foo_scripts/bar-setup.sh"
destination = "/tmp/bar-setup.sh"
connection {
type = "ssh"
user = "user"
private_key = "${file("~/.ssh/id_rsa")}"
}
}
# execute server setup file
provisioner "remote-exec" {
inline = [
"chmod +x /tmp/bar-setup.sh",
"sudo bash /tmp/bar-setup.sh",
]
connection {
type = "ssh"
user = "centos"
private_key = "${file("~/.ssh/id_rsa")}"
}
}
事实上,通过在资源上添加 provionner 文件,当我运行命令terraform plan
或terraform apply
时,我的实例没有任何变化。我有 infos 消息通知我:
申请完成!资源:添加 0 个,更改 0 个,销毁 0 个。
将我的更改应用于我的计算实例的正确方法是什么。
解决方案
Following Terraform documentation:
Provisioners are used to execute scripts on a local or remote machine as part of resource creation or destruction.
If you want the provisionners to run again, you should destroy (terraform destroy
) and create (terraform apply
) the resource again.
推荐阅读
- java - 为什么 Maven 无法管理战争类型依赖的版本?
- java - TableViewer.getElementAt() returning a filtered element
- c - 是否可以将二进制数据嵌入到 Turbo C 制作的 DOS EXE 中?
- c# - 如何重新排列一个列表与另一个列表相同?
- php - 读取csv时如何指定分隔符?
- python - 在 Tensorflow 中训练 while 循环
- java - 会话在springboot项目中过期
- ionic-framework - 如何删除 main.js Ionic 3 中的物理路径?
- mysql - 对于另一个表中的每一行,将一个表中的行写入另一个表
- python - 将 matplotlib 图形转换为相同形状的 numpy 数组