Puppet 根据应用程序版本安装特定版本的包
Puppet Install specific version of package depending on application version
我有一个模块可以安装我的应用程序。
要安装系统包,我正在使用虚拟资源:
@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 但我担心资源重复。感谢您的帮助!
这里最好的做法是使 $app_version
成为您模块的参数:https://docs.puppet.com/puppet/4.10/lang_classes.html#class-parameters-and-variables. Note an example from the documentation here: https://docs.puppet.com/puppet/4.10/lang_classes.html#appendix-smart-parameter-defaults.
对于您的情况,class 看起来像:
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' }
}
}
因此还允许您保留您的虚拟资源。
然后您可以通过如下声明将参数传递给此 class:
class { 'myclass': app_version => '2.0' }
或使用 hieradata 的自动数据绑定:
# puppet manifest
include myclass
# hieradata
myclass::app_version: 2.0
您在别处的收集器将会为您的包裹识别正确的版本。
我有一个模块可以安装我的应用程序。 要安装系统包,我正在使用虚拟资源:
@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 但我担心资源重复。感谢您的帮助!
这里最好的做法是使 $app_version
成为您模块的参数:https://docs.puppet.com/puppet/4.10/lang_classes.html#class-parameters-and-variables. Note an example from the documentation here: https://docs.puppet.com/puppet/4.10/lang_classes.html#appendix-smart-parameter-defaults.
对于您的情况,class 看起来像:
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' }
}
}
因此还允许您保留您的虚拟资源。
然后您可以通过如下声明将参数传递给此 class:
class { 'myclass': app_version => '2.0' }
或使用 hieradata 的自动数据绑定:
# puppet manifest
include myclass
# hieradata
myclass::app_version: 2.0
您在别处的收集器将会为您的包裹识别正确的版本。