Я создал одну книгу для запуска задач на основе тестового примера, поэтому я создал, как показано ниже
Здесь, когда я передаю ansible-playbook playbook.yml -e stage = 1 , он пропускает все задачи, и когда я отлаживаю значения test_case *, я вижу, что оба они находятся в ложном состоянии, поэтому могу некоторые помогают мне работать с этим кодом.
---
- name: test
hosts: localhost
tasks:
- name: setting the level
set_fact:
test_case_1: "{{ stage == 1 }}"
test_case_2: "{{ stage == 1 or stage == 2 }}"
- name: "running ls command"
shell: "ls -l"
register: testing
when:
- test_case_1 == true
- debug:
msg: "{{ testing.stdout_lines }}"
when:
- test_case_1 == true
- name: "kickoff"
shell: "df -Th"
register: kick
when:
- test_case_2 == true
- name: "printing kickoff"
debug:
msg: "{{ kick.stdout_lines }}"
when:
- test_case_2 == true
Ниже приведены результаты ошибок, которые я получаю
[root@server ~]# ansible-playbook playbook.yml -e stage=1
PLAY [test] ***********************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************
ok: [localhost]
TASK [setting the level] **********************************************************************************************
ok: [localhost]
TASK [running ls command] *********************************************************************************************
skipping: [localhost]
TASK [debug] **********************************************************************************************************
skipping: [localhost]
TASK [kickoff] ********************************************************************************************************
skipping: [localhost]
TASK [printing kickoff] ***********************************************************************************************
skipping: [localhost]
PLAY RECAP ************************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=4 rescued=0 ignored=0
[root@server ~]#
Ожидаемый результат должен быть, он должен выполнять все задания из спектакля.
1 ответ
Ваша проблема в том, что вы выполняете целочисленное сравнение (stage == 1
), но когда вы вводите значение в командной строке через -e stage=1
, вы устанавливаете строковое значение.
Вероятно, вы захотите преобразовать значение stage в целое число с помощью фильтра int
.
---
- name: test
hosts: localhost
tasks:
- name: setting the level
set_fact:
test_case_1: "{{ stage|int == 1 }}"
test_case_2: "{{ stage|int == 1 or stage|int == 2 }}"
С этим изменением, похоже, все работает так, как ожидалось.
Не имеет отношения к вашему вопросу, но вы можете переписать второй тест следующим образом:
{{ stage|int in [1, 2] }}
Это немного упрощает ситуацию.
Похожие вопросы
Новые вопросы
ansible
Вопросы по теме касаются использования самого инструмента. Установка Ansible и предварительные условия, проблемы с подключением и т. д. не по теме. Red Hat Ansible — это управляемая моделью система управления конфигурацией, многоузлового развертывания/оркестрации и удаленного выполнения задач. По умолчанию он использует SSH, поэтому на узлах, которыми вы управляете, не нужно устанавливать специальное программное обеспечение. Ansible написан на Python, но может быть расширен на любом языке.