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

Есть ли способ доставить настроенный файл на сервер через марионетку

У меня есть несколько машин, которыми я управляю через марионетку. Машины находятся в разных физических местах. У каждого местоположения есть определенный номер местоположения.

У меня есть файл конфигурации, в котором должен быть правильный номер местоположения.

Итак, содержимое /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.