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