take a look at this and lemme know where I'm hosed at. The errors are a bit misleading:
---
- name: Check who needs reboots
hosts: ALL_RHEL
become: yes
vars_files:
- passwd.yml
- vars.yml
tasks:
- name: check packages for updates
shell: yum list updates | awk 'f;/Updated Packages/{f=1;}' | awk '{ print $1 }'
changed_when: updates.stdout > "0"
args:
warn: false
register: updates
- name: display count
debug:
msg: "Found {{ updates.stdout_lines | length }} packages to be updated:\n\n{{ updates.stdout }}"
- when: updates.stdout > "0"
block:
- name: install updates using yum
yum:
name: "*"
state: latest
async: 45
poll: 0
- name: install yum-utils
package:
name: yum-utils
- name: check if reboot is required RHEL7
shell: needs-restarting -r
failed_when: false
register: reboot_required
changed_when: false
when:
- ansible_os_family == 'RedHat'
- ansible_distribution_major_version | version_compare('7', '=')
- name: check if reboot is reqd RHEL6
shell: LAST_KERNEL=$(rpm -q --last kernel | awk 'NR==1{sub(/kernel-/,""); print $1}'); CURRENT_KERNEL=$(uname -r); if [ $LAST_KERNEL != $CURRENT_KERNEL ]; then echo 'reboot'; else echo 'no'; fi
failed_when: false
register: reboot_required
changed_when: false
when:
- ansible_os_family == 'RedHat'
- ansible_distribution_major_version | version_compare('6', '=')
- when: #(updates.stdout_lines | length > 0 and reboot_required.rc != 0) or
- reboot_required.stdout == "reboot"
block:
- name: reboot the server if required
shell: sleep 3; reboot
ignore_errors: true
changed_when: false
async: 1
poll: 0
- name: wait for server to come back after reboot
wait_for_connection:
timeout: 600
delay: 20
register: reboot_result
- name: reboot time
debug:
msg: "The system rebooted in {{ reboot_result.elapsed }} seconds."
Here's the part where it dies: The RHEL6 check doesn't seem to be running like it's supposed to.
Thanks!
TASK [install yum-utils] **********************************************************************************************************************************************
skipping: [baseserver-lx]
TASK [check if reboot is required RHEL7] ******************************************************************************************************************************
skipping: [baseserver-lx]
TASK [check if reboot is reqd RHEL6] **********************************************************************************************************************************
skipping: [baseserver-lx]
TASK [reboot the server if required] **********************************************************************************************************************************
fatal: [
baseserver-lx.swpc.noaa.gov]: FAILED! => {"msg": "The conditional check 'reboot_required.stdout == \"reboot\"' failed. The error was: error while evaluating conditional (reboot_required.stdout == \"reboot\"): 'dict object' has no attribute 'stdout'\n\nThe error appears to have been in '/etc/ansible/roles/needs-reboot.yml': line 57, column 11, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n block:\n - name: reboot the server if required\n ^ here\n"}
...ignoring
TASK [wait for server to come back after reboot] **********************************************************************************************************************
fatal: [baseserver-lx]: FAILED! => {"msg": "The conditional check 'reboot_required.stdout == \"reboot\"' failed. The error was: error while evaluating conditional (reboot_required.stdout == \"reboot\"): 'dict object' has no attribute 'stdout'\n\nThe error appears to have been in '/etc/ansible/roles/needs-reboot.yml': line 64, column 11, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n - name: wait for server to come back after reboot\n ^ here\n"}