うさラボ

お勉強と備忘録

ansible-navigatorでstep実行する際に必要なオプション

概要

ansible-navigatorでPlaybookを実行する際、デフォルトで起動すると、ユーザからのインプットを受け取ることができず停止し続けてしまいます。
オプションで回避することが可能なので紹介します。

環境

ansible-navigator         25.5.0
ansible-runner            2.4.1

手順

以下2種類の方法でステップ実行を確認できました。

  1. コマンド実行時に--ep/--enable-promptsオプションをつける
  2. 設定ファイル(ansible-navigator.yml)でenable-promptstrueにする

簡単なPlaybookで動作確認をします。

---
- name: enable promptのテスト
  hosts: localhost
  gather_facts: false
  tasks:
    - name: "ステップ1"
      ansible.builtin.debug:
        msg: "ステップ1"

    - name: "ステップ2"
      ansible.builtin.debug:
        msg: "ステップ2"

    - name: "ステップ3"
      ansible.builtin.debug:
        msg: "ステップ4"

anisble-navigator.ymlには、利用するイメージ(今回はbuiltin コレクションしか使わないので適当なものを使っています)のみ定義しました

---
ansible-navigator:
  execution-environment:
    image: localhost/ansible-execution-env
    pull:
      policy: never

まずは、デフォルト値の状態で実行します。

uv run ansible-navigator run test.yml --step

interactiveモードで起動しますが、灰色のまま処理が進みません。

続いて--epオプションを付与して実行します。

uv run ansible-navigator run test.yml --step --ep

stdoutモードで起動し、step実行時のプロント入力ができるようになりました。

ansible-navigator.ymlを修正しstdoutモードで起動するようにしてみます。

---
ansible-navigator:
  execution-environment:
    image: localhost/ansible-execution-env
    pull:
      policy: never
  mode: stdout

enable-promptsのオプションがないと、プロンプトが表示されずに処理が止まってしまいます。

enable-promptsをtrueに明示して再実行をすると、プロンプトが表示されました。

---
ansible-navigator:
  execution-environment:
    image: localhost/ansible-execution-env
    pull:
      policy: never
  mode: stdout
  enable-prompts: true

enable-promptsをtrueにする時点でmode: stdoutになるので、enable-promptsを定義するだけでもよさそうです。
試しにmode: intaractiveにしてみましたがstdoutで出力されました。

注意点

enable-promptsを有効にすると、artifactsの生成ができなくなるようです。

ansible.readthedocs.io

最後に

step実行が停止しちゃう問題に2回はまったので書きました。

書き終わってから気づきましたが、すでにきんぎょさんによってブログが書かれていました笑 tekunabe.hatenablog.jp

まずはググれ。今回の教訓です。