我有一个运行exectypes的puppet定义来创build一个如下所示的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 ], } }
所以,我想让$ ensure参数正常工作,调用一个完全不同的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: } } }
不仅仅是确保现在/缺席,您可以以同样的方式切换到案例。 不要进入子类,因为如你所说,他们失去了依赖信息。