@wisebit

Странное поведение Ansible, баг или я не понял как надо правильно?

Добрый день. Начал активно использовать Ansible и столкнулся с проблемой. Почему то vars из одной группы распространяется на другие игнорируя наследование.
Имеется вот такой инвентарный файл

---
all:
  children:
    location1:
      children:
        debian:
          hosts:
            server1:
              ansible_host: 192.168.0.1
              ansible_user: root
      vars:
        ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q root@10.0.0.1"'

    location2:
      children:
        debian:
          hosts:
            server2:
              ansible_host: 192.168.0.2
              ansible_user: root



на выходе ansible-inventory -i test.yml --vars --list имеем

{
    "_meta": {
        "hostvars": {
            "server1": {
                "ansible_host": "192.168.0.1", 
                "ansible_ssh_common_args": "-o ProxyCommand=\"ssh -W %h:%p -q root@10.0.0.1\"", 
                "ansible_user": "root"
            }, 
            "server2": {
                "ansible_host": "192.168.0.2", 
                "ansible_ssh_common_args": "-o ProxyCommand=\"ssh -W %h:%p -q root@10.0.0.1\"", 
                "ansible_user": "root"
            }
        }
    }, 
    "all": {
        "children": [
            "location1", 
            "location2", 
            "ungrouped"
        ]
    }, 
    "debian": {
        "hosts": [
            "server1", 
            "server2"
        ]
    }, 
    "location1": {
        "children": [
            "debian"
        ]
    }, 
    "location2": {
        "children": [
            "debian"
        ]
    }
}



Это у Ansible все так плохо с наследованием я так понимаю ? И есть ли способы это побороть ?
  • Вопрос задан
  • 88 просмотров
Пригласить эксперта
Ответы на вопрос 2
Почему так происходит – у Inventory плоская структура. По сути вы имеете только хосты и группы. При разворачивании опсианной вами иерархии, ansible дважды находит группу с одним и тем же именем – debian. И эта группа является дочерним элементом как location1, так и location2, поэтому переменные для хостов этих групп мерджатся.
Как обойти эту ситуацию – думайте сами, как будет вам проще. К примеру, я бы сделал различные inventory-файлы для каждого из location. Либо, изменил иерархию на all-> debian->location1->hosts
Ответ написан
Комментировать
@wisebit Автор вопроса
для себя решил пока так
---
all:
  children:
    location1:
      children:
        debian1:
          hosts:
            server1:
              ansible_host: 192.168.0.1
              ansible_user: root
      vars:
        ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q root@10.0.0.1"'

    location2:
      children:
        debian2:
          hosts:
            server2:
              ansible_host: 192.168.0.2
              ansible_user: root

и в плайбуках указывать если надо вот так debian*

надеюсь кода нибудь они допилят нормальное наследование
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы