我对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时,对我的实例没有任何改变。我有信息通知我:
申请完毕!资源:增加0,更改0,0销毁。
将更改应用于计算实例的正确方法是什么。
发布于 2019-01-04 15:38:25
跟随地形文档
提供程序用于在本地或远程计算机上执行脚本,作为资源创建或 resource 的一部分。
如果希望提供程序再次运行,则应该再次销毁(terraform destroy)和创建(terraform apply)资源。
发布于 2019-01-05 21:44:50
Terraform不可能检查本地或远程执行的状态,也不像有一个API调用可以告诉您自定义代码发生了什么- bar-setup.sh。这就像魔术,或者真正的魔术。
Terraform‘用于管理基础设施、实例的配置,而不是实例上的内容。不可变的内容和重新创建是这里的真正路径。创造一个全新的例子。然而,如果这是你的锤子,有办法。
如果您要更新的资源受到污染,那么当terraform下次再次运行时,资源将被重新执行。但是注意我说的关于锤子的话。
或者,您可以利用您选择的CM工具来管理实例的内容- Chef/Ansible,或者通过类似于packer的工具创建Openstack使用的映像(即不可变),并对其进行更新。我会做后者的。
https://stackoverflow.com/questions/54041699
复制相似问题