如何将数组作为参数传递给puppet类

时间:2015-10-06 17:04:57

标签: puppet

如何将参数传递给puppet类。 例如,我有这段代码:

class testlogging {
  file { '/home/amo/testloggingfile':
    ensure => 'present',
    source => 'puppet:///modules/testlogging/testlogging',
  }
}

我想要做的是将一个文件名/路径数组作为参数传递给这个类。

2 个答案:

答案 0 :(得分:2)

John Bollinger的答案是推荐的答案。如果你想没有Hiera yaml后端,你可以写一个define类型

class myclass {
 # Create a define type, that will take $name as the file
 # You provide $src for each file
 define mydefine ($src) {
   file { $name :
     ensure => present,
     source => "puppet:///modules/<mymodule>/$src",
   }
  }

  # Use two arrarys, one for file names and other for source
  $filearray=["/path/to/file1","/path/to/file2"]
  $filesrc=["source1","source2"]

  # Loop over the array
  each($filearray) | $index, $value | {
   mydefine{ $value :
      src => $filesrc[$index],
    }
 }

答案 1 :(得分:1)

你真的应该熟悉文档,特别是Language Reference。它的section on classes讨论了如何定义类以使其接受参数,以及如何指定所需的参数值。

但是,简而言之,模块myclass中接受所需参数的类mymodule的定义采用以下形式:

class mymodule::myclass($param) {
    # ...
}

您通常会通过自动数据绑定将值绑定到该类的参数,对于所有意图和目的,这意味着Hiera。要为Hiera的默认yaml后端指定要处理的数组值,数据将包含以下内容:

---
mymodule::myclass::param:
  - '/path/to/file1'
  - '/path/to/file2'

有关如何配置Puppet和Hiera的完整说明对于此论坛来说过于宽泛。