Delegate_to register when

261 views
Skip to first unread message

Steve Irvine

unread,
Mar 7, 2016, 8:54:27 AM3/7/16
to Ansible Project
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

Steve Irvine

unread,
Mar 7, 2016, 10:01:30 AM3/7/16
to Ansible Project
Hi All,

I found this link:


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.

Kristofer Borgström

unread,
Nov 7, 2018, 5:56:36 AM11/7/18
to Ansible Project
Hey!

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

Cheers,
Kristofer
Reply all
Reply to author
Forward
0 new messages