Я не знаю, как сформулировать эти вопросы, поэтому, пожалуйста, предложите правку, если вы считаете ее неуместной.
Я пытаюсь расширить существующие модули марионеток с поддержкой разных ОС. Я столкнулся с небольшой проблемой, которую я не знаю, как решить ее элегантным способом. В params.pp
В файле есть такое определение пакетов для конкретной ОС, которые нужно установить:
case $::osfamily {
'RedHat': {
$package_server = 'mariadb-server'
$package_client = 'mariadb'
$php_package_name = 'php-mysql'
}
...
Модуль написан таким образом, что вся конфигурация зависит от наличия $php_package_name
установлены. Я хочу расширить этот модуль для другой ОС, в которой нет отдельного пакета mysql для php, поэтому я установил $php_package_name
переменная для undef
. Это создает проблему, которую марионетка пытается установить Package[undef]
.
Что было бы хорошим способом предотвратить это? Мои мысли до сих пор считают войну ложной и имеют полное определение $php_package_name
только огонь if $php_package_name != false
. Может есть способ получше?
Ага, это кажется разумным подходом. Я бы предложил небольшой вариант этого, добавив новый параметр, который определяет, package
ресурс, который использует $php_package_name
следует применять вообще:
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 может не оказаться более чистым, если ресурсы, необходимые для установки в новой ОС, сильно отличаются; это может просто превратить ваш файл манифеста в нечитаемое крысиное гнездо условий и параметров. В этом случае не бойтесь просто разделить разные ОС в отдельный класс (например, install_el.pp
для семьи RedHat и install_otheros.pp
для новой семьи, с правильным из init.pp
или params.pp
).