はじめに
ansible-navigator 3.0.0 で、vars_prompt
ディレクティブや ansible.builtin.pause
モジュール のような、ユーザーの入力を待つ機能と組み合わせて使うためのオプション --enable-prompts
(短縮形は --ep
)が追加されました。
該当 changelog:
Add enable_prompts parameter for run subcommand (#1419) @shatakshiiii
Release v3.0.0 · ansible/ansible-navigator · GitHub
この機能を試してみます。
- 環境
- ansible-navigator 3.0.0
- ee:
ghcr.io/ansible/creator-ee:v0.14.1
これまでの仕様や --enable-prompts
の役割
デフォルトでは、Playbook 実行中はユーザーの入力を受け付けない(もちろんTUIの操作は受け付ける)仕様になっています。
公式ドキュメントの FAQ にも記載があります。
Why does the playbook hang when vars_prompt, pause/prompt or --ask-pass is used?
Frequently asked questions - Ansible Navigator Documentation
これまでの ansible-navigator でも、アーティファクト(ログのようなもの)機能を無効化して、--mode stdout
で実行すれば入力を受け付けられました。今回追加された --enable-prompts
オプションを付けるだけでもできるようになりました。
--enable-prompts
オプションを使うと、入力が受け付けられるようになる代わりに、アーティファクト機能は無効化され、--mode stdout
相当 Playbook が実行されます。この点はこれまでと変わりません。
表示上は ansible-playbook
コマンドをそのまま実行するようなイメージになります。
おためし
Playbook
試す Playbook は以下のとおりです。vars_prompt
で、ユーザーの入力を待って、入力された値を変数 msg
に入れます。
--- - name: Hello hosts: localhost gather_facts: false vars_prompt: name: msg prompt: What is your message? private: false tasks: - name: Hello ansible.builtin.debug: msg: "{{ msg }}"
ansible-navigator.yml
ansible-navigator の設定ファイルである ansible-navigator.yml
は今回はなしです。もろもろデフォルト値で実行します。
デフォルトだと
比較のために、 --enable-prompts
なしのデフォルトだとどうなるか試します。
ansible-navigator で var_prompt がある Playbook を実行して終わらない例 pic.twitter.com/xpNFLSrh5c
— よこち (@akira6592) 2023年4月7日
右下に Running
と表示されたままになっている通り、いつまで立っても完了しません。Playbook としては vars_prompt
で入力を待っています。ですが、ここで何を入力しても ansible-navigator のTUI の操作として扱われるため、Playbook に入力を渡せない状態です。
--enable-prompts
あり
次に --enable-prompts
をつけて実行します。
ansible-navigator で --enable-prompts オプションをつけて、vars_prompt に対話式入力する例 pic.twitter.com/GidqRatAQe
— よこち (@akira6592) 2023年4月7日
見慣れた --mode stdout
相当の表示となり、vars_prompt
で指定したプロンプト文字が表示され、入力も受け付けられました。
なお、--enable-prompts true
と指定すると ERROR! the playbook: true could not be found
というエラーになります。単に --enable-prompt
だけ指定します(プチハマりしました)。
おわりに
本来は、Automation Controller で実行するときのことを考えると、このようなユーザーの入力を待つ Playbook は避けるべきです。
ですが、諸事情で入力を受け付けたいときは便利な方法だと思います。ただし、アーティファクトが無効になる点は注意が必要です。