Chef infra 如何自动将节点分配给环境?

Chef infra 如何自动将节点分配给环境?,chef-infra,chef-recipe,knife,cookbook,Chef Infra,Chef Recipe,Knife,Cookbook,您可以在引导时将节点分配给环境,但我已经有一堆生产节点处于默认状态 我可以使用刀子将它们分配给其他环境,或者我正在考虑为每个环境分配一个角色,该环境有一个运行chef client::config并设置环境属性的配方,然后我可以将节点分配给正确的环境角色。我认为,使用一个角色的问题是,我必须跳出额外的障碍,才能在测试厨房里把事情联系起来 厨师通常如何解决这个问题?正确的起点是使用转换脚本的刀执行 这可能会让您开始: knife exec -E 'nodes.transform("roles:fo

您可以在引导时将节点分配给环境,但我已经有一堆生产节点处于默认状态

我可以使用刀子将它们分配给其他环境,或者我正在考虑为每个环境分配一个角色,该环境有一个运行chef client::config并设置环境属性的配方,然后我可以将节点分配给正确的环境角色。我认为,使用一个角色的问题是,我必须跳出额外的障碍,才能在测试厨房里把事情联系起来


厨师通常如何解决这个问题?

正确的起点是使用转换脚本的刀执行

这可能会让您开始:

knife exec -E 'nodes.transform("roles:foo") {|n| n.chef_environment = "foo" }'

参数there是一个搜索查询(您也可以使用
“*:*”
获取所有节点),然后对块中的每个节点对象执行一些操作。如果块的返回值为true-y,则会保存,如果为false-y,则不会保存。

您是否曾通过chef client cookbook将环境分配给节点?《学习厨师》一书中提到了这种方法,但我不明白它比仅仅使用刀子有什么好处。我还没有读过这本书,所以你必须更具体一些。通常,chef client cookbook中的内容会写入client.rb配置,这是非常不推荐的,因为它会不断覆盖来自chef服务器的信息。