我想使用随机生成的密码为服务(postgres,rabbitmq ...)创建用户。然后应将此密码写入主机上的文件。然后,应用程序使用包含env vars的此文件连接到这些服务。
我不想将这些密码存储在别处。
postgresql::server::db { $name:
user => $name,
password => postgresql_password($name, random_password(10)),
}
然后我想将这个密码以PG_PASS ='相同密码'的形式插入配置文件中,但只有当用户不在时才会发生这一切。
答案 0 :(得分:4)
一个技巧是以某种方式定义自定义类型:
define authfile($length=24,$template,$path) {
$passwordfile = "/etc/puppet/private/${::hostname}/${::title}"
$password = file($passwordfile,'/dev/null')
@@exec { "generate-${title}":
command => "openssl rand -hex -out '$passwordfile' 24",
creates => $passwordfile,
tag => 'generated_password'
}
file { $path:
content => template($template);
}
}
在你的傀儡上,有类似的东西:
Exec<|| tag = 'generated_password' ||>
然后,您可以将$template
变量传递给可用变量$password
的模板名称。您将需要注意如何定义这些authfile
类型(因为它在puppetmaster上创建文件,您将需要处理恶意事实),并且您需要在主机上运行一次puppet(所以创建导出的资源),一旦在puppetmaster上(以便生成机密文件),然后再次在主机上(以便读取机密文件)以使其工作。
另一个解决方案是编写一个自定义函数random_password
,它将使用fqdn并使用存储在puppetmaster(使用HMAC)的秘密对其进行签名来设置密码。这样你就可以获得一个密码,在没有得到秘密的情况下无法猜到,也没有额外的木偶往返。
答案 1 :(得分:2)
我自己还没试过。但trocla看起来与您正在寻找的完全一样。 Here's a little intro
编辑:在尝试了trocla之后,我可以告诉你它有点像魅力:-)