podman

Ansible роль для podman

Управление сервисами и контейнерами с помощью podman

CircleCI

Использование

По умолчанию эта роль просто установит 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

Лицензия

MIT

О проекте

Manage services and containers with podman

Установить
ansible-galaxy install chasinglogic/ansible-role-podman
Лицензия
mit
Загрузки
2391
Владелец
Linux and FOSS Enthusiast.