Ansible Проверьте, существует ли контейнер lxd с именем - PullRequest
1 голос
/ 08 мая 2019

Можно ли проверить в ansible, если контейнер уже существует?

Я попробовал следующее:

- name: LXD | Check for already existing container
  lxc_container:
    name: {{ container_name }}
    state: absent
  register: check_container_absent

- debug: msg="{{ check_container_absent }}"

- name: LXD | Create dev container
  command: # script to create container #
  when: check_container_absent.exists

Но вывод check_container_absent не изменился после того, как я создал контейнер.

Другим решением также будет проверка местоположения, в котором хранятся контейнеры, если существует папка с именем контейнера.

Есть ли лучшее решение, чем проверять папку?

1 Ответ

1 голос
/ 08 мая 2019

Согласно официальной документации

Контейнеры должны иметь уникальное имя. Если вы попытаетесь создать контейнер с именем, которое уже существует в пространстве имен пользователей модуль просто вернется как «без изменений».

Вы должны быть в состоянии проверить, существует ли контейнер с именем container_name или нет, соответственно, проверив, сообщает ли задача об изменении.

- name: Do container things
  hosts: localhost
  gather_facts: false
  tasks:
  - name: Delete container if exists 
    lxc_container:
      name: {{ container_name }}
      state: absent
    register: delete_container

  - name: Reports false if container did not already exist
    debug:
      var: delete_container.changed

  - name: Create container if not already exists 
    lxc_container:
      name: {{ container_name }}
    register: create_container

  - name: Reports false if container did already exist
    debug:
      var: create_container.changed

Обе из вышеперечисленных задач фактически создадут / удалят объект, если он существует / еще не существует.

Если вы просто хотите собрать данные о том, существует ли объект и, в зависимости от этого, выполнить какое-либо действие позже, вы не захотите использовать модуль lxc_container, так как он предназначен для создания / удаления. , а не собирать информацию.

Вместо этого вы, вероятно, захотите просто использовать модуль команды / оболочки с changed_when: false и сохранить результат.

- name: Check whether container exists
  shell: "lxc list | grep -v {{ container_name }}"
  changed_when: false
  ignore_errors: true
  register: lxc_list

- name: Do thing if container does not exist
  debug:
    msg: "It doesn't exist"
  when: lxc_list.rc != 0
...