木偶:编写回购资源,但将其包含在多个位置而无需重复

时间:2019-01-19 18:51:08

标签: deployment puppet

我正在为我的应用程序编写一个人偶模块,从几天开始,我就一直沉迷于如何管理存储库。

我有 puppet 4.10 ,并且所有节点都是 Centos 7

我的应用程序模块中的 init.pp 文件是:

 class my_app{
   anchor { '::my_app::begin': } ->
   class { '::my_app::repo': } ->
   class { '::my_app::install': } ->
   class { '::my_app::config': } ->
   class { '::my_app::service': } ->
   anchor { '::my_app::end': }
}

repo.pp 类是:

class my_app::repo{
  if ! defined(Yumrepo[my_app]) {
    yumrepo {'my_app' :
      ensure   => 'present',
      descr    => 'my_app RPM repository',
      baseurl  => 'http://my_repo_server.com/repos/my_app',
      gpgcheck => 0
    }
  }
}

init.pp 类已安装在所有服务器上,现在的问题是所有客户端以及某些服务器也需要具有 my_app_client.pp

class my_app::my_app_client{
  include my_app::repo
  [...]
}

代码返回错误已经声明,因为我两次声明了类 my_app :: repo

在这种情况下,我认为定义2个repo定义是不正确的,并且将其声明为 Defined Resource Types 似乎也不起作用。

我应该如何解决此问题?在这种情况下有什么好的做法?

先谢谢了。

1 个答案:

答案 0 :(得分:1)

这里的问题是您不能使用

class { '::my_app::repo': }

include my_app::repo

在相同的清单中。

此文档位于https://puppet.com/docs/puppet/5.3/lang_classes.html#declaring-classes。结果是,每个类只能使用一次类似资源的声明(因此,class),并且不能将其与include混合使用,但是可以include一个类尽可能多的次数。

对于您而言,我建议您重构include类中的整个使用my_app