如何在另一个Puppet模块中声明影响资源类型

时间:2016-12-09 02:21:38

标签: puppet

我包含了类nova::compute::libvirt,这个类定义了一个Package资源,如下所示:

package { 'libvirt-nwfilter':
  ensure => present,
  name   => $::nova::params::libvirt_nwfilter_package_name,
  before => Service['libvirt'],
  tag    => ['openstack', 'nova-support-package'],
}

问题是RPM处于未启用的YUM仓库中enabled=0。 我可以通过更改nova::conpute::libvirt来解决此问题,以便Package资源看起来像这样:

package { 'libvirt-nwfilter':
  ensure => present,
  name   => $::nova::params::libvirt_nwfilter_package_name,
  before => Service['libvirt'],
  tag    => ['openstack', 'nova-support-package'],
  install_options => ['--enablerepo', 'redhat_updates'],
}

但是我不想修改我从木偶锻造中获得的模块,因为下次有人设置木偶大师时他们可能会忘记进行修改。我可以从包含nova::compute::libvirt的课程中做些什么吗?

2 个答案:

答案 0 :(得分:1)

您可以通过使用redhat_updates资源启用yumrepo yum repo,然后指定要在课程之前应用的元参数来解决此问题。

yumrepo { "redhat_updates":
  baseurl  => "baseurl",
  descr    => "Redhat Updates",
  enabled  => 1,
  gpgcheck => 0,
  before   => Class['nova::compute::libvirt'],
}

https://docs.puppet.com/puppet/latest/types/yumrepo.html

答案 1 :(得分:1)

Resource collectors提供了overriding attributes of resources declared elsewhere的可能性。语法如下:

Package<| title == 'libvirt-nwfilter' |> {
    install_options => ['--enablerepo', 'redhat_updates']
}

该替代方案避免了修改存储库定义,并且不需要引入任何新的排序关系。但请注意,收集器始终会实现任何匹配的虚拟资源。还要注意这种方法非常强大,因此很容易被滥用以使自己陷入困境。强大的力量带来了巨大的责任。