Я пытаюсь сделать следующее, используя Ansible 2.8.4 и awx:
- Прочтите некоторые факты из устройств Cisco IOS (работает)
- Поместите результаты в локальный файл с помощью шаблона (работает)
- Скопируйте / переместите полученный файл на другой сервер
Поскольку мне приходится использовать другого пользователя для доступа к устройствам и серверам IOS, а рассматриваемые серверы не являются частью инвентаря, используемого для playbook, я пытаюсь добиться этого с помощью begin_user и delegate_to. Первоначальному пользователю (определенному в шаблоне awx) разрешено подключаться к устройствам IOS, в то время как different_user может подключаться к серверам с помощью закрытого ключа ssh.
Пособие:
---
- name: Read Switch Infos
hosts: all
gather_facts: no
tasks:
- name: Gather IOS Facts
ios_facts:
- debug: var=ansible_net_version
- name: Set Facts IOS
set_fact:
ios_version: "{{ ansible_net_version }}"
- name: Create Output file
file: path=/tmp/test state=directory mode=0755
delegate_to: 127.0.0.1
run_once: true
- name: Run Template
template:
src: ios_firmware_check.j2
dest: /tmp/test/output.txt
delegate_to: 127.0.0.1
run_once: true
- name: Set up keys
become: yes
become_method: su
become_user: different_user
authorized_key:
user: different_user
state: present
key: "{{ lookup('file', '/home/different_user/.ssh/key_file') }}"
delegate_to: 127.0.0.1
run_once: true
- name: Copy to remote server
remote_user: different_user
copy:
src: /tmp/test/output.txt
dest: /tmp/test/output.txt
delegate_to: remote.server.fqdn
run_once: true
При запуске playbook не удается выполнить задачу Set up keys, пытаясь получить доступ к домашнему каталогу с помощью ключа ssh:
TASK [Set up keys] *************************************************************
task path: /tmp/awx_2206_mz90qvh9/project/IOS/ios_version.yml:23
[WARNING]: Unable to find '/home/different_user/.ssh/key_file' in expected paths
(use -vvvvv to see paths)
File lookup using None as file
fatal: [host]: FAILED! => {
"msg": "An unhandled exception occurred while running the lookup plugin 'file'. Error was a <class 'ansible.errors.AnsibleError'>, original message: could not locate file in lookup: /home/different_user/.ssh/key_file"
}
Я предполагаю, что моя ошибка каким-то образом связана с тем, какой пользователь пытается получить доступ к каталогу / home / на каком устройстве. Есть ли лучший / более элегантный / рабочий способ подключения к другому серверу с помощью ключа ssh для перемещения файлов? Я знаю, что одной из возможностей было бы просто scp с использованием модуля оболочки, но это всегда кажется немного взломанным.