Created
January 25, 2018 16:48
-
-
Save treyperrone/38d578a02ce75c0fd1ee0afa5e784431 to your computer and use it in GitHub Desktop.
ansible_vsphere_guest_esxi_free
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
- 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