【问题标题】:Get list of installed cookbooks along with their version获取已安装说明书的列表及其版本
【发布时间】:2019-12-06 02:36:32
【问题描述】:

我有一台通过 chef 配置的服务器。现在我想确切地知道这台服务器上安装了哪些食谱版本。

作为厨师新手,我使用grep 进行了如下工作,但我想知道是否有某种官方方法可以获取该信息。

sudo grep -E '^version|"version":' /var/chef/cache/cookbooks/*/metadata*

是否有一个chef 命令列出所有已安装的说明书及其版本?

【问题讨论】:

    标签: chef-infra


    【解决方案1】:

    尝试以下方法:

    knife cookbook list | awk '{printf "knife cookbook show %s\n",$1}'| bash
    

    将打印出与每本食谱相关的版本。例如:

    java   1.31.0  1.29.0
    mysql   6.0.22  6.0.21
    rbac   1.0.3
    smf   2.2.6
    yum   3.6.0
    yum-mysql-community   0.1.17
    

    【讨论】:

    • 这不是列出了可以安装的说明书吗?我想知道的是当前安装了什么。
    • 刀菜谱列表 --> 列出已安装的菜谱; Knife cookbook show --> 在参数中显示所有版本的cookbook
    • @muhqu 该命令生成一组刀命令,显示安装在 chef 服务器上的每个说明书的所有版本。
    • 没错,但这不是我想要的。我想知道哪些食谱(和版本)已部署到“节点”。例如。厨师客户运行的地方。
    • @user674669 不同的问题。试试这个stackoverflow.com/questions/48168084/…
    【解决方案2】:

    上面的一些变化。

    sudo grep -o -e '\"version\"\:\"[a-zA-Z0-9.]*\"' -e '\"version\"\: \"[a-zA-Z0-9.]*\"' /var/chef/cache/cookbooks/*/metadata.json
    

    【讨论】:

    • 我在 CentOS 6.6 上收到此错误:grep: /var/chef/cache/cookbooks/*/metadata.json: No such file or directory
    【解决方案3】:

    这在 CentOS 6.6 上对我有用:

    for filename in `ls /var/cache/chef/cookbooks`; \
    do \
        echo -n "$filename "; \
        grep version /var/cache/chef/cookbooks/$filename/metadata.rb; \
    done | column -t
    

    【讨论】:

      【解决方案4】:

      首先,没有官方的厨师方法来获取安装的食谱版本列表。

      但你可以使用berkshelflibrarian-chef之类的工具,把你需要的所有食谱都放进去。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-08
        • 1970-01-01
        • 2013-02-17
        相关资源
        最近更新 更多