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

Puppet: простая токенизация + необходимость в агенте

Люди

В настоящее время у нас есть настраиваемый инструмент развертывания, и мы оцениваем возможность его замены чем-то непатентованным, например марионеткой.

Одна из основных вещей, которые он делает для нас на данный момент, - это токенизация. Например, в файле server.xml в развертывании tomcat мы можем развернуть файл с именем server.xml.tokenzenized с линией, как показано ниже

<Ajp12Connector port="@@TOMCAT.AJP.PORT@@" ajpidFile="conf/ajp12_2.id" />

а затем иметь tokens.xml файл, который будет иметь строку вроде

<TOKEN NAME='TOMCAT.AJP.PORT' value = '8080/>

затем наш процесс развертывания сканирует server.xml.tokenized и заменяет токены, записывая файл в server.xml.

Может ли puppet сделать это для произвольного файла - или для чего-то вроде tomcat, нужно ли мне загружать плагин, который понимает, как работает tomcat?

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

Ура

На первый вопрос: да, puppet могу сделать это используя шаблоны в сочетании с hiera и / или facter. Этот процесс полностью абстрагируется от программного обеспечения с помощью шаблонного файла.

Например, у вас может быть шаблон для server.xml с таким разделом:

<Connector address="<%= @ipaddress_eth0 %>"
           executor="tomcatThreadPool"
           port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

В <%= @ipaddress_eth0 %> часть - это то, что вы в настоящее время называете «токеном», и марионетка знает, как заменить его для любого данного хоста, используя facter:

# facter ipaddress_eth0
10.0.0.2

Вы можете иметь нестандартные факты если они вам тоже нужны.

Тема иерархических данных немного сложнее и потребует от вас чтения некоторой документации, чтобы увидеть, как она может помочь вам при развертывании. это - очень красивая презентация его возможностей. По сути, его цель - предоставить средства для разделения кода и данных (ваших «токенов») и сохранить эти данные в знакомом, простом в обслуживании формате (YAML или JSON). Вариант использования, описанный выше (определение настраиваемого порта для tomcat), это классический образец использования hiera:

в tomcat module у вас будет что-то вроде:

class tomcat (
    $port
    ){
    #rest of the module
}

В шаблоне (скажем, server.xml.erb):

<Ajp12Connector port="<%= port %>" ajpidFile="conf/ajp12_2.id" />

И часть ваших иерархических данных, соответствующих этому коду, будет выглядеть примерно так:

tomcat::port = 8080

На второй вопрос ответ тоже в некоторой степени положительный. Ты можешь использовать коллектив марионеток (фактически, часть предложения марионеточных лабораторий), чтобы протолкнуть изменения в безагентную ферму серверов. Однако вам нужно будет установить клиентов (не совсем то же самое, поскольку эти клиенты пассивны, в отличие от puppet агенты, которые активно запрашивают свои каталоги к puppetmaster). Опять же, требуется, чтобы вы прочтите документацию чтобы лучше понять детали его функциональности.