Chef = 节点属性,如何在本地管理它们、进行版本控制然后上传它们?

Chef = 节点属性,如何在本地管理它们、进行版本控制然后上传它们?

我将非常感激您的帮助。我完全不明白,我应该如何使用 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 的更改。我唯一想到的就是为每个节点创建一个与该节点同名的角色。例如:

  1. 我们有 3 个服务器,主机名分别为:alpha、bob、charlie。
  2. 我们在角色文件夹中创建 3 个角色文件:alpha.rb、bob.rb、charlie.rb
  3. 我们在每个文件中提供名称、描述、run_list,就好像它们是普通角色一样。
  4. 为仅包含具有相应名称的角色的节点创建 run_lists。

每当我们需要改变 run_list 时,我们就会改变角色,但 run_list 保持不变。

相关内容