Я хочу создать новый файл на конкретном агенте 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'),
}
Это заполняет генератор случайных чисел именем хоста агента, поэтому он всегда будет генерировать одну и ту же случайную строку при условии, что имя хоста останется тем же, но оно будет различным для каждого хоста.