У меня есть определение марионетки, которое запускает тип exec для создания пользователя mysql, который выглядит следующим образом:
define mysql::mysql-user ($user, $host="$mysql_subnet", $passwd="", $ensure="present") {
exec { "mysql -e \"CREATE USER '$user'@'$host' IDENTIFIED BY PASSWORD '$passwd'\"":
path => "/usr/bin:/bin",
unless => "mysql -e \"SELECT Host,User FROM mysql.user WHERE Host='$host' AND User='$user'\" | grep $user",
require => Service[ mysql ],
}
}
Итак, я хочу, чтобы аргумент $ sure работал правильно, вызывая совершенно другой exec для удаления пользователя. Как лучше всего это сделать?
Я пробовал следующую настройку:
define mysql::mysql-user ($user, $host="$mysql_subnet", $passwd="", $ensure="present") {
case $ensure {
present: { include add-user }
absent: { include remove-user }
}
}
class mysql::add-user {
exec { ... }
}
class mysql::remove-user {
exec { ... }
}
но это не удается, потому что мое определение грантов (не показано) теперь каким-то образом больше не зависит от mysql-user, запущенного первым.
define blah($ensure = present) {
if $ensure == "present" {
exec { do_something_to_make_it_be_here: }
} else {
exec { do_something_to_make_it_not_be_here: }
}
}
Для большего, чем просто гарантировать присутствие / отсутствие, вы можете переключиться на случай в том же духе. Не переходите к подклассам, потому что, как вы говорите, они теряют информацию о зависимостях.