Я создал одну книгу для запуска задач на основе тестового примера, поэтому я создал, как показано ниже

Здесь, когда я передаю 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 ~]#

Ожидаемый результат должен быть, он должен выполнять все задания из спектакля.

0
Sarva 19 Сен 2020 в 05:48

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] }}

Это немного упрощает ситуацию.

0
larsks 19 Сен 2020 в 03:13