【问题标题】:How can one pass attribute values during the chef-client run command如何在 chef-client 运行命令期间传递属性值
【发布时间】:2018-09-15 17:33:56
【问题描述】:

我在属性文件中定义了以下属性


node.default['main']['a2'] = "hello world"

在我的食谱中,我用以下方式调用它

配方:: 默认


版权所有 (c) 2018 作者,保留所有权利。

执行“just_test”
命令“触摸/tmp/a2345”
结束
执行“just_test1”做
命令“触摸#{/tmp/node['main']['a2']}”
结束
执行“just_test2”做
命令 "echo #{node['main']['a2']}"
结束

我想在运行时传递属性的值,默认为“hello world:”,它会创建一个名为 hello world 的目录,

如何在节点实例上运行 chef-client 期间更改属性值???从“hello world”到“chef deploy”的不同值

谢谢

【问题讨论】:

    标签: chef-infra chef-recipe cookbook


    【解决方案1】:

    您可以通过将 json 传递给命令行的 -j 参数来实现。这是非常不鼓励的。这将导致创建一个永久的正常属性并与该节点关联,这变得难以维护和调试。

    您想在节点的 run_list 中设置角色或角色说明书,或者将已编译的策略文件应用于节点。将其分配在“默认”或“覆盖”级别(NOT“正常”级别)。

    如果您正在尝试测试您的食谱,您应该查看支持通过 .kitchen.yml 文件设置属性的 test-kitchen,然后可以使用该文件启动新的、干净的 virt、安装 chef 并编译你的食谱代码,让你摆弄属性。

    【讨论】:

    • 您可以提供一些示例文件以供审核吗??
    【解决方案2】:

    您可以在role 中设置属性,它的precedence 比在食谱中设置的要高。您也可以在运行时使用 -j 选项将属性作为 json 文件传递​​,但就像上面回答中提到的那样,它将被设置为普通属性,并在成功运行结束时收敛到节点。

    你可以创建像 myattributes.json 这样的 json 文件

    { "main": {
              "a2": "chef deploy"
              }
    }
    

    运行chef-client -j myattributes.json

    【讨论】:

      猜你喜欢
      • 2020-06-28
      • 2020-02-14
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 2019-01-08
      • 1970-01-01
      • 2017-04-01
      相关资源
      最近更新 更多