--- # ------------------------------------------------------------------------- # ПЛЕЙ 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 }}, полученному из контейнера!"