我正在使用Puppet进行.each
次迭代:
$extensions_list = ["RT::Extension::ActivityReports",
"RT::Extension::JSGantt",
]
$extensions_list.each |$extls| {
cpan { $extls:
ensure => present,
require => Class['::cpan'],
}
}
正如您所看到的,我只是使用Puppet Forge的cpan模块安装两个Perl模块。这部分工作正常。
我想要发生的是每次以这种方式安装新的Perl模块时,它都会添加到RT的配置行(Request Tracker)中。那个文件住在这里:
/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');
我没有其他干预,然后将其添加到迭代声明。
答案 0 :(得分:0)
假设您没有管理/opt/rt4/etc/RT_SiteConfig.pm
的任何其他Puppet代码,那么您有几个选项可以确保该文件中有正确的Plugins
行。
如果您只想管理那一行,我建议您使用join中的file_line和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(' ') %>');
在你的模板中。