【问题标题】:How to control attributes with roles in CHEF如何在 CHEF 中使用角色控制属性
【发布时间】:2018-04-09 12:27:05
【问题描述】:

如何使用角色更改说明书中定义的属性值。

用例:

我有一本食谱

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']['directory'] = "rolesquestionserverA"

node.default['main']['directory'] = "rolesquestionserverA"

在 recipe/default.rb 我有以下内容

bash 'extract_module' do
  code <<-EOH
    mkdir -p /tmp/#{node['main']['directory']}
    EOH
end

现在在服务器 A 上,我想要一个使用角色问题服务器 A 创建的目录

在服务器 B 上,我想要一个目录 createdrolesquestionserverB"

在 Roles 目录中,我有以下内容:\

name "mkdir"
description "An example Chef role"
run_list "recipe[mkdir]"
override_attributes({
   #"starter_name" => "Test  ",
   "directory" => "rolesquestionserverB"
})

我已将此角色添加到仅用于服务器 B 的配方中,但当它在服务器 B 上运行时,它不会被覆盖,而只是创建一个与说明书中名称相同的目录,而不是角色中的目录 我如何使用角色和属性来控制它?还是有更好的方法来实现这一点??

谢谢

【问题讨论】:

    标签: chef-infra chef-recipe cookbook


    【解决方案1】:

    "main" 未附加到属性结构的顶层。您必须始终使用完整路径。

    您的覆盖属性应如下所示:

    override_attributes({
       "main" => {
          "directory" => "rolesquestionserverB"
       }
    })
    

    您是否考虑过使用the directory resource?把execute/bash/script放在每个例子里没有多大意义,也不是Chef的最佳用法。

    【讨论】:

      猜你喜欢
      • 2013-06-16
      • 2015-06-06
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多