【问题标题】:passing variables to cloud-config chef?将变量传递给云配置厨师?
【发布时间】:2015-03-08 06:08:25
【问题描述】:

我正在尝试使用厨师功能创建一个带有 cloud-init 的用户数据脚本。我遇到了限制,我想知道是否有解决方法。我需要我的节点名称是唯一的,因为厨师服务器将只接受具有唯一名称的客户端。我尝试了几种方法来传递日期时间变量或实例 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"

【问题讨论】:

  • 您使用的是云配置脚本吗?文档指出“node_name”将默认为实例 ID。那应该是独一无二的。见:cloudinit.readthedocs.org/en/latest/topics/…
  • 我明白这一点,但我试图在节点名称中保留某种命名方案以用于监控目的。如果我能以某种方式在实例 ID 前面加上命名方案,那将是理想的。

标签: amazon-ec2 chef-infra cloud-init user-data


【解决方案1】:

在写出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

【讨论】:

  • 您建议的内容适用于用户数据 shell 脚本,但我正在尝试编写云配置 yaml 文件。如果我直接为 client.rb 文件指定一个节点名称,它不会被 cloud-config 设置覆盖吗?
  • 我对 cloud-config 不是很熟悉(假设你的意思是 coreos 的东西),但如果你不想只运行一个脚本,你可以使用write_files
猜你喜欢
  • 1970-01-01
  • 2016-08-02
  • 1970-01-01
  • 2013-07-15
  • 2021-04-18
  • 2017-07-27
  • 1970-01-01
相关资源
最近更新 更多