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