0

假设我有:

$files = ["file1", "file2"]
exec { "exec1" :
    command => "mycommand";
}
file { $files :
    ensure => present;
}

我想使用->and~>结构来控制执行的通知/要求顺序,如下所示:

Exec["exec1"] -> File[$files]

我该怎么做?

如果我执行上述操作,我会得到Could not find resource 'File[file1]File[file2]'(当然,对于真实的文件路径)。我玩过用$files引号和 {} 包装变量,但无济于事。

将资源名称的数组变量放入排序链的语法是什么?

4

2 回答 2

2

您可以使用来自 RIPienaar 的大量提示中的“数组中的内容”提示:

首先定义一个处理链接的函数,然后将数组传递给该函数。
该函数将为数组中的每个项目调用一次。

代码示例时间:

exec { "exec1":
     command => "/bin/echo 'i am the very model of a modern major general'";
}

file { 
    "/var/tmp/file1":
        ensure => present;
    "/var/tmp/file2":
        ensure => present;
}

define chaintest() {
    notify{"Calling chaintest with ${name}": }
    Exec["exec1"] -> File["${name}"]
}

$files = ["/var/tmp/file1","/var/tmp/file2"]

chaintest{$files: }

Ubuntu 12.04 上 puppet 2.7.11 上的“puppet apply test.pp”的输出给出:

notice: Calling chaintest with /var/tmp/file1
notice: /Stage[main]//Chaintest[/var/tmp/file1]/Notify[Calling chaintest with /var/tmp/file1]/message: defined 'message' as 'Calling chaintest with /var/tmp/file1'
notice: /Stage[main]//Exec[exec1]/returns: executed successfully
notice: Calling chaintest with /var/tmp/file2
notice: /Stage[main]//Chaintest[/var/tmp/file2]/Notify[Calling chaintest with /var/tmp/file2]/message: defined 'message' as 'Calling chaintest with /var/tmp/file2'
notice: Finished catalog run in 0.11 seconds
于 2012-06-21T17:46:40.980 回答
0

为什么不使用 require 呢?

$files = ["file1", "file2"]
exec { "exec1" :
    command => "mycommand";
}
file { $files :
    ensure => present;
    require => Exec["exec1"]
}

或者只是做

Exec["exec1"] -> [File["file1"], File["file2"]]
于 2012-06-20T18:05:06.590 回答