こんにちは、 @dz_ こと大平かづみです。
Prologue - はじめに
構成管理は、 Ansible を好んで使っています。今回は、インベントリを動的に指定したかったため、 Dynamic Inventory を試してみたところ… しばらく下記のエラーにはまってしまいました。対処できたので備忘録を書き留めます。
なお、 Dynamic Inventory については、下記のドキュメントを参考にしました。
- Developing Dynamic Inventory Sources — Ansible Documentation
-
Ansible Dynamic Inventoryをつくろう! - Qiita
- こちら、とても分かりやすい記事です!
Ansible の Dynamic Inventory を python で書くときは、shebang を忘れずに!
エラー内容
遭遇したエラーはこちらです。
ERROR! Attempted to execute "./dynamic-inventory.py" as inventory script: problem running ./dynamic-inventory.py --list ([Errno 8] Exec format error)
Attempted to read "./dynamic-inventory.py" as ini file: ./dynamic-inventory.py:1: Expected key=value host variable assignment, got:
"スクリプトの実行を試みたけど、エラーがでるね。ついでに ini ファイルとしても読んでみたけどダメねー。" とのこと…
対処
しばらーく試行錯誤したのち、この issue を発見!
That file needs a shebang line.
なるほど、shebang line
が必要なんだそう! shebang?
シバンまたはシェバン (shebang) とはUNIXのスクリプトの#!から始まる1行目のこと。
なるほど!!
ということで、Python の Shebang line
を参考に、私の動作環境では以下の shebang を書けばよいみたいです。
#!/usr/bin/env python
これを設定すると、すんなり動きました!(・ε・;)
Epilogue - おわりに
shebang は普段あんまり気にしてなかったので、思わぬ落とし穴でした!