AnsibleのVMware Collectionsを使う方法


Ansible 2.9まではAnsibleのコアとコミュニティーなどが一つにまとまって配布されていましたが、2.10以降からはコア以外はCollectionsとして外出しになります。
VMwareモジュールもCollectionsに移動するため一足先に使ってみました。(collectionsは2020/03/20現在まだ移行途中になっています)

Collectionsの種類

VMwareのCollectionsは2つあります。

vmware

vmware はVMware社がOSSで公開しているライブラリの pyvmomivsphere-automation-sdk-python に依存した作りなっています。
APIはSOAP(mob)とRESTの両方を使う(従来の)モジュールが提供されています。

vmware_rest

vmware_rest はVMware社が公開しているライブラリに依存しない作りになっています。
コミュニティーがvSphereのREST APIの仕様に基づいて独自にユーティリティを開発しています。
ただし、まだ開発が始まったばかりなのと現時点ではvSphere REST API(vSphere 7だとどれくらいできるようになるんだろう?)で出来ることに限りがあるので、まだモジュールも vmware よりは用意されていません。
今後、開発されていくと思います。

vmware_restが出てきた背景や期待されること

vSphereがSOAPだけではなく、REST APIの機能も追加されるようになりました。
SOAPの場合、サードパーティー製のライブラリ(pyvmomiやAutomation SDK)をインストールする必要がありますが、RESTの場合はインストールしなくてもすぐ使えるようになります。
また、今までのモジュールではタスク毎に認証情報を書く必要がありましたが(環境変数に認証情報を設定すれば省略することは可能です)、vmware_restの場合はHTTP Pluginが用意されており、タスク毎に認証情報を書かなくても例えばinventoryにvCenterの情報を書くだけで対応できるようになります。

今までのモジュールはコミュニティーでサポートされていましたが、開発方法やパラメーターの標準化・正規化が出来ていなかったのが課題だったようです。
HTTP Pluginの導入によっていくつかの部分が標準化されたり、その結果パフォーマンスが向上し依存関係を減らすことが期待できるようです。
(例えば、vmware_guestとか複雑且つ処理が重いので、これを将来的には分割したりできるのかもしれない)

Collectionsのインストール

ここでは以下の環境を準備して試しました。

項目 バージョン
OS CentOS 7.5.1804
Python 3.6.8
Ansible 2.10.0.dev0

環境準備

virtualenvの準備

virtualenv環境を作ります。

Ansibleのインストール

開発版のAnsibleをインストールします。

Collectionをインストールするディレクトリを作成

デフォルトでは ~/.ansible/collections/ansible_collections/ にCollectionsがインストールされますが、ここでは以下のディレクトリを作成して意図的にインストール先を指定します。

vmwareインストール

Collectionsの vmware をインストールします。
注意点としては、vmware を使うために必要なライブラリをインストールする時にpipのバージョンが古いとAutomation SDKをインストールする時にエラーが発生するのでバージョンアップします。

vmware_restインストール

Collectionsの vmware_rest をインストールします。
この記事を書いている時点(2020/03/20)では、Galaxyに登録されていなかったのでリポジトリをクローンしてインストールします。
namespaceがansibleになっているけど、これは将来communityになると思っています(多分)

Collectionsの使い方

vmware

collectionsのvmwareで提供されている vmware_guest_info モジュールを使用した例です。
使用するモジュールをFQCNで指定する場合は namespace.collection_name.module_name として指定します。

または collections で指定します。

以下は実行例です。

vmware_rest

collectionsのvmware_restで提供されている vmware_core_info モジュールを使用した例です。
使用するモジュールをFQCNで指定する場合は namespace.collection_name.module_name として指定します。

または collections で指定します。

inventoryファイルは以下のように作成しています。

以下は実行例です。

今後は、VMwareのRESTの機能拡張によってAnsibleのモジュールも増えていくと思います 🙂
ただ、今はまだまだSOAPの方が出来ることが多いので、しばらくはSOAPメインが続きそうな予感はします(vSphere 7だとどうかは要確認!)

参考

Leave a Reply

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください