概要
会社の研修でAnsible+Jenkins+Gitを使って、検証環境の自動デプロイを実現しようとしています、何度かつまずきながらもESXiに新しいVMをデプロイすることは成功しました。
備忘録代わりにアウトプットしようと思います。
環境
contolloer
Centos7
Ansible2.6ESXi
ESXi 5.5target
Centos7
モジュール選定
そもそもESXiに対してのAnsibleモジュールは大きく分けて2種類ありました。
vsphere_guestとvmware_guestです。
違いは以下
vsphere_guest
無償版でも使用可能
※Ansible2.9で削除予定のモジュール
vmware_guest
API経由で実施するため(無償版では使用不可)
※Ansible公式の推奨モジュール
今回は無償版のESXiのためvsphere_guestを選定
Playbook
- hosts: localhost
connection: local ←Ansible自身にPlaybookを実行する。
tasks:
- name: Deploy_VM
vsphere_guest:
vcenter_hostname: "{{ hostname }}" ←ESXiのIPアドレス
username: "{{ username }}" ←ESXiログイン時のユーザ名
password: "{{ password }}" ←ESXiログイン時のパスワード
guest: "{{ guest }}" ←作成するVMの名前
state: powered_on ←作ったVMステータス設定(今回はパワーオン)
validate_certs: no ←初回SSH接続時の確認をとばす
esxi:
datacenter: ha-datacenter ←スタンドアロンの場合固定値
hostname: localhost.localdomain ←ESXiに設定しているホスト名
vm_extra_config:
notes: This is a test VM
vm_disk:
disk1:
size_gb: "{{ size_gb }}"
type: thin
datastore: datastore1
vm_nic:
nic1:
type: vmxnet3
network: VM Network 1
network_type: standard
nic2:
type: vmxnet3
network: VM Network
network_type: standard
nic3:
type: vmxnet3
network: VM Network 2
network_type: standard
vm_hardware:
memory_mb: "{{ memory_mb }}"
num_cpus: "{{ num_cpus }}"
osid: rhel6_64Guest ←ESXiのバージョンによって微妙に異なるので注意
scsi: paravirtual
vm_cdrom:
type: "iso"
iso_path: "{{ iso_path }}"
今回はJenkinsと連携させるために直接書き込まず変数で与える形でPlaybook作っています。
実行対象のESXiはSSHの許可を事前に行っておいてください。
あとisoファイルはESXi側に置いとく必要もあります。
直面した課題
上記のPlaybookでなんとかdeployすることができたんですが、CentosのインストールはGUIで行わないといけないことに気づき困ってしまいました。。
自動デプロイなのにて、、
①AnsibleでVm作成
②ESXiに入り手動でインストール ←んな、馬鹿な!
ってことでうまくできないかといろいろ調べまして、Kickstartを使ってisoをいじくり、CLIにて勝手にインストールしてくれるようにしました(中身は割愛しますが、nicにDHCPの設定いれてCLIで自動インストールしてくれるようにしただけです)
実行
最終的にはJenkinsと連携させる
+ ansible-playbook -i Y.Y.Y.Y Deploy_VM.yml --vault-password-file=../passwd --extra-vars=hostname=Y.Y.Y.Y --extra-vars=username=root --extra-vars=password=XXXXX --extra-vars=guest=Web2 --extra-vars=size_gb=7 --extra-vars=memory_mb=2048 --extra-vars=num_cpus=1 --extra-vars=iso_path=datastore1/ISO/CentOS-7_Auto.iso
[WARNING]: Unable to parse /var/lib/jenkins/workspace/Deploy_VM/Y.Y.Y.Y
as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note
that the implicit localhost does not match 'all'
[DEPRECATION WARNING]: vsphere_guest is kept for backwards compatibility but
usage is discouraged. The module documentation details page may explain more
about this rationale.. This feature will be removed in a future release.
Deprecation warnings can be disabled by setting deprecation_warnings=False in
ansible.cfg.
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Deploy_VM] ***************************************************************
[DEPRECATION WARNING]: The 'vsphere_guest' module has been deprecated. Use
'vmware_guest' instead.. This feature will be removed in version 2.9.
Deprecation warnings can be disabled by setting deprecation_warnings=False in
ansible.cfg.
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0
DEPRECATION WARNINGが表示されversion2.9で使えなくなるよーと警告されますが、無視無視
ansible.cfgを編集すれば消せますが、気にしない気にしない。
ipアドレスはマスクしとります
終わりに
今までESXiに触る機会がなく初めての挑戦だったため、ひっじょーに苦戦しました。
苦戦の記録はとくに残していませんが、えらい時間がかかりました。
このあとは作ったVMに対してPlaybookを実行しサーバを完成させていく作業のため、あまり苦戦はしませんでした。
終わり