Ansible で vSphere ESXi に仮想マシンをデプロイするには
デプロイを自動化するツールには以下のようなものがあります。
今回は Ansible を使って vSphere ESXi 上に仮想マシンを作成してみます。作業環境として CentOS 7 を使いました。
事前準備
Ansible をインストールします。標準リポジトリには無い為、EPEL を追加します。
| yum -y install epel-release
yum update
yum -y install ansible
|
次に Ansible から vSphere ESXi を操作する際に必要となる 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 は以下です。
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 | - 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 をデプロイします。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | ## 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
|