我是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"
}
}
出于可维护性和灵活性的原因,我想在同一实例中添加一些“组件”,可以是任何东西,但是在这里,我尝试使用 provisionner文件和远程执行。 确实,当我在计算实例中添加此参数时,我注意到我的计算实例将不会更新。例如:
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
时,实例上没有任何变化。我有信息消息通知我:
申请完成!资源:添加了0个,更改了0个,销毁了0个。
将更改应用于计算实例的正确方法是什么。
答案 0 :(得分:1)
遵循地形documentation:
配置程序用于在本地或远程计算机上执行脚本,作为资源创建或销毁的一部分。
如果您希望供应商再次运行,则应销毁(terraform destroy
)并再次创建(terraform apply
)资源。
答案 1 :(得分:1)
Terraform不能检查本地或远程执行的状态,这不像有一个API调用可以告诉您自定义代码发生了什么-bar-setup.sh
。
那就像魔术,或实际的魔术。
Terraforms'用于管理基础结构,实例的配置,而不是实例中的内容。不变的内容和重新创建是这里的真实路径。制作一个全新的实例。但是,如果这是您的锤子,那么有很多方法。
如果污染了要更新的资源,则下次再次运行terraform时,将重新执行该资源。但是请注意我所说的锤子。
或者,您可以利用所选的CM工具来管理实例的内容-Chef / Ansible,或通过打包程序之类的工具创建Openstack使用的图像(即不可变),并对其进行更新。我愿意去做。