0

我正在熟悉厨师,并希望在没有中央服务器的情况下构建我的工作流程(使用厨师零和刀零)。一切正常,但是,chef-zero 将有关节点的信息存储在 .json 文件中,这些文件相当大并且经常更改而无法存储在 git 存储库中,我想在每个工作日重新扫描服务器,而不是将它们的定义存储在存储库中- 这应该很容易自动化,因为我们没有很多服务器。是否有任何命令可以让我通过提供 ssh 凭据将现有的聚合节点添加到 chef-zero?我知道这knife zero bootstrap <node-ip>会奏效,但它也会触发我不想发生的额外收敛。

4

2 回答 2

0

整个问题是基于错误的假设:

  • 我认为厨师节点会持续存在并管理它自己的状态。它不是。节点状态在厨师运行结束时被序列化并传递给服务器,因此无法重新发现节点,因为我在没有厨师运行的情况下尝试。如果你需要服务器属性,你可以尝试用空运行列表聚合节点;由于运行列表不会保留在节点本身上,因此这应该是安全的操作。
  • 我还认为 chef-zero 以某种方式管理节点状态,而不是使用 json 文件。这是因为我试图在 json 中直接指定节点角色,而它们不断地从run_list. 这使得我所说的“发现”根本没有必要。

以下结构足以让 chef-zero 看到节点并成功收敛:

{
  "name": "sonarqube.srv.company.my",
  "automatic": {
    // automatic attributes are managed by ohai, so be ready that next 
    // chef run may use another fqdn if you haven't pinned it with 
    // any means possible
    "fqdn": "99-199-255-99.srv.company.my"
  },
  "run_list": [
     "role[role-1]"
     "recipe[cookbook::recipe]"
  ]
}

如果您将这样的定义存储在 git 中,那么您始终拥有您的基础设施,并且可以knife converge name:sonarqube.srv.company.my随时进行,这超出了我的所有需求。我的个人工作流程包含以managed-nodes节点规范命名的目录,如上面覆盖包含的 bash 脚本nodes上的目录。bin/reset只要我将它们存储在适当的运行列表和属性中,一切都会像魅力一样工作。但是,如果您选择类似的工作流程,请记住,如果没有在节点上成功运行厨师,您不必完整属性列表。

纯粹基于 git 的厨师工作流程没有持久服务器的必要性是由一些我不想透露的内部原因决定的。好的,我只是想要幂等的ansible。

感谢@Tensibai 的所有努力。

于 2016-11-09T02:05:01.300 回答
0

为了清楚起见,您基本上是在描述制作自己的(坏)厨师服务器。如果您想要集中管理,您可能应该只使用 Chef Server 并节省一些时间 :)

于 2016-11-18T13:38:57.463 回答