我正在尝试使用 Chef 来管理新的虚拟机。我使用专用的 Chef 服务器并从单独的工作站虚拟机完成所有这些工作。
我目前的做法是克隆基础虚拟机镜像,然后使用 Knife Bootstrap 安装 Chef 并使虚拟机达到一致状态。
我可以为虚拟机指定环境或运行列表;我可以覆盖我的环境中的某些设置,例如我有 chef-client在我测试时,测试环境的“覆盖” block 中的间隔设置为每 60 运行一次客户端,这样我就不必每次都手动运行 Chef-client。
例如,我的工作流程是这样的:
克隆虚拟机模板并启动虚拟机
手动设置主机名(更新/etc/hostname 和/etc/hosts)并重新启动
使用初始配方引导节点
knife bootstrap chef-test1 -r 'recipe[ntp],recipe[chef-client]'
编辑节点以反射(reflect)新环境
我遇到的问题是设置每个节点的属性。我想使用hostname Recipe 来设置节点的主机名,如果我在角色中设置它,那么每个服务器都必须创建一个新角色。但是当我尝试引导并包含此角色时,我收到错误:
chef-test1 * log[Please set the set_fqdn attribute to desired hostname] action write[2013-12-09T16:26:56-07:00] WARN: Please set the set_fqdn attribute to desired hostname
当我在没有该配方的情况下进行引导并尝试编辑节点并设置“set_fqdn”属性时,我无法保存该属性,例如这个json:
{
"name": "chef-test1",
"set_fqdn": "chef-test1.local.fqdn",
"chef_environment": "test-dev1",
"normal": {
"tags": [
]
},
"run_list": [
"recipe[ntp]",
"recipe[chef-client]",
"recipe[hostname]"
]
}
当我退出编辑器时,knife 告诉我:
Node not updated, skipping node save
我尝试在 Chef GUI 中编辑此属性,但该属性无法保存。
我找到了this guy谁在/etc/chef/chef.json 中创建 json,基本上做了我期望的事情,但我不确定/etc/chef/chef.json 如何发挥作用(为每个新节点更新它?我'我不使用 Chef-solo,所以也许这就是我的困惑所在)。
根据this email thread无法使用 Knife 节点编辑来覆盖默认属性,但“set_fqdn”不是默认属性。我想避免为每个节点创建一个角色,并且我认为我可以使用主机名说明书来减轻手动设置主机名的需要,例如:
knife bootstrap saucy64 -r 'recipe[ntp],recipe[chef-client],recipe[hostname]' --json '"{ set_fqdn": "chef-test1.local.tld", "chef_client": { "interval": "600" }'
knife bootstrap fedora19 -r 'recipe[ntp],recipe[chef-client],recipe[hostname]' --json '"{ set_fqdn": "chef-test2.local.tld", "chef_client": { "interval": "60" }'
非常感谢您的帮助。
最佳答案
我发现一些问题:
- 在
knife节点编辑
期间,您无法将该属性设置为fqdn等旁边的顶级属性。您必须将其放置在正常
下方。这是default
和override
之间的层次结构。请参阅Attribute Precedence - 使用
Knife 节点编辑
气味。我宁愿不这样做(对于主机名可能没问题,但对于其他所有内容,不可能跟踪版本控制中的此类更改)。尝试改为运行hostname
说明书。 - 将属性写入到
chef.json
文件中,恕我直言,也应该避免。你的逻辑应该在你的 Recipe 中 - 您应该有一个
base
角色/Recipe 或类似的内容,其中包括每个节点都有的琐碎事情(例如ntp
,chef-client
还有主机名)。 - 您也可以在 bootstrapping 期间直接设置环境:
-E myenv
(但是,是的,我想知道为什么没有记录) - 您也可以在引导期间设置节点名称:
-N NAME
或--node-name NAME
。
关于chef-infra - 设置独特 Chef 节点属性的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20483260/