Ansible で ESXi を操作してみる[VM作成編]
目的
- vSphere Client からぽちぽちせずに ESXi を操作したい
- ansible を使うことで構成管理と自動化も視野に
- 最終的には VM の自動作成をしたいなと
- 初めての方は以下も先にご確認下さい
- Ansible で ESXi を操作してみる[初期テスト]
構成 (2016/03/06 時点)
- ansible 2.0
- mac os x el capitan
- ubuntu 14.04
$ sudo pip install ansible
$ ansible --version
ansible 2.0.1.0
$ sudo pip install pysphere
$ sudo pip show pysphere
---
Name: pysphere
Version: 0.1.7
(snip)
- ESXi 5.1 u3 (Freeライセンス)
- 古いですね、すみません。わけあってこのバージョン…
- ssh サーバを有効にする
- vSphere client 5.1.0
- Windows10 Pro
リファレンス
- 以下のサイトの情報を参考にしました
- http://www.virtxpert.com/deploying-virtual-machines-vcenter-ansible/
- http://docs.ansible.com/ansible/vsphere_guest_module.html
- 当方、vCenter などなく無料ライセンスの ESXi ゆえ工夫というか逃げ方法を模索してみました…
準備
ESXi サーバ側に OS インストール用の ISO ファイルを準備します
- ESXi サーバへログイン
- 実行例
$ ESX_IPADDR='192.168.100.8'
$ ssh root@${ESX_IPADDR}
(snip)
~ #
- ESXi サーバ上で ISO ファイルのダウンロード
- 今回は CentOS6.7 を準備します
# mkdir /vmfs/volumes/datastore1/isofiles
# cd /vmfs/volumes/datastore1/isofiles
# wget http://ftp.iij.ad.jp/pub/linux/centos/6/isos/x86_64/CentOS-6.7-x86_64-minimal.iso
ESXi サーバの情報収集 (後ほど必要になります)
- ホスト名の取得
# hostname
出力例:
esxi5.local
Ansible の構成ファイルを準備します
1. 作業用ディレクトリの作成
$ mkdir -p ~/ansible/esxi-test/group_vars
2. Group Variable ファイルの作成
2-1. 変数のセット
ESX_HOSTNAME='esxi5.local' <- 上の手順でメモったホスト名
ESX_USER='root'
ESX_PASSWORD='hogehoge' <- ssh でログイン可能なパスワード
VM_NAME='testvm01'
DATASTORE_NAME='datastore1'
ISO_PATH=${DATASTORE_NAME}/'isofiles/CentOS-6.7-x86_64-minimal.iso'
2-2. 変数の確認
cat << ETX
ESX_HOSTNAME: ${ESX_HOSTNAME}
ESX_USER: ${ESX_USER}
ESX_PASSWORD: ${ESX_PASSWORD}
VM_NAME: ${VM_NAME}
DATASTORE_NAME: ${DATASTORE_NAME}
ISO_PATH: ${ISO_PATH}
ETX
2-3. 設定ファイルの作成
cd ~/ansible/esxi-test/group_vars
cat << EOF > all.yml
---
esx_hostname: ${ESX_HOSTNAME}
esx_ipaddr: ${ESX_IPADDR}
esx_user: ${ESX_USER}
esx_password: ${ESX_PASSWORD}
guest_vm_name: ${VM_NAME}
datastore_name: ${DATASTORE_NAME}
iso_path: ${ISO_PATH}
EOF
cat all.yml
cd ../
3. 構成ファイルの作成
ESX_HOST_FILE='esx-host'
cat << EOF > ${ESX_HOST_FILE}
[esxi]
${ESX_IPADDR}
EOF
cat ${ESX_HOST_FILE}
cat << EOF > site.yml
---
- hosts: 127.0.0.1
connection: local
user: root
sudo: false
gather_facts: false
serial: 1
tasks:
- name: Deploy guest from template
vsphere_guest:
vcenter_hostname: "{{ esx_ipaddr }}"
username: "{{ esx_user }}"
password: "{{ esx_password }}"
guest: "{{ guest_vm_name }}"
state: powered_on
vm_hw_version: vmx-08
vm_extra_config:
vcpu.hotadd: yes
mem.hotadd: yes
notes: This is a test VM
vm_disk:
disk1:
size_gb: 10
type: thin
datastore: "{{ datastore_name }}"
vm_nic:
nic1:
type: vmxnet3
network: VM Network
network_type: standard
vm_hardware:
memory_mb: 1024
num_cpus: 2
osid: centos64Guest
scsi: paravirtual
vm_cdrom:
type: "iso"
iso_path: "{{ iso_path }}"
esxi:
datacenter: ha-datacenter
hostname: "{{ esx_hostname }}"
EOF
cat site.yml
VM の Deploy
1. 以下のコマンドを実行します
ansible-playbook site.yml -i esx-host
出力例:
[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and make sure become_method is 'sudo' (default). This
feature will be removed in a future release. Deprecation warnings can be disabled by setting deprecation_warnings=False in
ansible.cfg.
PLAY ***************************************************************************
TASK [Deploy guest from template] **********************************************
changed: [127.0.0.1]
PLAY RECAP *********************************************************************
127.0.0.1 : ok=1 changed=1 unreachable=0 failed=0