ansible.buildin.pause 모듈을 사용하여 메뉴를 동적으로 빌드하는 방법은 무엇입니까?

ansible.buildin.pause 모듈을 사용하여 메뉴를 동적으로 빌드하는 방법은 무엇입니까?

여기서의 목표는 사용 가능한 변수 파일에서 메뉴를 동적으로 구축하는 것입니다.

이 예에서는 모듈을 사용하고 있지만 ansible.builtin.pause이것이 최선의 접근 방식인지는 잘 모르겠습니다.

변수 파일:vars.yml

---
menu:
  ansible:
    main:
    - option: 1
      name: "Add..."
    - option: 2
      name: "Delete..."
    - option: 3
      name: "Empty..."
    add:
      - option: 1
        name: "Add something..."
      - option: 2
        name: "Add something to..."
    delete:
    empty:
  ssh:
    main:

스크립트:test.yml

- name: "PLAY: > TEST"
  hosts: localhost
  gather_facts: no
  vars_files: vars.yml
  pre_tasks:

  - name: Dynamicaly construct menu
    pause:
      prompt:
        "\n
        Ansible options:\n
        =====================================\n
        {{item.option}}- {{item.name}}"
    register: result
    loop: "{{menu.ansible.main}}"

  - debug: 
      msg: "Option 1 was selected"
    when: result.user_input == '1'

산출:

PLAY [PLAY: > TEST] *******************************************************************************************************************************************************************************************************************************************************

TASK [Dynamicaly construct menu] ******************************************************************************************************************************************************************************************************************************************
[Dynamicaly construct menu]

 Ansible options:
 =====================================
 1- Add...:

보시다시피, 전체 내용이 아닌 주요 내용의 일부만 표시됩니다.

질문:

조건에 따라 후속 작업을 실행할 수 있도록 사용 가능한 모든 옵션을 한 번에 표시하고 사용자 선택을 저장하려면 어떻게 해야 합니까?

메뉴를 먼저 생성하고 이를 보내기 전에 변수에 저장해야 한다고 확신 ansible.builtin.pause하지만 이를 수행하는 방법을 잘 모르겠습니다.

도와 주셔서 감사합니다

답변1

이 경우 인라인 jinja2 템플릿에 직접 루프를 포함하는 것은 거의 불가피합니다(따라서 허용 가능).

  - name: Dynamicaly construct menu
    pause:
      prompt: |-
        Ansible options:
        =====================================
        {% for option in menu.ansible.main %}
        {{ option.option }}- {{ option.name }}
        {% endfor %}
    register: result

이 고정된 작업의 결과는 다음과 같습니다.

$ ansible-playbook test.yml 

PLAY [PLAY: > TEST] ***************************************************************************************************************

TASK [Dynamicaly construct menu] **************************************************************************************************
[Dynamicaly construct menu]
Ansible options:
=====================================
1- Add...
2- Delete...
3- Empty...
:
1^Mok: [localhost]

TASK [debug] **********************************************************************************************************************
ok: [localhost] => {
    "msg": "Option 1 was selected"
}

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


$ ansible-playbook test.yml 

PLAY [PLAY: > TEST] ***************************************************************************************************************

TASK [Dynamicaly construct menu] **************************************************************************************************
[Dynamicaly construct menu]
Ansible options:
=====================================
1- Add...
2- Delete...
3- Empty...
:
2^Mok: [localhost]

TASK [debug] **********************************************************************************************************************
skipping: [localhost]

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

관련 정보