Aru*_*Raj 6 puppet puppet-enterprise librarian-puppet
我试图在define中传递多个参数.
以下是我的代码.我想在define中传递两个数组,但是我只能传递一个如下所示.
class test {
$path = [$path1,$path2]
$filename = [$name1,$name2]
define testscript { $filename: } // Can able to pass one value.
}
define testscript () {
file {"/etc/init.d/${title}": //Can able to receive the file name.
ensure => file,
content => template('test/test.conf.erb'),
}
Run Code Online (Sandbox Code Playgroud)
从我上面的代码,我可以检索filename定义资源内部.我还需要path在模板中设置值.我无法在模板中发送/检索第二个参数.
有没有办法改进我的代码以传递定义资源中的两个值($path和$filename)?
任何帮助深表感谢.
有没有办法改进我的代码来传递定义资源中的两个值($ path和$ filename)?
Puppet有很好的文档,很好地涵盖了这个领域.
首先,您需要了解定义的类型是一种资源类型,几乎在任何类似于任何内置或扩展类型的方式.如果您定义的类型接受参数,那么您可以将值绑定到这些参数,就像在任何其他资源声明中一样.例如:
class mymodule::test {
mymodule::testscript { $name1: path => $path1 }
mymodule::testscript { $name2: path => $path2 }
}
define mymodule::testscript ($path) {
file {"${path}/${title}":
ensure => 'file',
content => template('test/test.conf.erb')
}
}
Run Code Online (Sandbox Code Playgroud)
另外,因为定义的类型是资源类型,所以你应该放弃"传递"值的概念,就好像它们是函数一样.那种心理模型可能会背叛你.特别是,如果指定数组或散列作为资源标题,它肯定会给你错误的期望.
特别是,您需要了解在任何资源声明中,如果您将资源标题作为数组提供,那么这意味着每个数组成员都有一个单独的资源,数组成员作为该资源的标题.在这种情况下,这些资源中的每一个都接收相同的参数值,如声明正文中声明的那样.而且,资源标题总是字符串.除了一个级别的数组,如上所述,如果您将其他任何内容作为资源标题,那么它将被转换为字符串.