我有一个安装我的应用程序的模块。 要安装系统软件包,我正在使用虚拟资源:
@package {[
'unzip',
'wget',
'htop',
'xorg-x11-server-Xvfb']:
ensure => installed,
}
define myapp1_packages {
realize(
Package['unzip'],
Package['fontconfig'],
Package['libfreetype.so.6'])
}
@myapp1_packages{ 'myapp1_packages': }
然后我在清单中使用realize来安装上面的包:
realize(myapp1_packages['myapp1_packages'])
但对于我的应用程序的每个版本,我还需要适当版本的系统包。
我需要这样的东西:
if $app_version == '1.0' {
"install unzip-1xx"
"install fontconfig-1-xx"
"install libfreetype.so.6-1-x-xx"
elseif $app_version == '2.0'
"install unzip-2xx"
"install fontconfig-2-xx"
"install libfreetype.so.6-2-x-xx"
最优雅的方法是什么?在这种情况下是否可以保留虚拟资源?我想使用ensure_packages但我担心资源重复。谢谢你的帮助!
答案 0 :(得分:4)
此处最好的做法是为您的模块$app_version
添加myclass($app_version = 'default version') {
if $app_version == '1.0' {
@package { 'unzip': ensure => '1xx' }
@package { 'fontconfig': ensure => '1-xx' }
@package { 'libfreetype': ensure => '6-1-xx' }
}
elsif $app_version == '2.0' {
@package { 'unzip': ensure => '2xx' }
@package { 'fontconfig': ensure => '2-xx' }
@package { 'libfreetype': ensure => '6-2-xx' }
}
}
参数。https://docs.puppet.com/puppet/4.10/lang_classes.html#class-parameters-and-variables。请注意此处文档中的示例:https://docs.puppet.com/puppet/4.10/lang_classes.html#appendix-smart-parameter-defaults。
根据您的情况,该课程将如下所示:
class { 'myclass': app_version => '2.0' }
因此也允许您保留虚拟资源。
然后,您可以通过声明它来将参数传递给此类:
# puppet manifest
include myclass
# hieradata
myclass::app_version: 2.0
或使用与hieradata的自动数据绑定:
:before
您在其他地方的收藏家将为您的包装实现正确的版本。