ここでの目的は、利用可能な変数ファイルからメニューを動的に構築することです。
この例ではモジュールを使用していますが、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