Re-using "register" variable in multiple tasks

I have the following play in a playbook:

  • hosts: talk

gather_facts: false

tasks:

  • name: win update
    win_updates:
    category: [‘SecurityUpdates’,‘CriticalUpdates’,‘Updates’,‘Tools’,‘DefinitionUpdates’,‘UpdateRollups’]
    register: reboot_hint

I’d like to re-use reboot_hint in additional plays in the playbook via “when”, but the playbook ultimately fails after the first “when”, as in:

  • hosts: talk
    gather_facts: false

tasks:

  • name: start Lyris services

win_service: name={{ item }} state=started start_mode=auto
with_items: [“ListManager”, “LyrisAlert”]
when: (lyris_hint.rc == 0) and (reboot_hint.reboot_required == true) # ie, the ListManager service is installed and reboot is required

  • hosts: admin2
    gather_facts: false
    sudo: yes

tasks:

  • nagios: action=downtime minutes=10 author=“Dimitri Yioulos” service=host host={{item}}
    with_items:

  • talk
    when: reboot_hint.reboot_required == true
    delegate_to: admin2

  • nagios: action=downtime minutes=20 author=“Dimitri Yioulos” service=all host={{item}}

with_items:

  • talk
    when: reboot_hint.reboot_required == true
    delegate_to: admin2
    tags:

  • nagios_downtime

  • hosts: talk

gather_facts: false

tasks:

  • name: reboot server
    raw: ‘cmd /c shutdown /r /t 0’
    when: reboot_hint.reboot_required == true

This is another of my Ansible 101 questions; help making it work is appreciated!

I’ve found that my register variable only fails when applied to the play involving another host in my playbook. After having poured over lots of posts from various other sources, I saw one that says, “use hostvars to access the register variables from a different host”. If, indeed, that’s the solution, how do I use hostvars to achieve it?

hostvars[<otherhost][<varname]

Thanks, Brian. OK, I’d like to use that in a “when” with the register variable “reboot_hint.reboot_required == true”. Will the following work?:

when: hostvars[myhost][reboot_hint.reboot_required == true]

no, you are conflating several things there

when: hostvars[myhost][‘reboot_hint’][‘reboot_required’]

^ that will execute when reboot_required is true.

OK. Here’s what I’m trying to accomplish:

  • hosts: all
    gather_facts: false

tasks:

  • name: win update
    win_updates:
    category: [‘SecurityUpdates’,‘CriticalUpdates’,‘Updates’,‘Tools’,‘DefinitionUpdates’,‘UpdateRollups’]
    register: reboot_hint

  • hosts: admin2
    gather_facts: false
    sudo: yes

tasks:

  • nagios: action=downtime minutes=20 author=“Dimitri Yioulos” service=host host={{item}}
    with_items: “{{ groups[‘lyris’] }}”
    delegate_to: admin2

when: hostvars[myhost][‘reboot_hint’][‘reboot_required’]

tags:

  • nagios_downtime
  • nagios: action=downtime minutes=20 author=“Dimitri Yioulos” service=all host={{item}}
    with_items: “{{ groups[‘lyris’] }}”
    delegate_to: admin2

when: hostvars[myhost][‘reboot_hint’][‘reboot_required’]

Since “reboot_hint” is coming from the previous play, and since the host or group to run the playbook against is defined at the command line, as in: “ansible-playbook -l lyris myplaybook.yml -u myuser”, what do I specify in the [myhost] section? This must be a variable to accept the host name OR group name I specified at the command line, but I don’t know what that would be.

Further, and maybe another post altogether, how do I make the substitution in “with_items: “{{ groups[‘lyris’] }}”” so that I don’t have to change e.g. lyris is I’m specifying another host or group in running the playbook?

With thanks,

Dimitri