puppet中的条件定义

puppet中的条件定义,puppet,Puppet,跑步机3.8 我有两个定义: define desktop::vinstall () { package { $title: ensure => installed, allow_virtual => true, configfiles => keep, } } 及 要将这些转换为一个带有可选布尔参数的define语句,如: defin

跑步机3.8

我有两个定义:

    define desktop::vinstall () {  
      package { $title:  
        ensure        => installed,  
        allow_virtual => true,  
        configfiles   => keep,  
      }  
    }  

要将这些转换为一个带有可选布尔参数的define语句,如:

    define desktop::vinstallopt ( $queryresponse = 'false', ) {  
      package { $title:  
        ensure        => installed,  
        allow_virtual => true,  
        configfiles   => keep,  
        if $queryresponse == 'true' {  
          require      => File["/var/cache/debconf/pkg-${title}.seeds"],  
          responsefile => "/var/cache/debconf/pkg-${title}.seeds",  
        }  
      }  
      file { "/var/cache/debconf/pkg-${title}.seeds":  
        source => "puppet:///modules/desktop/pkg-${title}.seeds",  
        ensure => present,  
      }  
    }  
然后用init.pp中的语句实例化它:

    @desktop::vinstallopt { 'gdebi': queryresponse => 'false', }
但这样做会产生一个错误:

    Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Puppet::Parser::AST::Resource failed with argument error ArgumentError: Invalid resource type desktop::vinstallopt at /etc/puppet/modules/desktop/manifests/init.pp:40 on node machine.prvt.net

其中第40行具有上述语法。我是一个木偶新手,所以如果这是一个简单的语法问题,我很抱歉。我试图从PuppetLabs文档和其他puppet用户那里找到一种方法来实现这一点,但迄今为止还没有成功。

您试图在资源声明中嵌入
if
块。唉,这是不可能的。块必须是全局的或在常规块中(例如,类体、定义体、lambda体)

在这种情况下,可以说,您希望“修改”
资源。为此,我喜欢使用以下构造:

package { $title:  
    ensure        => installed,  
    allow_virtual => true,  
    configfiles   => keep,  
}  
if $queryresponse {  
    Package[$title] {
        require      => File["/var/cache/debconf/pkg-${title}.seeds"],  
        responsefile => "/var/cache/debconf/pkg-${title}.seeds",  
    } 
}
请注意,由于
require
responsefile
属性最初没有分配任何值,因此仅在此范围内允许使用此重写语法

package { $title:  
    ensure        => installed,  
    allow_virtual => true,  
    configfiles   => keep,  
}  
if $queryresponse {  
    Package[$title] {
        require      => File["/var/cache/debconf/pkg-${title}.seeds"],  
        responsefile => "/var/cache/debconf/pkg-${title}.seeds",  
    } 
}