--- - hosts: localhost gather_facts: false vars: # Получаем preset из переменной окружения или используем default preset_name: "{{ lookup('env', 'MOLECULE_PRESET') | default('default') }}" # Проверяем сначала в папке k8s, затем в основной папке presets preset_file: "{{ '/workspace/molecule/presets/k8s/' + preset_name + '.yml' if (preset_name in ['k8s-minimal', 'kubernetes', 'k8s-full'] or preset_name.startswith('k8s-')) else '/workspace/molecule/presets/' + preset_name + '.yml' }}" # Fallback значения если preset файл не найден docker_network: labnet hosts: - name: u1 family: debian groups: [test] kind_clusters: [] tasks: - name: Load preset configuration include_vars: "{{ preset_file }}" when: preset_file is file ignore_errors: true - name: Stop and remove containers community.docker.docker_container: name: "{{ item.name }}" state: absent force_kill: true cleanup: true loop: "{{ hosts }}" loop_control: { label: "{{ item.name }}" } ignore_errors: true - name: Force remove any remaining containers shell: | docker ps -a --filter "name={{ item.name }}" --format "{{ '{{' }}.ID{{ '}}' }}" | xargs -r docker rm -f loop: "{{ hosts }}" loop_control: { label: "{{ item.name }}" } ignore_errors: true - name: Remove DinD volumes community.docker.docker_volume: name: "{{ item.name }}-docker" state: absent loop: "{{ hosts | selectattr('type','defined') | selectattr('type','equalto','dind') | list }}" loop_control: { label: "{{ item.name }}" } ignore_errors: true - name: Remove custom volumes community.docker.docker_volume: name: "{{ item.volumes | default([]) | select('match', '^[^:]+$') | list }}" state: absent loop: "{{ hosts }}" loop_control: { label: "{{ item.name }}" } ignore_errors: true when: item.volumes is defined - name: Remove network community.docker.docker_network: name: "{{ docker_network }}" state: absent ignore_errors: true - name: Force cleanup all project containers shell: | # Удаляем все контейнеры из загруженного пресета {% for host in hosts %} docker ps -a --filter "name={{ host.name }}" --format "{{ '{{' }}.ID{{ '}}' }}" | xargs -r docker rm -f 2>/dev/null || true {% endfor %} # Удаляем все контейнеры с образами ansible-lab docker ps -a --filter "ancestor=inecs/ansible-lab" --format "{{ '{{' }}.ID{{ '}}' }}" | xargs -r docker rm -f 2>/dev/null || true # Удаляем все контейнеры с сетью labnet docker ps -a --filter "network=labnet" --format "{{ '{{' }}.ID{{ '}}' }}" | xargs -r docker rm -f 2>/dev/null || true ignore_errors: true vars: # Используем переменную hosts из загруженного пресета hosts: "{{ hosts }}" # ---------- Kind clusters удаляются через make k8s destroy ---------- # Все задачи по удалению кластеров выполняются через команду make k8s destroy - name: Display cleanup summary debug: msg: | 🧹 Cleanup Summary: - Removed containers: {{ hosts | length }} - Removed DinD volumes: {{ hosts | selectattr('type','defined') | selectattr('type','equalto','dind') | list | length }} - Network: {{ docker_network }} - Removed kind clusters: {{ kind_clusters | default([]) | length }}