运行木偶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语句,例如:
    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行具有上述语法。我是puppet的新手,因此很抱歉,这真是一个简单的语法问题。我一直试图从PuppetLabs文档和其他木偶用户那里找到一种使这项工作可行的方法,到目前为止还算不上运气。

最佳答案

您正在尝试将if块嵌入资源声明中。 las,这是不可能的。该块必须是全局块或规则块(例如,类主体,定义主体,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",
    }
}

请注意,此覆盖语法仅在此范围内允许,因为requireresponsefile属性最初没有分配任何值。

10-05 20:40
查看更多