Сгенерированный файл podman systemd не может быть включен

#ansible #podman #rhel8

Вопрос:

Я пытаюсь написать ansible playbook, который развертывает nginx в качестве контейнера podman, генерирует системный блок, связанный с указанным контейнером, и включает и запускает этот системный блок. Сам контейнер создан нормально, работает и работает, но система не может распознать созданный файл модуля. Соответствующая часть сборника игр ansible после создания контейнера выглядит следующим образом

 ---
- name: Create systemd script for created container
  become: true
  shell: podman generate systemd -n nginx --files
  register: container_systemd_file

- name: Get service name
  set_fact: 
    service_name: "{{ container_systemd_file.stdout | basename }}"

- name: Move created systemd script to correct location
  become: true
  shell: mv {{ container_systemd_file.stdout }} /etc/systemd/system/

- name: Force systemd to reread configs
  become: true
  systemd: daemon_reload=yes

- name: Enable nginx container service
  become: true
  systemd:
    name: "{{ service_name }}"
    enabled: true
    state: started
 

Последний шаг завершается ошибкой с сообщением "msg": "Could not find the requested service container-nginx.service: host" .

Файл модуля можно найти на главной машине

 $ ls -al /etc/systemd/system/container-nginx.service 
-rw-r--r--. 1 root root 701 Sep 24 15:19 /etc/systemd/system/container-nginx.service
 

и имеет содержимое

 # container-nginx.service
# autogenerated by Podman 3.2.3
# Fri Sep 24 15:19:41 EEST 2021

[Unit]
Description=Podman container-nginx.service
Documentation=man:podman-generate-systemd(1)
Wants=network.target
After=network-online.target
RequiresMountsFor=/var/run/containers/storage

[Service]
Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=on-failure
TimeoutStopSec=70
ExecStart=/usr/bin/podman start nginx
ExecStop=/usr/bin/podman stop -t 10 nginx
ExecStopPost=/usr/bin/podman stop -t 10 nginx
PIDFile=/var/run/containers/storage/overlay-containers/c5ad5d961913a8d48ea09557484eaf17749086581eb5a1750e65fb4cf8965272/userdata/conmon.pid
Type=forking

[Install]
WantedBy=multi-user.target default.target
 

Аналогично, если я запущу демон systemctl-перезагрузите и попытаюсь включить службу вручную на хосте, это завершится ошибкой с сообщением Failed to enable unit: Unit file container-nginx.service does not exist.

Как заставить систему распознавать вновь созданный файл блока и включить службу? Я использую Podman 3.2.3 и RHEL 8.4.

Ответ №1:

Я не смог понять, почему первоначальный подход не сработал, но вместо того, чтобы сначала создать блок systemd в виде файла в домашнем каталоге пользователя, а затем переместить его, записав файл непосредственно под /etc/systemd/system/ «работал».

 ---
- name: Create systemd script for created container
  become: true
  shell: podman generate systemd --new --name nginx > /etc/systemd/system/nginx.service

- name: Force systemd to reread configs
  become: true
  systemd: daemon_reload=yes

- name: Enable nginx container service
  become: true
  systemd:
    name: nginx.service
    enabled: true
    state: started