Извиняюсь за отсутствие разъяснений, переписываю мою просьбу:
Я изо всех сил пытаюсь получить соответствующее значение start_index , переданное третьей задаче ниже " Параметры эха ».Если user_defined_index равен "" , я хочу, чтобы задача echo уникальных UIDs выполнялась и выводила в переменную start_index.Аналогично, если user_define_index не равен "" , я хочу выполнить вторую задачу ниже и заполнить переменную start_index.По сути, мне нужно передать либо A , либо B в задачу параметры эха .
Задача Echo ожидает получить некоторые идентификаторы UID.Первая задача автоматически генерирует UID в зависимости от того, что вы видите в команде оболочки.вторая задача позволяет пользователю указать UID.Поэтому, какая бы команда WHEN действительна, набор UID должен использоваться третьей задачей.Используя операторы отладки, я подтвердил, что как ECHO UNIQUE UIDS , так и CAPTURE USER DEFINED UIDs задачи работают нормально, и соответствующие переменные регистра имеют правильные данные.
Моя проблема заключается в том, что 3-я задача выбирает только значения из 1-й задачи, независимо от того, будут ли они автоматически сгенерированными или пустыми с пропущенными значениями, равными true.
Мне нужно правильное соответствующее значение в start_index длябыть введенным в 3-ю задачу.
- name: echo unique UIDs
shell: echo $(((0x$(hostid) + $(date '+%s'))*100000 + {{ item[0] }}*100000 + {{ start_stress_index }}))
with_indexed_items:
- "{{ load_cfg }}"
register: start_index
when: user_defined_index == ""
changed_when: False
- name: Capture user defined UIDs
shell: echo '{{ user_defined_index }}' | tr , '\n'
with_indexed_items:
- "{{ load_cfg }}"
register: start_index
when: user_defined_index != ""
changed_when: False
- name: Echo parameters
command: echo --cfg='{{ start_index }}' --si={{ item[1].stdout }}
with_together:
- "{{ load_cfg }}"
- "{{ start_index.results }}"
Для вышеизложенного, независимо от user_define_index, выходные данные эхо-уникальных идентификаторов UID всегда передаются в 3-ю задачу.После поиска в Google я, наконец, нашел потенциальное решение использовать троичный фильтр:
https://github.com/ansible/ansible/issues/33827
Я изменил свой код так:
- name: echo unique UIDs
shell: echo $(((0x$(hostid) + $(date '+%s'))*100000 + {{ item[0] }}*100000 + {{ start_stress_index }}))
with_indexed_items:
- "{{ load_cfg }}"
register: start_auto_index
when: user_defined_index == ""
changed_when: False
- name: Capture user defined UIDs
shell: echo '{{ user_defined_index }}' | tr , '\n'
with_indexed_items:
- "{{ load_cfg }}"
register: start_user_index
when: user_defined_index != ""
changed_when: False
- name: Echo parameters
command: echo --cfg='{{ start_index }}' --si={{ item[1].stdout }}
with_together:
- "{{ load_cfg }}"
- "{{ ((start_auto_index is not skipped)|ternary(start_auto_index,start_user_index))['results'] }}"
Однако у меня все еще остается та же проблема, что и в моем первом примере, когда я запускаю вышеизложенное, я снова получаю вывод только из start_auto_index , отправленного на 3-е задание параметры эха независимо от того, что я делаю сuser_defined_index.
Надеюсь, это прояснит мой вопрос.