如果与通知结合,使用augeas的木偶configuration失败

我遇到了以下Puppet清单的问题,这是为了启用RHEL-6系统上的passwdqc pam模块(这是使用Puppet 0.25.5和augeas 0.7.2):

 augeas { 'authconfig': context => '/files/etc/sysconfig/authconfig', changes => [ 'set USEPASSWDQC yes', 'set USECRACKLIB no', ], notify => Exec['authconfig-all'], } exec { 'authconfig-all': command => '/usr/sbin/authconfig --updateall', refreshonly => true, } 

如果我运行这个清单,它似乎成功完成:

 info: Applying configuration version '1311189237' notice: //Augeas[authconfig]/returns: executed successfully info: //Augeas[authconfig]: Scheduling refresh of Exec[authconfig-all] notice: //Exec[authconfig-all]: Triggering 'refresh' from 1 dependencies 

但是,如果我检查目标文件,更改尚未应用:

 # egrep 'PASSWDQC|CRACKLIB' /etc/sysconfig/authconfig USECRACKLIB=yes USEPASSWDQC=no 

如果我从清单中删除notify => ...行,它将按照预期工作。 就是这样,

 augeas { 'authconfig': context => '/files/etc/sysconfig/authconfig', changes => [ 'set USEPASSWDQC yes', 'set USECRACKLIB no', ], } 

更改已成功保存:

 # puppet /path/to/manifest.pp info: Applying configuration version '1311189502' notice: //Augeas[authconfig]/returns: executed successfully # egrep 'PASSWDQC|CRACKLIB' /etc/sysconfig/authconfig USECRACKLIB=no USEPASSWDQC=yes 

任何想法发生了什么? 木偶显然认为这个变化是第一次,但实际上并没有被保存到磁盘上。 我们有其他的configuration使用augeas和通知操作工作得很好; 我们一直无法弄清楚为什么这是失败的。 请注意,如果我通过subscribe相应的exec定义来replaceaugeas操作上的notify ,则存在相同的问题。

我目前的计划是用更新版本的木偶和build筑物来构build软件包,看看这个问题是否会奇迹般地消失。

更新 :freiheit指出, authconfig似乎覆盖这个文件。 奇怪的是,在CentOS 5下,修改/etc/sysconfig/authconfig然后运行authconfig --updateall是完全正确的过程。 这是我们在传统Kickstart中实际使用的。

所以显然,RHEL6的升级使得authconfig以奇怪和无用的方式运行。

部分答案是authconfig命令的行为在RHEL5和RHEL6之间改变了。 在RHEL6中,不是读取 /etc/sysconfig/authconfig然后生成configuration,RHEL6中的authconfig似乎分析它pipe理的每个单独的configuration文件,然后生成 /etc/sysconfig/authconfig作为当前状态的logging。

这意味着必须直接编辑configuration文件(a)试图避免运行authconfig命令,或者(b)尝试利用authconfig命令行不支持的function。

这是我最终启用了passwdqc PAM模块:

 augeas { 'pam_passwdqc': context => '/files/etc/pam.d/system-auth-ac/', changes => [ 'rm *[module="pam_cracklib.so"]', 'ins 9999 before *[type="password"][module="pam_unix.so"]', 'set 9999/type password', 'set 9999/control requisite', 'set 9999/module pam_passwdqc.so', 'set 9999/argument enforce=everyone', ], onlyif => 'match *[module="pam_passwdqc.so"] size == 0', notify => Exec['authconfig-update-all'], } exec { 'authconfig-update-all': command => '/usr/sbin/authconfig --updateall', refreshonly => true, } 

如果你发现自己阅读这个答案,我很乐意听到你的意见,这是否是一种理智的方式来处理事情。 我是Puppet的新手,所以我仍然感觉我的方式工作的方式。

/usr/sbin/authconfig --updateall命令写入/ etc / sysconfig / authconfig – 您可以用简单的“ls -l”来确认。 它正在覆盖傀儡/阿根廷所做的改变。

如果是我,我会通过弄清楚你需要的基本改变是什么,并把它们做到这一点,我相信这都是/etc/pam.d/system-auth-ac 。 这也将使控制模块的各种参数变得微不足道。