The Inside Playbook
Ansible インベントリを Red Hat Ansible Tower に移動する 3 つの簡単な方法
2018年3月18日、寄稿者: Sean Cavanaugh

Ansible をずっとコマンドラインで使用してきたユーザーのインベントリには、多くのサーバー、ネットワークデバイス、その他のターゲットノードなどがリストされていると思います。Red Hat Ansible Tower を使用すると、チームの全員が Ansible Playbook を容易に実行できるようになるので、Ansible Tower を使用した自動化のレベルアップを検討する方も多いでしょう。しかし既存のインベントリファイルやディレクトリ内のすべてのデータと変数を残しておきたい場合、インベントリをコマンドラインから Ansible Tower に転送できるかどうかに不安があるのではないでしょうか。しかし、既存の Ansible インベントリを Ansible Tower にインポートするのはとても簡単です。
このブログでは、既存の Ansible インベントリを Ansible Tower に接続するための 3 つの迅速かつ効果的な方法について説明します。
- Ansible Tower コントロールノード (awx-manage) からインベントリファイルを移行する
- Playbook を使用して任意の場所からインベントリファイルを移行する
- Git で管理されるインベントリファイルにアクセスするように Tower を設定する
Ansible Tower をまだお持ちでなく、使ってみたい方は、https://www.ansible.com/products/tower でダウンロードできます。
ダイナミックインベントリを使用している場合、Ansible Tower にインベントリをインポートする必要はありません。ダイナミックインベントリは、既存のソースからインベントリを取得します。ダイナミックインベントリでは、インベントリファイルを管理する必要はなく、毎回最新のリストを取得するだけです。Ansible Tower は、Red Hat OpenStack Platform、Red Hat Satellite、パブリック・クラウド・プラットフォーム (Amazon Web Services/AWS、Google Compute Engine/GCE、Microsoft Azure)、および Red Hat Virtualization や VMware vCenter などの仮想化ソリューションを含む一般的なダイナミックインベントリ・ソースとシームレスに統合できます。スクリプトを使って Infoblox DDI と ServiceNow CMDB を統合し、Ansible Tower のダイナミックインベントリに使用することもできます。
注:このブログでは、Ansible Playbook や Ansible Tower のワークフローを Ansible Tower にインポートする方法については取り上げず、Ansible インベントリの可搬性にのみ焦点を当てています。
1. Ansible Tower コントロールノード (awx-manage) からインベントリファイルを移行する
Ansible Tower をインストールすると付属してくるコマンドラインツール awx-manage は、インベントリをインポートするためのシンプルで効果的なツールです。インベントリが Ansible コントロールノードに既に存在する YAML または ini 形式のフラットファイルである場合は、awx-manage を使うのが最も合理的です。コマンドを実行して既存のインベントリファイルにポイントすると、Ansible Tower にすべてのホストがロードされます。
- WebUI を使用して Ansible Tower にログインし、空のインベントリを作成します。
- SSH 経由で Ansible Tower コントロールノード (Ansible Tower がインストールされている Linux マシン) にログインします。
- Ansible インベントリを表すフラットファイルを探します。
- 次のように、awx-manage inventory_import コマンドを実行します。
sudo awx-manage inventory_import --source=/path/to/hosts --inventory-name="My Inventory"
ターミナルウィンドウに、次のような出力が表示されます。
1.387 INFO Updating inventory 3: My Inventory 1.475 INFO Reading Ansible inventory source: /path/to/hosts 2.119 INFO Processing JSON output... 2.120 INFO Loaded 6 groups, 6 hosts 2.329 INFO Inventory import completed for (My Inventory - 9) in 0.9s
- WebUI 経由でログインすると、インベントリの下にすべてのホストが表示されます。
awx-manage コマンドラインツールは非常にシンプルで高速です。私が使ったときは、既存のインベントリを取得して Ansible Tower にインポートするのにたったの数秒しかかかりませんでした。
Ansible Tower を使用して Playbook を実行するが、インベントリは Ansible Tower の外部で管理するチームの場合、awx-manage を使用したインポートは最適なオプションではありません。なぜなら、インベントリファイルに変更が加えられるたびに、フラットファイル・インベントリを再インポートしなくてはならないからです。チームが引き続き Ansible Tower の外部でインベントリを管理する場合は、おそらく、後ほど説明する GitHub オプションを使用すべきでしょう。
2. Playbook を使用して任意の場所からインベントリファイルを移行する
Ansible Tower モジュールを使用して、インベントリの Ansible Tower への転送を自動化できます。これらのモジュールにより、Ansible Playbook を使用して、インベントリを含む Ansible Tower インスタンスのすべてを自動化および管理できます。インベントリを作成できる tower_inventory モジュールと、既存のインベントリにホストを追加できる tower_host モジュールがあります。「Network Routers」というインベントリがすでに作成されており、Ansible Playbook をビルドし、tower_host モジュールを使用してグループルーター内のすべてのルーターをそのインベントリに追加するとします。その場合の Ansible Playbook は次のようになります。
- name: NETWORK SETUP hosts: routers connection: local become: yes gather_facts: no tasks: - name: ADD NETWORK HOSTS INTO TOWER tower_host: name: "{{ inventory_hostname }}" inventory: "Network Routers" tower_username: admin tower_password: ansible tower_host: https://localhost variables: ansible_network_os: "{{ansible_network_os}}" ansible_host: "{{ansible_host}}" ansible_user: "{{ansible_user}}" ansible_connection: "{{ansible_connection}}" ansible_become: yes ansible_become_method: enable
この Ansible Playbook は、グループルーター内のすべてのデバイスを同時に追加します。Playbook の出力は次のようなものになります。

この方法の利点は、コントロールノード上ではなくても、どこからでも Ansible Playbook を実行できることです。awx-manage オプションの場合と同様、Ansible Playbook を使用した Ansible Tower へのインベントリの転送は、今後 Tower でインベントリを管理する場合にのみ適しています。これら 2 つの方法は、Ansible Tower に移行する際に使用する戦略です。ダイナミックインベントリやソース管理ツールを使用してインベントリを管理する場合、インベントリを変更するたびに Playbook を再実行しなくてはなりません。
3. Git で管理されるインベントリファイルにアクセスするように Tower を設定する
最後に紹介するのは、ソース管理ツールを使用してインベントリを管理する方法です。私は GitHub リポジトリにフラットファイルのインベントリファイルを保存しています。この概念を説明するためにサンプルリポジトリを作成しました (https://github.com/ipvsean/sample_inventory)。
上述の 2 つの方法とは異なり、これは移行するための戦略としてではなく、Git などのソース管理ツールを使用して Ansible インベントリを管理する、より永続的な方法です。インベントリは GitHub で管理でき、Ansible Tower はそれらの変更を簡単に反映することができます。
まず、Ansible Tower プロジェクトを作成します。Ansible Tower プロジェクトを使うと、Ansible Tower を、Git、Subversion、Mercurial などの Ansible Tower でサポートされているソースコード管理 (SCM) システムに同期させることができます。ここでは「Sean’s Github」という名前のプロジェクトを追加し、SCM タイプを「Git」に設定して、上記の SCM URL を入力します。

次に、この Ansible Tower プロジェクトを使用するインベントリを作成します。行う作業は次の通りです。
- 「Sean Github Inventory」というインベントリを作成します。
- 「Sean Github Source」というソースを追加し、先ほど作成した Ansible Tower プロジェクト (「Sean's Github」) を選択します。
- プロジェクトを選択すると、すぐにドロップダウンメニューが表示され、ホストフラットファイルを直接ポイントできます。
- ソースを作成したら、円形の矢印の同期ボタンを使用して同期します。ホストとグループは、以下の動画で示すように、ホストボタンの下に自動的に表示されます。

インベントリの管理にソース管理ツールを使用する方法は多くの Ansible Tower ユーザーが使用していて、スケーリングも可能です。