Как установить значение для переменной Ansible при условии выполнения в цикле with_itema - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть цикл with_item, в котором переменной 'USER' необходимо присвоить значение на основе проверки условия.

Если '{{command_result.stdout_lines}}' равен "Frontend", то переменная USERдолжен получить значение 'user1', иначе ему должно быть присвоено значение 'user2'

Ниже приведено то, чего я мог бы достичь после обращения за помощью, но проблема в том, что 'USER' всегда получает назначенное значение 'user2', даже если условиевыполняется для 'user1'

Моя книга воспроизведения:

  - debug:
       msg: "User was {{ item.split('\t')[3] }}"
     with_items: "{{ command_result.stdout_lines }}"

   - set_fact:
        USER:  "user1"
     when: item.split('\t')[3] == "FrontEnd"
     with_items: "{{ command_result.stdout_lines }}"

   - set_fact:
        USER:  "user2"
     when: item.split('\t')[3] == "BackEnd"
     with_items: "{{ command_result.stdout_lines }}"

   - debug:
          msg: "User has {{ USER }}"
     with_items: "{{ command_result.stdout_lines }}"

Первая отладка печатает и подтверждает, что значение item.split ('\ t') [3]

Вторая отладка выводит «USER», но, как вы можете видеть в выводе ниже, она имеет значение «user2», даже если это значение Frontend.

Можете ли вы предложить?

ЗАДАЧА [отладка] ************************************************************************************************************************************************ Хорошо:[localhost] => (item = 10.12.1.13 10.12.1.13 \ n-rw-rw-r-- user1 2019-09-13 15:39 / был // testingjsp / testingcom.jsp 1786385840 / was // testingjsp FrontEnd) => {"msg": "Пользователь был FrontEnd"} ok: [localhost] => (item = 10.12.1.13 10.12.1.13 \ n-rw-rw-r- user2 2019-09-13 15:29 /fin/scripts/testingscr.scr 367595418 \ n-rw-rw-r-- user2 2019-09-13 15:36 /fin/mrt/testingmrt.mrt 1251350031 \ n-rw-rw-r-- user2 2019-09-13 15:37 /fin/exe/testingexe.exe 1390265645 \ n-rw-rw-r-- user2 2019-09-13 15:38 / fin / com /testingcom.com 90193476
/ fin / scripts \ n / fin / mrt \ n / fin / exe \ n / fin / com BackEnd) => {"msg": "Пользователь был BackEnd"}

ЗАДАЧА [отладка] ************************************************************************************************************************************************ Хорошо:[localhost] => (item = 10.12.1.13 10.12.1.13 \ n-rw-rw-r-- user1 2019-09-13 15:39 /was//testingjsp/testingcom.jsp 1786385840 / was // testingjsp FrontEnd)=> {"msg": "У пользователя есть user2"} ok: [localhost] => (item = 10.12.1.13 10.12.1.13 \ n-rw-rw-r-- user2 2019-09-13 15:29 / fin/scripts/testingscr.scr 367595418 \ n-rw-rw-r-- user22019-09-13 15:36 /fin/mrt/testingmrt.mrt 1251350031 \ n-rw-rw-r-- user2 2019-09-13 15:37 /fin/exe/testingexe.exe 1390265645 \ n-rw-rw-r-- user2 2019-09-13 15:38 /fin/com/testingcom.com 90193476
/ fin / scripts \ n / fin / mrt \ n / fin / exe \ n / fin / com BackEnd)=> {"msg": "У пользователя есть user2"}

1 Ответ

1 голос
/ 25 сентября 2019

Ниже приведены задачи, которые позволят вам получить USER для каждого элемента в command_result.

- set_fact:
    USER:  "{% if item.split('\t')[2] == 'FrontEnd' %}user1{% elif item.split('\t')[2] == 'BackEnd' %}user2{% else %}{% endif %}"
  with_items: "{{ command_result.stdout_lines }}"
  register: "facts"

- debug:
    msg: "{{ item.ansible_facts.USER }}"
  with_items: "{{ facts.results }}"

Первая задача устанавливает значение факта USER на основе значения, извлеченного item.split('\t')[3] и использует шаблонизатор jinja2 для установки значения USER.

Если в вашем command_result есть n items, первой задачей будет регистрация USER факта n times.Следовательно, я зарегистрировал значение в facts именованной переменной.

Доступ к значениям и их печать во втором задании.

Вы можете аналогичным образом использовать значения, как показано во втором задании впоследующие задачи.

Надеюсь, это поможет.

...