Hi Mikael,
Using with_together as follows works for the example you've shown above:
- hosts: localhost
gather_facts: no
vars:
dictname:
mykey1:
myvalue: foo
mykey2:
myvalue: bar
mykey3:
myvalue: blerg
tasks:
- name: Check if line exists
shell: grep {{ item.value.myvalue }} /tmp/test_foo | wc -l
with_dict: dictname
register: check
- name: Mytask
shell: echo "the value for this is {{dictname[item.0].myvalue}}"
when: item.1.stdout != "1"
with_together:
- dictname
- check.results
The odd part is having to use the "item.0" as the key to the dictionary,
which make sense when you consider that with_together iterates over the
objects together, so for a dictionary the result of that iteration would be
the keys rather than the values.
Setting up a test file with simply "blerg" in it, I get the following
output when running the above playbook:
# echo blerg > /tmp/test_foo
# ansible-playbook -vv test_mikael_ml.yml
PLAY [localhost]
**************************************************************
TASK: [Check if line exists]
**************************************************
<127.0.0.1> REMOTE_MODULE command grep blerg /tmp/test_foo | wc -l
#USE_SHELL
changed: [127.0.0.1] => (item={'key': 'mykey3', 'value': {'myvalue':
'blerg'}}) => {"changed": true, "cmd": "grep blerg /tmp/test_foo | wc -l",
"delta": "0:00:00.003378", "end": "2014-09-15 16:22:12.263595", "item":
{"key": "mykey3", "value": {"myvalue": "blerg"}}, "rc": 0, "start":
"2014-09-15 16:22:12.260217", "stderr": "", "stdout": "1", "warnings": []}
<127.0.0.1> REMOTE_MODULE command grep bar /tmp/test_foo | wc -l #USE_SHELL
changed: [127.0.0.1] => (item={'key': 'mykey2', 'value': {'myvalue':
'bar'}}) => {"changed": true, "cmd": "grep bar /tmp/test_foo | wc -l",
"delta": "0:00:00.003305", "end": "2014-09-15 16:22:12.334522", "item":
{"key": "mykey2", "value": {"myvalue": "bar"}}, "rc": 0, "start":
"2014-09-15 16:22:12.331217", "stderr": "", "stdout": "0", "warnings": []}
<127.0.0.1> REMOTE_MODULE command grep foo /tmp/test_foo | wc -l #USE_SHELL
changed: [127.0.0.1] => (item={'key': 'mykey1', 'value': {'myvalue':
'foo'}}) => {"changed": true, "cmd": "grep foo /tmp/test_foo | wc -l",
"delta": "0:00:00.003385", "end": "2014-09-15 16:22:12.406804", "item":
{"key": "mykey1", "value": {"myvalue": "foo"}}, "rc": 0, "start":
"2014-09-15 16:22:12.403419", "stderr": "", "stdout": "0", "warnings": []}
TASK: [Mytask]
****************************************************************
skipping: [127.0.0.1] => (item=['mykey3', {u'cmd': u'grep blerg
/tmp/test_foo | wc -l', u'end': u'2014-09-15 16:22:12.263595', u'stderr':
u'', u'stdout': u'1', u'changed': True, u'rc': 0, 'item': {'value':
{'myvalue': 'blerg'}, 'key': 'mykey3'}, u'warnings': [], u'delta':
u'0:00:00.003378', 'invocation': {'module_name': u'shell', 'module_args':
u'grep blerg /tmp/test_foo | wc -l'}, u'start': u'2014-09-15
16:22:12.260217'}])
<127.0.0.1> REMOTE_MODULE command echo "the value for this is bar"
#USE_SHELL
<127.0.0.1> REMOTE_MODULE command echo "the value for this is foo"
#USE_SHELL
PLAY RECAP
********************************************************************
127.0.0.1 : ok=2 changed=2 unreachable=0 failed=0
I truncated the output there at the end to save some space, the main point
was to show it skipping the "blerg" item in that task.
On Sun, Sep 14, 2014 at 1:09 PM, Mikael Sandström <[email protected]> wrote:
>
> Hi,
>
> I've got a dictionary as below. I loop through that dictionary using a
> value and grep a file searching to see if the value already exists. If it
> doesnt I want to use that value in the next task (mytask) to do something.
> If the value exists should just skip that value and move on.
> The grep command can only be 0 or 1 and I can see in the debug that is:
> "stdout": "0" #<-- value doesnt exists
> or
> "stdout": "1" #<-- value exists
>
>
> dictname:
> mykey1:
> myvalue: foo
> mykey2:
> myvalue: bar
> mykey3:
> myvalue: blerg
> ...
>
>
> ---
> - name: Check if line exists
> shell: grep {{ item.value.myvalue }} /some/file |wc -l
> with_dict: dictname
> register: check
>
> - debug: var=check.stdout
> with_items: check.results
>
>
> - name: Mytask
> template: src=asdad.j2 dest=/tmp/asdads .......
> with_dict: dictname
> when: check.stdout != "1"
>
>
>
> I'm not sure how to reference the result from the check in the 'when' in
> mytask. If I try the above I get this:
>
> error while evaluating conditional: check.stdout != "1"
>
> Any ideas?
>
> Thanks!
> /Micke
>
>
>
>
>
> --
> 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/2fd9b8f8-83dc-410d-bc94-6833c9b32b48%40googlegroups.com
> <https://groups.google.com/d/msgid/ansible-project/2fd9b8f8-83dc-410d-bc94-6833c9b32b48%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/CAMFyvFjYn1h3-7oGN-W5PuN0NjN54W0_7eHORT1ad_VC-dT1Zg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.