Чтение пользовательской переменной из ansible файла хоста в playbook - PullRequest
0 голосов
/ 18 июня 2020
• 1000 yaml
- name: sample playbook 
  hosts: all
  tasks: 
    - name: sample echo command   
      shell: 
        cmd: echo {{hostvars['all'].uname}} 

Я не смог найти ни одного документа, в котором четко говорится, как читать переменную хоста

Когда я бегу выше, я получаю ошибку ниже.

fatal: [xx.xx.45.12]: FAILED! => {"msg": "The task includes an option with an undefined variable. 
The error was: \"hostvars['webserver']\" is undefined\n\nThe error appears to be in 
'/mnt/c/Users/ManishBansal/Documents/work/MSS/scripts/run.yaml': line 6, column 7, but may\nbe elsewhere 
in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n  tasks:\n    
- name: This command will get file list\n      ^ here\n"}

1 Ответ

3 голосов
/ 18 июня 2020

Q: «Как читать переменную хоста?»

A: Просто укажите ссылку на переменную

    - command: echo {{ uname }} 


Для пример инвентаря и сценария ниже
shell> cat hosts
[webserver]
test_01     uname=abc123
test_02     uname=pqr456
shell> cat playbook.yml 
- hosts: all
  tasks:
    - debug:
        var: uname

give (сокращенно)

shell> ansible-playbook -i hosts playbook.yml

ok: [test_01] => 
  uname: abc123
ok: [test_02] => 
  uname: pqr456


Используйте hostvars для ссылки на переменные, зарегистрированные на других хостах . Например,
shell> cat playbook.yml 
- hosts: localhost
  tasks:
    - debug:
        var: hostvars[item].uname
      loop: "{{ groups.webserver }}"

дает (сокращенно)

shell> ansible-playbook -i hosts playbook.yml

ok: [localhost] => (item=test_01) => 
  ansible_loop_var: item
  hostvars[item].uname: abc123
  item: test_01
ok: [localhost] => (item=test_02) => 
  ansible_loop_var: item
  hostvars[item].uname: pqr456
  item: test_02


Примечания

"... может быть лучше использовать вместо этого командный модуль ... "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...