Ansible цикл jinja для эластичности c поиск - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь создать файл конфигурации для Elasticsearch с использованием шаблона Jinja.

Я столкнулся с проблемой ниже.

Позвольте мне объяснить на примере

Всего у меня 3 виртуальных машины. Node1; Node2; Node3 (имена хостов виртуальных машин)

В конфигурационном файле Node1. У меня должны быть записи имени хоста Node2 и Node3 в файле конфигурации Node2. У меня должны быть записи имени хоста Node1 и Node3 в файле конфигурации Node3. У меня должны быть записи узлов Node2 и Node1

Например: elasticsearch.yml на узле 1 должно иметь следующие записи:

discovery.seed_hosts: - node2 - node3

Elasticsearch.yml на узле 2 должны быть следующие записи

discovery.seed_hosts: - node1 - node3

Elasticsearch.yml на узле 3 должны иметь следующие записи

discovery.seed_hosts: - node2 - node1

Не могли бы вы помочь написать файл конфигурации с использованием шаблона Jinja

Спасибо, Amar

1 Ответ

0 голосов
/ 28 мая 2020

Учитывая следующий hosts.ini инвентарь:

[elastic]
node1
node2
node3

Вы можете получить полный список машин в группе с любого узла с помощью:

groups['elastic']

например,

$ ansible -i hosts.ini node1 -m debug -a msg="{{ groups['elastic'] }}"
node1 | SUCCESS => {
    "msg": [
        "node1",
        "node2",
        "node3"
    ]
}

Если вы нацелены на игру против этой группы, вы можете легко удалить текущий узел из списка, используя difference фильтр :

groups['elastic'] | difference([inventory_hostname])

например,

$ ansible -i hosts.ini all -m debug -a msg="{{ groups['elastic'] | difference([inventory_hostname]) }}"
node1 | SUCCESS => {
    "msg": [
        "node2",
        "node3"
    ]
}
node2 | SUCCESS => {
    "msg": [
        "node1",
        "node3"
    ]
}
node3 | SUCCESS => {
    "msg": [
        "node1",
        "node2"
    ]
}
...