我想在特定的 Puppet 代理上创建一个新文件,并将 Linux 命令的输出存储到该文件中。有没有简单的方法可以使用属性来执行此操作content
?我想要运行的命令是
file { '/home/akrall/out_string':
ensure => 'file',
owner => 'andreas',
group => 'andreas',
mode => '400'
content => '<the output of the command would go here>'
}
我想要运行的命令本身是openssl rand -hex 32
,我想确保它对于每个代理都是唯一的,所以我选择不将其存储为 Puppet 变量,而是将相同的变量发送给多个代理,因为对于每个代理来说它都是相同的字符串。有人能告诉我怎么做吗?我试过了,content => '"$(openssl rand -hex 32)"'
但没用,我不确定我还应该尝试什么。
编辑:如果没有简单的方法来做到这一点content
,我只能使用exec
命令将输出写入文件,但我希望可以做些什么,file
这样我就可以将其全部保存在同一个资源中。
答案1
您可以使用该generate()
函数来执行此操作,但由于每次运行该命令时都会生成不同的结果,因此每次运行 Puppet 时文件都会发生变化。
你可以做的是fqdn_rand_string()
使用标准库模块。例如:
file { '/home/akrall/out_string':
ensure => 'file',
owner => 'andreas',
group => 'andreas',
mode => '400',
content => fqdn_rand_string(64, '0123456789abcdef'),
}
这将使用代理的主机名作为随机数生成器的种子,因此只要主机名保持不变,它将始终生成相同的随机字符串,但每个主机的随机字符串都会有所不同。