여기서의 목표는 사용 가능한 변수 파일에서 메뉴를 동적으로 구축하는 것입니다.
이 예에서는 모듈을 사용하고 있지만 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