我将非常感激您的帮助。我完全不明白,我应该如何使用 Git 版本控制系统在本地管理 Node 数据?
摘自 Chef 文档:http://wiki.opscode.com/display/chef/Nodes
knife node create foobar
{
"normal": {
},
"name": "foobar",
"override": {
},
"default": {
},
"json_class": "Chef::Node",
"automatic": {
},
"run_list": [
"recipe[zsh]",
"role[webserver]"
],
"chef_type": "node"
}
我明白了,我可以通过 Knife 在编辑器上管理服务器上的这些数据!。而且似乎有一个本地 chef-client 的命令行选项(最有可能是 -j JSON_ATTRIBS)。=> 但 chef-client 在本地运行,我需要将数据上传到服务器,然后需要将这些节点属性推送到客户端。这是更大环境中唯一可行的解决方案。
但是如何使用 Knife 上传这些数据?似乎没有这个选项?(似乎只有 Knife 中的编辑器选项?)
谢谢 Francois
答案1
在 Chef 中,节点是权威。最佳实践是使用刀引导建立一个系统来运行 Chef 并将其与 Chef 服务器集成。
大多数节点属性数据是在以下情况下由节点动态生成的:chef-client 运行,它使用 ohai 来发现有关自身的信息。其他数据可以来自食谱和角色。您的菜谱和角色当然应该存储在你的版本控制存储库中,通常称为Chef 存储库。
在本地存储节点的主要原因是为了捕获它们的运行列表。我们建议您在存储库中准备一份运行手册文档(如 README :)),其中描述了您拥有哪些类型的服务器以及它们的作用。
答案2
我目前正在考虑如何跟踪存储库中节点 run_list 的更改。我唯一想到的就是为每个节点创建一个与该节点同名的角色。例如:
- 我们有 3 个服务器,主机名分别为:alpha、bob、charlie。
- 我们在角色文件夹中创建 3 个角色文件:alpha.rb、bob.rb、charlie.rb
- 我们在每个文件中提供名称、描述、run_list,就好像它们是普通角色一样。
- 为仅包含具有相应名称的角色的节点创建 run_lists。
每当我们需要改变 run_list 时,我们就会改变角色,但 run_list 保持不变。