Ansible playbook, adho c var не может использоваться между двумя хостами - PullRequest
1 голос
/ 14 июля 2020

Невозможно установить и использовать переменные хоста, объявленные как переменные в host1, которые я хочу использовать в localhost. Я следовал многим предложениям, и ни один из них не помог мне устранить ошибку The task includes an option with an undefined variable. The error was: "hostvars['host1']" is undefined

Шаги:

  • host1 копирует файл на локальный через fetch, используя register
  • затем, используя set_fact, сохраните путь назначения, включающий хост ("dest": "/var/log/ansible_runs/10.xxx.xxx.251/tmp/xxx_env_pin.tmp",). Это работает под host1
  • следующий localhost использует var "file_n_path", созданный с host1 (при работе будет использовать путь для добавления в другой файл).
# Run script on remote machine
---
- hosts: host1
 remote_user: one
 tasks:
   - name: Store file into local
     fetch:
       src: /tmp/xxx_env_one.tmp
       dest: /var/log/ansible_runs
     register: fetch_output1
   - set_fact: file_n_path="{{fetch_output1.dest}}"

   - debug: 
       var: fetch_output1

   - debug:
       msg: " 1a. {{ file_n_path }}"


#   --/ Run on local machine to append copied file
- hosts: localhost
 connection: local
 vars:
   m_var_frm_pin: "{{ hostvars['host1']['file_n_path'] }}"
 tasks:
   - debug: 
       msg: " 2a. {{ m_var_frm_pin }}"

Вывод


PLAY [host1] *******************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts gather_subset=['all'], gather_timeout=10] **************************************************************************************************************************************************************************
ok: [10.xxx.xxx.251]

TASK [Store file intolocal dest=/var/log/ansible_runs, src=/tmp/xxx_env_pin.tmp] *******************************************************************************************************************
ok: [10.xxx.xxx.251]

TASK [set_fact file_n_path={{fetch_output1.dest}}] ***************************************************************************************************************************************************************************************
ok: [10.xxx.xxx.251]

TASK [debug var=fetch_output1] ***********************************************************************************************************************************************************************************************************
ok: [10.xxx.xxx.251] => {
    "fetch_output1": {
        "changed": false,
        "checksum": "dc828a5f0c48456c72e5849891736135f89b265c",
        "dest": "/var/log/ansible_runs/10.xxx.xxx.251/tmp/xxx_env_pin.tmp",
        "failed": false,
        "file": "/tmp/xxx_env_pin.tmp",
        "md5sum": "30a6d5ba55ed78832a978c53298a054c"
    }
}

TASK [debug msg= 1a. {{ file_n_path }}] **************************************************************************************************************************************************************************************************
ok: [10.xxx.xxx.251] => {}

MSG:

 1a. /var/log/ansible_runs/10.xxx.xxx.251/tmp/xxx_env_pin.tmp


PLAY [localhost] *************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts gather_subset=['all'], gather_timeout=10] **************************************************************************************************************************************************************************
ok: [localhost]

TASK [debug msg= 2a. {{ m_var_frm_pin }}] ************************************************************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {}

MSG:

The task includes an option with an undefined variable. The error was: "hostvars['host1']" is undefined

The error appears to be in '/etc/ansible/Playbook_033a.yml': line 26, column 7, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

  tasks:
    - debug:
      ^ here



PLAY RECAP *******************************************************************************************************************************************************************************************************************************
10.xxx.xxx.251             : ok=5    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
localhost                  : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

1 Ответ

1 голос
/ 15 июля 2020

Учитывая ваше резюме и, в частности, эти строки ok: [10.xxx.xxx.251], ваша проблема, похоже, заключается в том, что host1 не хост, а группа хостов.

Если вы хотите получить доступ к hostvars одного хоста в группе через его имя группы, вы можете использовать hostvars[groups['group_name'][0]]['var_name'].

Таким образом, ваша локальная часть игры должна быть:

- hosts: localhost
  connection: local
  vars:
    m_var_frm_pin: "{{ hostvars[groups['host1'][0]]['file_n_path'] }}"
  tasks:
    - debug: 
        msg: " 2a. {{ m_var_frm_pin }}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...