So roles are evaluated after the top level portions of the play.
I would do something such as using add_host to add deleted servers to an in
memory group that you could use for exclusion later. Such as something
like:
- hosts: local
gather_facts: False
tasks:
- name: Create or delete servers
rax:
[module stuff here that deletes servers]
group: webservers
register: rax_results
- name: Add created servers to webservers group
add_host:
hostname: "{{ item.name }}"
ansible_ssh_host: "{{ item.rax_accessipv4 }}"
ansible_ssh_pass: "{{ item.rax_adminpass }}"
groups: webservers
with_items: rax_results.success
when: rax_results.action == 'create'
- name: Add deleted servers to deleted group for later exclusions
add_host:
hostname: "{{ item.name }}"
groups: deleted
with_items: rax_results.success
when: rax_results.action == 'delete'
- hosts: webservers!deleted
[other stuff here]
On Wed, Dec 10, 2014 at 9:13 AM, phil toohill <[email protected]> wrote:
> ##### Issue Type:
> Bug Report
>
> ##### Ansible Version:
> 1.8.2
>
> ##### Environment:
> OSX 10.8.5
>
> ##### Summary:
> Fact gathering fails when cloud module deletes server and roles play is
> called with a when conditional.
>
> ##### Steps To Reproduce:
>
> Assuming utilization of a cloud module such as 'rax', you can set the
> count to 0 to remove the servers and then call out to roles, as such:
> ```
> - name: Build an exact count of cloud servers with incremented names
> hosts: local
> gather_facts: False
> tasks:
> - name: Server build requests
> local_action:
> module: rax
> credentials: ~/.raxpub
> name: test%03d.example.org
> flavor: performance1-1
> image: ubuntu-1204-lts-precise-pangolin
> state: present
> count: 0
> exact_count: yes
> group: webservers
> wait: yes
> register: rax
>
> - name: Setup nginx
> user: root
> hosts: webservers
> vars:
> operation: "{{ wsoperation }}"
> roles:
> - { role: nginx, when: operation == 'create' }
> ```
> ##### Expected Results:
>
> It would expected that the when clause should trigger prior/during the
> gather facts call thus adhering to the conditional and passing tests.
>
> I call this a bug because I assume no operations should happen for a play
> unless the conditional is met, this includes fact gathering.
>
> Besides having a separate playbook with duplicated server logic, which
> defeats the purpose of this modules benefits, I do not see a proper work
> around.
>
> ##### Actual Results:
> Gather facts is triggered before the when operation is analyzed causing
> failure.
> ```
> fatal: [webser-backend01] => SSH encountered an unknown error during the
> connection
> ```
>
>
> This was closed as 'not a bug', anyone have suggested work around?
>
> --
> You received this message because you are subscribed to the Google Groups
> "Ansible Project" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/c7c00708-ffbb-45b0-ae7c-57ab35b8632a%40googlegroups.com
> <https://groups.google.com/d/msgid/ansible-project/c7c00708-ffbb-45b0-ae7c-57ab35b8632a%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>
--
Matt Martz
@sivel
sivel.net
--
You received this message because you are subscribed to the Google Groups
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/CAD8N0v-4Mid918jiwODYEMvLBge2TLDKL-Eq%3DcWxzR7nPgmTig%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.