我正在尝试使用Chef来管理新的虚拟机。我正在使用专用的Chef服务器,并从一个单独的工作站vm完成所有这些工作。
我目前正在这样做的方法是克隆一个基本vm映像,然后使用knife bootstrap来安装Chef并使vm处于一致状态。
我可以为vm指定环境或运行列表;我可以覆盖我环境中的某些设置,例如我在测试环境的“覆盖”块中有chef-client间隔,在我测试时每隔60运行一次客户端,所以我不必每次都手动运行chef-client。
例如,我的工作流程如下:
克隆vm模板并启动vm
手动设置主机名(更新/ etc / hostname和/ etc / hosts)并重新启动
使用初始配方引导节点
刀自助厨师-test1 -r'食谱[ntp],食谱[chef-client]'
编辑节点以反映新环境
我遇到的问题是设置每个节点的属性。我想使用hostname食谱来设置节点的主机名,如果我将其设置为角色,那么每个服务器都必须创建一个新角色。但是当我尝试引导并包含此角色时,我收到一个错误:
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]"
]
}
当我退出编辑时,刀告诉我:
Node not updated, skipping node save
我尝试在厨师gui中编辑此属性,但该属性不会保存。
我发现this guy正在/etc/chef/chef.json中创建json,基本上按照我的预期行事,但我不确定/etc/chef/chef.json是如何发挥作用的(为每个新节点更新它?我没有使用厨师独奏所以也许这就是我的困惑所在。)
根据this email thread,无法使用刀节编辑覆盖默认属性,但“set_fqdn”不是默认属性。我想避免为每个节点创建一个角色,我想我可以使用hostname cookbook来减轻手动设置主机名的需要,如:
刀引导saucy64 -r'配方[ntp],食谱[chef-client],食谱[hostname]' - json'“{set_fqdn”:“chef-test1.local.tld”,“chef_client”:{ “interval”:“600”}'
刀引导fedora19 -r'配方[ntp],配方[chef-client],配方[hostname]' - json'“{set_fqdn”:“chef-test2.local.tld”,“chef_client”:{ “interval”:“60”}'
我感谢您的帮助。
答案 0 :(得分:6)
我看到了一些问题:
knife node edit
期间,您无法将该属性设置为fqdn等旁边的顶级属性。您必须将其置于normal
下方。这是default
和override
之间的层次结构。请参阅Attribute Precedence knife node edit
气味。我宁愿不这样做(对于主机名可能没问题,但对于其他一切,不可能在版本控制中跟踪这些变化)。尝试改为运行hostname
食谱。chef.json
文件应该也可以避免恕我直言。你的逻辑应该在你的食谱中。base
角色/食谱或类似内容,其中包含每个节点都有的琐碎事情(如ntp
,chef-client
以及主机名)。-E myenv
(但是,我想知道为什么没有记录这一点)-N NAME
或--node-name NAME
。答案 1 :(得分:2)
当您引导节点时,基于定义的node.name设置主机名的配方怎么样,我wrote one是原始chef-hostname cookbook的分支。
答案 2 :(得分:0)
这有效:
knife bootstrap 192.168.15.43 -r 'recipe[hostname],recipe[ntp],recipe[chef-client]' -j '{"set_fqdn": "chef-test2"}'
(也发现阅读knife help bootstrap
帮助)
This stackoverflow answer使用类似的语法。
编辑:嗯,差不多,这会创建两个节点条目。需要使用-N参数指定节点名称:
knife bootstrap 192.168.15.43 -r 'recipe[hostname],recipe[ntp],recipe[chef-client]' -j '{"set_fqdn": "chef-test2"}' -N chef-test2
knife bootstrap 192.168.15.43 --run-list 'recipe[hostname],recipe[ntp],recipe[chef-client]' --json-attributes '{"set_fqdn": "chef-test2"}' --node-name chef-test2