読者です 読者をやめる 読者になる 読者になる

らくがきちょう

なんとなく

Ansible で vSphere ESXi に仮想マシンをデプロイするには

デプロイを自動化するツールには以下のようなものがあります。

  • Ansible
  • Chef
  • Puppet

今回は Ansible を使って vSphere ESXi 上に仮想マシンを作成してみます。作業環境として CentOS 7 を使いました。

事前準備

Ansible をインストールします。標準リポジトリには無い為、EPEL を追加します。

yum -y install epel-release
yum update
yum -y install ansible

次に Ansible から vSphere ESXi を操作する際に必要となる pysphere パッケージをインストールします。

easy_install -U pysphere

hosts ファイルの用意

/etc/ansible/hosts ファイルを以下の内容で用意しておきます。

[vms]
vms[01:03] disk='10' datastore='datastore2' network='VM Network' memory='1024' cpucount='1' osid='ubuntu64Guest'

これは以下の意味になります。

項目
作成する VM vms01 〜 vms03 までの 3 台
ディスク容量 10GB
データストア datastore2
ネットワーク VM Network
メモリ 1GB(1024MB)
CPU 割当数 1 コア

osid(OS の種類)は VMware のサイトで確認することが出来ます。

yml ファイルの用意

実際にデプロイする内容を .yml 形式の Playbook として記述しておきます。主なパラメータは以下としました。但し、「vCenter のアドレス」「ユーザ名」「パスワード」は対話的に変更可能です。必要に応じて「決め打ちにしてしまう」「他のパラメータも可変にする」「作成した仮想マシンはすぐにパワーオンする」等の工夫が可能だと思います。

項目
vCenter のアドレス 192.168.253.240
vCenter ログイン用ユーザ名 root
vCenter ログイン用パスワード vmware
ESXi のアドレス 192.168.253.242
データセンター MyDatacenter
クラスタ MyCluster
マウントしておく .iso イメージ datastore2/CentOS-7-x86_64-Kickstart-1503-01.iso
状態 デプロイ直後のまま(電源オンにはしない)

実際の Playbook は以下です。

- hosts: all
  gather_facts: false
  connection: local
  user: remote
  sudo: true

  vars_prompt:
    - name: "vcenter_hostname"
      prompt: "Enter vcenter hostname"
      private: no
      default: "192.168.253.240"
    - name: "vcenter_user"
      prompt: "Enter vcenter username"
      private: no
      default: "root"
    - name: "vcenter_pass"
      prompt: "Enter vcenter password"
      private: yes
      default: "vmware"

  vars:
    datacenter: 'MyDatacenter'
    esxi_host: '192.168.253.242'
    notes: 'Created by Ansible'
    iso_image: 'datastore2/CentOS-7-x86_64-Kickstart-1503-01.iso'

  tasks:
    - vsphere_guest:
        vcenter_hostname: "{{ vcenter_hostname }}"
        username: "{{ vcenter_user }}"
        password: "{{ vcenter_pass }}"
        guest: "{{ inventory_hostname }}"
        state: present
        vm_extra_config:
          notes: "{{ notes }}"
        vm_disk:
          disk1:
            size_gb: "{{ disk }}"
            type: thin
            datastore: "{{ datastore }}"
        vm_nic:
          nic1:
            type: vmxnet3
            network: "{{ network }}"
            network_type: standard
        vm_hardware:
          memory_mb: "{{ memory }}"
          num_cpus: "{{ cpucount }}"
          osid: "{{ osid }}"
          scsi: lsi
          vm_cdrom:
            type: "iso"
            iso_path: "{{ iso_image }}"
        esxi:
          datacenter: "{{ datacenter }}"
          hostname: "{{ esxi_host }}"

デプロイの実行

Playbook をデプロイします。

# ansible-playbook create_vm.yml
Enter vcenter hostname [192.168.253.240]:
Enter vcenter username [root]:
Enter vcenter password [vmware]:

PLAY [all] ********************************************************************

TASK: [vsphere_guest ] ********************************************************
changed: [vms02]
changed: [vms01]
changed: [vms03]

PLAY RECAP ********************************************************************
vms01                      : ok=1    changed=1    unreachable=0    failed=0
vms02                      : ok=1    changed=1    unreachable=0    failed=0
vms03                      : ok=1    changed=1    unreachable=0    failed=0