【问题标题】:conditional within define in puppet在 puppet 中定义条件
【发布时间】:2015-12-25 01:09:05
【问题描述】:

运行木偶 3.8

我有两个定义:

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

    define desktop::vinstallwseeds () {  
      package { $title:
        ensure        => installed,  
        allow_virtual => true,  
        configfiles   => keep,
        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,  
      }  
    }

希望将这些转换为带有可选布尔参数的定义语句,例如:

    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 用户那里找到一种方法来完成这项工作,但到目前为止没有运气。

【问题讨论】:

    标签: puppet


    【解决方案1】:

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

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

    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",  
        } 
    }
    

    请注意,这种 override 语法只允许在此范围内使用,因为 requireresponsefile 属性最初没有分配任何值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多