BFT名古屋 TECH BLOG

日々の業務で得た知識を所属するエンジニアたちがアウトプットしていきます。

【Ansible】「No inventory was parsed, only implicit localhost is available」を解決する!

はじめに


こんにちは!
株式会社BFT名古屋支店・インフラ女子(?)のやまぐちです。

気づけばもう3月下旬。名古屋の桜も満開です!
さて、今回はAnsibleで発生したエラー「No inventory was parsed, only implicit localhost is available」の対応について記載します。

「No inventory was parsed, only implicit localhost is available」を解決する!


発生したエラー

さて、いつものようにPlayを記載し、実行前の構文チェックを走らせると以下のエラーが表示されました。最後のWARNINGでホストが「ignoring」されています。

[ansibleuser@218d70ce4967 src]$ ansible-playbook site.yml --syntax-check
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
[WARNING]: Could not match supplied host pattern, ignoring: 10.58.7.10

playbook: site.yml

最後の一行は実行対象をlocalhostとしていた時には表示されませんでした。WARNINGですが、これで本実行しようとしても対象ホストがないということでできません。

状況と解決方法

通常↑のエラーはインベントリファイルがない時に表示されるようです。ちなみに直下に置いているhostsの内容です。

[test]
10.58.7.10

「no parse」ということなので、-iオプションでインベントリを指定しても同じエラーになりました。指定しているのに「Unable to parse」と言われてちょっとしたパニックです。書き方が間違っているのか…?と。

[ansibleuser@b8ef4f033f36 src]$ ansible-playbook -i hosts site.yml --syntax-check
[WARNING]: Unable to parse /home/ansibleuser/work/ansible/src/hosts as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
[WARNING]: Could not match supplied host pattern, ignoring: test

playbook: site.yml

しかし原因はansible.cfgに書いてあったこの行です。

[inventory]
enable_plugins = gcp_compute

この環境ではGCPでのリソース作成もAnsibleで書いており、インベントリの収集にこのプラグインを有効にしていたのですがこんなところで影響が出ました。
というわけで、enable_pluginsをコメントアウトしたらWARNINGが表示されなくなりました!! ※ 特にこのプラグインを絶対に使用したいというわけではなかったので今回は影響なしです

優先順位って…

しかし疑問が残ります。Ansibleの優先順位は設定ファイルよりコマンドの方が上なのです。

Ansible の動作の制御: 優先順位のルール — Ansible Documentation

優先順位は高い順から並べると以下の通りです(参照リンクでは逆順に記載されているので注意)。

  1. 変数
  2. Playbookキーワード
  3. コマンドラインオプション
  4. 設定オプション

設定オプション(ansible.cfg)よりもコマンドで実行した「-i hosts」の方が優先されるはずなのですが、pluginの有効によって指定されるインベントリは別、ということなのでしょうか。解せない部分はありますが動きからはそう理解するしかなさそうです。

終わりに


今回はインベントリファイルを指定しても、ansible.cfgの設定が悪さしているというケースでした。コマンド実行時に指定した設定が優先されず、気づくのが遅れてしまいました。日々勉強ですね!

以上、ここまで読んでいただきありがとうございました~ ^ ^