#ansible
#ansible
Вопрос:
У меня есть вариант использования, когда в vars /main.yaml я определил серверный элемент, как показано ниже, и он динамический, иногда у vars будет 3 сервера, иногда их будет 4 и так далее:
server_name:
- server1
- server2
- server3
У меня есть задача, которая генерирует выходные данные в виде списка некоторого сервера после извлечения сервера из внутренних элементов loadbalancer, как показано ниже:
"ansible_facts": {
"server_and_its_status": [
"server1",
"server1"
]
},
Я хочу перебрать каждый сервер из vars /main.yaml со списком серверов, созданных в рамках задач.
Если сервер найден, я хочу выполнить некоторую последующую задачу, а затем перейти к следующему серверу в vars / main.yaml и повторить, если сервер найден в списке серверов, сгенерированных выводом задачи.
Я попробовал приведенный ниже код, который мне не помог :
- name: Get the server details only for servers
set_fact:
server_and_its_status: "{{ jsondata1 | json_query('data.member[].nodes[].name') }}"
- name: check if server is in list or not
debug:
msg: server {{ server_name }} found in list of servers generated by set_fact task
loop: "{{ server_name }}"
loop: "{{ server_and_its_status }}"
when: item == server_name
Пожалуйста, предложите..
Ответ №1:
Поскольку вы хотите выполнить итерацию по servers
списку, вам нужно только loop
с ним. Нет необходимости выполнять цикл с. server_and_its_status
Существуют тесты, такие как contains
или in
, чтобы проверить, присутствует ли определенный текст в элементах списка.
Используя in
, например:
- name: check if server is in list or not
debug:
msg: "server {{ item }} found in list generated by set fact"
loop: "{{ servers }}"
when: item in server_and_its_status