Amazon ec2 将变量传递给云配置厨师?

Amazon ec2 将变量传递给云配置厨师?,amazon-ec2,chef-infra,cloud-init,user-data,Amazon Ec2,Chef Infra,Cloud Init,User Data,我正在尝试使用chef特性创建一个带有cloudinit的用户数据脚本。我遇到了一个限制,我想知道是否有办法绕过它。我需要我的节点名是唯一的,因为chef服务器只接受具有唯一名称的客户端。我尝试了几种方法来传递datetime变量或实例ID,但似乎无法将变量传递到node_name部分 node_name: "server-app-$INSTANCE_ID" 或 有没有一种方法可以避免这种情况,这样它就不会被逐字解释 Chef encountered an error attempting t

我正在尝试使用chef特性创建一个带有cloudinit的用户数据脚本。我遇到了一个限制,我想知道是否有办法绕过它。我需要我的节点名是唯一的,因为chef服务器只接受具有唯一名称的客户端。我尝试了几种方法来传递datetime变量或实例ID,但似乎无法将变量传递到node_name部分

node_name: "server-app-$INSTANCE_ID"

有没有一种方法可以避免这种情况,这样它就不会被逐字解释

Chef encountered an error attempting to create the client "server-app-$INSTANCE_ID"

在写出client.rb之前,您必须进行扩展:


这并不是说如果两台机器在同一秒钟内启动,这仍然会发生冲突。我强烈建议改用EC2实例ID或IP地址。您可以从元数据服务器获取这些数据。例如,请参阅。

您的建议适用于用户数据shell脚本,但我正在尝试编写一个cloud config yaml文件。如果我直接在client.rb文件中指定一个节点名,云配置设置不会覆盖它吗?假设你指的是coreos,我对云配置不是很熟悉,但是如果你不想只运行脚本,你可以使用write_文件。你使用的是云配置脚本吗?文档中指出,节点名称将默认为instance-id。该名称应该是唯一的。请参阅:我理解这一点,但我正试图在节点名称中保留某种命名方案,以便于监控。如果我能以某种方式在实例ID前面加上命名方案,那就太理想了。
Chef encountered an error attempting to create the client "server-app-$INSTANCE_ID"
echo "node_name '$(date +%s)' >> /etc/chef/client.rb"