Help us understand the problem. What is going on with this article?

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

終了

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away