Thanks for your help Tom.
So, in this situation there is actually no difference between...
elasticsearch_purge_old_indices_node|bool
AND
elasticsearch_purge_old_indices_node == "yes"
The error: "One or more undefined variables: 'dict object' has no attribute
'address'" is a misnomer. B/c I was using incorrectly using {{
ansible_eth1.address }} instead of {{ ansible_eth1.ipv4.address }}
elsewhere in the same task.
To sum this up, so this post is more useful for others. If you are trying
to mark a host (i.e give it a host variable) so that it's the only one that
runs a task, here is what you do...
Inventory file:
[elasticsearch]
elasticsearch1 elasticsearch_purge_old_indices_node=yes
elasticsearch2
elasticsearch3
Task:
- name: add a nightly cronjob task to purge node
lineinfile: dest=/etc/crontab line="0 1 * * * * root /path/to/script.sh"
state=present
when: elasticsearch_purge_old_indices_node is defined
The line "when: elasticsearch_purge_old_indices_node is defined" does two
things.
1) ensures only the host with elasticsearch_purge_old_indices_node
defined runs that task.
2) ensures you don't get an error like "error while evaluating
conditional", because you haven't defined
elasticsearch_purge_old_indices_node for your other hosts.
Good day gentlemen!
-Mike
On Friday, January 2, 2015 11:10:14 PM UTC-8, Tom Bamford wrote:
>
> Hi Michael
>
> Ansible considers “yes” strings as True booleans but for comparison you
> can use the bool filter. Perhaps try something like this:
>
> - debug: msg="run this task"
> when: elasticsearch_purge_old_indices_node|bool
>
>
> On 3 January 2015 at 00:09, Michael Liu <[email protected] <javascript:>>
> wrote:
>
> Hey All,
>>
>> I'm trying to force a task to run based on a host variable I've set. The
>> goal is to only have the task run (on a host) when the
>> "elasticsearch_purge_old_indices_node" variable is set to "yes".
>>
>> Inventory file:
>>
>> [elasticsearch]
>> elasticsearch1 elasticsearch_purge_old_indices_node=yes
>> elasticsearch2
>> elasticsearch3
>>
>>
>> Task:
>>
>> - name: add a nightly cronjob task to purge node
>> lineinfile: dest=/etc/crontab line="0 1 * * * * root
>> /path/to/script.sh" state=present
>> when: elasticsearch_purge_old_indices_node == "yes"
>>
>>
>> Error output:
>> TASK: [elasticsearch | cron job to purge old log indices] **************
>> fatal: [elasticsearch1] => One or more undefined variables: 'dict object'
>> has no attribute 'address'
>> fatal: [elasticsearch2] => error while evaluating
>> conditional: elasticsearch_purge_old_indices_node == "yes"
>> fatal: [elasticsearch3] => error while evaluating
>> conditional: elasticsearch_purge_old_indices_node == "yes"
>>
>>
>> How do I force a task to run based on a host variable I've set?
>>
>> Thanks!
>>
>> --
>> 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] <javascript:>.
>> To post to this group, send email to [email protected]
>> <javascript:>.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/ansible-project/63f138f5-9447-4fbd-8cea-c368a7b1deb2%40googlegroups.com
>>
>> <https://groups.google.com/d/msgid/ansible-project/63f138f5-9447-4fbd-8cea-c368a7b1deb2%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
--
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/103d63be-3aa7-472a-9e3b-0d6349c46d22%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.