gpt4 book ai didi

terraform - 如何使用 cloud-init 和 Terraform 设置主机名?

转载 作者:行者123 更新时间:2023-12-02 23:20:35 25 4
gpt4 key购买 nike

我从 Terraform 开始。我试图让它设置一个友好的主机名,而不是AWS通常使用的ip-10.10.10.10。但是,我还没有找到如何做到这一点。

我尝试使用配置程序,如下所示:

provisioner "local-exec" {
command = "sudo hostnamectl set-hostname friendly.example.com"
}

但这不起作用,主机名没有改变。

所以现在,我正在尝试这个:

resource "aws_instance" "example" {
ami = "ami-XXXXXXXX"
instance_type = "t2.micro"
tags = {
Name = "friendly.example.com"
}
user_data = "${data.template_file.user_data.rendered}"
}

data "template_file" "user_data" {
template = "${file("user-data.conf")}"
vars {
hostname = "${aws_instance.example.tags.Name}"
}
}

user-data.conf中,我有一行使用该变量,如下所示:

hostname = ${hostname}

但这给了我一个循环依赖:

$ terraform apply
Error: Error asking for user input: 1 error(s) occurred:
* Cycle: aws_instance.example, data.template_file.user_data

另外,这意味着我必须为每个实例创建不同的 user_data 资源,这看起来有点痛苦。你不能重复使用它们吗?这应该就是模板的目的,对吗?

我一定错过了一些东西,但我找不到答案。谢谢。

最佳答案

使用 Terraform provisionerlocal-exec block 将在 Terraform 正在应用的设备上执行它:documentation 。特别注意这一行:

This invokes a process on the machine running Terraform, not on the resource. See the remote-exec provisioner to run commands on the resource.

因此,将provisionerlocal-exec切换到remote-exec:

provisioner "remote-exec" {
inline = ["sudo hostnamectl set-hostname friendly.example.com"]
}

应该可以解决设置主机名的问题。

关于terraform - 如何使用 cloud-init 和 Terraform 设置主机名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54327541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com