Определение инвентаря Ansible на удаленном сервере

Определение инвентаря Ansible на удаленном сервере

Какие конкретные изменения необходимо внести в код ниже, чтобы Ansible Playbook знал, как извлечь данные testFile.txtиз ?ServerBServerA

Оба они — серверы 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.

Связанный контент