community.general.lxd_container – Управление контейнерами LXD
Примечание
Этот плагин является частью коллекции community.general (версия 2.0.1).
Для его установки используйте: ansible-galaxy collection install community.general.
Для использования в плейбуке укажите: community.general.lxd_container.
Описание
- Управление контейнерами LXD
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| architecture строка | Архитектура контейнера (например, "x86_64" или "i686"). См. https://github.com/lxc/lxd/blob/master/doc/rest-api.md#post-1
| |
| client_cert строка | Путь к файлу клиента сертификата. Если не указано, используется значение по умолчанию ${HOME}/.config/lxc/client.crt.псевдонимы: cert_file | |
| client_key строка | Путь к файлу ключа клиента сертификата. Если не указано, используется значение по умолчанию ${HOME}/.config/lxc/client.key.псевдонимы: key_file | |
| config словарь | Конфигурация контейнера (например, {"limits.cpu": "2"}). См. https://github.com/lxc/lxd/blob/master/doc/rest-api.md#post-1
Если контейнер уже существует и значение "config" в метаданных, полученных из GET /1.0/containers/<name> https://github.com/lxc/lxd/blob/master/doc/rest-api.md#10containersname, отличаются, этот модуль пытается применить конфигурации. Ключи, начинающиеся с 'volatile.', игнорируются для этого сравнения. Не все значения конфигурации поддерживаются для применения существующего контейнера. Возможно, вам нужно удалить и воссоздать контейнер. | |
| devices словарь | Устройства контейнера (например, { "rootfs": { "path": "/dev/kvm", "type": "unix-char" }). См. https://github.com/lxc/lxd/blob/master/doc/rest-api.md#post-1
| |
| ephemeral логическое |
| Является ли контейнер временным (например, true или false). См. https://github.com/lxc/lxd/blob/master/doc/rest-api.md#post-1
|
| force_stop логическое |
| Если значение true, то модуль lxd_container заставляет контейнер остановиться при его остановке или перезапуске. |
| name строка / обязательный | Имя контейнера. | |
| profiles список / элементы=строка | Профиль, который будет использоваться контейнером | |
| snap_url строка | По умолчанию: "unix:/var/snap/lxd/common/lxd/unix.socket" | Путь unix-соккета, когда LXD установлен с помощью менеджера пакетов snap. |
| source словарь | Источник контейнера (например, { "type": "image", "mode": "pull", "server": "https://images.linuxcontainers.org", "protocol": "lxd", "alias": "ubuntu/xenial/amd64" }). Полную документацию API см. в https://github.com/lxc/lxd/blob/master/doc/rest-api.md#post-1. Обратите внимание, что protocol принимает два варианта: lxd или simplestreams
| |
| state строка |
| Определяет состояние контейнера. |
| target строка добавлен в 1.0.0 из community.general | Для развертывания кластеров. Попытается создать контейнер на целевом узле. Если контейнер существует в другом месте в кластере, то контейнер не будет заменен или перемещен. Имя должно соответствовать имени узла, которое вы видите в lxc cluster list. | |
| timeout целое число | По умолчанию: 30 | Таймаут для изменения состояния контейнера. Также используется в качестве таймаута ожидания, пока IPv4-адреса не будут назначены всем сетевым интерфейсам контейнера после запуска или перезапуска. |
| trust_password строка | Защитный пароль клиента. Необходимо установить этот пароль на сервере LXD перед запуском этого модуля, используя следующую команду. lxc config set core.trust_password <some random password> См. https://www.stgraber.org/2016/04/18/lxd-api-direct-interaction/
Если trust_password задан, этот модуль отправляет запрос на аутентификацию перед отправкой любых запросов. | |
| url строка | По умолчанию: "unix:/var/lib/lxd/unix.socket" | Путь unix-соккета или https-URL сервера LXD. |
| wait_for_ipv4_addresses логическое |
| Если значение true, то модуль lxd_container ожидает, пока IPv4-адреса не будут назначены всем сетевым интерфейсам контейнера после запуска или перезапуска. |
Примечания
Примечание
- Контейнеры должны иметь уникальное имя. Если вы попытаетесь создать контейнер с именем, которое уже существует в пространстве имен пользователя, модуль просто вернет "без изменений".
- Существует два способа выполнения команд в контейнерах: использование модуля command или плагина подключения ansible lxd, включенного в Ansible >= 2.1. Последний требует установки Python в контейнере, что можно сделать с помощью модуля command.
- Вы можете скопировать файл с хоста в контейнер с помощью Ansible модулей ansible.builtin.copy и ansible.builtin.template и плагина подключения
lxd. См. пример ниже. - Вы можете скопировать файл из созданного контейнера на локальный хост с помощью
command=lxc file pull container_name/dir/filename filename. См. первый пример ниже.
Примеры
# An example for creating a Ubuntu container and install python
- hosts: localhost
connection: local
tasks:
- name: Create a started container
community.general.lxd_container:
name: mycontainer
state: started
source:
type: image
mode: pull
server: https://images.linuxcontainers.org
protocol: lxd # if you get a 404, try setting protocol: simplestreams
alias: ubuntu/xenial/amd64
profiles: ["default"]
wait_for_ipv4_addresses: true
timeout: 600
- name: Check python is installed in container
delegate_to: mycontainer
ansible.builtin.raw: dpkg -s python
register: python_install_check
failed_when: python_install_check.rc not in [0, 1]
changed_when: false
- name: Install python in container
delegate_to: mycontainer
ansible.builtin.raw: apt-get install -y python
when: python_install_check.rc == 1
# An example for creating an Ubuntu 14.04 container using an image fingerprint.
# This requires changing 'server' and 'protocol' key values, replacing the
# 'alias' key with with 'fingerprint' and supplying an appropriate value that
# matches the container image you wish to use.
- hosts: localhost
connection: local
tasks:
- name: Create a started container
community.general.lxd_container:
name: mycontainer
state: started
source:
type: image
mode: pull
# Provides current (and older) Ubuntu images with listed fingerprints
server: https://cloud-images.ubuntu.com/releases
# Protocol used by 'ubuntu' remote (as shown by 'lxc remote list')
protocol: simplestreams
# This provides an Ubuntu 14.04 LTS amd64 image from 20150814.
fingerprint: e9a8bdfab6dc
profiles: ["default"]
wait_for_ipv4_addresses: true
timeout: 600
# An example for deleting a container
- hosts: localhost
connection: local
tasks:
- name: Delete a container
community.general.lxd_container:
name: mycontainer
state: absent
# An example for restarting a container
- hosts: localhost
connection: local
tasks:
- name: Restart a container
community.general.lxd_container:
name: mycontainer
state: restarted
# An example for restarting a container using https to connect to the LXD server
- hosts: localhost
connection: local
tasks:
- name: Restart a container
community.general.lxd_container:
url: https://127.0.0.1:8443
# These client_cert and client_key values are equal to the default values.
#client_cert: "{{ lookup('env', 'HOME') }}/.config/lxc/client.crt"
#client_key: "{{ lookup('env', 'HOME') }}/.config/lxc/client.key"
trust_password: mypassword
name: mycontainer
state: restarted
# Note your container must be in the inventory for the below example.
#
# [containers]
# mycontainer ansible_connection=lxd
#
- hosts:
- mycontainer
tasks:
- name: Copy /etc/hosts in the created container to localhost with name "mycontainer-hosts"
ansible.builtin.fetch:
src: /etc/hosts
dest: /tmp/mycontainer-hosts
flat: true
# An example for LXD cluster deployments. This example will create two new container on specific
# nodes - 'node01' and 'node02'. In 'target:', 'node01' and 'node02' are names of LXD cluster
# members that LXD cluster recognizes, not ansible inventory names, see: 'lxc cluster list'.
# LXD API calls can be made to any LXD member, in this example, we send API requests to
#'node01.example.com', which matches ansible inventory name.
- hosts: node01.example.com
tasks:
- name: Create LXD container
community.general.lxd_container:
name: new-container-1
state: started
source:
type: image
mode: pull
alias: ubuntu/xenial/amd64
target: node01
- name: Create container on another node
community.general.lxd_container:
name: new-container-2
state: started
source:
type: image
mode: pull
alias: ubuntu/xenial/amd64
target: node02
Возвращаемые значения
Общие возвращаемые значения описаны в здесь, следующие поля уникальны для этого модуля:
| Ключ | Возвращаемое значение | Описание |
|---|---|---|
| actions список / элементы=строка | успех | Список действий, выполненных для контейнера. Пример: ["создать", "запустить"] |
| addresses словарь | при состоянии запущен или перезапущен | Сопоставление имени сетевого устройства со списком IPv4-адресов в контейнере Пример: {'eth0': ['10.155.92.191']} |
| logs список / элементы=строка | при вызове ansible-playbook с -vvvv | Журналы запросов и ответов. Пример: (слишком длинный, чтобы поместить здесь) |
| old_state строка | при состоянии запущен или перезапущен | Предыдущее состояние контейнера Пример: остановлен |
Авторы
- Hiroaki Nakamura (@hnakamur)
© 2012–2018 Michael DeHaan
© 2018–2021 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.11/collections/community/general/lxd_container_module.html