Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ---
- - hosts: all
- vars:
- volumename: f8_ssd
- vcenter_hostname: esxifreename.fqdn
- esxi_hostname: esxifreename.fqdn
- vm_scsi: paravirtual
- vm_osid: rhel7_64Guest
- template_path_vmdk: template_rhel7.4/rhel7.4_0.vmdk
- tasks:
- - name: Block to check if the VM name exists in inventory
- block:
- - name: Check VMFS filesystem for foldername {{ new_vm_name }}
- stat:
- path: /vmfs/volumes/{{ volumename }}/{{ new_vm_name }}/
- register: vmfs_vm_name
- - name: Check if machine {{ new_vm_name }} already exists
- delegate_to: 127.0.0.1
- vsphere_guest:
- vcenter_hostname: "{{ vcenter_hostname }}"
- esxi:
- datacenter: ha-datacenter
- hostname: "{{ esxi_hostname }}"
- validate_certs: "{{ esxi_validate_certs |default (false) }}"
- username: "{{ esxi_username }}"
- password: "{{ esxi_password }}"
- guest: "{{ new_vm_name }}"
- vmware_guest_facts: yes
- register: inventory_vm_name
- ignore_errors: yes
- # Throw Warnings if datastore foldername exists or machine is arleady in inventory
- - name: Machine folder for {{ new_vm_name }} exists on datastore
- fail:
- msg: "There is already a foldername on the datastore {{ volumename }} with same name as {{ new_vm_name }} Please backup/rename and run again"
- when: vmfs_vm_name.stat.exists == true
- - name: Machine {{new_vm_name }} already exists in inventory
- debug:
- msg: "This VM machine appears to already exist in esxi inventory but not on the datastore; we will forcibly overwrite {{ new_vm_name }}"
- when: inventory_vm_name.ansible_facts is defined
- # Delete the machine name from if it exists in inventory but not datastore
- - name: Delete machine {{ new_vm_name }} from inventory
- delegate_to: 127.0.0.1
- vsphere_guest:
- vcenter_hostname: "{{ vcenter_hostname }}"
- esxi:
- datacenter: ha-datacenter
- hostname: "{{ esxi_hostname }}"
- validate_certs: "{{ esxi_validate_certs |default (false) }}"
- username: "{{ esxi_username }}"
- password: "{{ esxi_password }}"
- guest: "{{ new_vm_name }}"
- state: absent
- force: yes
- when: inventory_vm_name.ansible_facts is defined
- - name: Block to create new Virtual Machine
- block:
- - name: Create machine {{ new_vm_name }}
- delegate_to: 127.0.0.1
- vsphere_guest:
- vcenter_hostname: "{{ vcenter_hostname }}"
- esxi:
- datacenter: ha-datacenter
- hostname: "{{ esxi_hostname }}"
- validate_certs: "{{ esxi_validate_certs |default (false) }}"
- username: "{{ esxi_username }}"
- password: "{{ esxi_password }}"
- guest: "{{ new_vm_name }}"
- state: present
- vm_extra_config:
- vcpu.hotadd: no
- mem.hotadd: no
- notes: ansible made me with <3
- vm_disk:
- disk1:
- size_gb: 45
- type: thin
- datastore: "{{ volumename }}"
- vm_nic:
- nic1:
- network: v_foo
- type: vmxnet3
- network_type: standard
- vm_hardware:
- memory_mb: "{{ vm_memory_mb | default (2048) }}"
- num_cpus: "{{ vm_num_cpus | default (2) }}"
- scsi: "{{ vm_scsi }}"
- osid: "{{ vm_osid }}"
- register: create_vm_status
- rescue:
- - name: rm dir for new host on vmfs
- shell: "rm -rf /vmfs/volumes/{{ volumename }}/{{ new_vm_name }}"
- register: rescue_remove_vm
- - fail:
- msg: Something went wrong on intial VM creation and we have deleted the newly created datastore file
- when: rescue_remove_vm|changed
- - name: Block for vmkfstools image creation
- block:
- - name: delete empty disk for new template
- shell: "rm -r /vmfs/volumes/{{ volumename }}/{{ new_vm_name }}/{{ new_vm_name }}*.vmdk"
- - name: create disk from template
- shell: "vmkfstools -i /vmfs/volumes/{{ volumename }}/{{ template_path_vmdk }} /vmfs/volumes/{{ volumename }}/{{ new_vm_name }}/{{ new_vm_name }}.vmdk -d thin"
- when:
- - create_vm_status is defined and create_vm_status|changed
- - name: Power on {{ new_vm_name }}
- delegate_to: 127.0.0.1
- vsphere_guest:
- vcenter_hostname: "{{ vcenter_hostname }}"
- esxi:
- datacenter: ha-datacenter
- hostname: "{{ esxi_hostname }}"
- validate_certs: "{{ esxi_validate_certs |default (false) }}"
- username: "{{ esxi_username }}"
- password: "{{ esxi_password }}"
- guest: "{{ new_vm_name }}"
- state: powered_on
- - name: Wait for SSH on new system
- wait_for_connection:
- delay: 60
- timeout: 300
- - name: Get IP of new machine for SSH {{ new_vm_name }}
- delegate_to: 127.0.0.1
- vsphere_guest:
- vcenter_hostname: "{{ vcenter_hostname }}"
- esxi:
- datacenter: ha-datacenter
- hostname: "{{ esxi_hostname }}"
- validate_certs: "{{ esxi_validate_certs |default (false) }}"
- username: "{{ esxi_username }}"
- password: "{{ esxi_password }}"
- guest: "{{ new_vm_name }}"
- vmware_guest_facts: yes
- register: get_ip_new_vm
- - name: Get new hostname IP
- debug:
- msg: "{{ get_ip_new_vm.ansible_facts.hw_eth0.ipaddresses[0] }}"
- #- hosts: "{{ get_ip_new_vm.ansible_facts.hw_eth0.ipaddresses }}"
- # - name: SSH to host and set hostname
- # delegate_to: 127.0.0.1 # "{{ get_ip_new_vm.ansible_facts.hw_eth0.ipaddresses }}"
- # raw: "ssh -o StrictHostKeyChecking=no root@{{ get_ip_new_vm.ansible_facts.hw_eth0.ipaddresses[0] }} && hostnamectl set-hostname wienerface.fqdn"
- # name: "{{ new_vm_name }}"
Add Comment
Please, Sign In to add comment