Interpreter Discovery の警告が解せなかった話

5年塩漬けにしていた環境のアップデートを迫られていて、Ansible の 1.8 => 2.9 のアップデートに挑戦しています。ひどいですね。すみません。

さて今日は新しくなった Ansible を実行すると出力される警告、

[WARNING]: Platform linux on host awesome-server is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could
change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.

が鬱陶しかったので、どういうことなのか調べて、悪いところは直そうと思います。

ドキュメント

Interpreter Discovery によれば、

  • ほとんどの Ansible モジュールはターゲットホスト上の Python を使用する
  • 自動的に適切な Python インタプリタを検出しようとするが、制御もできる
  • 個々のホストやグループに対して: ansible_python_interpreter インベントリ変数
  • グローバルに: ansible.cfg[defaults] セクションの interpreter_python キー

かつては /usr/bin/python を常にデフォルトとしていたが、今は OS の platform/distribution/version をキーとする「正しい」Python インタプリタとパスの一覧表?(a table listing)とやらがあるらしく、そちらで引けたものをデフォルトにしたいらしい。とはいえ、設定で完全にパスを指定することもできる、という感じでしょうか。

ansible_python_interpreterinterpreter_python に設定できるデフォルトの制御は4つあるようです。

auto_legacy (2.8 からデフォルト)

  • 1: /usr/bin/python を探す
  • 2: 一覧表から環境の「正しい」インタプリタのパスを探す
  • 3: 1 があれば 1 を使う。その時 2 もあれば警告も出る。1 が無くて 2 があれば 2 を使う。1 も 2 も無かったり、2 が見つかったのに実際はそこに無かったりしたら、「共通の Python インタプリタのパスのリスト(common Python interpreter paths)」を探して最初に見つかったものを使う

auto (2.12 からデフォルト(予定?))

  • 1: 一覧表から環境の「正しい」インタプリタのパスを探す
  • 2: 1 を使う。1 が見つかったのに実際はそこに無かったりしたら、「共通の Python インタプリタのパスのリスト(common Python interpreter paths)」を探して最初に見つかったものを使う

auto_legacy_silent, auto_silent

  • auto_legacyauto の警告出ない版

(host_vars、vars、playbooks などで)ansible_python_interpreter に特定のパスを設定すると、インタープリタの自動検出は無効になる。

疑問

  • autoauto_legacy の 1 をスキップする感じ? ということは警告は出なさそうだけど auto_silent ってあるしなあ…
  • どのインタプリタ使ったのかは出力されるのかな

やってみる

inventory に ansible_python_interpreter 変数を足す。

awesome-server ansible_python_interpreter=auto …

で実行すると、

TASK [Gathering Facts] ******************************************************************************************************************************************************
The authenticity of host '**********************************************************************' can't be established.
ECDSA key fingerprint is SHA256:dfU+***************************************.
Are you sure you want to continue connecting (yes/no)? yes
[WARNING]: Platform linux on host awesome-server is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could
change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.

警告出るじゃん。テーブルに無い環境なのか、テーブルが指す先が /usr/bin/python なら問答無用で警告出るのか、分からない。

Ansible のソースを見てみると、どうやら silent でないなら必ず警告が出る?? この仕様変更に気づいていないユーザのための警告で、気づいたら silent にしろということだろうか。ちょっと不親切かな……。

awesome-server ansible_python_interpreter=auto_silent …

でもう一度。

PLAY [all] ******************************************************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************************************************
ok: [awesome-server]

何も言われなくなりました(それはそう)。結局どのインタプリタを使ったのかも教えてくれない。

コメントする