【问题标题】:chef cookbook dependency on system software not on another cookbook厨师食谱依赖于系统软件而不是另一个食谱
【发布时间】:2015-09-08 23:08:18
【问题描述】:

作为平台设置编排的一部分,我们使用我们的 python 包在云中的机器集群上安装各种软件包。

我们有以下场景:

  1. 我们的 python 包启动某些软件包(例如 A、B、C)的安装,然后同时启动某些其他软件包(例如 D、E、F)的安装。 (注:D、E、F 来自我们的厨师食谱,A、B、C 来自我们的 Python 程序)

  2. 我们的问题是软件 D(通过厨师食谱安装)依赖于软件 A。

  3. 由于 D 依赖于 A,因此 D 的食谱在系统中找不到 A 并失败。

我的想法是,如果我们可以在厨师食谱中有一个依赖项,说只有在系统中找到 A 时才继续,否则等待!

有可能吗?上述问题有什么替代方案吗?

谢谢

【问题讨论】:

  • 你为什么不管理来自 chef 的所有包?我能下车的唯一想法是不运行包资源的警卫是 A 不存在,测试存在取决于你在谈论什么 pckage (系统?pip?别的东西?)
  • @Tensibai 是的,我在谈论 hadoop 包(更准确地说是 HDP 存储库)。警卫为我工作。谢谢

标签: python automation chef-infra orchestration


【解决方案1】:

我应用了以下步骤来解决我的问题

  1. 找到独立软件安装后创建的目录
  2. 等待目录被创建(使用 ruby​​ 块代码进行休眠)并随后开始安装依赖软件以确保满足依赖关系。

解决了我的问题..

【讨论】:

    【解决方案2】:

    您可以考虑使用puppet。 Whit puppet 您可以定义所需的resources(例如package)并在资源之间定义relationships

    例如木偶清单:

    package { ["A", "B", "C", "E", "F"]:
      ensure => 'installed',
    }
    
    package { "D":
      ensure => 'installed',
      require => Package['A'],
    }
    

    更新:更新了示例木偶清单。

    【讨论】:

    • 另外,""" package { ["A", "B", "C"]: ensure => 'installed', } """ 在执行这个时,如果它没有找到 A ,B,C ,它会等待他们还是只是抛出一个错误说“找不到包”?
    • 您要求替代品,所以我建议使用 puppet。不幸的是,我不熟悉厨师。 Puppet 确保系统处于 puppet manifest 中描述的状态。所以它会安装包“A”、“B”、“C”、“E”、“F”,如果还没有安装的话。只有当系统中已经存在包“A”时,Puppet 才会安装包“D”。
    • 你在做同样的事情,在 chef 中它是通过订购,在这里你用 Puppet 安装所有的包,对于 chef 也是一样的。但这并不能回答在尝试安装包之前从 CM 系统测试包可用性的问题。
    • 而在 chef 中,您可以省略 3 次定义并按所需顺序遍历所有包,Chef 不会在后台重新排序您描述的内容。
    猜你喜欢
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多