Назад | Перейти на главную страницу

Как сохранить вывод команды 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 чтобы я мог хранить все это в одном ресурсе.

Вы могли бы сделать это с помощью generate() функция, но поскольку команда генерирует другой результат каждый раз, когда вы ее запускаете, вы в конечном итоге будете изменять файл при каждом запуске Puppet.

Вместо этого вы можете использовать fqdn_rand_string() функция от stdlib модуль. Что-то вроде:

file { '/home/akrall/out_string': 
  ensure  => 'file',
  owner   => 'andreas',
  group   => 'andreas',
  mode    => '400',
  content => fqdn_rand_string(64, '0123456789abcdef'),
}

Это заполняет генератор случайных чисел именем хоста агента, поэтому он всегда будет генерировать одну и ту же случайную строку при условии, что имя хоста останется тем же, но оно будет различным для каждого хоста.