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

如何影响在另一个Puppet模块中声明的资源类型,puppet,Puppet,我包括类nova::compute::libvirt,该类定义了一个包资源,如下所示: package { 'libvirt-nwfilter': ensure => present, name => $::nova::params::libvirt_nwfilter_package_name, before => Service['libvirt'], tag => ['openstack', 'nova-support-package'],

我包括类nova::compute::libvirt,该类定义了一个包资源,如下所示:

package { 'libvirt-nwfilter':
  ensure => present,
  name   => $::nova::params::libvirt_nwfilter_package_name,
  before => Service['libvirt'],
  tag    => ['openstack', 'nova-support-package'],
}
问题在于RPM位于未启用的YUM repo中
enabled=0
。 我可以通过更改
nova::conpute::libvirt
来解决此问题,使包资源如下所示:

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'],
}

但我不想修改我从puppet forge获得的模块,因为下次其他人设置傀儡大师时,他们可能会忘记进行修改。对于包含
nova::compute::libvirt
的类,我可以做些什么吗?

您可以通过使用
yumrepo
资源启用
redhat\u更新
yum repo,然后为其指定一个元参数以在类之前应用来解决此问题

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

提供以下可能性:。语法是:

Package<| title == 'libvirt-nwfilter' |> {
    install_options => ['--enablerepo', 'redhat_updates']
}
包{
安装\u选项=>['--enablerepo','redhat\u更新']
}

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

只是好奇而已。请解释一下会导致意外实现虚拟资源的情况好吗?@RedCricket,根据我给出的具体代码,唯一的风险是
Package[libvirt nwfilter]
被声明为虚拟资源,而不是针对某个给定节点实现。然后,该收集器将决定为该节点实现(并因此应用)的资源与否,这似乎不是目的。当收集器的选择谓词不太具体时,此类风险更大。