56 lines
2.7 KiB
YAML
56 lines
2.7 KiB
YAML
---
|
||
# -------------------------------------------------------------------------
|
||
# ПЛЕЙ 1: Подключение к Docker-хосту и извлечение данных
|
||
# -------------------------------------------------------------------------
|
||
- name: Extract inventory from Docker container
|
||
hosts: docker_servers # Группа в Semaphore, где лежит ваш Docker-сервер
|
||
become: true # Обычно нужно sudo для команд docker
|
||
vars:
|
||
container_name: "my_app_container" # Имя вашего контейнера
|
||
file_path_in_container: "/app/hosts.txt" # Путь к файлу внутри контейнера
|
||
|
||
tasks:
|
||
- name: Check if container is running
|
||
shell: "docker ps -q -f name={{ container_name }}"
|
||
register: container_check
|
||
|
||
- name: Fail if container is not running
|
||
fail:
|
||
msg: "Контейнер {{ container_name }} не запущен!"
|
||
when: container_check.stdout == ""
|
||
|
||
- name: Read file content from container
|
||
# Используем docker exec для чтения файла
|
||
command: "docker exec {{ container_name }} cat {{ file_path_in_container }}"
|
||
register: file_content
|
||
changed_when: false
|
||
|
||
- name: Parse output and add to in-memory inventory
|
||
# add_host работает локально в памяти Ansible во время выполнения
|
||
add_host:
|
||
name: "{{ item }}"
|
||
groups: extracted_hosts # Создаем новую временную группу
|
||
# Можно добавить переменные, например, способ подключения:
|
||
# ansible_ssh_user: root
|
||
# Разделяем вывод cat по строкам и убираем пустые
|
||
loop: "{{ file_content.stdout_lines | select('match', '^.+$') | list }}"
|
||
|
||
- name: Debug info
|
||
debug:
|
||
msg: "Добавлен хост: {{ item }}"
|
||
loop: "{{ file_content.stdout_lines | select('match', '^.+$') | list }}"
|
||
|
||
# -------------------------------------------------------------------------
|
||
# ПЛЕЙ 2: Работа с новыми хостами
|
||
# -------------------------------------------------------------------------
|
||
- name: Configure the extracted hosts
|
||
hosts: extracted_hosts # Обращаемся к группе, созданной в предыдущем шаге
|
||
gather_facts: false # Отключаем, если нет SSH доступа или нужно ускорить
|
||
|
||
tasks:
|
||
- name: Ping new hosts
|
||
ping:
|
||
|
||
- name: Echo Hello
|
||
debug:
|
||
msg: "Я подключился к хосту {{ inventory_hostname }}, полученному из контейнера!" |