У меня есть несколько машин, которыми я управляю через марионетку. Машины находятся в разных физических местах. У каждого местоположения есть определенный номер местоположения.
У меня есть файл конфигурации, в котором должен быть правильный номер местоположения.
Итак, содержимое /etc/abc.conf выглядит так:
this=that
location=$LOCATION_NUMBER
bananas=tasty
Когда файл передается на компьютер, мне нужно, чтобы номер местоположения был номером $ LOCATION_NUMBER.
Могу ли я управлять этим файлом с помощью марионетки и как?
Если я экспортирую фактер для LOCATION_NUMBER, сможет ли марионетка записать правильный номер местоположения, когда она отправит файл на машину?
Спасибо.
То, что вы хотите сделать, называется шаблоном. Это основная функция Puppet, и она очень полезна. Вы пишете файл в формате eRB, который может использовать код Ruby и переменные Facter для создания файла. Вот пример:
file { '/etc/my_config_file':
ensure => present,
owner => 'root',
group => 'root',
mode => 0700,
content => template('module/my_config_file.erb'),
}
Теперь в вашей иерархии модулей под templates/
(не files/
), поместите файл my_config_file.erb
:
this=that
location=<%= LOCATION_NUMBER %>
bananas=tasty
В <%= %>
format говорит выполнить некоторый код Ruby и вернуть результат. В этом случае все факты доступны как локальные переменные, например ipaddress
, lsbmajdistrelease
или LOCATION_NUMBER
(ваш собственный факт). Вы также можете использовать любой другой код Ruby, который напрямую не возвращает результат внутри <% %>
, Такие как if
заявления:
<% if LOCATION_NUMBER == 7 %>
custom_config=true
<% else %>
custom_config=false
<% end %>
редактировать: Когда я перечитываю этот ответ, я хотел бы предложить вам не использовать заглавные буквы для своего имени факта. В Ruby переменная, начинающаяся с заглавной буквы, неизменна. Хотя я не уверен, что это действительно проблема, это противоречит условию.
Кроме того, вы можете сохранить переменную $ LOCATION_NUMBER как параметр, который должен возвращать ENC . Вы используете ENC, чтобы хосты в определенном месте (или домене), группе или имени хоста получали определенную переменную. Есть несколько хороших бесплатных предварительно созданных и доступных ENC, включая Dashboard и The Foreman.