首页 > 解决方案 > 在 Chef-Client 运行时更新 Chef 属性

问题描述

怎么了伙计们,我目前正在尝试在厨师客户端运行时更新我的​​食谱属性之一,在我的食谱中。但是,我不认为我这样做是正确的,而且我不知道这是否可能。这是我正在尝试的:

我的 Attributes/default.rb 看起来像这样:

default['jenkins']['master']['host'] = lazy { node.run_state['jenkinsHost'] } 
default['jenkins']['master']['port'] = 8080 
default['jenkins']['master']['endpoint'] = lazy { "http://#{node['master']['host']}:8080"}

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

aws_ssm_parameter_store 'getJenkinsMasterHost' do
    path '/Global/Jenkins/MasterHost'
    return_keys 'jenkinsHost'
    action :get
end

node.run_state[:jenkins_master_endpoint] = "http://#{node.run_state['jenkinsHost']}:8080"

尝试使用从 ssm 参数存储中拉下的任何内容覆盖默认 ['jenkins']['master']['endpoint'] 属性。

请帮忙。

标签: chef-infrachef-recipe

解决方案


我的一位同事帮助我解决了这个问题,并建议我把它放在一个 ruby​​_block 资源中,下面的代码片段如下所示:

ruby_block 'update jenkins endpoint' do
  block do
    node.override['jenkins']['master']['endpoint'] = "http://#{node.run_state['jenkinsHost']}:8080"
  end
  action :run 
end

推荐阅读