使用 puppet 和 hiera 安装一组文件
Installing a group of files with puppet and hiera
我有一个可以正确安装文件的 puppet 配置。我想让它安装几个文件。配置大致如下(与此处相关的部分):
$stuff = hiera('stuff')
$site_filename = $stuff['site_file']
file { "/path/to/my/file/called/$site_filename":
ensure => present,
owner => 'the-owner',
group => 'the-group',
mode => 644,
source => "puppet:///modules/this-module/$site_filename",
require => [Package['something'],
User['someone']]
}
file { "/path/to/my/symlink/called/$site_filename":
ensure => 'link',
target => "/path/to/my/file/called/$site_filename",
require => Package['something'],
}
效果很好,正确的文件安装在正确的主机上。但我现在想安装数量可变(非常相似)的文件,每个主机上的数量不同。
我的 hiera 文件目前是这样的:
stuff:
site_file: "hey-i-am-the-site-file-on-host-awesomeness"
原则上,我想说这样的话:
stuff:
site_file: ["hey-i-am-the-site-file-on-host-awesomeness",
"i-am-also-a-site-file-for-awesomeness",
"do-not-forget-me-too",
"someday-you-will-want-me-as-well"]
在这里,我正在触及我的木偶和 hiera 知识的极限。我知道当我认为我应该在 puppet 中迭代时,我可能是错的,但我有点困惑如何做到这一点。
关于如何做或阅读以了解什么的任何指示?
Puppet 4 并具有一些适用于此处的迭代函数,这些函数也可用于最近启用了未来解析器的 Puppet 3。但是,如果没有未来的解析器,它们在 Puppet 3 中不可用,因此您需要一个不同的解决方案。
处理此类问题的经典方法是依赖这样一个事实,即标题为数组(文字或 array-valued 变量)的资源声明为每个元素声明一个单独的资源大批。这通常与定义的类型结合作为直接声明的资源。这种组合大致相当于对数组元素的 foreach 循环,其中 defined-type body 作为其 body。示例:
define mymodule::sitefile() {
file { "/path/to/my/file/called/$title":
ensure => present,
owner => 'the-owner',
group => 'the-group',
mode => 644,
source => "puppet:///modules/mymodule/$title",
require => [Package['something'], User['someone']]
}
file { "/path/to/my/symlink/called/$title":
ensure => 'link',
target => "/path/to/my/file/called/$title",
require => Package['something']
}
}
# ...
$stuff = hiera('stuff')
mymodule::sitefile { $stuff['site_file']: }
我有一个可以正确安装文件的 puppet 配置。我想让它安装几个文件。配置大致如下(与此处相关的部分):
$stuff = hiera('stuff')
$site_filename = $stuff['site_file']
file { "/path/to/my/file/called/$site_filename":
ensure => present,
owner => 'the-owner',
group => 'the-group',
mode => 644,
source => "puppet:///modules/this-module/$site_filename",
require => [Package['something'],
User['someone']]
}
file { "/path/to/my/symlink/called/$site_filename":
ensure => 'link',
target => "/path/to/my/file/called/$site_filename",
require => Package['something'],
}
效果很好,正确的文件安装在正确的主机上。但我现在想安装数量可变(非常相似)的文件,每个主机上的数量不同。
我的 hiera 文件目前是这样的:
stuff:
site_file: "hey-i-am-the-site-file-on-host-awesomeness"
原则上,我想说这样的话:
stuff:
site_file: ["hey-i-am-the-site-file-on-host-awesomeness",
"i-am-also-a-site-file-for-awesomeness",
"do-not-forget-me-too",
"someday-you-will-want-me-as-well"]
在这里,我正在触及我的木偶和 hiera 知识的极限。我知道当我认为我应该在 puppet 中迭代时,我可能是错的,但我有点困惑如何做到这一点。
关于如何做或阅读以了解什么的任何指示?
Puppet 4 并具有一些适用于此处的迭代函数,这些函数也可用于最近启用了未来解析器的 Puppet 3。但是,如果没有未来的解析器,它们在 Puppet 3 中不可用,因此您需要一个不同的解决方案。
处理此类问题的经典方法是依赖这样一个事实,即标题为数组(文字或 array-valued 变量)的资源声明为每个元素声明一个单独的资源大批。这通常与定义的类型结合作为直接声明的资源。这种组合大致相当于对数组元素的 foreach 循环,其中 defined-type body 作为其 body。示例:
define mymodule::sitefile() {
file { "/path/to/my/file/called/$title":
ensure => present,
owner => 'the-owner',
group => 'the-group',
mode => 644,
source => "puppet:///modules/mymodule/$title",
require => [Package['something'], User['someone']]
}
file { "/path/to/my/symlink/called/$title":
ensure => 'link',
target => "/path/to/my/file/called/$title",
require => Package['something']
}
}
# ...
$stuff = hiera('stuff')
mymodule::sitefile { $stuff['site_file']: }