はじめに
自宅に古いサーバを再利用したVMware ESXi(仮想サーバ、ぷちプライベートクラウド的なもの)がありまして、そこで、仮想マシンたてて新しい技術の検証やQiitaで気になったこと、試したいことなど色々しています。
ただ、毎回仮想マシンをたてて、OSをインストールするのがすごく手間です。。。
なので、自動化してラクにOSインストール済の仮想マシンを作成できるようにしたいと思います!
#やりたこと
・KickStartを利用したCentOS7を自動インストールするISOファイルを作成する。 ←こちらに記事書きました
・AnsibleでESXiを操作して、仮想マシンの作成・削除・構成の変更できるようにする。 ←今回これ
#構成
ポンコツノートPCからansibleで仮想マシンの操作します。
同一LAN
ポンコツノートPC <-----------> ESXiサーバ
ip:192.168.10.10 ip:192.168.10.8
#ファイル構成
こんな構成
ansible-vmware/
├── esx-host
├── group_vars
│ └── all.yml
└── vm.yml
esx-host作っているけど、メインのファイル(vm.yml)にesxiサーバ情報記載してるため正直いらいない
group_varsにはあまり変動しない環境変数を記載したファイル(all.yml)いれている。
指定するISOは***こちら***で作った自動でOSインストールするISOファイルを指定する
---
esx_hostname: localhost.localdomain
esx_ipaddr: 192.168.10.8
esx_user: root
esx_password: <esxiにログインするパスワード>
datastore_name: datastore1
iso_path: datastore1/ISO/centos/CentOS-7-x86_64-DVD-1611_Auto.iso
vm.ymlにタスクなどを記載している
--
- hosts: 127.0.0.1
connection: local
user: root
sudo: false
gather_facts: false
serial: 1
vars_prompt:
- name: "guest_vm_name"
prompt: "Please enter guest VM name"
private: no
default: "testvm"
- name: "vm_state"
prompt: "Please enter guest_vm state \n[state list]\n present\n powered_off\n absent\n powered_on\n restarted\n reconfigured\n"
private: no
default: "powered_on"
- name: "disk_size"
prompt: "Please input disk-size"
private: no
default: "50"
- name: "mem_size"
prompt: "Please input memory-size"
private: no
default: "2048"
tasks:
- name: Deploy guest from template
vsphere_guest:
vcenter_hostname: "{{ esx_ipaddr }}"
username: "{{ esx_user }}"
password: "{{ esx_password }}"
guest: "{{ guest_vm_name }}"
state: "{{ vm_state }}"
vm_extra_config:
vcpu.hotadd: yes
mem.hotadd: yes
notes: This is a test VM
vm_disk:
disk1:
size_gb: "{{ disk_size }}"
type: thin
datastore: "{{ datastore_name }}"
vm_nic:
nic1:
type: vmxnet3
network: VM Network
network_type: standard
vm_hardware:
memory_mb: "{{ mem_size }}"
num_cpus: 2
osid: centos64Guest
scsi: paravirtual
vm_cdrom:
type: "iso"
iso_path: "{{ iso_path }}"
esxi:
datacenter: ha-datacenter
hostname: "{{ esx_hostname }}"
#実行方法
# ansible-playbook vm.yml
[WARNING]: provided hosts list is empty, only localhost is available
[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.
上記のような警告でるけど気にしない
Please input guest VM name [testvm]: testvm2 ←仮想マシンの名前いれる(デフォルトtestvm)
Please input guest_vm state
[state list]
present
powered_off
absent
powered_on
restarted
reconfigured
[powered_on]: powered_on ←仮想マシンの状態をいれる(デフォルトpowered_on)
Please input disk-size [50]: 40 ←仮想マシンに割り当てる容量を指定する
Please input memory-size [2048]: 1024 ←仮想マシンに割り当てるメモリサイズを指定する
#使い方
-
新規で仮想マシンを作りたい場合
-
guest VM name
に作成されていない仮想マシンの名前をいれてください。(作成済の名前をいれてもエラーなど起きませんが、何も作られません。) -
stateに
powered_on
を指定してください。仮想マシン作成後にCentOS7のインストールが行われます。 -
仮想マシンを削除またはパワーオフしたい場合
-
guest VM name
に対象の仮想マシン名をいれてください。 -
state
にabsent
(削除),powered_off
(電源オフ)を指定してください。 -
ディスク容量、メモリ容量を入力するプロンプトが表示されますが、そのままenterでokです。
-
仮想マシンのディスク容量、メモリサイズを変更したい
-
guest VM name
に対象の仮想マシン名をいれてください。 -
state
にreconfigured
を指定してください。 -
ディスク容量、メモリ容量を入力する際に変更したい値を入力してください。
#工夫した点
・ansibleのvars_prompt使って、仮想マシン名、ディスク容量、メモリサイズをインタラクティブに指定できるようにしました。
・vmtoolsも自動でインストールされるようにしました。
#課題
- 仮想マシンを削除、電源オフするときでも、ディスク容量、メモリを指定するプロンプトが表示される
whenなど使えばの条件分岐できるようなので、時間あれば対応する予定。
- 今のESXiで稼働している仮想マシンの名前や、IPアドレスなどポンコツノートPCからスマートに参照できない。
▼現状
sshでesxiに接続して、下記コマンドを入力して仮想マシンの情報を確認している
for i in $(vim-cmd vmsvc/getallvms | awk '{print $1}' | grep -v Vmid); do vim-cmd vmsvc/get.summary $i | grep -E ipAddress\|guestFullName\|powerState; echo "-----"; done
- 新規で仮想マシン作成する際にマシンにアクセス可能となるまでに5分ぐらいかかる
仮想マシン作ってから、OSのインストールが走るため、そのインストールが終わるまで、待つ必要がある。
(こればっかりはどうしようもないかな。。dockerなど使えってことですね)
#所感
AWSやvagrant、dockerの技術すばら!革新的!っていうことをあらためて感じました。