Advertisement
switch263

ansible_update_ubuntu_vms

Sep 16th, 2018
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
YAML 3.82 KB | None | 0 0
  1. ---
  2. - name: FIND VM BY NAME
  3.   hosts: localhost
  4.   tasks:
  5.   - include_vars: /etc/ansible/roles/vmware/vars/main.yml
  6.   - debug:
  7.       msg: "{{ vmuser }}"
  8.   - name: Find Guest's info using name
  9.     vmware_guest_facts:
  10.       hostname: "{{ vmhost }}"
  11.       username: "{{ vmuser }}"
  12.       password: "{{ vmpass }}"
  13.       validate_certs: no
  14.       datacenter: ""
  15.       name: "{{ target }}"
  16.     register: vmfacts
  17.   - debug:
  18.       msg: "{{ vmfacts.instance.instance_uuid }}"
  19. #  - debug:
  20. #      msg: "{{ vmfacts }}"
  21.  
  22.   - name: Take Snapshot
  23.     vmware_guest_snapshot:
  24.       hostname: "{{ vmhost }}"
  25.       username: "{{ vmuser }}"
  26.       password: "{{ vmpass }}"
  27.       validate_certs: no
  28.       datacenter: ""
  29.       name: "{{ vmfacts.instance.hw_name }}"
  30.       folder: "{{ vmfacts.instance.hw_folder }}"
  31.       memory_dump: yes
  32.       quiesce: yes
  33.       state: present
  34.       snapshot_name: pre-upgrade
  35.     connection: local
  36.     delegate_to: localhost
  37.  
  38. - name: Run System Updates
  39.   hosts: "{{ target }}"
  40.   tasks:
  41.   - include_vars: /etc/ansible/roles/vmware/vars/main.yml
  42.   - name: Get pre-update kernel version
  43.     command: uname -r
  44.     register: kernel
  45.   - debug:
  46.       msg: "{{ kernel.stdout }}"
  47.   - block:
  48.     - name: apt-get update && apt-get dist-upgrade && apt-get autoremove
  49.       apt:
  50.         force_apt_get: yes
  51.         update_cache: yes
  52.         upgrade: dist
  53.         autoremove: yes
  54.       register: stdout
  55.     #- debug:
  56.     #    msg: "{{ stdout }}"
  57.  
  58.     - name: Reboot
  59.       shell: "sleep 2 && shutdown -r now"
  60.       async: 30
  61.       ignore_errors: true
  62.     - name: Pause a bit to let the target reboot
  63.       pause:
  64.         minutes: 1
  65.       # Now we will run a local 'ansible -m ping' on this host until it returns.
  66.       # This works with the existing ansible hosts inventory and so any custom ansible_ssh_hosts definitions are being used
  67.     - name: Ping til host comes back
  68.       local_action: shell ansible -u {{ ansible_user_id }} -m ping {{ inventory_hostname }}
  69.       register: result
  70.       until: result.rc == 0
  71.       # retries should be set to 30 and delay 10 for prod use
  72.       retries: 5
  73.       delay: 5
  74.       # And finally, execute 'uname -r' when the host is back.
  75.     - name: Check New Kernel Version
  76.       command: uname -r
  77.       register: uname
  78.     - debug:
  79.         msg: "{{ uname.stdout }}"
  80.  
  81.     rescue:
  82.     - name: Find Guest details so we can revert
  83.       hosts: localhost
  84.       vmware_guest_facts:
  85.         hostname: "{{ vmhost }}"
  86.         username: "{{ vmuser }}"
  87.         password: "{{ vmpass }}"
  88.         validate_certs: no
  89.         datacenter: ""
  90.         name: "{{ target }}"
  91.       register: vmfacts
  92.       delegate_to: localhost
  93.  
  94.     - name: restore snapshot
  95.       hosts: localhost
  96.       vmware_guest_snapshot:
  97.         hostname: "{{ vmhost }}"
  98.         username: "{{ vmuser }}"
  99.         password: "{{ vmpass }}"
  100.         validate_certs: no
  101.         datacenter: ""
  102.         name: "{{ vmfacts.instance.hw_name }}"
  103.         folder: "{{ vmfacts.instance.hw_folder }}"
  104.         state: revert
  105.         snapshot_name: pre-upgrade
  106.       connection: local
  107.       delegate_to: localhost
  108.       become: false
  109.  
  110.     - name: Delete now unnecessary snapshot
  111.       hosts: localhost
  112.       vmware_guest_snapshot:
  113.         hostname: "{{ vmhost }}"
  114.         username: "{{ vmuser }}"
  115.         password: "{{ vmpass }}"
  116.         validate_certs: no
  117.         datacenter: ""
  118.         name: "{{ vmfacts.instance.hw_name }}"
  119.         folder: "{{ vmfacts.instance.hw_folder }}"
  120.         state: absent
  121.         snapshot_name: pre-upgrade
  122.       connection: local
  123.       delegate_to: localhost
  124.       become: false
  125.  
  126.  
  127. ----------------
  128. /etc/ansible/roles/vmware/vars/main.yml
  129.  
  130. ---
  131. # vars file for /etc/ansible/roles/vmware
  132. vmuser: "<VMWAREUSERNAMEGOESHERE>"
  133. vmpass: "<VMWAREPASSWORDGOESHERE"
  134. vmhost: "<VMWAREHOSTGOESHERE>"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement