Delegate_to register when

Hi Everyone,

Quick question, I have a play where I put a laravel queue system in maintenance mode before running updates against it’s consumers.

I’d like to check for the existence of a file with stat on the queue manager, run it if it exists (it might not be there if this is the first run and it hasn’t been deployed yet).

I’ve tried:

`

If artisan exists, then set the application into maint. mode

  • name: checking for artisan’s existance in current symlink
    stat: path={{ hostvars[item].www_dir }}/current/artisan
    register: artisan_current
    delegate_to: “{{ item }}”
    with_items: groups.queue_managers

This makes sure we don’t keep serving an old release from the pool if the deployment fails

NGinx doesn’t use the symlink so might keep serving from an old path

  • name: set maint.mode in current version
    command: php {{ hostvars[item].www_dir }}/current/artisan down
    when: artisan_current.stat.exists is defined and artisan_current.stat.exists
    delegate_to: “{{ item }}”
    with_items: groups.queue_managers

`

and

`

  • name: checking for artisan’s existance in current symlink
    stat: path={{ hostvars[item].www_dir }}/curthe rent/artisan
    register: hostvars[item].artisan_current
    delegate_to: “{{ item }}”
    with_items: groups.queue_managers

  • name: set maint.mode in current version
    command: php {{ hostvars[item].www_dir }}/current/artisan down
    when: hostvars[item].artisan_current.stat.exists is defined and hostvars[item].artisan_current.stat.exists
    delegate_to: “{{ item }}”
    with_items: groups.queue_managers
    `

Whatever happens, I can see the stat return “exists: true”, and then the conditional check fails:


build 07-Mar-2016 11:57:06 TASK [checking for artisan's existance in current symlink] ********************* 
build 07-Mar-2016 11:57:07 ok: [redacted -> redacted ] => (item=redacted) => {"changed": false, "item": "redacted", "stat": {"atime": 1457350038.6739905, "checksum": "659b7d3cb04a4d3b4fd58cb147c2c9b33e0ea831", "ctime": 1457349988.065974, "dev": 64769, "exists": true, ...lots more output here...}} 
build 07-Mar-2016 11:57:07 build 07-Mar-2016 11:57:07 TASK [set maint.mode in current version] *************************************** 
build 07-Mar-2016 11:57:07 skipping: [redacted] => (item=redacted) => {"changed": false, "item": "redacted", "skip_reason": "Conditional check failed", "skipped": true}

Can anyone help me work out where the register actually puts the results of the stat and therefore how I can present the results to the when: statement.

Thanks,

Steve

Hi All,

I found this link:

https://docs.ansible.com/ansible/playbooks_loops.html#using-register-with-a-loop

Which suggests that once register is run with a loop the output goes into a structure called results.

I tried:

artisan_current.results[item].stat.exists ?

Still no go.

Hey!

Although this post is very old, I have run into much the same problem. did you ever find a solution?

Cheers,
Kristofer