LoginSignup
9
4

More than 5 years have passed since last update.

Ansibleのvsphere_guestモジュールでESXiに新しいVMを作る

Last updated at Posted at 2018-08-19

概要

会社の研修でAnsible+Jenkins+Gitを使って、検証環境の自動デプロイを実現しようとしています、何度かつまずきながらもESXiに新しいVMをデプロイすることは成功しました。
備忘録代わりにアウトプットしようと思います。

環境

  • contolloer
    Centos7
    Ansible2.6

  • ESXi
    ESXi 5.5

  • target
    Centos7

モジュール選定

そもそもESXiに対してのAnsibleモジュールは大きく分けて2種類ありました。
vsphere_guestとvmware_guestです。

違いは以下
vsphere_guest
 無償版でも使用可能
 ※Ansible2.9で削除予定のモジュール

vmware_guest
 API経由で実施するため(無償版では使用不可)
 ※Ansible公式の推奨モジュール

今回は無償版のESXiのためvsphere_guestを選定

Playbook

deploy.yml
- 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を実行しサーバを完成させていく作業のため、あまり苦戦はしませんでした。

終わり

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4