我正在为我的应用程序编写一个人偶模块,从几天开始,我就一直沉迷于如何管理存储库。
我有 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 似乎也不起作用。
我应该如何解决此问题?在这种情况下有什么好的做法?
先谢谢了。
答案 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
。