Chef infra 如何为节点设置环境

Chef infra 如何为节点设置环境,chef-infra,chef-solo,knife-solo,Chef Infra,Chef Solo,Knife Solo,我正试图根据环境,使用特定的run\u列表来配置某些节点。因此,我创建了环境,然后创建了角色并指定了env\u run\u list,然后创建了节点my\u node\u ip.json: { "chef_environment": "test", "run_list":["role[base]"] } 但是当我启动时,默认的环境被设置。在我做了-E测试标记之后,它就正常工作了。当我在节点的配置中指定chef_environment变量时,这不是我期望的正确行为 是否有更好的方法避免使

我正试图根据环境,使用特定的
run\u列表来配置某些节点。因此,我创建了环境,然后创建了角色并指定了
env\u run\u list
,然后创建了节点
my\u node\u ip.json

{
  "chef_environment": "test",
  "run_list":["role[base]"]
}
但是当我启动
时,默认的
环境被设置。在我做了
-E测试
标记之后,它就正常工作了。当我在节点的配置中指定
chef_environment
变量时,这不是我期望的正确行为


是否有更好的方法避免使用
-E
标志?

否。。。。-E参数是指定环境的方式。环境不会出现在运行列表上。同样,环境不是节点属性。您是对的,节点没有“chef_environment”属性,我在关于环境的糟糕文章中看到过:)那么,在默认情况下,是否无法将节点配置为“test”环境?它让我时刻记得节点和它的阶段。有一个“默认”环境,但最好不要自定义它!你想解决的问题是什么?为了控制节点运行列表,我通常使用厨师角色。不过,复杂的运行时决策最好放在cookbook recipes中,在cookbook recipes中,逻辑可以保持在修订控制之下,并使用Berkself等工具加载到chef server中。@MarkO'Connor我有环境配置,它有默认/vagrant/test环境的选项,还有一个角色“base”其中包含每个已定义环境的环境运行列表。我在它的运行列表中有一个角色为[base]的节点。所以,当我创建新节点时,我只想在configs中为它指定env,而忘记它:),因为vagrant节点将始终只使用vagrant env。在“cook”命令中再加一个标志是没有问题的,但是只写“knife solo cook ip”会更好一些。您可以在一本应用程序烹饪书中轻松地完成这项工作,测试“node.chef_environment”的值。事实上,在chef中有很多方法可以做到这一点。我只是建议在烹饪书中保留复杂的逻辑,以便版本控制。