Files
ansible-role-docker/tasks/networks.yml
2025-11-17 15:06:06 +01:00

52 lines
1.8 KiB
YAML

---
- name: Get all Docker networks
ansible.builtin.command: docker network ls --format "{{ '{{' }}.Name{{ '}}' }}"
register: all_networks
changed_when: false
when: docker_networks is defined
- name: Get list of managed network names
ansible.builtin.set_fact:
managed_network_names: "{{ docker_networks | map(attribute='name') | list }}"
when: docker_networks is defined
- name: Check networks to remove
ansible.builtin.set_fact:
networks_to_remove: "{{ all_networks.stdout_lines | difference(managed_network_names | default([])) | difference(['bridge', 'host', 'none']) | list }}"
when: docker_networks is defined
- name: Remove Docker networks no longer in configuration
ansible.builtin.command: docker network rm {{ item }}
loop: "{{ networks_to_remove | default([]) }}"
loop_control:
label: "{{ item }}"
when:
- docker_networks is defined
- networks_to_remove | default([]) | length > 0
ignore_errors: true
failed_when: false
- name: Check if Docker network exists
ansible.builtin.command: docker network inspect {{ item.name }}
register: network_check
changed_when: false
failed_when: false
loop: "{{ docker_networks }}"
when: docker_networks | length > 0
- name: Create Docker networks
ansible.builtin.command: >
docker network create
--driver {{ item.driver | default('bridge') }}
{% if item.subnet is defined %}--subnet {{ item.subnet }}{% endif %}
{% if item.gateway is defined %}--gateway {{ item.gateway }}{% endif %}
{% if item.ip_range is defined %}--ip-range {{ item.ip_range }}{% endif %}
{{ item.name }}
loop: "{{ docker_networks }}"
loop_control:
label: "{{ item.name }}"
when:
- docker_networks | length > 0
- network_check.results | selectattr('item.name', 'equalto', item.name) | selectattr('rc', 'equalto', 1) | list | length > 0
ignore_errors: true