如何将 Linux 命令的输出存储在 Puppet 文件中?

如何将 Linux 命令的输出存储在 Puppet 文件中?

我想在特定的 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'),
}

这将使用代理的主机名作为随机数生成器的种子,因此只要主机名保持不变,它将始终生成相同的随机字符串,但每个主机的随机字符串都会有所不同。

相关内容