Ansible 检查同名的 lxd 容器是否已经存在
Ansible Check if lxd container with name already exists
如果容器已经存在,是否可以签入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
的输出在我创建容器后并没有改变。
如果存在具有容器名称的文件夹,另一个解决方案也是检查容器的存储位置。
有没有比检查文件夹更好的解决方案?
根据官方文档
Containers must have a unique name. If you attempt to create a
container with a name that already exists in the users namespace the
module will simply return as “unchanged”.
您应该能够通过检查任务报告是否已更改来检查名称为 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
如果对象 does/does 尚不存在,则上述两个任务实际上都会 create/delete 对象。
如果您只是想收集有关对象是否存在的 数据 并在以后有条件地执行某些操作,您将不想使用 lxc_container
模块因为它旨在 create/delete,而不是收集信息。
相反,您可能只想将 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
如果容器已经存在,是否可以签入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
的输出在我创建容器后并没有改变。
如果存在具有容器名称的文件夹,另一个解决方案也是检查容器的存储位置。
有没有比检查文件夹更好的解决方案?
根据官方文档
Containers must have a unique name. If you attempt to create a container with a name that already exists in the users namespace the module will simply return as “unchanged”.
您应该能够通过检查任务报告是否已更改来检查名称为 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
如果对象 does/does 尚不存在,则上述两个任务实际上都会 create/delete 对象。
如果您只是想收集有关对象是否存在的 数据 并在以后有条件地执行某些操作,您将不想使用 lxc_container
模块因为它旨在 create/delete,而不是收集信息。
相反,您可能只想将 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