Ansible Host_vars и группы для файла инвентаря - PullRequest
0 голосов
/ 17 июня 2020

Я использую 3 машины, одна для Ansible Master (Centos), другая - Ansible target1 (Centos), последняя - Ansible Node2 (windows10).

Здесь у меня есть просто файл инвентаризации со всеми деталями

target1 ansible_host=192.168.0.2 ansible_ssh_pass="{{ans_pass}}" ansible_ssh_user="{{ans_user}}"
win ansible_host=192.168.0.3 ansible_password="{{ans_pass}}" ansible_connection=winrm ansible_port=5986 ansible_user="{{ans_user}}" ansi                                                      ble_winrm_server_cert_validation=ignore

Затем я создал два каталога, а именно groups_vars и host_vars.

Файл groups_vars / secret.yaml содержит следующие значения, которые объявлены в файле инвентаризации

ans_user: username
ans_pass: pwd

Другой файл host_vars / secret.yaml, который содержит информацию для входа в windows данные конфигурации

ans_user: username
ans_pass: pwd

Когда я выполняю тест ping с моего ansible основная машина У меня ошибка ниже, не могли бы вы помочь мне исправить эту проблему.

Ошибка

target1 | FAILED! => {
    "msg": "The field 'remote_user' has an invalid value, which includes an undefined variable.
The error was: 'ans_user' is undefined"
}

После обсуждения с Владимиром Боткой я обновляю сообщение.

[root@master Ansible]# tree group_vars/
group_vars/
├── groups_vars_playbook.yaml
└── secret.yaml

0 directories, 2 files

ssh: Could not resolve hostname target1: Name or service not known

1 Ответ

1 голос
/ 17 июня 2020

Краткий ответ : Имена файлов в каталогах group_vars и host_vars должны соответствовать именам групп и хостов соответственно. host_vars override group_vars .

Подробности : Цитирование из Организация переменных хоста и группы

"Если ваш инвентарный файл в / etc / ansible / hosts содержит хост с именем 'foosball', который принадлежит к двум группам, 'raleigh' и 'webservers', этот хост будет использовать переменные в файлах YAML в следующих местах : "

/etc/ansible/group_vars/raleigh # can optionally end in '.yml', '.yaml', or '.json'
/etc/ansible/group_vars/webservers
/etc/ansible/host_vars/foosball

group_vars

Хосты в инвентаре ниже не принадлежат ни к какой группе. Поэтому переменные в group_vars / secret.yaml не будут использоваться

shell> cat hosts
target1
win`

Переменные в group_vars / secret.yaml будут использоваться, когда хосты принадлежат в группу секрет , например см. ниже

shell> cat hosts
[secret]
target1
win`

Например, playbook и group_vars ниже

shell> cat playbook.yaml
- hosts: secret
  tasks:
    - debug:
        var: ans_user
    - debug:
        var: ans_pass

shell> cat group_vars/secret.yaml
ans_user: group_username
ans_pass: group_pwd

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

shell> ansible-playbook -i hosts playbook.yaml

ok: [target1] => 
  ans_user: group_username
ok: [win] => 
  ans_user: group_username

ok: [target1] => 
  ans_pass: group_pwd
ok: [win] => 
  ans_pass: group_pwd

host_vars

Нет хоста секрет . Поэтому файл host_vars / secret.yaml не будет использоваться. Есть только host target1 и win . Переменные хоста c будут считываться из файлов host_vars / target1.yaml и host_vars / win.yaml соответственно. Например, тот же инвентарь, playbook и group_vars с дополнительными host_vars ниже

shell> cat host_vars/target1.yaml
ans_user: target1_username
ans_pass: target1_pwd

shell> cat host_vars/win.yaml
ans_user: win_username
ans_pass: win_pwd

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

shell> ansible-playbook -i hosts playbook.yaml

ok: [win] => 
  ans_user: win_username
ok: [target1] => 
  ans_user: target1_username

ok: [win] => 
  ans_pass: win_pwd
ok: [target1] => 
  ans_pass: target1_pwd

Переменные из файлов в каталоге host_vars будет переопределить переменные из файлов в каталоге group_vars .

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