如何处理具有相同名称的类的木偶模块?

时间:2015-05-15 07:52:38

标签: puppet

我有一个使用gini-archive的木偶模块。最近我将模块更改为依赖于biemond-wildfly,这取决于nanliu-archive

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

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

注意我有一个java背景,其中每个类都在一个包层次结构中,可以防止出现这类问题,但是我看不到任何木偶的等价物。

我知道我可以拥有一大堆不同的模块目录(/etc/puppet/modules/etc/puppet/modules2等),但是木偶似乎仍然按顺序查看它们,这意味着它总是会加载{{1来自列表中第一个模块目录的类。

有没有办法解决这个问题,或者我达到了傀儡可以做的极限?我宁愿不必分叉每一个模块并更改类名,这似乎打败了伪造点。

感谢。

2 个答案:

答案 0 :(得分:2)

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

似乎有两种处理方法:

  1. 分叉两个存档模块中的一个并重命名模块,使其不会发生碰撞
  2. 使用存档模块分叉其中一个模块并将其迁移以使用与另一个模块相同的存档模块。由于两个存档模块几乎完全相同,我更喜欢这种方法。

答案 1 :(得分:0)

我刚刚这样做了所以我将在@ ChrisPitman的答案中扩展一下选项(1),通过使用我刚刚分叉的模块包含更多细节。重命名为一个例子。

(不幸的是)最简单的解决方案是分叉其中一个模块并重命名。以下是使用puppet/selinuxthias/selinuxselinux处发生命名空间冲突的示例。执行以下步骤将thias/selinux模块重命名为命名空间selinux_thias

  1. 分叉模块。在此示例中,我从USF-IMaRS/puppet-selinux创建了thias/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