Ansible: How do I avoid registering a variable when a "when" condition is *not* met? -
i have following ansible playbook code:
- name: users | generate password user (debian/ubuntu) shell: makepasswd --chars=20 register: make_password when: ansible_distribution in ['debian', 'ubuntu'] - name: users | generate password user (fedora) shell: makepasswd -m 20 -m 20 register: make_password when: ansible_distribution in ['fedora', 'amazon'] - name: users | generate password user (centos) shell: mkpasswd -l 20 register: make_password when: ansible_distribution in ['centos'] - name: debug debug: var=make_password which outputs:
task: [users | debug] ok: [127.0.0.1] => { "var": { "make_password": { "changed": false, "skipped": true } } } ... because every register block gets executed regardless of when condition.
how fix make_password doesn't overwritten when when condition isn't met?
or if wrong approach can see i'm trying accomplish, let me know of better one.
unfortunately, expected behavior. ansible variables
note if task fails or skipped, variable still registered failure or skipped status, way avoid registering variable using tags.
i not know how use tags solve issue.
edit: found way albeit crude solution. store results not overwritten
- set_fact: mypwd="{{make_password}}" when: make_password.changed so code like:
- name: users | generate password user (debian/ubuntu) shell: makepasswd --chars=20 register: make_password when: ansible_distribution in ['debian', 'ubuntu'] - set_fact: mypwd="{{make_password}}" when: make_password.changed - name: users | generate password user (fedora) shell: makepasswd -m 20 -m 20 register: make_password when: ansible_distribution in ['fedora', 'amazon'] - set_fact: mypwd="{{make_password}}" when: make_password.changed - name: users | generate password user (centos) shell: mkpasswd -l 20 register: make_password when: ansible_distribution in ['centos'] - set_fact: mypwd="{{make_password}}" when: make_password.changed - name: debug debug: var=mypwd
Comments
Post a Comment