如何使用角色更改食谱中定义的属性值。
用例:
我有一本食谱
mkdir
├── Berksfile
├── LICENSE
├── README.md
├── attributes
│ └── attribute.rb
├── chefignore
├── metadata.rb
├── recipes
│ └── default.rb
├── spec
│ ├── spec_helper.rb
│ └── unit
│ └── recipes
│ └── default_spec.rb
└── test
└── integration
└── default
└── default_test.rb
在attribute.rb中,我有以下内容:
node.override [' main'] ['目录'] =" rolesquestionserverA"
在recipe / default.rb中,我有以下
bash 'extract_module' do
code <<-EOH
mkdir -p /tmp/#{node['main']['directory']}
EOH
end
现在在服务器A上,我想要一个使用rolesquestionserverA
创建的目录在服务器B上我想要一个目录createdrolesquestionserverB&#34;
在Roles目录中,我有以下内容:\
name "mkdir"
description "An example Chef role"
run_list "recipe[mkdir]"
override_attributes({
#"starter_name" => "Test ",
"directory" => "rolesquestionserverB"
})
我已将此角色仅添加到服务器B的配方中,但是当它在服务器B上运行时,它不会被覆盖,而只是创建一个与食谱中名称相同但不在角色中的目录 如何使用角色和角色来控制它?属性?还是有更好的方法来实现这个目标?
谢谢
答案 0 :(得分:0)
"main"
未附加到属性结构的顶级。您必须始终使用完整路径。
您的覆盖属性应如下所示:
override_attributes({
"main" => {
"directory" => "rolesquestionserverB"
}
})
您是否考虑过使用the directory resource?在每个示例中放置execute / bash / script没有多大意义,并且它不是Chef的最佳用法。