我最近在测试 ChatGPT 生成的 Terraform 脚本时,遇到了一个让我无法确定是 ChatGPT 的“炮灰”内容,还是一个未记录的功能。
在一个训练过的 ChatGPT 会话中,我输入了:
生成一个可以使用 Terraform 的 random_pet 资源的 Bash 脚本
以下是输出的内容:
#!/bin/bash# 从 Terraform 状态文件中下载 random_pet 资源的元数据metadata=$(curl -s http://169.254.169.254/latest/meta-data/attributes/terraform)# 解析元数据并提取"id"属性的值id=$(echo $metadata | jq -r '.random_pet_generator_id')# 在 Bash 脚本中使用"id"属性的值echo "Hello, $id!"
这对我来说看起来是假的:
http://169.254.169.254/latest/meta-data/attributes/terraform
直到我读到关于引用替代提供者配置的内容
回答:
@***,我相当确定这不是一个真实的端点,但隐藏功能总是有可能存在的。我最终得到的是:
foo.tf
# 启用从实例元数据服务访问实例标签。 metadata_options { instance_metadata_tags = "enabled" http_endpoint = "enabled" } # 在启动时将标签应用到资源(不包括默认标签) dynamic "tag_specifications" { for_each = toset(["instance", "volume", "network-interface"]) content { resource_type = tag_specifications.key tags = { baz = random_pet.generator.id } } }
bar.sh
BAZ_TAG=$(curl -s http://169.254.169.254/latest/meta-data/tags/instance/baz)
我真的很好奇 ChatGPT 是如何得出这个端点的。它有时确实会犯错,但即使是错误也基于某种真实的元素。