先日の Nutanix DevOps Night #2 にて、Nutanix で Ansible を利用する方法を紹介しました。
AHV での VM 作成時に Cloud-Init を利用することで、手軽に ansible 実行環境になる Linux(CentOS 8)を用意する方法を紹介してみようと思います。Ansible は、EPEL リポジトリにある RPM をインストールします。
今回の内容です。
事前準備
Nutanix クラスタに、OS イメージやネットワークを用意しておきます。
- AHV の Nutanix クラスタを用意しておきます。
- Prism で、イメージ サービスに、Cloud-init がインストールされているイメージを登録しておきます。今回は、CentOS-8-GenericCloud-8.3.2011-20201204.2.x86_64.qcow2 を利用します。イメージ ファイルのダウンロード URL は下記。
- Prism で、IPAM を有効にしたネットワークを作成しておきます。
- Cloud-init でインターネットから ansible の RPM をインストールするので、IPAM の DHCP 設定では、デフォルトゲートウェイや DNS サーバ設定も必要です。
ゲスト OS カスタム スクリプトの用意
AHV で VM 作成時に読み込ませる、ゲスト OS のカスタム スクリプト(Cloud-init の User Data)を用意します。
今回は、次のようなスクリプトを用意します。
- nutanix という OS ユーザを作成。(初期パスワードは nutanix/4u。パスワードなしで sudo 実行できるようにする)
- SSH のパスワード ログインを許可。
- Ansible は、EPEL リポジトリにある RPM をインストール。
- 「python」で Python3 が実行されるように alternatives を設定。
VM の作成 ~ 起動
Prism にて、VM を作成します。
手順は以前に投稿した Terraform VM の作成と同様ですが、Cloud-init スクリプトの内容だけが異なり、今回用意したものを入力します。
作成された VM をパワーオンすると、自動的に Prism の IPAM で IP アドレスが採番されます。CentOS-8-GenericCloud-~.x86_64.qcow2 イメージはデフォルトで DHCP 設定になっているので、ゲスト OS には DHCP で IP アドレスが設定されます。
そして、少し待つと Cloud-init により Ansible がインストールされた状態になります。
Ansible のインストール確認
作成した VM には、nutanix ユーザ(パスワードは nutanix/4u)で SSH ログインできるはずです。
作成された VM の、ゲストOS の様子です。
[nutanix@demo-ansible-83 ~]$ cat /etc/centos-release CentOS Linux release 8.3.2011 [nutanix@demo-ansible-83 ~]$ python -V Python 3.6.8
Ansible もインストールされています。
[nutanix@demo-ansible-83 ~]$ rpm -q ansible ansible-2.9.21-1.el8.noarch [nutanix@demo-ansible-83 ~]$ ansible --version ansible 2.9.21 config file = /etc/ansible/ansible.cfg configured module search path = ['/home/nutanix/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python3.6/site-packages/ansible executable location = /usr/bin/ansible python version = 3.6.8 (default, Aug 24 2020, 17:57:11) [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)]
Ansible の実行テスト(Nutanix クラスタ情報の取得)
Ansible で、Nutanix RETS API v2 を利用して Nutainx クラスタの情報を取得してみます。
まず、つぎのような Playbook を用意しておきます。
- Ansible の uri モジュールを利用するので、対象(hosts)は localhost にしています。かわりに、Prism のアドレスは uri モジュールで指定します。
- Prism のアドレスは、prism_address 変数に格納。
- Nutanix REST API v2 の GET /clusters で、クラスタ情報を取得します。
- 取得した情報を、debug モジュールで出力します。
Playbook を実行してみます。
[nutanix@demo-ansible-83 ~]$ ansible-playbook get_nutanix_cluster_info.yml
実際には、次のように情報取得できます。
参考情報
Nutanix での Ansible 利用方法については、DevOps Night の動画もどうぞ。
以上。