for loop in jinja2

Please explain to me how can I fix this problem? i have this file defaults/main.yml

`

---
node1:
 ip: 1.1.1.1

node2:
 ip: 2.2.2.2

node3:
 ip: 3.3.3.3 

`

Now, I want in template file ip.j2 by for loop access the IPs of each server and save in address variable

Like this:

address= 1.1.1.1,2.2.2.2,3.3.3.3

I tried this code:

`

address={% for x in {{nubmer_nodes}} %}
{{node[x].ip}}
{% if loop.last %},{% endif %}
{% endfor %}

`

But an error occurs. How should I do this?

Error :

`

TASK [Gathering Facts] *********************************************************************

ok: [db2]
ok: [db3]
ok: [db1]

TASK [ssh : -- my loop --] *************************************************************************

fatal: [db1]: FAILED! => {"changed": false, "msg": "AnsibleError: template error while templating string: expected token ':', got '}'. String: \r\naddress={% for x in {{number_nodes}} %}\r\n{{node[x].ip}}\r\n{% if loop.last %},{% endif %}\r\n{% endfor %}"}
fatal: [db2]: FAILED! => {"changed": false, "msg": "AnsibleError: template error while templating string: expected token ':', got '}'. String: \r\naddress={% for x in {{number_nodes}} %}\r\n{{node[x].ip}}\r\n{% if loop.last %},{% endif %}\r\n{% endfor %}"}
fatal: [db3]: FAILED! => {"changed": false, "msg": "AnsibleError: template error while templating string: expected token ':', got '}'. String: \r\naddress={% for x in {{number_nodes}} %}\r\n{{node[x].ip}}\r\n{% if loop.last %},{% endif %}\r\n{% endfor %}"}
        to retry, use: --limit @/etc/ansible/playbooks/get_ip_ssh.retry

PLAY RECAP ********************************************************

db1                        : ok=1    changed=0    unreachable=0    failed=1
db2                        : ok=1    changed=0    unreachable=0    failed=1
db3                        : ok=1    changed=0    unreachable=0    failed=1

`

Please explain to me how can I fix this problem? i have this file
defaults/main.yml

---
node1:
ip: 1.1.1.1

node2:
ip: 2.2.2.2

node3:
ip: 3.3.3.3

Now, I want in template file ip.j2 by for loop access the IPs of each
server and save in address variable

Like this:

address= 1.1.1.1,2.2.2.2,3.3.3.3

I tried this code:

address={% for x in {{nubmer_nodes}} %}

You are already in template mode so you can't use {{ }}
address={% for x in nubmer_nodes %}

You have not shown your nubmer_nodes, but to make it work it need to be [1, 2, 3] for it to work.

{{node.ip}}

This try to look up a likt named node, you need
{{ vars['node' ~ x }}

{% if loop.last %},{% endif %}

This will only print , at the end, you are missing a not.
And to suppress the newline in the previous line you also need a - added

{%- if not loop.last %},{% endif %}

Personally I would have done this like this (but you may have reasons for arranging it differently)…

defaults/main.yml:-