🐔

Ansible の実行にはターゲットマシンにも Python が必要だった

2024/03/27に公開

Python が必要なのってローカルだけじゃないんだ…

最近 Ansible で遊びはじめてようやく気づいたんだが、Ansible の実行にはコントロールノード(ansible のコマンドを実行するローカルのマシン)だけでなくターゲットノード(管理対象ノード、リモートマシン)にも Python が必要だった。
もちろんドキュメントにもちゃんと書いてあった。

The managed node (the machine that Ansible is managing) does not require Ansible to be installed, but requires Python to run Ansible-generated Python code. ...

適当訳:ターゲットには Ansible は要らないけど Python は必要だよ。

日頃から Ansible 使ってる人は「何を当たり前のことを」と思われるだろうが、今まで「Ansible って適当に playbook を書くとターゲットでごにょごにょやってうまいこと設定してくれるツールだよね?エージェントレスってことはターゲットには何もインストールしなくていいんだよね?」程度の雑な認識しかなかったので実際どんなもんなのか全く知らなかった。

ちなみに、サポートマトリックスとか言うのも見つけた。へぇ。
PowerShell とかあるのはターゲットが Windows の場合なのかな?(良く分かってない)

Python が無いと管理できないの?

Ansible の実行時にターゲットマシンにも Python が必要ってことで「Python の無い環境(ネットワーク機器とか)は Ansible では管理できないの?そんなバカな!」って思ったが、もちろんそんなことはなかった。
それもちゃんとドキュメントに書いてあった。

There can be exceptions in module requirements. For example, network modules do not require Python on the managed device. See documentation for the modules you use. ...

適当訳:例外もあるよ。ネットワークモジュールなんかは Python 要らないよ。モジュールのドキュメント見てね。

つまり、ターゲットに Python が無くても動くモジュールもあるってことね。

ですよね~

Python のインストールは Ansible ではできないの?

あとは「Python あるにはあるけどデフォルトではインストールされてない時はどうすりゃいいの?」と言う疑問も浮かんでくる。
まぁ Ansible でごにょごにょやるような最近のマシンにデフォルトで Python が入ってないことは珍しいと思うので、あんまり遭遇しないのかもしれないが。

で、ポチポチ探してたら ansible.builtin.raw と言うモジュールのドキュメントにこんな事が書いてあった。

This is useful and should only be done in a few cases. A common case is installing python on a system without python installed by default.

適当訳:これは便利だけどニッチなケースだけで使ってね。ありがちなのはデフォルトで Python がインストールされてないヤツにインストールする時ね。

なるほどね。(がっつり調べたわけじゃないので、他の方法もあるのかも…)

ところで、コイツも当然 Python 要らないので先程のネットワーク機器とかにも使ったりするのかな?もちろん SSH が繋がればだけど。

Discussion