1

如果容器已经存在,是否可以签入 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在我创建容器后输出没有改变。

如果存在具有容器名称的文件夹,另一种解决方案也是检查容器的存储位置。

有比检查文件夹更好的解决方案吗?

4

1 回答 1

1

根据官方文档

容器必须具有唯一的名称。如果您尝试使用用户命名空间中已存在的名称创建容器,则模块将简单地返回“未更改”。

您应该能够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模块,因为它旨在创建/删除,而不是收集信息。

相反,您可能只想使用 command/shell 模块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
于 2019-05-08T12:41:54.590 回答