Я новичок в Puppet, и я хотел бы знать, нахожусь ли я на правильном пути развертывания приложений с Puppet.
Приложения находятся в файле tar.gz, который содержит файл с номером версии. Итак, я делаю это для развертывания (я захожу на сервер и перезагружаю клиента, чтобы взять новый tarball):
nodes.pp
node 'server1.domain.com' inherits basenode {
apps { apps:
version => 56,
apps_name => "apps_tarball.tgz",
}
init.pp (modules)
exec {"apps_wget":
command => "/usr/bin/wget http://web_server/${version}-${apps_name} -O /tmp/${container_zip_name}",
unless => "test -f /tmp/${version}-${apps_name}",
require => [ Package["wget"] ],
}
exec {"apps_unzip":
cwd => "/usr/local/apps/path",
command => "/usr/bin/unzip /tmp/${version}-${apps_name}",
unless => "test -f /usr/local/apps/path/apps-version-${version}",
require => [ Package["unzip"], Exec["container_wget"] ],
}
Но когда я хочу обновить, я не знаю, чтобы сказать Puppet, чтобы удалить старый каталог? Например, если я хочу обновить версию 56 до 57: я должен удалить каталог версии 56.
Я слышал о Capristrano, и кажется, что лучше использовать Puppet для управления пакетами, файлами конфигурации и использовать Capristrano для развертывания приложений, не так ли?
Благодарю.
puppet
deployment
Richy
источник
источник
Ответы:
Нет.
Вы должны использовать управление пакетами, доступное в вашей операционной системе. Если ваше программное обеспечение в
tar.gz
формате, вы должны повторно упаковать его как локально.deb
,.rpm
или любой другой .Если программное обеспечение разработано локально, вам следует использовать все доступные инструменты сборки / развертывания.
источник
Возможно, вы захотите попробовать использовать fpm для создания RPM или DEB из ваших tarballs; его действительно просто использовать, и вам не нужно ничего понимать о форматах пакетов, которые вам не нужны.
Чтобы ответить на ваш первоначальный вопрос, правильный способ развертывания приложений с помощью Puppet - это заставить Puppet выполнять как можно меньше работы; любые сложные
exec
ресурсы, которые загружают и извлекают tar-архивы, должны быть очень, очень хрупкими, и сделать Puppet простоyum install
пакетом намного полезнее в долгосрочной перспективе.источник
Я бы очень старался собрать приложение в виде пакета RPM или .deb и создать репозиторий yum или apt для хранения пакетов. Упаковка архива или архива, который вы только что открыли, в каталог довольно проста (но это должен быть отдельный вопрос). Упаковка, доступная таким образом, прекрасно отслеживает версии и обрабатывает все виды вещей, которые просто не раскрываются в тарболле.
Если бы я действительно не смог собрать правильный пакет, я бы сделал что-то вроде этого:
nodes.pp:
init.pp (модули):
Другая альтернатива - просто использовать рекурсивный кукольный ресурс, такой как:
(где вы уже правильно исправили вещи на хозяине марионеток. Возможно, также потребуется какой-либо пакет, в котором запущена служба, и уведомите любую службу, из которой она работает).
источник
Кроме того, делать все как execs довольно уродливо, и может быть трудно устранить неполадки, когда что-то начинает ломаться; если вы можете, возможно, сохранить извлеченные версии файлов приложения на марионеточном сервере и использовать рекурсивный
file
ресурс для извлечения?источник
Я, конечно, предпочитаю упаковывать тарбол (RPM или что-то еще), но несколько советов:
Чтобы удалить старую версию, вы можете просто удалить все версии, кроме той, которую вы устанавливаете. С достаточно недавними включенными bash и extglob вы можете
rm -r /usr/local/apps/path/apps-version-!(${version})
. Остерегайтесь уничтожения конфигурационных файлов и тому подобного. Вы можете сделать это,exec
refreshonly => true
а затемnotify
это из exec установки.Вы можете использовать
creates
атрибут вместоunless => 'test -f ...'
. А вот более понятно.источник