Openstack 添加新的“时更新现有地形计算实例”;组件“;
我是terraform新手,但我创建了一个openstack计算实例,如下所示:Openstack 添加新的“时更新现有地形计算实例”;组件“;,openstack,terraform,devops,iaas,terraform-provider-openstack,Openstack,Terraform,Devops,Iaas,Terraform Provider Openstack,我是terraform新手,但我创建了一个openstack计算实例,如下所示: provider "openstack" { auth_url = "https://my-auth/v2.0/" domain_name = "default" alias = "alias" user_name = "username" tenant_name
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")}"
}
}
事实上,通过在ressource上添加provionner文件,当我运行命令terraform plan
或terraform apply
时,我的实例没有任何变化。我收到infos消息通知我:
申请完成!资源:添加0个,更改0个,销毁0个
将更改应用于计算实例的正确方式。以下地形:
供应器用于在本地或远程计算机上执行脚本,作为资源创建或销毁的一部分
如果希望provisionners再次运行,则应销毁(terraform Distroy
)并再次创建(terraform apply
)资源。以下terraform:
供应器用于在本地或远程计算机上执行脚本,作为资源创建或销毁的一部分
如果您想让provisionners再次运行,您应该销毁(
terraform destroy
)并再次创建(terraform apply
)资源。terraform无法检查本地或远程执行的状态,这并不是说有一个API调用可以告诉您在自定义代码上发生了什么-bar setup.sh
。
那就像是魔法,或者说是真正的魔法
Terraforms用于管理基础设施、实例的配置,而不是实例上的内容。不变的内容和重新创建才是真正的路径。创造一个全新的例子。然而,如果是你的锤子,有办法
如果您污染了要更新的资源,那么当terraform下次再次运行时,该资源将被重新执行。但请注意我所说的锤子
或者,您可以利用您选择的CM工具来管理实例的内容—Chef/Ansible,或者通过诸如packer之类的工具创建Openstack使用的图像(即不可变),并更新这些图像。我会做后者。Terraform无法检查本地或远程执行的状态,它不像有API调用可以告诉您在自定义代码上发生了什么-
bar setup.sh
。
那就像是魔法,或者说是真正的魔法
Terraforms用于管理基础设施、实例的配置,而不是实例上的内容。不变的内容和重新创建才是真正的路径。创造一个全新的例子。然而,如果是你的锤子,有办法
如果您污染了要更新的资源,那么当terraform下次再次运行时,该资源将被重新执行。但请注意我所说的锤子
或者,您可以利用您选择的CM工具来管理实例的内容—Chef/Ansible,或者通过诸如packer之类的工具创建Openstack使用的图像(即不可变),并更新这些图像。我会做后者。我了解将provisionner添加到计算实例的实践。但是,向现有实例添加新配置的正确方法是什么呢?我了解向计算实例添加provisionner的实践。但是,向现有实例添加新配置的正确方法是什么?