86 lines
3.0 KiB
YAML
86 lines
3.0 KiB
YAML
---
|
|
|
|
- name: update over multiple reboots
|
|
block:
|
|
- block:
|
|
- name: install all windows updates
|
|
win_updates:
|
|
category_names: "{{ win_update_category_names }}"
|
|
blacklist: "{{ (win_update_blacklist | default([])) + (failed_kb | default([])) }}"
|
|
whitelist: "{{ win_update_whitelist | default(omit) }}"
|
|
reboot: yes
|
|
register: installed_updates
|
|
|
|
rescue:
|
|
- name: reboot the system to recover from a failed update
|
|
win_reboot:
|
|
reboot_timeout: 7200
|
|
|
|
- name: set failed KB to skip
|
|
set_fact:
|
|
failed_kb: "{{ failed_kb|default([]) + [installed_updates.msg | regex_replace('^.*\\((KB.*)\\).*','\\1')] }}"
|
|
when:
|
|
- installed_updates.msg is defined
|
|
- ('Failed' in installed_updates.msg)
|
|
- ('KB' in installed_updates.msg)
|
|
|
|
- name: fail to retry
|
|
fail:
|
|
msg: "There are failed updates: {{ failed_kb | join(' ') }}"
|
|
when:
|
|
- failed_kb is defined
|
|
- failed_kb | length > 0
|
|
|
|
- name: wait for system to be responsive after update
|
|
wait_for_connection:
|
|
delay: 60
|
|
sleep: 10
|
|
timeout: 600
|
|
|
|
- name: work on any skipped KB
|
|
win_updates:
|
|
category_names: "{{ win_update_category_names }}"
|
|
blacklist: "{{ win_update_blacklist | default(omit) }}"
|
|
whitelist: "{{ failed_kb | default([]) }}"
|
|
reboot: yes
|
|
register: installed_updates_retry_skipped
|
|
when:
|
|
- failed_kb is defined
|
|
- failed_kb | length > 0
|
|
|
|
- name: check for missing updates
|
|
win_updates:
|
|
category_names: "{{ win_update_category_names }}"
|
|
blacklist: "{{ win_update_blacklist | default(omit) }}"
|
|
state: searched
|
|
register: missing_updates
|
|
|
|
- debug:
|
|
msg: |
|
|
{{ inventory_hostname }} has {{ missing_updates.found_update_count }} updates still missing.
|
|
{% for update in updates %}
|
|
- {{ update.title }}
|
|
{% endfor %}
|
|
vars:
|
|
updates: "{{ (missing_updates.updates.values() | list) if (missing_updates.updates is mapping) else (missing_updates.updates) }}"
|
|
when: missing_updates.updates is defined
|
|
|
|
- name: still more updates - need to retry
|
|
fail:
|
|
msg: >
|
|
'{{ inventory_hostname }} has {{ missing_updates.found_update_count }} updates still missing.
|
|
{{ (update_retry_limit | int) - (update_retry_count | int) }} more retries left'
|
|
when:
|
|
- missing_updates.found_update_count > 0
|
|
- ((update_retry_limit | int) - (update_retry_count | int) >= 0)
|
|
|
|
rescue:
|
|
- name: set update count
|
|
set_fact:
|
|
update_retry_count: '{{ update_retry_count | default(0) | int + 1 }}'
|
|
|
|
- debug:
|
|
msg: "Still more updates remaining - retrying... ({{ update_retry_count }}/{{ update_retry_limit }})"
|
|
|
|
- include_tasks: updates-with-retry.yml
|
|
when: ((update_retry_limit | int) - (update_retry_count | int) >= 0) |