Какие конкретные изменения необходимо внести в код ниже, чтобы Ansible Playbook знал, как извлечь данные
testFile.txt
из ?ServerB
ServerA
Оба они — серверы Amazon Linux.
Обратите внимание, что ServerA
и ServerB
оба удаленных сервера управляются центральным сервером Ansible.
Файл, созданный ServerB
с помощью Playbook с центрального сервера Ansible, необходимо копировать/извлекать непосредственно ServerA
во ServerB
время выполнения, а не возвращать обратно на сервер Ansible.
Также обратите внимание, что инвентарь для ServerA
и ServerB
(по одному IP для каждого) определен на центральном сервере Ansible, но не на удаленном ServerA
или удаленном ServerB
.
Таким образом, во время выполнения плейбук выдает следующую ошибку, когда доходит до строки `` ниже:
fatal: [ip.of.server.b]: FAILED! => {
"msg": "'ServerA' is undefined"
}
Итак, какие конкретные изменения необходимо внести в приведенный ниже код, чтобы его
ServerA
можно было определить во время выполнения?
Вот руководство:
# Then create a file on ServerB and copy/pull that file into ServerA
- name: File transfer example
hosts: ServerB
remote_user: server-b-user
become: true
become_method: sudo
become_user: root
tasks:
- name: Create a test file to copy
shell:
cmd: |
cat <<EOF > /path/on/ServerB/testFile.txt
this is a test file.
EOF
sudo: true
sudo_user: server-b-user
- name: Transfer conf file from master to admin
synchronize:
src: /path/on/ServerB/testFile.txt
dest: /path/on/ServerA/
mode: pull
delegate_to: "{{ ServerA }}"
решение1
Итак, какие конкретные изменения необходимо внести в приведенный ниже код, чтобы ServerA можно было определить во время выполнения?
- hosts: ServerB
vars:
ServerA: 192.168.0.0
Необходимо устранить сообщение об ошибке, указывающее на то, что переменная ServerA
не определена.
Ваш код вызывает переменнуюСерверА. Вы не определили переменную, и в Ansible нет зарегистрированного «факта» для этого имени; поэтому оно не определено, и контроллер не знает, на что вы ссылаетесь.
Документация Ansibleпоказывает, что delegate_to:
поддерживает прямой вызов IP-адреса. Если вы хотитеиспользовать переменнуюдля этого вам нужнообъявите это самостоятельно в кодеили используйте один из динамических фактов инвентаризации.
Это также может быть осуществимо с помощьюмагическая переменная inventory_hostname
чтобы вытащить факты. YMMV.