2015-01-09 52 views
1

我正在尝试使用主厨功能创建一个包含云初始化的用户数据脚本。我遇到了一个限制,我想知道是否有解决方法。我需要我的节点名称是唯一的,因为厨师服务器将只接受具有唯一名称的客户端。我已经尝试了几件事情来传递日期时间变量或实例ID,但我似乎无法将变量传递给node_name节。将变量传递给云配置厨师?

node_name: "server-app-$INSTANCE_ID" 

node_name: "server-app-$(date +%s)" 

有没有办法逃离这个让它不会字面解释?

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

您使用的是云配置脚本吗?该文档指出,“node_name”将默认为实例ID。这应该是独一无二的。请参阅:http://cloudinit.readthedocs.org/en/latest/topics/examples.html#install-and-run-chef-recipes – 2015-01-09 23:16:13

+0

据我所知,但我试图保留某种命名方案节点名称用于监视目的。如果我能以某种方式在命名方案中加入实例ID,那将是理想的。 – numb3rs1x 2015-01-11 17:53:41

回答

0

你有你写出来的client.rb之前做了扩展:

echo "node_name '$(date +%s)' >> /etc/chef/client.rb" 

不,这仍有可能发生碰撞,如果两台机器开机在同一秒。我强烈建议使用EC2实例ID或IP地址。您可以从元数据服务器获取这些内容。以https://github.com/coderanger/brix/blob/master/packer/client-bootstrap.sh#L26-L37为例。

+0

你提出的建议可以用于用户数据外壳脚本,但我试图编写一个cloud-config yaml文件。如果我直接指定一个节点名称给client.rb文件,是不是会被cloud-config设置覆盖? – numb3rs1x 2015-01-09 21:49:40

+0

我对cloud-config不是很熟悉(假设你指的是coreos的东西),但是如果你不想只运行一个脚本,你可以使用'write_files'。 – coderanger 2015-01-09 22:25:41