木偶:types的条件定义

我不确定如何提出这个问题,所以如果您觉得不合适,请提出一个修改build议。

我正试图扩展现有的木偶模块,支持不同的操作系统。 我遇到了一个小问题,我不知道如何以一种优雅的方式解决。 在params.pp文件中,安装了特定于操作系统的软件包的定义如下:

 case $::osfamily { 'RedHat': { $package_server = 'mariadb-server' $package_client = 'mariadb' $php_package_name = 'php-mysql' } ... 

该模块是这样写的,整个configuration取决于安装$php_package_name 。 我想为不同的操作系统,这没有一个单独的MySQL包的PHP,因此我把$php_package_namevariables设置为undef 。 这会带来一个问题,木偶试图安装Package[undef]

什么是防止它的好方法? 我到目前为止的想法是将它设置为false,并且只有if $php_package_name != false $php_package_name激发$php_package_name整个定义。 也许有更好的办法?

是的,这似乎是一个合理的方法。 我build议稍微改变一下,添加一个新的参数来确定是否应该使用$php_package_namepackage资源:

 case $::osfamily { 'RedHat': { $package_server = 'mariadb-server' $package_client = 'mariadb' $php_package_name = 'php-mysql' $php_package_install = true } 'otherOS': { $package_server = 'mariadb-server' $package_client = 'mariadb' $php_package_install = false } ... 

那么资源是:

 if $thismodule::params::php_package_install { package { $thismodule::params::php_package_name: ensure => present, ... } } 

请记住,在params.pp中执行所有特定于操作系统的东西的方法,如果安装在新操作系统上所需的资源是非常不同的, 这可能会把你的清单文件变成一个不可读的鼠标条件和参数。 在这种情况下,不要害怕将不同的操作系统拆分成一个单独的类(例如,RedHat系列的install_otheros.pp和新系列的install_otheros.pp ,正确的是从init.ppparams.pp )。