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

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

Близкие

В настоящее время у нас на работе имеется собственный инструмент развертывания, и мы рассматриваем возможность его замены на что-то непатентованное, например, 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 для извлечения файлов из главного сервера. Обязательно ли это так? Можете ли вы написать скрипт, который использует моделирование и инфраструктуру Puppet, а затем входит в хосты для развертывания программного обеспечения? Обоснование заключается в том, что по разным причинам у нас есть предубеждение против агентов в нашей среде.

Ваше здоровье

решение1

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

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

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

Эта <%= @ipaddress_eth0 %>часть — то, что вы сейчас называете «токеном», и puppet знает, как заменить ее для любого заданного хоста, используя facter:

# facter ipaddress_eth0
10.0.0.2

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

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

В tomcatмодуле у вас будет что-то вроде:

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

В шаблоне (например, server.xml.erb):

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

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

tomcat::port = 8080

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

Связанный контент