with_nested in use with variables?

Hi List,

We are trying to do this:

  • name: Oracle | Copy files
    action: copy
    backup=yes
    src=/media/storage/DM/orabestanden/aix/{{item}}
    force=yes
    dest=/opt/oracle/admin/network/admin/${item}
    owner=oracle
    group=dbamgr
    with_items: orafiles
    register: nieuweversiegeplaatst
    tags:

  • orabestanden

  • name: Oracle | Lookup which files there are
    action: shell ls /opt/oracle/product/
    register: oracle_versions
    tags:

  • orabestanden

  • name: Oracle | Find out where the Admin path is
    action: shell find /opt/oracle/product/{{ item }} -type d -name admin | grep -i network
    with_items:

  • $oracle_versions.stdout_lines
    register: oracle_admin_path
    tags:

  • orabestanden

  • name: Oracle | Remove previous links/files
    action: file
    state=absent
    dest={{ item[0] }}/{{ item[1] }}
    with_nested:
    $oracle_admin_path.stdout_lines
    $orafiles
    when_changed: $nieuweversiegeplaatst
    tags:

  • orabestanden

  • name: Oracle | Create new links
    action: file
    state=link
    src=/opt/oracle/admin/network/admin/{{ item[1] }}
    dest={{ item[0] }}/{{ item[1] }}
    owner=oracle
    group=dba
    with_nested:
    $oracle_admin_path.stdout_lines
    $orafiles
    when_changed: $nieuweversiegeplaatst
    tags:
  • orabestanden

But when activated, We see this:

TASK: [Oracle | Find out where the Admin path is] *****************************************
failed: [laixviola] => (item={u’changed’: True, u’end’: u’2013-07-12 13:37:42.035145’, u’stdout’: u’10.2\n11.2’, u’cmd’: u’ls /opt/oracle/product/ ‘, u’rc’: 0, ‘item’: ‘’, u’stderr’: u’‘, u’delta’: u’0:00:00.009996’, ‘invocation’: {‘module_name’: ‘shell’, ‘module_args’: ‘ls /opt/oracle/product/’}, ‘stdout_lines’: [u’10.2’, u’11.2’], u’start’: u’2013-07-12 13:37:42.025149’}.stdout_lines) => {“changed”: true, “cmd”: "find /opt/oracle/product/{u’changed’: True, u’end’: u’2013-07-12 13:37:42.035145’, u’stdout’: u’10.2\n11.2’, u’cmd’: u’ls /opt/oracle/product/ ‘, u’rc’: 0, ‘item’: ‘’, u’stderr’: u’‘, u’delta’: u’0:00:00.009996’, ‘invocation’: {‘module_name’: ‘shell’, ‘module_args’: ‘ls /opt/oracle/product/’}, ‘stdout_lines’: [u’10.2’, u’11.2’], u’start’: u’2013-07-12 13:37:42.025149’}.stdout_lines -type d -name admin | grep -i network ", “delta”: “0:00:00.013772”, “end”: “2013-07-12 13:37:44.072192”, “item”: “{u’changed’: True, u’end’: u’2013-07-12 13:37:42.035145’, u’stdout’: u’10.2\n11.2’, u’cmd’: u’ls /opt/oracle/product/ ‘, u’rc’: 0, ‘item’: ‘’, u’stderr’: u’‘, u’delta’: u’0:00:00.009996’, ‘invocation’: {‘module_name’: ‘shell’, ‘module_args’: ‘ls /opt/oracle/product/’}, ‘stdout_lines’: [u’10.2’, u’11.2’], u’start’: u’2013-07-12 13:37:42.025149’}.stdout_lines”, “rc”: 1, “start”: “2013-07-12 13:37:44.058420”}
stderr: find: bad status-- /opt/oracle/product/{uchanged:
find: bad status-- True,
find: bad status-- uend:
find: bad status-- u2013-07-12 13:37:42.035145,
find: bad status-- ustdout:
find: bad status-- u10.2\n11.2,
find: bad status-- ucmd:
find: bad starting directory
find: bad status-- urc:
find: bad status-- 0,
find: bad status-- item:
find: bad status-- ,
find: bad status-- ustderr:
find: bad status-- u,
find: bad status-- udelta:
find: bad status-- u0:00:00.009996,
find: bad status-- invocation:
find: bad status-- {module_name:
find: bad status-- shell,
find: bad status-- module_args:
find: bad starting directory
find: bad status-- stdout_lines:
find: bad status-- [u10.2,
find: bad status-- u11.2],
find: bad status-- ustart:
find: bad status-- u2013-07-12 13:37:42.025149}.stdout_lines
FATAL: all hosts have already failed – aborting

I’m guessing that I’m not using the variables correcly, So I also tried variations like these:

with_items:

  • ${oracle_versions.stdout_lines}

with_items:

  • ${oracle_versions}.stdout_lines

with_items:

  • {{ oracle_versions.stdout_lines }}

Comes back with:

ERROR: Syntax Error while loading YAML script, /home/mmaas/playbooks/tasks/ora_bestanden_aix.yml
Note: The error may actually appear before this position: line 47, column 8
with_items:

  • {{ oracle_versions.stdout_lines }}

S they all came back with errors.

What is the exact way of referering to the variable?

Thanks in advance,
Mark

Looks like you have a syntax error at minimum

with_nested:
$oracle_admin_path.stdout_lines
$orafiles

Missing the “-” before each list element.

True, it was something I was testing, I tried again with:

with_nested:

  • $oracle_admin_path.stdout_lines
  • $orafiles

But still getting this error:

failed: [laixviola] => (item={u’changed’: True, u’end’: u’2013-07-12 15:00:13.636800’, u’stdout’: u’10.2\n11.2’, u’cmd’: u’ls /opt/oracle/product/ ‘, u’rc’: 0, ‘item’: ‘’, u’stderr’: u’‘, u’delta’: u’0:00:00.009673’, ‘invocation’: {‘module_name’: ‘shell’, ‘module_args’: ‘ls /opt/oracle/product/’}, ‘stdout_lines’: [u’10.2’, u’11.2’], u’start’: u’2013-07-12 15:00:13.627127’}.stdout_lines) => {“changed”: true, “cmd”: "find /opt/oracle/product/{u’changed’: True, u’end’: u’2013-07-12 15:00:13.636800’, u’stdout’: u’10.2\n11.2’, u’cmd’: u’ls /opt/oracle/product/ ‘, u’rc’: 0, ‘item’: ‘’, u’stderr’: u’‘, u’delta’: u’0:00:00.009673’, ‘invocation’: {‘module_name’: ‘shell’, ‘module_args’: ‘ls /opt/oracle/product/’}, ‘stdout_lines’: [u’10.2’, u’11.2’], u’start’: u’2013-07-12 15:00:13.627127’}.stdout_lines -type d -name admin | grep -i network ", “delta”: “0:00:00.012722”, “end”: “2013-07-12 15:00:15.631391”, “item”: “{u’changed’: True, u’end’: u’2013-07-12 15:00:13.636800’, u’stdout’: u’10.2\n11.2’, u’cmd’: u’ls /opt/oracle/product/ ‘, u’rc’: 0, ‘item’: ‘’, u’stderr’: u’‘, u’delta’: u’0:00:00.009673’, ‘invocation’: {‘module_name’: ‘shell’, ‘module_args’: ‘ls /opt/oracle/product/’}, ‘stdout_lines’: [u’10.2’, u’11.2’], u’start’: u’2013-07-12 15:00:13.627127’}.stdout_lines”, “rc”: 1, “start”: “2013-07-12 15:00:15.618669”}
stderr: find: bad status-- /opt/oracle/product/{uchanged:
find: bad status-- True,
find: bad status-- uend:
find: bad status-- u2013-07-12 15:00:13.636800,
find: bad status-- ustdout:
find: bad status-- u10.2\n11.2,
find: bad status-- ucmd:
find: bad starting directory
find: bad status-- urc:
find: bad status-- 0,
find: bad status-- item:
find: bad status-- ,
find: bad status-- ustderr:
find: bad status-- u,
find: bad status-- udelta:
find: bad status-- u0:00:00.009673,
find: bad status-- invocation:
find: bad status-- {module_name:
find: bad status-- shell,
find: bad status-- module_args:
find: bad starting directory
find: bad status-- stdout_lines:
find: bad status-- [u10.2,
find: bad status-- u11.2],
find: bad status-- ustart:

find: bad status-- u2013-07-12 15:00:13.627127}.stdout_lines
FATAL: all hosts have already failed – aborting

Thanks,
Mark

Ok so you can’t just say $foo.x in the old style syntax way, it would have been ${foo.x}

Though no one should be using $foo or ${foo} anymore as {{ foo }} is the preferred way of doing things.

  • “{{ foo.x }}”

Getting closer!

  • name: Oracle | Admin pad uitvogelen
    action: shell find /opt/oracle/product/{{ item }} -type d -name admin | grep -i network
    with_items:
  • “{{ oracle_versions.stdout_lines }}”
    register: oracle_admin_path
    tags:
  • orabestanden

Now still results in something that is not iterated:

Ok good, I didn’t expect that part to actually work :slight_smile:

But did you try:

  • ${foo.x}

?

FWIW, ticket to track this: http://github.com/ansible/ansible/issues/3513

Ah excellent, because this did work before…

So now I’m at the next task, which is:

  • name: Oracle | Verwijder links/bestanden
    action: file
    state=absent
    dest={{ item[0] }}/{{ item[1] }}
    with_nested:
  • ${oracle_admin_path.stdout_lines}
  • ${orafiles}
    when_changed: $nieuweversiegeplaatst
    tags:
  • orabestanden

Which now bums out with:

TASK: [Oracle | Verwijder links/bestanden] ************************************
skipping: [laixviola] => (item=[‘$’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘$’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘{’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘{’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘o’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘o’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘r’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘r’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘a’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘a’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘c’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘c’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘l’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘l’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘e’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘e’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘‘, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[’
’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘a’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘a’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘d’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘d’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘m’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘m’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘i’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘i’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘n’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘n’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘‘, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[’
’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘p’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘p’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘a’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘a’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘t’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘t’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘h’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘h’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘.’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘.’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘s’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘s’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘t’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘t’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘d’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘d’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘o’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘o’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘u’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘u’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘t’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘t’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘‘, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[’
’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘l’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘l’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘i’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘i’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘n’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘n’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘e’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘e’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘s’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘s’, ‘tnsnames.ora’])
skipping: [laixviola] => (item=[‘}’, ‘sqlnet.ora’])
skipping: [laixviola] => (item=[‘}’, ‘tnsnames.ora’])

I’m glad it’s skipping :wink: That could have been a mess to clean up!
Another syntax error I’m not seeing? I tried this as well:

  • name: Oracle | Verwijder links/bestanden
    action: file
    state=absent
    dest={{ item[0] }}/{{ item[1] }}
    with_nested:
  • “{{ oracle_admin_path.stdout_lines }}”
  • “{{ orafiles }}”
    when_changed: $nieuweversiegeplaatst
    tags:
  • orabestanden

Which made it worse :wink:

TASK: [Oracle | Verwijder links/bestanden] ************************************
skipping: [laixviola] => (item=[u’{‘, u’[‘])
skipping: [laixviola] => (item=[u’{‘, u"’“])
skipping: [laixviola] => (item=[u’{‘, u’s’])
skipping: [laixviola] => (item=[u’{‘, u’q’])
skipping: [laixviola] => (item=[u’{‘, u’l’])
skipping: [laixviola] => (item=[u’{‘, u’n’])
skipping: [laixviola] => (item=[u’{‘, u’e’])
skipping: [laixviola] => (item=[u’{‘, u’t’])
skipping: [laixviola] => (item=[u’{‘, u’.‘])
skipping: [laixviola] => (item=[u’{‘, u’o’])
skipping: [laixviola] => (item=[u’{‘, u’r’])
skipping: [laixviola] => (item=[u’{‘, u’a’])
skipping: [laixviola] => (item=[u’{', u”‘"])
skipping: [laixviola] => (item=[u’{‘, u’,‘])
skipping: [laixviola] => (item=[u’{‘, u’ ‘])
skipping: [laixviola] => (item=[u’{‘, u"’“])
skipping: [laixviola] => (item=[u’{‘, u’t’])
skipping: [laixviola] => (item=[u’{‘, u’n’])
skipping: [laixviola] => (item=[u’{‘, u’s’])
skipping: [laixviola] => (item=[u’{‘, u’n’])
skipping: [laixviola] => (item=[u’{‘, u’a’])
skipping: [laixviola] => (item=[u’{‘, u’m’])
skipping: [laixviola] => (item=[u’{‘, u’e’])
skipping: [laixviola] => (item=[u’{‘, u’s’])
skipping: [laixviola] => (item=[u’{‘, u’.‘])
skipping: [laixviola] => (item=[u’{‘, u’o’])
skipping: [laixviola] => (item=[u’{‘, u’r’])
skipping: [laixviola] => (item=[u’{‘, u’a’])
skipping: [laixviola] => (item=[u’{', u”‘"])
skipping: [laixviola] => (item=[u’{‘, u’]‘])
skipping: [laixviola] => (item=[u’{‘, u’[‘])
skipping: [laixviola] => (item=[u’{‘, u"’"])
skipping: [laixviola] => (item=[u’{‘, u’s’])
skipping: [laixviola] => (item=[u’{‘, u’q’])
skipping: [laixviola] => (item=[u’{‘, u’l’])

I snipped the output, it would have been way too long :wink:

Thanks again,
Mark

Ok I’ll take a look.