Guest User

Untitled

a guest
Feb 9th, 2018
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.53 KB | None | 0 0
  1. ---
  2. - hosts: all
  3. vars:
  4. volumename: f8_ssd
  5. vcenter_hostname: esxifreename.fqdn
  6. esxi_hostname: esxifreename.fqdn
  7. vm_scsi: paravirtual
  8. vm_osid: rhel7_64Guest
  9. template_path_vmdk: template_rhel7.4/rhel7.4_0.vmdk
  10.  
  11. tasks:
  12.  
  13. - name: Block to check if the VM name exists in inventory
  14. block:
  15. - name: Check VMFS filesystem for foldername {{ new_vm_name }}
  16. stat:
  17. path: /vmfs/volumes/{{ volumename }}/{{ new_vm_name }}/
  18. register: vmfs_vm_name
  19.  
  20. - name: Check if machine {{ new_vm_name }} already exists
  21. delegate_to: 127.0.0.1
  22. vsphere_guest:
  23. vcenter_hostname: "{{ vcenter_hostname }}"
  24. esxi:
  25. datacenter: ha-datacenter
  26. hostname: "{{ esxi_hostname }}"
  27. validate_certs: "{{ esxi_validate_certs |default (false) }}"
  28. username: "{{ esxi_username }}"
  29. password: "{{ esxi_password }}"
  30. guest: "{{ new_vm_name }}"
  31. vmware_guest_facts: yes
  32. register: inventory_vm_name
  33. ignore_errors: yes
  34.  
  35. # Throw Warnings if datastore foldername exists or machine is arleady in inventory
  36. - name: Machine folder for {{ new_vm_name }} exists on datastore
  37. fail:
  38. msg: "There is already a foldername on the datastore {{ volumename }} with same name as {{ new_vm_name }} Please backup/rename and run again"
  39. when: vmfs_vm_name.stat.exists == true
  40. - name: Machine {{new_vm_name }} already exists in inventory
  41. debug:
  42. msg: "This VM machine appears to already exist in esxi inventory but not on the datastore; we will forcibly overwrite {{ new_vm_name }}"
  43. when: inventory_vm_name.ansible_facts is defined
  44.  
  45.  
  46. # Delete the machine name from if it exists in inventory but not datastore
  47. - name: Delete machine {{ new_vm_name }} from inventory
  48. delegate_to: 127.0.0.1
  49. vsphere_guest:
  50. vcenter_hostname: "{{ vcenter_hostname }}"
  51. esxi:
  52. datacenter: ha-datacenter
  53. hostname: "{{ esxi_hostname }}"
  54. validate_certs: "{{ esxi_validate_certs |default (false) }}"
  55. username: "{{ esxi_username }}"
  56. password: "{{ esxi_password }}"
  57. guest: "{{ new_vm_name }}"
  58. state: absent
  59. force: yes
  60. when: inventory_vm_name.ansible_facts is defined
  61.  
  62.  
  63. - name: Block to create new Virtual Machine
  64. block:
  65.  
  66. - name: Create machine {{ new_vm_name }}
  67. delegate_to: 127.0.0.1
  68. vsphere_guest:
  69. vcenter_hostname: "{{ vcenter_hostname }}"
  70. esxi:
  71. datacenter: ha-datacenter
  72. hostname: "{{ esxi_hostname }}"
  73. validate_certs: "{{ esxi_validate_certs |default (false) }}"
  74. username: "{{ esxi_username }}"
  75. password: "{{ esxi_password }}"
  76. guest: "{{ new_vm_name }}"
  77. state: present
  78. vm_extra_config:
  79. vcpu.hotadd: no
  80. mem.hotadd: no
  81. notes: ansible made me with <3
  82. vm_disk:
  83. disk1:
  84. size_gb: 45
  85. type: thin
  86. datastore: "{{ volumename }}"
  87. vm_nic:
  88. nic1:
  89. network: v_foo
  90. type: vmxnet3
  91. network_type: standard
  92. vm_hardware:
  93. memory_mb: "{{ vm_memory_mb | default (2048) }}"
  94. num_cpus: "{{ vm_num_cpus | default (2) }}"
  95. scsi: "{{ vm_scsi }}"
  96. osid: "{{ vm_osid }}"
  97. register: create_vm_status
  98.  
  99. rescue:
  100. - name: rm dir for new host on vmfs
  101. shell: "rm -rf /vmfs/volumes/{{ volumename }}/{{ new_vm_name }}"
  102. register: rescue_remove_vm
  103. - fail:
  104. msg: Something went wrong on intial VM creation and we have deleted the newly created datastore file
  105. when: rescue_remove_vm|changed
  106.  
  107. - name: Block for vmkfstools image creation
  108. block:
  109. - name: delete empty disk for new template
  110. shell: "rm -r /vmfs/volumes/{{ volumename }}/{{ new_vm_name }}/{{ new_vm_name }}*.vmdk"
  111.  
  112. - name: create disk from template
  113. shell: "vmkfstools -i /vmfs/volumes/{{ volumename }}/{{ template_path_vmdk }} /vmfs/volumes/{{ volumename }}/{{ new_vm_name }}/{{ new_vm_name }}.vmdk -d thin"
  114. when:
  115. - create_vm_status is defined and create_vm_status|changed
  116.  
  117.  
  118. - name: Power on {{ new_vm_name }}
  119. delegate_to: 127.0.0.1
  120. vsphere_guest:
  121. vcenter_hostname: "{{ vcenter_hostname }}"
  122. esxi:
  123. datacenter: ha-datacenter
  124. hostname: "{{ esxi_hostname }}"
  125. validate_certs: "{{ esxi_validate_certs |default (false) }}"
  126. username: "{{ esxi_username }}"
  127. password: "{{ esxi_password }}"
  128. guest: "{{ new_vm_name }}"
  129. state: powered_on
  130.  
  131. - name: Wait for SSH on new system
  132. wait_for_connection:
  133. delay: 60
  134. timeout: 300
  135.  
  136. - name: Get IP of new machine for SSH {{ new_vm_name }}
  137. delegate_to: 127.0.0.1
  138. vsphere_guest:
  139. vcenter_hostname: "{{ vcenter_hostname }}"
  140. esxi:
  141. datacenter: ha-datacenter
  142. hostname: "{{ esxi_hostname }}"
  143. validate_certs: "{{ esxi_validate_certs |default (false) }}"
  144. username: "{{ esxi_username }}"
  145. password: "{{ esxi_password }}"
  146. guest: "{{ new_vm_name }}"
  147. vmware_guest_facts: yes
  148. register: get_ip_new_vm
  149.  
  150. - name: Get new hostname IP
  151. debug:
  152. msg: "{{ get_ip_new_vm.ansible_facts.hw_eth0.ipaddresses[0] }}"
  153.  
  154. #- hosts: "{{ get_ip_new_vm.ansible_facts.hw_eth0.ipaddresses }}"
  155. # - name: SSH to host and set hostname
  156. # delegate_to: 127.0.0.1 # "{{ get_ip_new_vm.ansible_facts.hw_eth0.ipaddresses }}"
  157. # raw: "ssh -o StrictHostKeyChecking=no root@{{ get_ip_new_vm.ansible_facts.hw_eth0.ipaddresses[0] }} && hostnamectl set-hostname wienerface.fqdn"
  158. # name: "{{ new_vm_name }}"
Add Comment
Please, Sign In to add comment