Re: [ansible-project] for loop in template gives error undefined variables: list object has no element

3,126 views
Skip to first unread message

Brian Coca

unread,
Dec 22, 2014, 9:48:16 AM12/22/14
to ansible...@googlegroups.com
you seem to be trying to use the jinja2 implicit loop.index but you
are branching it off of the server dictionary
I believe you want:
Server{{ usenet_servers[server] + '.' + loop.index }}.Level={{
usenet_servers[server].level }}

--
Brian Coca

Matt Martz

unread,
Dec 22, 2014, 9:55:24 AM12/22/14
to ansible...@googlegroups.com

I believe you need to make 2 changes:

loop.index instead of usenet_servers[server].loop.index

And just use server instead usenet_servers[server] everywhere else. server isn't the index, it is the actual hash/dict.

On Dec 22, 2014 4:08 AM, "ayounggun" <alex....@gmail.com> wrote:
Hi all

Can anyone help me with do a loop in a template?

bcoca helped me earlier on IRC and I think I'm a bit closer than I was before! =]

(1) variables (layout copied from http://www.yaml.org/start.html)

usenet_servers:
   
- server: astraweb
      level
: 0
      host
: ssl-eu.astraweb.com
      port
: 563
      username
: me
      password
: mypass
      join_group
: yes
      connections
: 2
   
- server: newsgroupdirect
      level
: 1
      host
: news-eu-ssl.newsgroupdirect.com
      port
: 563
      username
: me
      password
: mypass
      join_group
: yes
      connections
: 3
   
- server: newsgroupdirect
      level
: 1
      host
: news.tweaknews.eu
      port
: 563
      username
: me
      password
: mypass
      join_group
: yes
      connections
: 10


(2) task
- name: create nzbget conf file
 
template:
    src
=nzbget.conf.j2
    dest
=/etc/nzbget.conf
    mode
=660
    owner
=root
   
group=library



(3) loop in template nzbget.conf.j2

{% for server in usenet_servers %}
Server{{ usenet_servers[server].loop.index }}.Level={{ usenet_servers[server].level }}
Server{{ usenet_servers[server].loop.index }}.Host={{ usenet_servers[server].host }}
Server{{ usenet_servers[server].loop.index }}.Port={{ usenet_servers[server].port }}
Server{{ usenet_servers[server].loop.index }}.Username={{ usenet_servers[server].username }}
Server{{ usenet_servers[server].loop.index }}.Password={{ usenet_servers[server].password }}
Server{{ usenet_servers[server].loop.index }}.JoinGroup={{ usenet_servers[server].join_group }}
Server{{ usenet_servers[server].loop.index }}.Connections= {{ usenet_servers[server].connections }}


{% endfor %}


(4) desired output from loop

Server1.Level=0
Server1.Host=ssl-eu.astraweb.com
Server1.Port=563
Server1.Username=me
Server1.Password=mypass
Server1.JoinGroup=yes
Server1.Connections=2

Server2.Level=1
Server2.Host=news-eu-ssl.newsgroupdirect.com
Server2.Port=563
Server2.Username=me
Server2.Password=mypass
Server2.JoinGroup=yes
Server2.Connections=3

Server3.Level=1
Server3.Host=news.tweaknews.eu
Server3.Port=563
Server3.Username=me
Server3.Password=mypass
Server3.JoinGroup=yes
Server3.Connections=10


(5) error
TASK: [nzbget | create nzbget conf file] **************************************
<archpi> ESTABLISH CONNECTION FOR USER: root
<archpi> EXEC ['sshpass', '-d12', 'ssh', '-C', '-tt', '-vvv', '-o', 'ControlMaster=auto', '-o', 'ControlPersist=60s', '-o', 'ControlPath=/home/alex/.ansible/cp/ansible-ssh-%h-%p-%r', '-o', 'Port=22', '-o', 'GSSAPIAuthentication=no', '-o', 'PubkeyAuthentication=no', '-o', 'User=root', '-o', 'ConnectTimeout=10', 'archpi', "/bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1419240488.89-153756188720618 && echo $HOME/.ansible/tmp/ansible-tmp-1419240488.89-153756188720618'"]
fatal
: [archpi] => {'msg': "AnsibleUndefinedVariable: One or more undefined variables: list object has no element {'username': 'me', 'level': 0, 'server': 'astraweb', 'connections': 2, 'host': 'ssl-eu.astraweb.com', 'join_group': True, 'password': 'mypass', 'port': 563}", 'failed': True}
fatal
: [archpi] => {'msg': "AnsibleUndefinedVariable: One or more undefined variables: list object has no element {'username': 'me', 'level': 0, 'server': 'astraweb', 'connections': 2, 'host': 'ssl-eu.astraweb.com', 'join_group': True, 'password': 'mypass', 'port': 563}", 'failed': True}


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 ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/fab45645-6282-4da9-8125-e94a0b1b053c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
Message has been deleted
Message has been deleted
0 new messages