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

おすすめ記事