gpt4 book ai didi

chef-infra - Chef : How do I override default attributes in roles?

转载 作者:行者123 更新时间:2023-12-03 11:02:27 24 4
gpt4 key购买 nike

我正在使用操作码 nginx cookbook用于在我的节点上配置 nginx 服务器。
nginx 说明书有一些我想在我的角色(“web_server”)中覆盖的默认属性。

这些是我想覆盖的属性:

default['nginx']['version'] = "1.2.2" # in cookbooks/nginx/attributes/default.rb
default['nginx']['source']['prefix'] = "/opt/nginx-#{node['nginx']['version']}" # in cookbooks/nginx/attributes/source.rb

在我的 roles/web_server.rb 文件中,我有这样的事情:
name "web_server"
description "Setup a web server"
run_list "role[base]", "recipe[nginx]"
override_attributes 'nginx' => {
'install_method' => "source",
'version' => "1.2.3",
'source' => { "prefix" => "/opt/nginx", "checksum" => nil }
}

但是,在运行 Chef-client 时,nginx 配方会忽略我的覆盖并使用默认的覆盖。

我在这里做错了什么?

谢谢!

最佳答案

根据Chef Attribute Preference文件,这应该工作:

name "web_server"
description "Setup a web server"
run_list "role[base]", "recipe[nginx]"
default_attributes 'nginx' => {
'install_method' => "source",
'version' => "1.2.3",
'source' => { "prefix" => "/opt/nginx", "checksum" => nil }
}

你不应该使用 override_attributes在角色中。一旦你开始使用覆盖而不是默认值,你很快就会发现你已经使用了最强的覆盖并且没有进一步的方法来覆盖它。使用 default_overrides反而。

围绕属性的优先规则,仅使用 default级别实际上非常相同:
  • 如果有,则使用角色的属性,例如,require_two_factor_authdefault_overrides 强制为真在 role[single_sign_on] ,即使在 QA
  • 如果有,则使用环境中的属性,例如,require_two_factor_authproduction 中强制为真
  • 如果有,则使用配方中的属性,例如 require_two_factor_authauth::two_factor 中设置为 true
  • 最后,使用来自默认属性文件的健全的默认属性,例如,require_two_factor_auth = false

  • 然而,在这四个地方都设置相同的属性是非常不寻常的。如果属性的正确值确实取决于配方、角色和环境,那么结果值通常会结合所有三者的特征,并在每个级别设置不同的属性并在配方中组合。

    如果这不起作用,则有两种可能性:
  • 编辑的角色未上传到服务器
  • 使用 chef-client -o "recipe[nginx]" 覆盖运行列表而不是 chef-client -o role[web_server]或普通 chef-client

  • 如果不是这种情况,请提供更多详细信息。我一直在使用它并且它总是有效,而且我会担心是否存在这种行为与记录不符的边缘情况。

    关于chef-infra - Chef : How do I override default attributes in roles?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12144592/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com