Skip to content

Instantly share code, notes, and snippets.

@treyperrone
Created January 25, 2018 16:48
Show Gist options
  • Save treyperrone/38d578a02ce75c0fd1ee0afa5e784431 to your computer and use it in GitHub Desktop.
Save treyperrone/38d578a02ce75c0fd1ee0afa5e784431 to your computer and use it in GitHub Desktop.
ansible_vsphere_guest_esxi_free
---
- 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 }}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment