在傀儡中有没有办法用集合来实现虚拟资源,只有意识到?

在傀儡中,有可能通过实现function或集合来实现虚拟资源 。

我想知道是否有可能通过实现函数来实现资源。 作为一个简单的例子,我想要跟随清单nginx没有安装,除非包含nginx_conf模块,其中包含一个隐含的nginx_conf

 @package { 'nginx': ensure => present, } class nginx_conf { realize Package['nginx'] file { '/etc/nginx/conf.d/foo': ensure => present, require => Package['nginx'], } } exec { 'apt-get update': path => '/usr/bin' } Exec['apt-get update'] -> Package <| |> 

任何想法?

一个选项就是把这个包放在一个单独的类中,而这个类是要实现它的模块所需要的,但是我想知道是否有某种方法可以在集合中select虚拟资源,只要它们被实现了,只有通过collections才能体会到他们。

似乎没有一个完整的方法来防止Package <| |> 从实现资源。 这可能是一个部分的解决scheme:

 @package { 'nginx': ensure => present, tag => optional, require => Exec['apt-get update'], } Exec['apt-get update'] -> Package <| tag != optional |> 

那么你将不得不为每个虚拟包定义需求。

但是,通过使用运行阶段可以解决潜在的问题:

 class update-apt { exec { 'apt-get update': path => '/usr/bin' } } stage { 'first': before => Stage['main'] } class {'update-apt': stage => 'first', } 

所有的类和资源都默认在main-stage运行,所以Exec['apt-get update']总是在任何Package资源之前运行。