Ruby Puppet根据应用程序版本安装包的特定版本

Ruby Puppet根据应用程序版本安装包的特定版本,ruby,duplicates,puppet,Ruby,Duplicates,Puppet,我有一个安装我的应用程序的模块。 要安装系统软件包,我正在使用虚拟资源: @package {[ 'unzip', 'wget', 'htop', 'xorg-x11-server-Xvfb']: ensure => installed, } define myapp1_packages { realize( Package['unzip'], Package['fontconfig'], Package['libf

我有一个安装我的应用程序的模块。 要安装系统软件包,我正在使用虚拟资源:

@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"

最优雅的方式是什么?在这种情况下,是否可以保留虚拟资源?我希望使用Surveure_软件包,但我担心资源重复。谢谢你的帮助

这里最好的做法是将
$app\u 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' }
  }
}
这样还允许您保留虚拟资源

然后,您可以通过如下声明将参数传递给此类:

class { 'myclass': app_version => '2.0' }
或者使用hieradata的自动数据绑定:

# puppet manifest
include myclass

# hieradata
myclass::app_version: 2.0

然后,其他地方的收集器将为您的软件包实现正确的版本。

这里最好的做法是将
$app\u 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' }
  }
}
这样还允许您保留虚拟资源

然后,您可以通过如下声明将参数传递给此类:

class { 'myclass': app_version => '2.0' }
或者使用hieradata的自动数据绑定:

# puppet manifest
include myclass

# hieradata
myclass::app_version: 2.0

然后,您在其他地方的收集者将为您的软件包实现正确的版本。

最好的方式,不要像pendOs那样阅读手册最好的方式,不要像pendOs那样阅读手册