刀零现有节点发现

时间:2016-11-07 08:30:17

标签: chef knife chef-zero

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

2 个答案:

答案 0 :(得分:0)

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

  • 我认为厨师节点坚持并管理着自己的状态。它不是。节点状态在chef-run结束时被序列化并传递给服务器,因此我无法重新发现节点,因为我在没有厨师运行的情况下尝试。如果需要服务器属性,可以尝试使用空运行列表汇聚节点;由于运行列表不会在节点本身上持久化,因此这应该是安全的操作。
  • 我还认为,厨师零以某种方式管理节点状态,而不是使用json文件。这是我尝试直接在json中指定节点角色的结果,同时它们是从run_list不断重建的,所以我很困惑看到我的角色不适用;这使得&#34;发现&#34;我说的根本没必要。

以下结构足以让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的目录,其中包含上述节点规范,覆盖nodes上包含bash脚本的bin/reset目录。只要我用适当的运行列表和属性存储它们,一切都像魅力一样。但是,如果您选择类似的工作流程,请记住,如果没有成功的厨师在节点上运行,您就不必拥有完整的属性列表。

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

Kudos竭尽全力去@Tensibai。

答案 1 :(得分:0)

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