【问题标题】:How to run a Chef recipe如何运行厨师食谱
【发布时间】:2019-12-23 12:10:46
【问题描述】:

在我的一个节点上,我的运行列表中有三本食谱。当 Chef 客户端运行时,我可以看到其中两个配方已执行,但第三个未执行。造成这种情况的可能原因是什么?

当我执行厨师客户端时,我看到:

resolving cookbooks for run list: ["vim", "vim::vimrc", "ssh-keys"]

然后:

Converging 2 resources
Recipe: vim::default
* package[vim] action install (up to date)
Recipe: vim::vimrc  
* template[/etc/vim/vimrc.local] action create (up to date)

但是ssh-keys 配方没有被执行。

造成这种情况的可能原因是什么?我正在尝试使用ssh-keys 配方。

【问题讨论】:

    标签: chef-infra chef-recipe


    【解决方案1】:

    根据ssh-keyscookbook,它需要操作系统用户名和数据包“用户”的ID。这意味着您必须拥有:

    • 名为 users 的数据包
    • 该数据包中的条目包含ssh_keys 键。

    如果没有找到ssh_keys,它将根本无法解析任何资源。

    【讨论】:

    • 谢谢,问题是在我的数据包条目中我错误地调用了键 ssh-key 而不是 ssh_keys
    【解决方案2】:

    如果您查看ssh-keys::default 配方,您会注意到前面有一个if

    if node[:ssh_keys]
    

    同时attributes文件没有提供这个属性,所以是nil,并且执行不会进入block里面。

    【讨论】:

    • 我在角色的default_attributes 中提供该属性,该角色还在其运行列表中为此节点指定配方。不应该这样做吗?
    • 另外,即使使用 if 语句,我不会在厨师客户端的输出中看到食谱,就像我在问题中显示的两个 vim 食谱一样?
    • 它显示 Converging 2 resources,而不是 2 个食谱。您在那里只看到了 2 个食谱,因为没有其他资源需要更新。
    • @shawnzhu 这是否意味着如果没有更新资源,即使我在 if 之前放置日志语句,我也不会看到该配方的任何输出?
    • @NieldeWet 在编译阶段之后,配方并不重要。因此您不会在聚合资源运行队列中看到任何资源更新。配方中的日志记录语句应该在编译阶段执行(我没有尝试过)。这是一篇名为The Chef Resource Run Queue 的好博文供您参考。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多