夢見るエンジニアの肥溜めブログ

エンジニアである私の技術日記でございます。インターネッツという大海原にクソみたいな投稿を繰り返すのは申し訳なく思い、インターネットの片隅に肥溜めを配置しました。非常に環境に優しいブログです。

AnsibleでVMwareに接続するための初期設定(vCenter/6.7)@CentOS7

AnsibleでVMwareを操作したいと思ったのですが、日本語でまとまった記事が少なく、初心者向けの記事がなかったため記載します。
本記事では、AnsibleでVMwareモジュール(※1)を利用できる環境をセットアップします。

環境

ソフトウェア名 バージョン
CentOS(for Ansible) 7-1804
Ansible 2.7.7
Python 2.7.5
vCenter 6.7
ESXi 6.7

事前準備

Ansibleコントローラに、Pythonモジュールの pyVmomi と vSphere Automation SDK for Python の導入が必要です。以下の手順で導入していきます。

  1. pipインストール
  2. vSphere Automation SDK for Pythonの導入
  3. pyVmomiモジュールのインストール

pipのインストール

Python用のパッケージ管理ツール(pip)を導入します。
CentOS7のMinimalインストールした状態では、pipは導入されていませんが、 Python 2系だと2.7.9以上、Python 3系では3.4以上だと標準で導入されているようです。

以下に手順を記載します。

  1. pipをインストールするPythonスクリプトをダウンロードします。

    # curl -O https://bootstrap.pypa.io/get-pip.py

  2. スクリプトを実行し、pipをインストールします。

    # python get-pip.py

DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. 
Please upgrade your Python as Python 2.7 won't be maintained after that date.   
A future version of pip will drop support for Python 2.7.  

→ Python2.7系のみインストールされていたため、DEPRECATIONが表示されます。
 Pyhthon2.7は、2020年の1月までしかサポートされないようです。

また、公式のインストールドキュメントは下記にあります。
https://pip.pypa.io/en/stable/installing/

vSphere Automation SDK for Pythonの導入

VMwareのAPI経由で操作するため、vSphere Automation SDK for Pythonの導入が必要です。

以下の手順で導入します。

  1. 作業用ディレクトリの作成

    # mkdir ~/work

  2. 作業ディレクトリに移動し、SDKのGitリポジトリをクローン

    # cd ~/work
    # git clone https://github.com/vmware/vsphere-automation-sdk-python.git

  3. vSphere Automation SDK for Pythonの導入

    # cd vsphere-automation-sdk-python
    # pip install --upgrade --force-reinstall -r requirements.txt --extra-index-url file:///<HOME_DIR>/work/vsphere-automation-sdk-python/lib
    → <HOME_DIR>には、実行ユーザのホームディレクトリを指定してください。

以下のメッセージが表示されるとインストール完了です。

<省略>

Successfully installed asn1crypto-0.24.0 certifi-2018.11.29 cffi-1.12.0 chardet-3.0.4 cryptography-2.5 enum34-1.1.6 idna-2.8 ipaddress-1.0.22 lxml-4.3.1 nsx-policy-python-sdk-2.3.0.0.2.11053635 nsx-python-sdk-2.3.0.0.2.11053635 pyOpenSSL-19.0.0 pyVmomi-6.7.1.2018.12 pycparser-2.19 requests-2.21.0 setuptools-40.8.0 six-1.12.0 suds-0.4 urllib3-1.24.1 vapi-client-bindings-1.5.0 vapi-common-client-2.10.2 vapi-runtime-2.10.2 vmc-app-python-sdk-2.3.0.0.2.11053635 vmc-client-bindings-1.3.1 werkzeug-0.14.1


エラーが出る場合は、以下で対応します。

enum34でエラーが出る場合

私の環境では、以下のメッセージが表示されてインストールに失敗しました。

Cannot uninstall 'enum34'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

# pip list | grep enum

Package                      Version
---------------------------- -------------
enum34                       1.0.4

→ enum34の1.0.4が導入済みのようです。

pip uninstallコマンドで、アンインストールできなかったため、以下で退避します。
# mv -v /usr/lib/python2.7/site-packages/enum* /tmp
pip listで表示されていないことを確認し、再度モジュールのインストールを実行します。

ipaddressでエラーが出る場合

enum34の対応後、再度インストールを実行すると以下のメッセージが表示されました。

Cannot uninstall 'ipaddress'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

→ enum34の時と同様に該当パッケージを退避し、再度インストールを実施します。


公式のインストール手順は以下に記載されています。
 https://github.com/vmware/vsphere-automation-sdk-python#troubleshooting
 https://code.vmware.com/web/sdk/6.7/vsphere-automation-python

pyvmomiモジュールのインストール

PythonでVMwareを環境を操作するモジュールであるpyvmomiを導入します。

# pip install pvmoni

以上で、事前準備は完了です。次の項目で、動作を確認します。

VMware Dynamic Inventory Pluginの利用

AnsibleのVMware Dynamic Inventory Pluginを利用し、動作確認します。

  • vmware_vm_inventoryを有効にします。
    # vi /etc/ansible/ansible.cfg

【記載内容】

[inventory]
enable_plugins = vmware_vm_inventory
  • 作業対象ディレクトリに.vmware.ymlを作成します。
    ここでは、ホームディレクトリに/ansible/vmwareを作成し、ファイルを作成します。
    # mkdir -p ~/ansible/vmware
    # vi ~/ansible/vmware/auth.vmware.yml

【記載内容】

plugin: vmware_vm_inventory
strict: False
hostname: <対象ホスト>
username: <ログインユーザ>
password: <パスワード>
validate_certs: False
with_tags: True

# ansible-inventory --list -i auth.vmware.yml
→ 情報が取得できたことを確認

具体的な利用方法は別途記載していきます。

参考

※1: AnsibleのVMwareモジュールは2種類あります。以下の記事がわかりやすいです。
Ansible: vSphere Guest モジュールについてのまとめ - Qiita

↓ Ansibleについて体系的に学べます。おすすめです。

Ansible実践ガイド 第2版 (impress top gear)

Ansible実践ガイド 第2版 (impress top gear)