はじめに
ansible-navigator は、Playbook を実行するだけでなく ansible-lint を呼び出す機能もあります。
タイトル通り、多分 EE 側に ansible-lint が必要だろうと思っていたものの、一応確かめてみようと思ったので試しました(結果タイトル通りでした)。基本的に
とつけたのは、EE(Exuecution Environment) を無効化した場合は、ホスト側に必要なためです。
一通り試した結果をまとめます。
- 環境
- ansible-navigator==3.0.2
ansible-navigator.yml
なし.ansible-lint
、.config/ansible-lint.yml
なし
1. EE 有効で実行
まずは、EE 有効(デフォルト)のまま ansible-lint を実行するパターンです。
1.1 EE内に ansible-lint あり、ホストになし
今回の環境でデフォルトで利用する EE のイメージ ghcr.io/ansible/creator-ee:v0.14.1
の中には ansible-lint が入っています。なのでこのまま使います。
結果の一覧性を重視して、モードは --mode stdout
を指定することにします。
% ansible-navigator lint --mode stdout name[play]: All plays should be named. (warning) hello.yml:2 fqcn[action-core]: Use FQCN for builtin module actions (debug). hello.yml:11 Use `ansible.builtin.debug` or `ansible.legacy.debug` instead.
EE 内の ansible-lint が実行され、結果が表示されました。
なお、上記コマンド実行中に docker ps --no-trunc
で確認したところ COMMAND
列に "entrypoint ansible-lint -qq --offline"
と表示されました。
1.2. EE内に ansible-lint なし、ホストにもなし
ansible-lint が入っていないイメージとして quay.io/ansible/ansible-runner
を利用します。イメージの指定は --eei
または --execution-environment-image
です。
% ansible-navigator lint --mode stdout --eei quay.io/ansible/ansible-runner:latest ...(略)... [dumb-init] ansible-lint: No such file or directory
ansible-lint がないというエラーが発生しました。それはそう。
2. EE 無効で実行
今度は、デフォルトの EE 無効で ansible-lint を実行するパターンです。ansible-navigator
コマンドに --ee false
をつけると EE の利用を無効化できます。
2.1 ホストに ansible-lint あり
ホスト側に ansible-lint がある状態で実行します。
% pip list | grep ansible-lint # ansible-lint の有無確認 ansible-lint 6.14.4 # ある % ansible-navigator lint --mode stdout --ee false name[play]: All plays should be named. (warning) # ignored hello.yml:2 fqcn[action-core]: Use FQCN for builtin module actions (debug). (warning) # ignored hello.yml:11 Use `ansible.builtin.debug` or `ansible.legacy.debug` instead.
ホスト側の ansible-lint が実行されました。
2.2 ホストに ansible-lint なし
ホストに ansible-lint がない状態で実行します。
% pip list | grep ansible-lint # ansible-lint の有無確認(ない) % ansible-navigator lint --mode stdout --ee false Warning: Issues were found while applying the settings. Hint: Command provided: 'lint --mode stdout --ee false' Error: ansible-lint command could not be found. Hint: Try 'pip install ansible-lint' or consider using an execution environment which provides ansible-lint. Note: Configuration failed, using default log file location. (/Users/sakana/an sible/ansible-navigator.log) Log level set to debug Hint: Review the hints and log file to see what went wrong.
ansible-lint がないエラーが発生しました。エラーメッセージがとてもていねいですね。
補足
EE の利用有無に関わらず、ansible-lint の設定ファイル(.ansible-lint
、.config/ansible-lint.yml
)を利用する場合は、Playbook と同じくホスト側に配置します。
ヘルプを見ただけですが、ansible-navigator 側の --lic
か --lint-config
というオプションで設定ファイルのパスの明示指定もできるようです。
% ansible-navigator lint --help ....(略)... Options (lint subcommand): --lic --lint-config Specify the path to the ansible-lint configuration file lintables Path to files on which to run ansible-lint
おわりに
ansible-navigator はさまざまな機能を呼び出せるようになっていて、EE を使うかどうかも指定できて万能感が出てきていますね。
ただ、例えば ansible-lint の -f
のようなオプションを ansible-navigator lint
でも指定したいときにどうすればいいのかはわかりませんでした。いつか調べてみたいと思います。