Как можно развернуть архив с марионеткой
Я использовал ansible для развертывания артефактов, созданных в jenkins. Игра выглядит так:
- Перенести архив tar.gz на удаленный хост (архив содержит код Python)
- остановите код Python (он был настроен как сервис systemd, который ссылается на скрипт внутри / home / arl / code
- Удалить папку / home / arl / code (рекурсивно)
- Извлеките файл tar.gz в / home / arl
- Запустите сценарий systemd для кода.
В Puppet вы можете управлять услугами с помощью поставщика услуг. Но так как вы хотите управлять "состоянием", вы не можете объявить ресурс python_service как "остановленный", а затем в манифесте как "запущенный", так как это приведет к ошибке объявления дубликата. В ansible, что является обязательным условием, это легко достижимо.
Есть ли способ добиться этого в марионетке?
1 ответ
Для того, что вы делаете, вы хотели бы использовать серию Exec
типы ресурсов и использование ->
оператор заказа ресурсов. Так что ваш манифестный манифест будет выглядеть примерно так:
scp_tarball_command = '/usr/bin/scp ...';
stop_python = '/usr/sbin/systemd stop whatever';
delete_code_dir = '/bin/rm -rf /home/arl/code';
untar_tarball = '/usr/bin/tar -xzf ...';
start_python = '/usr/sbin/systemd start whatever';
exec { $scp_tarball_command: creates => 'whatever'} ->
exec { $stop_python: refreshonly => true} ->
exec { $delete_code_dir: refreshonly => true} ->
exec { $untar_tarball: refreshonly => true} ->
exec { $start_python: refreshonly => true}
Вы можете посмотреть здесь детали заказа ресурсов: https://puppet.com/docs/puppet/5.3/types/exec.html
Также я бы предложил поместить этот код в класс и заменить жестко закодированный материал параметрами класса.