Spec-Zone.ru › Ansible

Модуль community.general.lxd_container — управление экземплярами LXD

Примечание

Этот модуль входит в коллекцию community.general (версия 12.6.1).

Возможно, эта коллекция уже установлена, если вы используете пакет ansible. Она не входит в ansible-core. Чтобы проверить, установлена ли она, выполните ansible-galaxy collection list.

Чтобы установить её, используйте: ansible-galaxy collection install community.general.

Чтобы использовать её в плейбуке, укажите: community.general.lxd_container.

  • Краткое описание
  • Параметры
  • Атрибуты
  • Примечания
  • Примеры
  • Возвращаемые значения

Краткое описание

  • Управление контейнерами и виртуальными машинами LXD.

Параметры

Параметр

Комментарии

architecture

string

Архитектура экземпляра (например, x86_64 или i686).

См. https://documentation.ubuntu.com/lxd/en/latest/api/#/instances/instance_get.

client_cert

псевдонимы: cert_file

path

Путь к файлу сертификата клиента.

Если не указан, используется значение по умолчанию ${HOME}/.config/lxc/client.crt.

client_key

псевдонимы: key_file

path

Путь к файлу ключа сертификата клиента.

Если не указан, используется значение по умолчанию ${HOME}/.config/lxc/client.key.

config

dictionary

Конфигурация экземпляра (например, {"limits.cpu": "2"}).

Все значения в config должны быть строками, как того требует API LXD/Incus. Использование значений не строкового типа (например, целых чисел или логических значений) приведёт к ошибке API. В YAML числовые и логические значения нужно заключать в кавычки (например, используйте "2" вместо 2).

См. https://documentation.ubuntu.com/lxd/en/latest/api/#/instances/instance_get.

Если экземпляр уже существует и значения «config» в метаданных, полученных из API LXD https://documentation.ubuntu.com/lxd/en/latest/api/#/instances/instance_get, отличаются, модуль попытается применить конфигурацию https://documentation.ubuntu.com/lxd/en/latest/api/#/instances/instance_put.

Ключи, начинающиеся с volatile., игнорируются при таком сравнении, если ignore_volatile_options=true.

devices

dictionary

Устройства экземпляра (например, { "rootfs": { "path": "/dev/kvm", "type": "unix-char" }}).

См. https://documentation.ubuntu.com/lxd/en/latest/api/#/instances/instance_get.

ephemeral

boolean

Является ли экземпляр временным (например, true или false).

См. https://documentation.ubuntu.com/lxd/en/latest/api/#/instances/instance_get.

Варианты:

  • false
  • true

force_stop

boolean

Если установлено значение true, lxd_container принудительно останавливает экземпляр при его остановке или перезапуске.

Варианты:

  • false ← (значение по умолчанию)
  • true

ignore_volatile_options

boolean

добавлено в community.general 3.7.0

Если установлено значение true, параметры, начинающиеся с volatile., игнорируются. В результате они применяются повторно при каждом запуске.

Это поведение по умолчанию можно изменить, установив для этого параметра значение false.

В community.general 6.0.0 значение по умолчанию изменено с true на false.

Варианты:

  • false ← (значение по умолчанию)
  • true

name

string / обязательный

Имя экземпляра.

profiles

list / элементы=string

Профиль, используемый экземпляром.

project

string

добавлено в community.general 4.8.0

Проект экземпляра.

См. https://documentation.ubuntu.com/lxd/en/latest/projects/.

snap_url

string

Путь к сокету домена Unix, если LXD установлен с помощью менеджера пакетов snap.

По умолчанию: "unix:/var/snap/lxd/common/lxd/unix.socket"

source

dictionary

Источник экземпляра (например, { "type": "image", "mode": "pull", "server": "https://cloud-images.ubuntu.com/releases/", "protocol": "simplestreams", "alias": "22.04" }).

Полную документацию API см. на странице https://documentation.ubuntu.com/lxd/en/latest/api/.

Обратите внимание, что protocol принимает два значения: lxd или simplestreams.

state

string

Задаёт состояние экземпляра.

Варианты:

  • "started" ← (значение по умолчанию)
  • "stopped"
  • "restarted"
  • "absent"
  • "frozen"

target

string

добавлено в community.general 1.0.0

Для кластерных развёртываний. Модуль пытается создать экземпляр на целевом узле. Если экземпляр уже существует в другом месте кластера, он не заменяется и не перемещается. Имя должно совпадать с именем узла, отображаемым в lxc cluster list.

timeout

integer

Время ожидания изменения состояния экземпляра.

Это значение также используется как время ожидания назначения IPv4-адресов всем сетевым интерфейсам экземпляра после запуска или перезапуска.

По умолчанию: 30

trust_password

string

Пароль доверенного клиента.

Перед запуском этого модуля необходимо задать этот пароль на сервере LXD с помощью следующей команды: lxc config set core.trust_password <some random password>. См. https://www.stgraber.org/2016/04/18/lxd-api-direct-interaction/.

Если задан trust_password, модуль отправляет запрос аутентификации перед отправкой любых других запросов.

type

string

добавлено в community.general 4.1.0

Тип экземпляра: virtual-machine или container.

Варианты:

  • "container" ← (значение по умолчанию)
  • "virtual-machine"

url

string

Путь к сокету домена Unix или URL-адрес https сервера LXD.

По умолчанию: "unix:/var/lib/lxd/unix.socket"

wait_for_container

boolean

добавлено в community.general 4.4.0

Если установлено значение true, задачи ожидают успешного завершения операции с контейнером.

Варианты:

  • false ← (значение по умолчанию)
  • true

wait_for_ipv4_addresses

boolean

Если установлено значение true, lxd_container ожидает назначения IPv4-адресов всем сетевым интерфейсам экземпляра после запуска или перезапуска.

Варианты:

  • false ← (значение по умолчанию)
  • true

Атрибуты

Атрибут

Поддержка

Описание

check_mode

Поддержка: полная

добавлено в community.general 6.4.0

Может работать в check_mode и возвращать прогноз изменения состояния, не изменяя целевой объект.

diff_mode

Поддержка: полная

добавлено в community.general 6.4.0

В режиме diff возвращает сведения об изменениях (или о том, что может потребоваться изменить в check_mode).

Примечания

Примечание

  • Экземпляры могут быть контейнерами или виртуальными машинами; каждый из них должен иметь уникальное имя. Если попытаться создать экземпляр с именем, уже существующим в пространстве имён пользователя, модуль просто вернёт статус «без изменений».
  • Есть два способа выполнять команды внутри контейнера или виртуальной машины: использовать модуль command или плагин подключения ansible lxd, входящий в Ansible >= 2.1. Для последнего требуется, чтобы в экземпляре был установлен Python; это можно сделать с помощью модуля command.
  • Скопировать файл с хоста в экземпляр можно с помощью модулей Ansible ansible.builtin.copy и ansible.builtin.template, а также плагина подключения community.general.lxd. См. пример ниже.
  • Скопировать файл из созданного экземпляра на локальный хост можно с помощью command=lxc file pull instance_name/dir/filename filename. См. первый пример ниже.
  • В марте 2024 года Linuxcontainers.org прекратил поддержку LXC/LXD (https://discuss.linuxcontainers.org/t/important-notice-for-lxd-users-image-server/18479). Сейчас образы по-прежнему предоставляет только Ubuntu.

Примеры

# 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
        ignore_volatile_options: true
        state: started
        source:
          type: image
          mode: pull
          server: https://cloud-images.ubuntu.com/releases/
          protocol: simplestreams
          alias: "22.04"
        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
        ignore_volatile_options: true
        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 of creating a ubuntu-minial container
- hosts: localhost
  connection: local
  tasks:
    - name: Create a started container
      community.general.lxd_container:
        name: mycontainer
        ignore_volatile_options: true
        state: started
        source:
          type: image
          mode: pull
          # Provides Ubuntu minimal images
          server: https://cloud-images.ubuntu.com/minimal/releases/
          protocol: simplestreams
          alias: "22.04"
        profiles: ["default"]
        wait_for_ipv4_addresses: true
        timeout: 600

# An example for creating container in project other than default
- hosts: localhost
  connection: local
  tasks:
    - name: Create a started container in project mytestproject
      community.general.lxd_container:
        name: mycontainer
        project: mytestproject
        ignore_volatile_options: true
        state: started
        source:
          protocol: simplestreams
          type: image
          mode: pull
          server: https://cloud-images.ubuntu.com/releases/
          alias: "22.04"
        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
        type: container

# An example for restarting a container
- hosts: localhost
  connection: local
  tasks:
    - name: Restart a container
      community.general.lxd_container:
        name: mycontainer
        state: restarted
        type: container

# 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
        ignore_volatile_options: true
        state: started
        source:
          type: image
          mode: pull
          alias: "22.04"
        target: node01

    - name: Create container on another node
      community.general.lxd_container:
        name: new-container-2
        ignore_volatile_options: true
        state: started
        source:
          type: image
          mode: pull
          alias: "22.04"
        target: node02

# An example for creating a virtual machine
- hosts: localhost
  connection: local
  tasks:
    - name: Create container on another node
      community.general.lxd_container:
        name: new-vm-1
        type: virtual-machine
        state: started
        ignore_volatile_options: true
        wait_for_ipv4_addresses: true
        profiles: ["default"]
        source:
          protocol: simplestreams
          type: image
          mode: pull
          server: ['...'] # URL to the image server
          alias: debian/11
        timeout: 600

Возвращаемые значения

Общие возвращаемые значения описаны здесь; ниже перечислены поля, уникальные для этого модуля:

Ключ

Описание

actions

list / элементы=string

Список действий, выполненных для экземпляра.

Возвращается: при успешном выполнении

Пример: ["create", "start"]

addresses

dictionary

Соответствие между именем сетевого устройства и списком IPv4-адресов экземпляра.

Возвращается: если состояние — started или restarted

Пример: {"eth0": ["10.155.92.191"]}

logs

list / элементы=string

Журналы запросов и ответов.

Возвращается: если ansible-playbook запущен с параметром -vvvv.

Пример: ["(too long to be placed here)"]

old_state

string

Предыдущее состояние экземпляра.

Возвращается: если состояние — started или restarted

Пример: "stopped"

Авторы

  • Hiroaki Nakamura (@hnakamur)

Ссылки на коллекцию

  • Отслеживание проблем
  • Репозиторий (исходный код)
  • Обратиться за помощью
  • Сообщить об ошибке
  • Запросить новую функцию
  • Связь

© 2012–2018 Michael DeHaan
© 2018–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/collections/community/general/lxd_container_module.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API