使用带有迭代的 Puppet 将字符串插入到文件中
Inserting a string into a file with Puppet with iteration
我是 运行 与 Puppet 的 .each
迭代:
$extensions_list = ["RT::Extension::ActivityReports",
"RT::Extension::JSGantt",
]
$extensions_list.each |$extls| {
cpan { $extls:
ensure => present,
require => Class['::cpan'],
}
}
如您所见,我只是安装了两个 Perl 模块和一个来自 Puppet Forge 的 cpan 模块。这部分工作正常。
我希望每次以这种方式安装新的 Perl 模块时,它都会被添加到 RT(请求跟踪器)的配置行中。该文件位于此处:
/opt/rt4/etc/RT_SiteConfig.pm
并且该行的格式是:
Plugins('RT::MODULE::ONE RT::MODULE::TWO');
所以,最后我希望它看起来像这样:
Plugins('RT::Extension::ActivityReports RT::Extension::JSGantt');
让 Puppet 在安装时依次将每个新模块添加到该行。就好像我决定从现在起一个月后安装 RT::Authen::ExternalAuth
,我可以将它添加到上面的迭代中,并且在 Puppet 运行之后:
Plugins('RT::Extension::ActivityReports RT::Extension::JSGantt');
会变成这样:
Plugins('RT::Extension::ActivityReports RT::Extension::JSGantt RT::Authen::ExternalAuth');
在我没有其他干预的情况下,然后将其添加到迭代语句中。
假设您没有任何其他 Puppet 代码管理 /opt/rt4/etc/RT_SiteConfig.pm
,那么您有几个选项可以确保您在该文件中有正确的 Plugins
行。
如果您只想管理那一行,那么我建议使用 join and a file_line resource from stdlib。
例如:
include stdlib
$ext_string = join($extensions_list, ' ')
file_line { 'rt extensions':
ensure => present,
path => '/opt/rt4/etc/RT_SiteConfig.pm',
line => "Plugins('${ext_string}');",
match => '^\s*Plugins\(',
}
这将添加包含插件列表的一行,并将替换任何现有的插件行。
如果您要管理多个设置,那么将整个文件模板化可能是有意义的。在那种情况下,您可以简单地使用
行
Plugins('<%= @extensions_list.join(' ') %>');
在您的模板中。
我是 运行 与 Puppet 的 .each
迭代:
$extensions_list = ["RT::Extension::ActivityReports",
"RT::Extension::JSGantt",
]
$extensions_list.each |$extls| {
cpan { $extls:
ensure => present,
require => Class['::cpan'],
}
}
如您所见,我只是安装了两个 Perl 模块和一个来自 Puppet Forge 的 cpan 模块。这部分工作正常。
我希望每次以这种方式安装新的 Perl 模块时,它都会被添加到 RT(请求跟踪器)的配置行中。该文件位于此处:
/opt/rt4/etc/RT_SiteConfig.pm
并且该行的格式是:
Plugins('RT::MODULE::ONE RT::MODULE::TWO');
所以,最后我希望它看起来像这样:
Plugins('RT::Extension::ActivityReports RT::Extension::JSGantt');
让 Puppet 在安装时依次将每个新模块添加到该行。就好像我决定从现在起一个月后安装 RT::Authen::ExternalAuth
,我可以将它添加到上面的迭代中,并且在 Puppet 运行之后:
Plugins('RT::Extension::ActivityReports RT::Extension::JSGantt');
会变成这样:
Plugins('RT::Extension::ActivityReports RT::Extension::JSGantt RT::Authen::ExternalAuth');
在我没有其他干预的情况下,然后将其添加到迭代语句中。
假设您没有任何其他 Puppet 代码管理 /opt/rt4/etc/RT_SiteConfig.pm
,那么您有几个选项可以确保您在该文件中有正确的 Plugins
行。
如果您只想管理那一行,那么我建议使用 join and a file_line resource from stdlib。
例如:
include stdlib
$ext_string = join($extensions_list, ' ')
file_line { 'rt extensions':
ensure => present,
path => '/opt/rt4/etc/RT_SiteConfig.pm',
line => "Plugins('${ext_string}');",
match => '^\s*Plugins\(',
}
这将添加包含插件列表的一行,并将替换任何现有的插件行。
如果您要管理多个设置,那么将整个文件模板化可能是有意义的。在那种情况下,您可以简单地使用
行Plugins('<%= @extensions_list.join(' ') %>');
在您的模板中。