我不确定如何提出这个问题,所以如果您觉得不合适,请提出一个修改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_name
variables设置为undef
。 这会带来一个问题,木偶试图安装Package[undef]
。
什么是防止它的好方法? 我到目前为止的想法是将它设置为false,并且只有if $php_package_name != false
$php_package_name
激发$php_package_name
整个定义。 也许有更好的办法?
是的,这似乎是一个合理的方法。 我build议稍微改变一下,添加一个新的参数来确定是否应该使用$php_package_name
的package
资源:
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.pp
或params.pp
)。