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_interpreter
や interpreter_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_legacy
とauto
の警告出ない版
(host_vars、vars、playbooks などで)ansible_python_interpreter
に特定のパスを設定すると、インタープリタの自動検出は無効になる。
疑問
auto
はauto_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]
何も言われなくなりました(それはそう)。結局どのインタプリタを使ったのかも教えてくれない。