У меня есть роль, против которой 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/