Puppet:编写一个 repo 资源,但将其包含在多个地方而不会重复
Puppet: write a repo resource but include it in multiple places without duplication
我正在为我的应用程序编写一个 puppet 模块,几天后我一直在研究如何管理 repo。
我有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 是:
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 class安装在所有的服务器上,现在的问题是所有的客户端,也许还有一些服务器也需要有my_app_client.pp:
class my_app::my_app_client{
include my_app::repo
[...]
}
代码 returns 一个错误 已经声明 因为我声明了 class my_app::repo两次。
我不认为在这种情况下定义 2 个 repo 定义是正确的,并且将其声明为 Defined Resource Types 似乎也不起作用。
我该如何解决这个问题?在这种情况下,好的做法是什么?
提前致谢。
这里的问题是你不能使用
class { '::my_app::repo': }
和
include my_app::repo
在同一组清单中。
相关文档位于 https://puppet.com/docs/puppet/5.3/lang_classes.html#declaring-classes。结果是你只能为每个 class 使用一次类似资源的声明(所以,class
)并且你不能将它与 include
混合使用,但你可以 include
a class 次数不限。
对于您的情况,我建议您重构以在整个 my_app
classes 中使用 include
。
我正在为我的应用程序编写一个 puppet 模块,几天后我一直在研究如何管理 repo。
我有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 是:
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 class安装在所有的服务器上,现在的问题是所有的客户端,也许还有一些服务器也需要有my_app_client.pp:
class my_app::my_app_client{
include my_app::repo
[...]
}
代码 returns 一个错误 已经声明 因为我声明了 class my_app::repo两次。
我不认为在这种情况下定义 2 个 repo 定义是正确的,并且将其声明为 Defined Resource Types 似乎也不起作用。
我该如何解决这个问题?在这种情况下,好的做法是什么?
提前致谢。
这里的问题是你不能使用
class { '::my_app::repo': }
和
include my_app::repo
在同一组清单中。
相关文档位于 https://puppet.com/docs/puppet/5.3/lang_classes.html#declaring-classes。结果是你只能为每个 class 使用一次类似资源的声明(所以,class
)并且你不能将它与 include
混合使用,但你可以 include
a class 次数不限。
对于您的情况,我建议您重构以在整个 my_app
classes 中使用 include
。