我正在尝试使用Puppet将一块文本插入到CentOS主机上的CA证书文件中.
I asked about this before,and it seems CentOS is sorely lacking in certificate management functions...
我需要做的是在我的/etc/ssl/certs/ca-bundle.crt文件中获取代表我的CA证书(通过openssl的info命令传递任何愚蠢的理由)的相当大的文本块,并确保它始终存在,甚至如果主机稍后从repo更新其CA文件.
我不想用Puppet完整地管理ca-bundle文件.这已由服务器指向的yum存储库处理.
难度:Puppet没有正式的方法来管理文本块,只使用file_line资源来管理行.不过,我试图变得聪明,以为你可以使用换行的“换行”文本来管理它.
好吧,有点.它起作用,因为文本最终在文件中,但问题是它在每次木偶运行后不断重新添加,就像代码无法判断它已经存在一样.
对于细节,文本块看起来很像这样(截断原因显而易见:3)
$cacert = "Certificate:\n Data:\n Version: 3 (0x2)\n Serial Number:\n 10:d8:83:91:-redacted-"
我的Puppet模块中的行如下所示:
class em_cacerts::centos inherits em_cacerts{ file_line { 'ca-certificate': path => '/etc/ssl/certs/ca-bundle.crt',line => $cacert,#match => "(see below)",ensure => present,}
我试着匹配线各种恶作剧(包括使用inline_template设置正则表达式匹配到$CACERT变量,它在IRB完美的作品的全部内容,但不是在木偶),企图得到它认识到文本块已经存在,但它每次都会不断重新添加,并且只是叠加在自身之上.
我可能在这里咆哮错误的树……但无论如何,这是问题的一部分.
>有没有更好的方法来实现这一目标?
>如果没有,我如何让Puppet意识到文本块已经存在?
谢谢!
我最终用exec行解决了这个问题:
原文链接:https://www.f2er.com/centos/373398.htmlclass em_cacerts::centos inherits em_cacerts{ exec { 'cent-ca-certificate': command => "/bin/echo '$centcacert' >> '$cabundlepath'",onlyif => "test ! `grep (redacted CA name) $cabundlepath`",provider => 'shell',} }
是的,它正在使用exec,这是官方气馁,但这可靠地工作,并使用任何CentOS盒将具有的绝对基本的东西.
感谢大家!