ansible: failed_when не работает для проверки ввода пользователя - PullRequest
1 голос
/ 29 мая 2020

Я пытаюсь ansible playbook запрашивать ввод пользователя, и если условие не выполняется, он должен завершиться неудачно и выйти.

мой playbook выглядит так, как показано ниже.

[ansible@localhost ~]$ cat dummy.yml
---
- name: testing failed_when
  hosts: localhost
  gather_facts: no
  tasks:
      - pause:
           prompt: "\nPlease ente 1:\n"
        register: given
        failed_when: given.user_input != 1
      - set_fact:
           SER: "{{ given.user_input }}"
      - fail:
           msg: "unacceptable"
        when: SER is undefined

и когда я выполняю это, он терпит неудачу, хотя я ввожу как 1 ..

[ansible@localhost ~]$ ansible-playbook dummy.yml

PLAY [testing failed_when] *********************************************************************************************************************

TASK [pause] ***********************************************************************************************************************************
[pause]

Please ente 1:
:1
fatal: [localhost]: FAILED! => {"changed": false, "delta": 1, "echo": true, "failed_when_result": true, "rc": 0, "start": "2020-05-29 02:52:27.318633", "stderr": "", "stdout": "Paused for 0.02 minutes", "stop": "2020-05-29 02:52:28.556987", "user_input": "1"}

NO MORE HOSTS LEFT *****************************************************************************************************************************

PLAY RECAP *************************************************************************************************************************************
localhost                  : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

[ansible@localhost ~]$

, и я пытался использовать «сбой», как показано ниже, он тоже не работает.

  tasks:
      - pause:
           prompt: "\nPlease ente 1:\n"
        register: given
      - set_fact:
           SER: "{{ given.user_input }}"

      - fail:
           msg: "unacceptable"
        when: SER != 1

результат:

[ansible@localhost ~]$ ansible-playbook dummy.yml

PLAY [testing failed_when] *********************************************************************************************************************

TASK [pause] ***********************************************************************************************************************************
[pause]

Please ente 1:
:1
ok: [localhost]

TASK [set_fact] ********************************************************************************************************************************
ok: [localhost]

TASK [fail] ************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "unacceptable"}

PLAY RECAP *************************************************************************************************************************************
localhost 

в обоих вышеупомянутых случаях я ввел «1» в качестве пользовательского ввода, и он все еще не работает .. Не уверен, какую ошибку я сделал.

пожалуйста, помогите.

заранее спасибо.

1 Ответ

0 голосов
/ 29 мая 2020

Условие when по умолчанию заменяет переменную на строку. Либо сравните SER со строкой

    when: SER != "1"

, либо преобразуйте SER в целое число

    when: SER|int != 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...