【问题标题】:Override chef attributes globally from a cookbook从食谱全局覆盖厨师属性
【发布时间】:2016-10-27 02:46:52
【问题描述】:

我们正在使用 chef 来管理我们的 vagrant 设置中的 Ruby 版本,使用 rbenv 和 ruby​​-build。尽管 rbenv 明确拒绝实现它,但我们想要的一个功能是为 ruby​​ 版本提供“模糊”版本匹配(例如,将 1.9.3 转换为 1.9.3-p123)。

我希望在一个独立的配方中透明地处理这个问题,该配方可以放置在 run_list 中的 ruby​​-build 和 rbenv 之间。我的代码“有效”(根据ruby-build --definitions 的输出确定最新的匹配 ruby​​ 版本),但是在运行 rbenv 食谱时更改不会保留,所以我假设它们是我的食谱的本地代码。有没有办法在运行期间全局更新属性?

我应该补充一点,我不熟悉厨师。这超出了我通常工作的领域。我知道这可能是一个奇怪的用例,如果我正在尝试做的事情确实令人震惊,那么实现我想要的更好的方法是什么?

以下是我目前食谱的概要:

original_rbenv_rubies = node[:rbenv][:rubies]
new_rbenv_rubies = determine_full_ruby_versions original_rbenv_rubies
node.force_override[:rbenv][:rubies] = new_rbenv_rubies

【问题讨论】:

    标签: ruby chef-infra chef-recipe rbenv


    【解决方案1】:

    我通过使用我的食谱作为 rbenv 食谱的包装解决了这个问题。我将上面的逻辑移到默认属性文件中,并使用include_recipe 将原始配方包含在我自己的中。由于某种原因,新属性仍然没有被拾取,所以我将原始值移动到node[:rbenv_wrapper][:rubies],并使用override将新属性设置为node[:rbenv][:rubies],之后一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-21
      • 2015-05-04
      • 2015-05-31
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多