Назад | Перейти на главную страницу

Получите параметры подключения для хоста по псевдониму в Ansible playbook

У меня есть роль, против которой localhost:

---
- hosts: localhost
  tasks:
    ...
    - name: Push code to target host
      shell: scp -P "{{ ansible_port }}" "{{ home_dir }}/{{ project }}.tgz" root@{{ target_server }}:/home/teamcity/

Я запускаю эту книгу с target_server env var, которая используется в одной другой подзадаче в качестве целевого хоста:

ansible-playbook \
-i 'ansible/hosts' \
--extra-vars "target_server=stage" \
ansible/deliver.yml

Есть ли способ получить варианты подключения для scp, описанный в ansible/hosts по псевдониму сервера, переданному как env var? Цель не пройти ansible_port или другие варианты подключения дважды, но получить от уже переданного псевдонима сервера target_server.

Другими словами, если я запустил playbook --extra-vars "target_server=stage", как я могу получить ansible_hostname и ansible_port для хозяина 'stage' использовать как параметры подключения scp?

Поскольку вы запускаете playbook против localhost, я предполагаю, что исходные файлы находятся там.

Вы можете использовать более подходящие модули для копирования файлов, например модуль копирования:

- hosts: target_server
  tasks:
  - name: Push code via copy
    copy:
      src: "{{ home_dir }}/{{ project }}.tgz"
      dest: "/home/teamcity/"

Если вы хотите распаковать архив на целевой сервер, вы можете сделать это за один шаг, используя разархивировать модуль:

  - name: Push code via unarchive
    unarchive:
      src: "{{ home_dir }}/{{ project }}.tgz"
      dest: "/home/teamcity/"

Если исходные файлы находятся на другом сервере, вы можете использовать модуль синхронизации для копирования с сервера A на B:

  - name: Push code from remote server
    synchronize:
      src: "{{ home_dir }}/{{ project }}.tgz"
      dest: "/home/teamcity/"
    delegate_to: src_server

Если вы настаиваете на использовании модуля оболочки с scp, вы можете получить доступ к переменным с помощью hostvars переменная:

- hosts: localhost
  - name: Push code to target host
    shell: scp -P "{{ hostvars['target_server']['ansible_port'] }}" "{{ home_dir }}/{{ project }}.tgz" root@{{ hostvars['target_server']['ansible_hostname'] }}:/home/teamcity/