【问题标题】:How do I deal with puppet modules with classes of the same name?如何处理具有相同名称的类的 puppet 模块?
【发布时间】:2015-05-15 07:52:37
【问题描述】:

我有一个使用 gini-archive 的 puppet 模块。最近我将我的模块更改为依赖biemond-wildfly,它依赖于nanliu-archive

但是,我无法安装 nanliu-archive,因为这两个归档模块都安装在名为 archive 的目录中。我认为这违反了 puppet 模块要求,因为它们都应该安装到名为 <username>-archive 的目录中。

但是,即使我将它们放在不同的目录中,我仍然有问题。这两个类都称为archive(实际上一个是类,一个是定义,但我认为现在这不太重要),所以当我的模块说include archive时,puppet 不会知道是哪一个我要。

请注意,我有一个 java 背景,其中每个类都在一个包层次结构中,可以防止此类问题,但我看不到 puppet 的任何等效项。

我知道我可以加载大量不同的模块目录(/etc/puppet/modules/etc/puppet/modules2 等),但 puppet 似乎仍然按顺序查看这些目录,这意味着它总是会从第一个加载 archive 类列表中的模块目录。

有没有办法解决这个问题,或者我已经达到了 puppet 的极限?我宁愿不必分叉每个模块并更改类名,这似乎违背了伪造的意义。

谢谢。

【问题讨论】:

    标签: puppet


    【解决方案1】:

    模块所在目录的名称必须为archive,用户名仅用于分发和打包模块的目的,不供puppet在自动加载时使用。基本上,你看到的是正确的。

    似乎有两种处理方式:

    1. 分叉两个存档模块之一并重命名该模块,使其不会发生冲突
    2. 使用存档模块派生其中一个模块并将其迁移到使用与另一个相同的存档模块。由于这两个归档模块做的事情几乎相同,我更喜欢这种方法。

    【讨论】:

    • 我觉得这个答案是正确的,但接受它是真的太痛苦了。
    【解决方案2】:

    我刚刚这样做了,所以我将通过使用我刚刚分叉并重命名的模块作为示例来包含更多详细信息,从而对@ChrisPitman 的答案中的选项 (1) 进行一些扩展。

    (不幸的是)最简单的解决方案是分叉其中一个模块并重命名它。下面是一个使用puppet/selinuxthias/selinux 的示例,它们在selinux 有命名空间冲突。采取以下步骤将thias/selinux 模块重新命名空间到命名空间selinux_thias

    1. 分叉模块。在这个例子中,我从thias/puppet-selinux 创建了USF-IMaRS/puppet-selinux
    2. 将模块安装到modules/$NEW_NAME。使用 git 子模块是:git submodule add https://github.com/USF-IMARS/puppet-selinux modules/selinux_thias
    3. 重命名模块类。 Here 是一个提交,展示了这基本上是什么样的。
    4. 使用 thias/selinux 修改模块以使用新名称 selinux_thias 而不是 selinux

    【讨论】:

      猜你喜欢
      • 2011-09-17
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2012-01-31
      • 1970-01-01
      • 1970-01-01
      • 2011-11-20
      相关资源
      最近更新 更多