Мы запускаем ansible playbook при каждой загрузке, и он выполняет множество проверок и задач настройки на хосте. У нас также есть несколько сервисов systemd, которые необходимо запускать на этом хосте. Как мне сделать эти службы зависимыми от завершения доступного playbook? Я хочу, чтобы эти службы запускались только после завершения выполнения моего доступного playbook. Есть ли какой-либо прямой способ в systemd установить эту зависимость, или я должен написать какой-нибудь файл по пути после завершения и использовать это как проверку в моем служебном файле systemd? Пожалуйста, дайте мне знать, если у вас есть лучший способ сделать это.
Создайте выпадающие модули для определений модулей служб, которые вы хотите запустить после вашего сценария.
drop-ins - это файлы, которые заменяют директивы в исходном определении модуля. Они принадлежат каталогам со схемой / etc / systemd / system /
.
Для конкретного примера давайте воспользуемся apache.
Сначала вам нужно выяснить, текущая After =
строка определения модуля. Вы можете найти определение модуля, запустив systemctl status
:
$ systemctl status apache2
* apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Теперь давайте взглянем на /lib/systemd/system/apache2.service
:
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
The После строки =
мы хотим изменить.
Затем мы создаем каталог для файлов drop-in (вы могли бы создать его автоматически с помощью sudo systemctl edit apache2.service
, но я хочу, чтобы вы знали, как это работает):
sudo mkdir /etc/systemd/system/apache2.service.d
В этот каталог вы можете поместить одну или несколько папок в файлах.
sudo vi /etc/systemd/system/apache2.service.d/10-after-ansible.conf
Это падение в файле тогда содержит только строки, которые мы хотим переопределить:
[Unit]
After=network.target remote-fs.target nss-lookup.target my-ansible-script.service
Сохраните файл и systemd перезагрузит определения служб:
sudo systemctl daemon-reload
С этого момента служба apache2
будет запускаться только после выполнения my-ansible-script
.
Вы можете добавить Requires =
в том же файле, если необходимо.
Мне кажется, что было бы проще запустить эти службы в конце сборника сценариев Ansible, чем пытаться реализовать это в systemd. Я бы просто добавил:
- name: start service
service:
name: service_name
state: started
в конец сборника пьес. Ansible дает сбой быстро, поэтому, когда эта задача находится в конце игры, обеспечивается выполнение остальных задач.
Вы можете настроить некоторые переменные, если говорите, что сценарий является общим, краткий пример:
Файл Hosts:
[t1]
host1
[t2]
host2
[t1:vars]
service=chronyd
[t2:vars]
service=ntpd
[t:children]
t1
t2
Вы запускаете его против - hosts: t
, в конце игры:
- name: start specific
service:
name: "{{ service }}"
state: started