podman
Ansible роль для podman
Управление сервисами и контейнерами с помощью podman
Использование
По умолчанию эта роль просто установит podman, как описано в документации podman, и выполнит все другие необходимые настройки для правильной работы установки на поддерживаемых платформах.
Важно: Это означает, что для систем Ubuntu / Debian будет выполнено apt upgrade
, как указано в документации, после добавления репозитория. Это обновление будет запущено только если репозиторий добавлен или изменен и не будет выполняться при последующих запусках.
Кроме того, может развертывать и настраивать контейнеры podman в качестве сервисов SystemD.
Пример Playbook
- hosts: all
roles:
- role: podman
Автоматическое развертывание сервисов
Контейнеры Podman, которые должны работать в качестве сервисов, относительно однородны. По этой причине эта роль предоставляет переменную, которую можно использовать для развертывания и настройки контейнеров в качестве сервисов SystemD. Более сложные сценарии, такие как настройка нескольких контейнеров как пода, пока не поддерживаются. Чтобы использовать эту функцию для вашего хоста, определите переменную podman_services
, которая является списком словарей со следующей структурой:
podman_services:
## Переменные Podman
#
# Обязательно: имя изображения для загрузки
- image_name: nginx
# Необязательно: тег для загрузки. Обычно соответствует
# версии, по умолчанию 'latest'.
image_tag: mainline
# Необязательно: Описание, которое будет добавлено в файл службы SystemD
description: Веб-хост
# Необязательно: Список портов для публикации. Имеет такую же форму,
# как команда podman CLI, то есть: host-port:container-port. Это
# просто передается напрямую флагу '--publish', поэтому привязка IP также работает
# (например, '127.0.0.1:8080:80'). По умолчанию отсутствует.
publish:
- '80:80'
# Необязательно: Строковое имя сети, которое будет передано как флаг --network.
# Если сеть не существует, она будет создана. Это можно использовать для того, чтобы
# несколько сервисов могли общаться друг с другом. Смотрите сеть для предостережений.
network: somenetwork
# Необязательно: Список томов для монтирования. Имеет такую же форму,
# как команда podman CLI host-directory:container-directory, и как показано ниже
# допустимы параметры монтирования.
volumes:
- '/tmp:/usr/share/nginx/html:ro'
# Необязательно: Определите имя хоста для флага hostname podman. Устанавливает
# имя хоста контейнера, по умолчанию отсутствует.
hostname: chasinglogic.io
# Необязательно: Список секретов для монтирования. Секреты не будут созданы
# автоматически. Единственное обязательное поле, если оно используется, - имя. Остальные
# значения имеют значения по умолчанию, как указано в документации podman
# https://docs.podman.io/en/v4.6.0/markdown/options/secret.html
secrets:
- name: secret
type: mount
target: /run/secrets/secret
uid: 0
gid: 0
mode: 0
# Необязательно: Список переменных окружения, которые следует добавить в
# контейнер. По умолчанию отсутствуют.
env_vars:
- SOME_VAR=SOME_VALUE
# Необязательно: Список произвольных аргументов в виде строк, которые будут добавлены перед именем изображения.
flags:
- '--cap-add=NET_ADMIN'
## Переменные SystemD
#
# Необязательно: Определите политику перезапуска для этого сервиса. По умолчанию - всегда.
restart: always
# Необязательно: Определите время ожидания между перезапусками этого сервиса в секундах. По умолчанию - 30.
restart_sec: 30
# Необязательно: Определите фактическое имя, используемое для службы SystemD.
# {{ По умолчанию имя изображения + '-podman' }}
service_name: nginx
# Необязательно: Определите цели / сервисы, которые этот сервис SystemD
# должен быть запущен после. Это список YAML, а не строка.
after:
- network.target
# Необязательно: Определите время ожидания для запуска этого сервиса SystemD.
# Для допустимых значений смотрите 'man systemd.service'. По умолчанию
# 5 минут.
timeout_start_sec: 5m
# Необязательно: Определите раздел установки для службы SystemD.
# В настоящее время поддерживается только wanted_by. Смотрите 'man
# systemd.unit' для описания этого раздела. По умолчанию отсутствует,
# и большинству пользователей это не нужно.
install:
wanted_by:
- multi-user.target
# Необязательно: определите пользователя и группу для файла сервиса
# По умолчанию отсутствие, что эквивалентно root на большинстве
# систем.
user: root
group: root
Сеть
На данный момент Ansible не предоставляет модуля сетевого взаимодействия podman аналогичного
docker_network
. Если вы используете опцию сети на вашем контейнере, вам
необходимо убедиться, что сеть существует до выполнения этой роли. В будущем, когда
поддержка сетевого взаимодействия podman будет добавлена в Ansible, эта роль обеспечит её создание.
Разработка
При разработке лучше использовать этапы converge и verify следующим образом:
make converge verify
Лицензия
ansible-galaxy install chasinglogic/ansible-role-podman