it-swarm.com.ru

Ansible - считывать инвентарные хосты и переменные в файл group_vars / all

Я сомневаюсь, что я застрял надолго. У меня очень банальный файл инвентаря с хостами и переменными:

[lb]
10.112.84.122

[Tomcat]
10.112.84.124

[jboss5]
10.112.84.122

...

[tests:children]
lb
Tomcat
jboss5

[default:children]
tests

[tests:vars]
data_base_user=NETWIN-4.3
data_base_password=NETWIN
data_base_encrypted_password=
data_base_Host=10.112.69.48
data_base_port=1521
data_base_service=ssdenwdb
data_base_url=jdbc:Oracle:thin:@10.112.69.48:1521/ssdenwdb

Проблема в том, что мне нужно получить доступ ко всем этим хостам и переменным в файле инвентаря из файла group_vars/all.

Я пробовал следующие способы доступа к IP-адресу хоста:

{{ lb }}
"{{ hostvars[lb] }}"
"{{ hostvars['lb'] }}"
{{ hostvars[lb] }}

Для доступа к переменной Host я попытался:

"{{ hostvars[tests].['data_base_Host'] }}"

Все они не правы !!! Может ли кто-нибудь помочь мне найти лучший метод для доступа к хостам и переменным, не из playbook, а из файла переменных?

EDIT:

Хорошо. Давайте уточним.

Проблема: Использовать хост, объявленный в файле инвентаризации в файле переменной, скажем: group_vars/all.

Пример: У меня есть хост БД с IP:10.112.83.37.

Инвентарный файл:

[db]
10.112.83.37

В группе: файл vars/all я хочу использовать этот IP для создания переменной.

group_vars/all file:

data_base_url=jdbc:Oracle:thin:@{{ db }}:1521/ssdenwdb

В шаблоне я использую переменную, встроенную в файл group_vars/all.

Файл шаблона:

Oracle_url = {{ data_base_url }}

Проблема в том, что {{ db }} переменная в файле group_vars/all не заменяется IP-адресом хоста БД. Пользователь может редактировать только файл инвентаря.

25
Tiago Sousa
- name: Host
   debug: msg="{{ item }}" 
   with_items:
    - "{{ groups['tests'] }}"

Этот кусок кода даст сообщение:

'10.112.84.122'
'10.112.84.124'

как groups['tests'] в основном возвращает список уникальных IP-адресов ['10.112.84.122','10.112.84.124'] в то время как groups['Tomcat'][0] возвращает 10.112.84.124.

27
eldos

Если вы хотите получить программный доступ к записям инвентаризации, чтобы включить их, например, в задачу. Вы можете сослаться на это так:

{{ hostvars.Tomcat }}

Это возвращает вам структуру со всеми переменными, связанными с этим хостом. Если вам нужен только IP-адрес (или имя хоста), вы можете обратиться к нему следующим образом:

{{ hostvars.jboss5.ansible_ssh_Host }}

Вот список переменных, на которые вы можете ссылаться: click . Более того, вы можете объявить переменную и установить ее, например, с результатом какого-то шага в книге.

- name: Change owner and group of some file
  file: path=/tmp/my-file owner=new-owner group=new-group
  register: chown_result

Затем, если вы выполните этот шаг на Tomcat, вы сможете получить к нему доступ с jboss5 так:

- name: Print out the result of chown
  debug: msg="{{ hostvars.Tomcat.chown_result }}"
20
wpodgorski

На всякий случай, если проблема все еще существует, вы можете обратиться к ANSI инвентаризации через ‘hostvars’, ‘group_names’, а также ‘groups’ переменные.

Пример:

Чтобы получить IP-адреса всех серверов в группе "mygroup", используйте следующую конструкцию:

- debug: msg="{{ hostvars[item]['ansible_eth0']['ipv4']['address'] }}" 
  with_items:
     - "{{ groups['mygroup'] }}"
14
odzhu

Да, пример от nixlike работает очень хорошо.

Инвентарь:

[docker-Host]
myhost1 user=barbara
myhost2 user=heather

сборник пьес:

---

- hosts: localhost
  connection: local         

     tasks:    
        - name: loop debug inventory hostnames
          debug: 
            msg: "the docker Host is {{ item }}"
          with_inventory_hostnames: docker-Host
        - name: loop debug items
          debug: 
            msg: "the docker Host is {{ hostvars[item]['user'] }}"
          with_items: "{{ groups['docker-Host'] }}"

Результат:

ansible-playbook ansible/tests/vars-test-local.yml

PLAY [localhost]


ЗАДАЧА [настройка] ********************************************** ********************* нормально: [localhost]

ЗАДАЧА [цикл имен отладки инвентаризации] ****************************************** ok : [localhost] => (item = myhost2) => {"item": "myhost2", "msg": "Хост докера - myhost2"} ok: [localhost] => (item = myhost1) => {" item ":" myhost1 "," msg ":" Хост докера - myhost1 "}

ЗАДАНИЕ [цикл отладки элементов] ******************************************** ************ ok: [localhost] => (item = myhost1) => {"item": "myhost1", "msg": "узел докера - это варвар"} ok: [ localhost] => (item = myhost2) => {"item": "myhost2", "msg": "узел докера - это вереск"}

PLAY RECAP ************************************************* ********************* localhost: ok = 3 изменено = 0 недоступно = 0
Не удалось = 0

благодарность!

3
nettie

Учитывая ваш предыдущий пример:

инвентарный файл:

[db]
10.112.83.37

group_vars/все

data_base_url=jdbc:Oracle:thin:@{{ db }}:1521/ssdenwdb

файл шаблона:

Oracle_url = {{ data_base_url }}

Вы можете заменить свои group_vars/all на

data_base_url="jdbc:Oracle:thin:@{{ groups['db'][0] }}:1521/ssdenwdb"
2
Antonio Pérez