gpt4 book ai didi

chef-infra - Chef 覆盖同一 Recipe 中另一个 Recipe 的属性

转载 作者:行者123 更新时间:2023-12-01 00:54:43 36 4
gpt4 key购买 nike

我有一本包含 2 个食谱的食谱。

属性/default.rb
default['vpn']['crt'] = 'nocrt'

默认配方具有创建通用 crt 文件的文件资源

file 'cert' do
path "/etc/vpn/#{node.default['network']['hostname']}.crt"
owner 'root'
group 'root'
mode '0644'
content node.default['vpn']['crt']
end

在第二个食谱中 client.rb ,我包括默认配方,为该“客户端”加载加密数据包并覆盖该属性。但它不会被覆盖。
include_recipe 'my-cookbook'

vault = ChefVault::Item.load('auth', 'client')

node.override['vpn']['crt'] = vault['crt']

...

文件内容 == 'nocrt'

根据 Chef's Attribute Precedence ,它应该覆盖 vault['crt'] 的内容.

更新:

Javier Cortejoso:您的答案在文件资源中使用时有效。

但请考虑以下示例:

属性/default.rb:
default['network']['hostname'] = 'generic-host-name'

在 recipes/default.rb 中:
Chef::Log.info(node['network']['hostname'])
Chef::Log.info(node.default['network']['hostname'])
Chef::Log.info(node.override['network']['hostname'])

在 recipes/client.rb 中:
node.override['network']['hostname'] = 'client-host-name'
include_recipe 'cookbook::default'

因此,即使我先将执行顺序更改为 client.rb 配方,然后在覆盖后使用 default.rb,它仍然为我提供主机名“generic-host-name”:
==> default: [2015-03-04T17:30:43+00:00] INFO: generic-host-name
==> default: [2015-03-04T17:30:43+00:00] INFO: generic-host-name
==> default: [2015-03-04T17:30:43+00:00] INFO: {}

解决方案

我是个傻逼。我的 Vagrant 文件中有这两个:
chef.add_role "cookbook"
chef.add_recipe "cookbook::client"

感谢 Javier Cortejoso 指出为我澄清了延迟属性加载。

最佳答案

IMO 似乎编译后该属性被覆盖了file['cert'] .这是一个“时间”问题,而不是“优先级”问题。为了获得正确的食谱执行顺序,您可能需要注意以下几点:

  • 执行顺序应该首先运行您覆盖属性的配方( client.rb ),然后是您使用覆盖属性的配方( default.rb )。
  • 您也可以使用 lazy attribute evaluation为您的属性与内容。

  • 所以你的 default.rb应该:
        include_recipe 'my-cookbook::client'
    file 'cert' do
    path "/etc/vpn/#{node.default['network']['hostname']}.crt"
    owner 'root'
    group 'root'
    mode '0644'
    content lazy node.default['vpn']['crt']
    end

    关于chef-infra - Chef 覆盖同一 Recipe 中另一个 Recipe 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28841990/

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