ESXi
Ansible

Ansible で ESXi を操作してみる[VM作成編]

More than 3 years have passed since last update.


Ansible で ESXi を操作してみる[VM作成編]


目的


  • vSphere Client からぽちぽちせずに ESXi を操作したい

  • ansible を使うことで構成管理と自動化も視野に

  • 最終的には VM の自動作成をしたいなと

  • 初めての方は以下も先にご確認下さい




構成 (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




リファレンス


準備


ESXi サーバ側に OS インストール用の ISO ファイルを準備します


  1. ESXi サーバへログイン


    • 実行例

      $ ESX_IPADDR='192.168.100.8'
      $ ssh root@${ESX_IPADDR}
      (snip)
      ~ #




  2. 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 サーバの情報収集 (後ほど必要になります)


  1. ホスト名の取得

    # hostname
    出力例:
    esxi5.local



Ansible の構成ファイルを準備します


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


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


2. vSphere Client で VM が起動してきていたら成功です

Screenshot 2016-03-08 03.06.54.png


終了