Contents
moleculeでVMwareのドライバが無かったので作ってみようと思っていたところ、PRを見つけました。
ただ、既にドライバがいくつかある上に需要的な観点からWIPになっていました。
そこで、ここではPRが出ているVMwareドライバを使ってみようと思います。
PR
環境
項目 | バージョン |
---|---|
CentOS | 7.6 |
準備
必要なパッケージをインストール
必要なパッケージをインストールします。
1 2 3 |
[root@4aa2a2bf672c ~]# yum -y install epel-release [root@4aa2a2bf672c ~]# yum -y install python36 python36-devel gcc git |
ansibleのインストール
ansibleをvenv環境でインストールします。
1 2 3 4 |
[root@4aa2a2bf672c ~]# python3 -m venv venv [root@4aa2a2bf672c ~]# source venv/bin/activate (venv) [root@4aa2a2bf672c ~]# pip install ansible |
moleculeインストール(VMware)
PRが出ているリポジトリをクローンします。
1 2 |
(venv) [root@4aa2a2bf672c ~]# git clone https://github.com/bandit145/molecule.git |
moleculeをインストールします。
1 2 3 4 5 |
(venv) [root@4aa2a2bf672c ~]# cd molecule/ (venv) [root@8b267511b7d6 molecule]# git checkout -b remotes/origin/vmware-provider remotes/origin/vmware-provider (venv) [root@4aa2a2bf672c molecule]# pip install -r requirements.txt (venv) [root@4aa2a2bf672c molecule]# python setup.py install |
verify
でエラーが出ないようにtestinfraのバージョンを上げます。
1 2 3 4 5 6 7 8 9 |
(venv) [root@4aa2a2bf672c molecule]# pip install --upgrade testinfra (snip) molecule 2.16.1.dev9 has requirement testinfra==1.14.1, but you'll have testinfra 3.1.0 which is incompatible. Installing collected packages: testinfra Found existing installation: testinfra 1.14.1 Uninstalling testinfra-1.14.1: Successfully uninstalled testinfra-1.14.1 Successfully installed testinfra-3.1.0 |
pyvmomiをインストールします。
1 2 |
(venv) [root@4aa2a2bf672c molecule]# pip install pyvmomi |
テンプレート作成
VMのテンプレートを作成しておく必要があります。
VMのテンプレートには、以下のユーザーが必要です。(sudoを使う場合はsudoersの設定も必要です)
ユーザー | パスワード |
---|---|
molecule | molecule |
実行
roleの作成
ここでは簡単なApacheをインストールするroleを作ってみます。
1 2 3 4 5 |
(venv) [root@4aa2a2bf672c ~]# mkdir example (venv) [root@4aa2a2bf672c ~]# cd example/ (venv) [root@4aa2a2bf672c example]# mkdir -p roles/httpd/tasks (venv) [root@4aa2a2bf672c example]# vi roles/httpd/tasks/main.yml |
main.ymlの中身は以下のようになっています。
1 2 3 4 5 6 7 8 9 10 |
--- - name: install httpd yum: name: httpd - name: start httpd systemd: name: httpd state: started |
scenario作成
VMwareのscenarioを作成します。
1 2 3 4 5 |
(venv) [root@4aa2a2bf672c example]# cd roles/httpd/ (venv) [root@8b267511b7d6 httpd]# molecule init scenario -d vmware -r httpd --> Initializing new scenario default... Initialized scenario in /root/example/roles/httpd/molecule/default successfully. |
scenarioの修正
molecule.yml
を変更します。
1 2 |
(venv) [root@8b267511b7d6 httpd]# vi molecule/default/molecule.yml |
ここでは instance
という名前のVMを作って、そのVM上でroleを実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
--- dependency: name: galaxy driver: name: vmware lint: name: yamllint platforms: - name: instance template: CentOS7_molecule disk: - size_gb: 32 type: thin datastore: VM hardware: num_cpus: 2 networks: - name: VM Network provisioner: name: ansible lint: name: ansible-lint scenario: name: default verifier: name: testinfra lint: name: flake8 |
Playbookの修正
sudoを行うためにbecomeとパスワードを追加します。
1 2 |
(venv) [root@8b267511b7d6 httpd]# vi molecule/default/playbook.yml |
1 2 3 4 5 6 7 8 9 |
--- - name: Converge hosts: all become: true vars: ansible_become_password: molecule roles: - role: "httpd" |
認証・展開先ファイルの作成
認証・展開先ファイルを作成します。
1 2 |
(venv) [root@8b267511b7d6 httpd]# vi ~/.molecule_vmware.yml |
vCenterの認証情報やinstanceの展開先を設定します。
1 2 3 4 5 6 7 8 9 |
molecule_vmware: hostname: 192.168.0.111 username: administrator@vsphere.local password: secret validate_certs: no datacenter: DC cluster: Cluster01 folder: /DC/vm |
実行
以下はデモ動画です。
Demo to ansible molecule test using vmware driver from sky_joker on Vimeo.
補足
コンテナで動かす場合は locale
と USER
環境変数の設定が必要です。
以下は例です。
1 2 3 |
(venv) [root@8b267511b7d6 ~]# export LANG=en_US.utf8 (venv) [root@8b267511b7d6 ~]# export USER=molecule |
最後に
moleculeのVMwareドライバが問題なく動きました 🙂
これがマージされるとVMware vSphere環境でVMを使ったCIが出来るので便利ですね!
マージされることを期待してます 🙂
それでは、みんなでハッピーオートメーション!