Ansibleでダイナミックインベントリ on Openstack

スポンサーリンク

ダイナミックインベントリについて

ダイナミックインベントリの詳細な説明はAnsibleの公式ドキュメントをご覧ください。
Ansibleでよく利用されるインベントリファイルは、ini形式で構成管理をするホストの情報を定義します。
これは、スタティックインベントリと呼ばれます。
構成管理を行う環境が普遍的に変化しない(ホストに固定IPが割り振られているなど)環境で利用されます。

しかし、スタティックインベントリでは、クラウド環境等の動的にホストの台数や構成が変化する環境に柔軟に対応することができません。
なぜならば、構成が変化するたびにインベントリファイルを書き換える必要があるからです。

そこで、注目されるのがダイナミックインベントリを利用した構成管理です。
これは、python等の言語でクラウドのAPIを叩いてクラウドの構成情報を取得します。
その取得した情報を元に、Ansibleで構成管理を行うことが、ダイナミックインベントリを利用した構成管理です。

Ansibleについて

Ansibleの構築と詳細はこちら

OpenStackについて

OpenStackの構築と詳細はこちら

今回やってみること

今回は、Ansibleの公式ドキュメントで紹介されているOpenStack向けのスクリプトを利用し、Ansibleで構築したインスタンスに対してダイナミックインベントリを利用して、ansibleコマンド(ping)を実行します。
Ansibleを利用したOpenStackでのインスタンスの作成は、こちらをご覧ください。

実行環境

Ansible

  • CentOS7.4
    • Ansible 2.4.3.0
    • python 2.7.5

OpenStack

ダイナミックインベントリ

スクリプトのダウンロード

  • wgetのインストール
# yum install wget
  • スクリプトのダウンロード
# wget https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/openstack.py
  • 実行権限の付与
# chmod +x openstack.py

openstack.pyを実行してみる

# python openstack.py --list
{
  "": [
    "3940ce84-a63d-4180-8ce3-1bb386d84516", 
    "0dd352ed-9132-46fe-9605-dd8873d26a9a"
  ], 
  "_meta": {
    "hostvars": {
      "0dd352ed-9132-46fe-9605-dd8873d26a9a": {
        "ansible_host": "192.168.1.20", 
        "ansible_ssh_host": "192.168.1.20", 
        "openstack": {
          "OS-DCF:diskConfig": "AUTO", 
          "OS-EXT-AZ:availability_zone": "nova", 
          "OS-EXT-SRV-ATTR:host": "localhost.localdomain", 
          "OS-EXT-SRV-ATTR:hypervisor_hostname": "localhost.localdomain", 
          "OS-EXT-SRV-ATTR:instance_name": "instance-00000012", 
          "OS-EXT-STS:power_state": 1, 
          "OS-EXT-STS:task_state": null, 
          "OS-EXT-STS:vm_state": "active", 
          "OS-SRV-USG:launched_at": "2018-03-07T18:27:26.000000", 
          "OS-SRV-USG:terminated_at": null, 
          "accessIPv4": "192.168.1.20", 
          "accessIPv6": "", 
          "addresses": {
            "int_net": [
              {
                "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:b2:3a:7f", 
                "OS-EXT-IPS:type": "fixed", 
                "addr": "192.168.5.7", 
                "version": 4
              }, 
              {
                "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:b2:3a:7f", 
                "OS-EXT-IPS:type": "floating", 
                "addr": "192.168.1.20", 
                "version": 4
              }
            ]
          }, 
          "adminPass": null, 
          "az": "nova", 
          "cloud": "mycloud", 
          "config_drive": "", 
          "created": "2018-03-07T18:25:28Z", 
          "created_at": "2018-03-07T18:25:28Z", 
          "disk_config": "AUTO", 
          "flavor": {
            "id": "2", 
            "name": "m1.small"
          }, 
          "has_config_drive": false, 
          "hostId": "a0badbb822d1ffd6e7ba3e07c553035473e461afa054b4edec19b463", 
          "host_id": "a0badbb822d1ffd6e7ba3e07c553035473e461afa054b4edec19b463", 
          "id": "0dd352ed-9132-46fe-9605-dd8873d26a9a", 
          "image": {
            "id": ""
          }, 
          "interface_ip": "192.168.1.20", 
          "key_name": "ansible-con", 
          "launched_at": "2018-03-07T18:27:26.000000", 
          "location": {
            "cloud": "mycloud", 
            "project": {
              "domain_id": "default", 
              "domain_name": null, 
              "id": "8b24e82ca3fa4655a6d1c640b7bfd8a4", 
              "name": "admin"
            }, 
***以下省略***
}

スクリプトを実行することで、OpenStack環境の様々な情報が取得出来ていることがわかると思います。

ダイナミックインベントリの実行

  • すべてのホストにpingコマンドを実行
# ansible all -i openstack.py  -m ping
3940ce84-a63d-4180-8ce3-1bb386d84516 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

成功しました!

失敗する方は、ホストに対して公開鍵認証で、SSH接続できるかやpingコマンドで疎通確認ができるかを確認下ください。

最後に

今回は、ダイナミックインベントリを利用し、ホストに対してAnsibleコマンドを実行できることを確認しました。
スクリプトを変更したり、上手に変数を取得することで、インベントリの管理さえも自動で行うことが可能になります。
急速に普及しているクラウド環境を管理するために役立つものですので今後も取り上げていきます。
次回は、ダイナミックインベントリを利用してLAMPでも構築したいと思います!

タイトルとURLをコピーしました