Re: [BUG][Jinja2][value-assign] Can't assign value in a loop?

2019-01-07 Thread Simon Jones
Cool, but if this is a bug?

在 2019年1月3日星期四 UTC+8下午11:12:45,Juan Pablo Scaletti写道:
>
> As you can read on the documentation, no, you can't assign a value in a
> loop and use it outside the loop, unless you use a namespace:
>
> http://jinja.pocoo.org/docs/2.10/templates/#assignments (see: Scoping
> Behavior)
>
>
> On Thu, Jan 3, 2019 at 3:30 AM Simon Jones  > wrote:
>
>> Hi all,
>>
>> I'm using Jinja2 template to generate config files, but I found a BUG, 
>> which is I could not assign value in a loop, like this:
>>
>> 1) use this template, could generate 'uuusevrf'
>>
>> {% block vrf_mgmt_interface %}
>> {% set usevrf = 'no' %}
>> {% set usevrf = 'nono' %}
>> {% if MGMT_INTERFACE %}
>> {% set uuusevrf = 'yes' %}
>> {%   for (name, prefix) in MGMT_INTERFACE %}
>> {% if name == 'eth0' %}
>> {%   if MGMT_INTERFACE[(name, prefix)].has_key('vrfname') %}
>> {% if prefix | ipv4 %}
>> USE_VRF=2
>> IP_VERSION=4
>> ETH_NAME=eth0
>> ETH_IP={{ prefix | ip }}
>> ETH_SUB_NET={{ prefix | network }}/{{ prefix | prefixlen }}
>> ETH_LOOKUP_IP={{ prefix | ip }}
>> VRFNAME={{ MGMT_INTERFACE[(name, prefix)]['vrfname'] }}
>> GWADDR={{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }}
>> {% else %}
>> USE_VRF=2
>> IP_VERSION=6
>> ETH_NAME=eth0
>> ETH_IP={{ prefix | ip }}
>> ETH_SUB_NET={{ prefix | network }}/{{ prefix | prefixlen }}
>> ETH_LOOKUP_IP={{ prefix | ip }}
>> VRFNAME={{ MGMT_INTERFACE[(name, prefix)]['vrfname'] }}
>> GWADDR={{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }}
>> {% endif %}
>> {%   else %}
>> USE_VRF=1
>> {%   endif %}
>> {% endif %}
>> {%   endfor %}
>> {% endif %}
>> {{ usevrf }}
>> {{ uuusevrf }}
>> {% endblock vrf_mgmt_interface %}
>>
>>
>> 2) could generate 'uuusevrf', this is result:
>>
>> rfaces.j211:~# sonic-cfggen -d -t 
>> /usr/share/sonic/templates/vrf_management_inter
>> USE_VRF=2
>> IP_VERSION=4
>> ETH_NAME=eth0
>> ETH_IP=172.18.8.211
>> ETH_SUB_NET=172.18.8.0/24
>> ETH_LOOKUP_IP=172.18.8.211
>> VRFNAME=mgmtvrf
>> GWADDR=172.18.8.1
>> nono
>> yes
>>
>>
>> 2) use this template, could NOT generate 'uuusevrf'
>>
>> {% block vrf_mgmt_interface %}
>> {% set usevrf = 'no' %}
>> {% set usevrf = 'nono' %}
>> {% if MGMT_INTERFACE %}
>> {%   for (name, prefix) in MGMT_INTERFACE %}
>> {% set uuusevrf = 'yes' %}
>> {% if name == 'eth0' %}
>> {%   if MGMT_INTERFACE[(name, prefix)].has_key('vrfname') %}
>> {% if prefix | ipv4 %}
>> USE_VRF=2
>> IP_VERSION=4
>> ETH_NAME=eth0
>> ETH_IP={{ prefix | ip }}
>> ETH_SUB_NET={{ prefix | network }}/{{ prefix | prefixlen }}
>> ETH_LOOKUP_IP={{ prefix | ip }}
>> VRFNAME={{ MGMT_INTERFACE[(name, prefix)]['vrfname'] }}
>> GWADDR={{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }}
>> {% else %}
>> USE_VRF=2
>> IP_VERSION=6
>> ETH_NAME=eth0
>> ETH_IP={{ prefix | ip }}
>> ETH_SUB_NET={{ prefix | network }}/{{ prefix | prefixlen }}
>> ETH_LOOKUP_IP={{ prefix | ip }}
>> VRFNAME={{ MGMT_INTERFACE[(name, prefix)]['vrfname'] }}
>> GWADDR={{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }}
>> {% endif %}
>> {%   else %}
>> USE_VRF=1
>> {%   endif %}
>> {% endif %}
>> {%   endfor %}
>> {% endif %}
>> {{ usevrf }}
>> {{ uuusevrf }}
>> {% endblock vrf_mgmt_interface %}
>>
>> 4) could NOT generate, this is result:
>>
>> rfaces.j211:~# sonic-cfggen -d -t 
>> /usr/share/sonic/templates/vrf_management_inter
>> USE_VRF=2
>> IP_VERSION=4
>> ETH_NAME=eth0
>> ETH_IP=172.18.8.211
>> ETH_SUB_NET=172.18.8.0/24
>> ETH_LOOKUP_IP=172.18.8.211
>> VRFNAME=mgmtvrf
>> GWADDR=172.18.8.1
>> nono
>>
>> So, why ???
>>
>> You could see that, same data, just the position of this line ({% set
>>  uuusevrf = 'yes' %}) is different. And the result show it definitely go 
>> into loop, but why this line NOT work ??? 
>>
>> BTW, It's hard to debug !!
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "pocoo-libs" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to pocoo-libs+...@googlegroups.com .
>> To post to this group, send email to pocoo...@googlegroups.com 
>> .
>> Visit this group at https://groups.google.com/group/pocoo-libs.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
> -- 
>
> Juan Pablo Scaletti
>

-- 
You received this message because you are subscribed to the Google Groups 
"pocoo-libs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to pocoo-libs+unsubscr...@googlegroups.com.
To post to this group, send email to pocoo-libs@googlegroups.com.
Visit this group at https://groups.google.com/group/pocoo-libs.
For more options, visit https://groups.google.com/d/optout.


Re: [BUG][Jinja2][value-assign] Can't assign value in a loop?

2019-01-03 Thread Juan Pablo Scaletti
As you can read on the documentation, no, you can't assign a value in a
loop and use it outside the loop, unless you use a namespace:

http://jinja.pocoo.org/docs/2.10/templates/#assignments (see: Scoping
Behavior)


On Thu, Jan 3, 2019 at 3:30 AM Simon Jones  wrote:

> Hi all,
>
> I'm using Jinja2 template to generate config files, but I found a BUG,
> which is I could not assign value in a loop, like this:
>
> 1) use this template, could generate 'uuusevrf'
>
> {% block vrf_mgmt_interface %}
> {% set usevrf = 'no' %}
> {% set usevrf = 'nono' %}
> {% if MGMT_INTERFACE %}
> {% set uuusevrf = 'yes' %}
> {%   for (name, prefix) in MGMT_INTERFACE %}
> {% if name == 'eth0' %}
> {%   if MGMT_INTERFACE[(name, prefix)].has_key('vrfname') %}
> {% if prefix | ipv4 %}
> USE_VRF=2
> IP_VERSION=4
> ETH_NAME=eth0
> ETH_IP={{ prefix | ip }}
> ETH_SUB_NET={{ prefix | network }}/{{ prefix | prefixlen }}
> ETH_LOOKUP_IP={{ prefix | ip }}
> VRFNAME={{ MGMT_INTERFACE[(name, prefix)]['vrfname'] }}
> GWADDR={{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }}
> {% else %}
> USE_VRF=2
> IP_VERSION=6
> ETH_NAME=eth0
> ETH_IP={{ prefix | ip }}
> ETH_SUB_NET={{ prefix | network }}/{{ prefix | prefixlen }}
> ETH_LOOKUP_IP={{ prefix | ip }}
> VRFNAME={{ MGMT_INTERFACE[(name, prefix)]['vrfname'] }}
> GWADDR={{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }}
> {% endif %}
> {%   else %}
> USE_VRF=1
> {%   endif %}
> {% endif %}
> {%   endfor %}
> {% endif %}
> {{ usevrf }}
> {{ uuusevrf }}
> {% endblock vrf_mgmt_interface %}
>
>
> 2) could generate 'uuusevrf', this is result:
>
> rfaces.j211:~# sonic-cfggen -d -t
> /usr/share/sonic/templates/vrf_management_inter
> USE_VRF=2
> IP_VERSION=4
> ETH_NAME=eth0
> ETH_IP=172.18.8.211
> ETH_SUB_NET=172.18.8.0/24
> ETH_LOOKUP_IP=172.18.8.211
> VRFNAME=mgmtvrf
> GWADDR=172.18.8.1
> nono
> yes
>
>
> 2) use this template, could NOT generate 'uuusevrf'
>
> {% block vrf_mgmt_interface %}
> {% set usevrf = 'no' %}
> {% set usevrf = 'nono' %}
> {% if MGMT_INTERFACE %}
> {%   for (name, prefix) in MGMT_INTERFACE %}
> {% set uuusevrf = 'yes' %}
> {% if name == 'eth0' %}
> {%   if MGMT_INTERFACE[(name, prefix)].has_key('vrfname') %}
> {% if prefix | ipv4 %}
> USE_VRF=2
> IP_VERSION=4
> ETH_NAME=eth0
> ETH_IP={{ prefix | ip }}
> ETH_SUB_NET={{ prefix | network }}/{{ prefix | prefixlen }}
> ETH_LOOKUP_IP={{ prefix | ip }}
> VRFNAME={{ MGMT_INTERFACE[(name, prefix)]['vrfname'] }}
> GWADDR={{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }}
> {% else %}
> USE_VRF=2
> IP_VERSION=6
> ETH_NAME=eth0
> ETH_IP={{ prefix | ip }}
> ETH_SUB_NET={{ prefix | network }}/{{ prefix | prefixlen }}
> ETH_LOOKUP_IP={{ prefix | ip }}
> VRFNAME={{ MGMT_INTERFACE[(name, prefix)]['vrfname'] }}
> GWADDR={{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }}
> {% endif %}
> {%   else %}
> USE_VRF=1
> {%   endif %}
> {% endif %}
> {%   endfor %}
> {% endif %}
> {{ usevrf }}
> {{ uuusevrf }}
> {% endblock vrf_mgmt_interface %}
>
> 4) could NOT generate, this is result:
>
> rfaces.j211:~# sonic-cfggen -d -t
> /usr/share/sonic/templates/vrf_management_inter
> USE_VRF=2
> IP_VERSION=4
> ETH_NAME=eth0
> ETH_IP=172.18.8.211
> ETH_SUB_NET=172.18.8.0/24
> ETH_LOOKUP_IP=172.18.8.211
> VRFNAME=mgmtvrf
> GWADDR=172.18.8.1
> nono
>
> So, why ???
>
> You could see that, same data, just the position of this line ({% set
>  uuusevrf = 'yes' %}) is different. And the result show it definitely go
> into loop, but why this line NOT work ???
>
> BTW, It's hard to debug !!
>
> --
> You received this message because you are subscribed to the Google Groups
> "pocoo-libs" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to pocoo-libs+unsubscr...@googlegroups.com.
> To post to this group, send email to pocoo-libs@googlegroups.com.
> Visit this group at https://groups.google.com/group/pocoo-libs.
> For more options, visit https://groups.google.com/d/optout.
>


-- 

Juan Pablo Scaletti

-- 
You received this message because you are subscribed to the Google Groups 
"pocoo-libs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to pocoo-libs+unsubscr...@googlegroups.com.
To post to this group, send email to pocoo-libs@googlegroups.com.
Visit this group at https://groups.google.com/group/pocoo-libs.
For more options, visit https://groups.google.com/d/optout.


Re: [BUG][Jinja2][value-assign] Can't assign value in a loop?

2019-01-03 Thread Simon Jones
And why do not support 'break' ..

在 2019年1月3日星期四 UTC+8下午4:30:34,Simon Jones写道:
>
> Hi all,
>
> I'm using Jinja2 template to generate config files, but I found a BUG, 
> which is I could not assign value in a loop, like this:
>
> 1) use this template, could generate 'uuusevrf'
>
> {% block vrf_mgmt_interface %}
> {% set usevrf = 'no' %}
> {% set usevrf = 'nono' %}
> {% if MGMT_INTERFACE %}
> {% set uuusevrf = 'yes' %}
> {%   for (name, prefix) in MGMT_INTERFACE %}
> {% if name == 'eth0' %}
> {%   if MGMT_INTERFACE[(name, prefix)].has_key('vrfname') %}
> {% if prefix | ipv4 %}
> USE_VRF=2
> IP_VERSION=4
> ETH_NAME=eth0
> ETH_IP={{ prefix | ip }}
> ETH_SUB_NET={{ prefix | network }}/{{ prefix | prefixlen }}
> ETH_LOOKUP_IP={{ prefix | ip }}
> VRFNAME={{ MGMT_INTERFACE[(name, prefix)]['vrfname'] }}
> GWADDR={{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }}
> {% else %}
> USE_VRF=2
> IP_VERSION=6
> ETH_NAME=eth0
> ETH_IP={{ prefix | ip }}
> ETH_SUB_NET={{ prefix | network }}/{{ prefix | prefixlen }}
> ETH_LOOKUP_IP={{ prefix | ip }}
> VRFNAME={{ MGMT_INTERFACE[(name, prefix)]['vrfname'] }}
> GWADDR={{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }}
> {% endif %}
> {%   else %}
> USE_VRF=1
> {%   endif %}
> {% endif %}
> {%   endfor %}
> {% endif %}
> {{ usevrf }}
> {{ uuusevrf }}
> {% endblock vrf_mgmt_interface %}
>
>
> 2) could generate 'uuusevrf', this is result:
>
> rfaces.j211:~# sonic-cfggen -d -t 
> /usr/share/sonic/templates/vrf_management_inter
> USE_VRF=2
> IP_VERSION=4
> ETH_NAME=eth0
> ETH_IP=172.18.8.211
> ETH_SUB_NET=172.18.8.0/24
> ETH_LOOKUP_IP=172.18.8.211
> VRFNAME=mgmtvrf
> GWADDR=172.18.8.1
> nono
> yes
>
>
> 2) use this template, could NOT generate 'uuusevrf'
>
> {% block vrf_mgmt_interface %}
> {% set usevrf = 'no' %}
> {% set usevrf = 'nono' %}
> {% if MGMT_INTERFACE %}
> {%   for (name, prefix) in MGMT_INTERFACE %}
> {% set uuusevrf = 'yes' %}
> {% if name == 'eth0' %}
> {%   if MGMT_INTERFACE[(name, prefix)].has_key('vrfname') %}
> {% if prefix | ipv4 %}
> USE_VRF=2
> IP_VERSION=4
> ETH_NAME=eth0
> ETH_IP={{ prefix | ip }}
> ETH_SUB_NET={{ prefix | network }}/{{ prefix | prefixlen }}
> ETH_LOOKUP_IP={{ prefix | ip }}
> VRFNAME={{ MGMT_INTERFACE[(name, prefix)]['vrfname'] }}
> GWADDR={{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }}
> {% else %}
> USE_VRF=2
> IP_VERSION=6
> ETH_NAME=eth0
> ETH_IP={{ prefix | ip }}
> ETH_SUB_NET={{ prefix | network }}/{{ prefix | prefixlen }}
> ETH_LOOKUP_IP={{ prefix | ip }}
> VRFNAME={{ MGMT_INTERFACE[(name, prefix)]['vrfname'] }}
> GWADDR={{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }}
> {% endif %}
> {%   else %}
> USE_VRF=1
> {%   endif %}
> {% endif %}
> {%   endfor %}
> {% endif %}
> {{ usevrf }}
> {{ uuusevrf }}
> {% endblock vrf_mgmt_interface %}
>
> 4) could NOT generate, this is result:
>
> rfaces.j211:~# sonic-cfggen -d -t 
> /usr/share/sonic/templates/vrf_management_inter
> USE_VRF=2
> IP_VERSION=4
> ETH_NAME=eth0
> ETH_IP=172.18.8.211
> ETH_SUB_NET=172.18.8.0/24
> ETH_LOOKUP_IP=172.18.8.211
> VRFNAME=mgmtvrf
> GWADDR=172.18.8.1
> nono
>
> So, why ???
>
> You could see that, same data, just the position of this line ({% set
>  uuusevrf = 'yes' %}) is different. And the result show it definitely go 
> into loop, but why this line NOT work ??? 
>
> BTW, It's hard to debug !!
>

-- 
You received this message because you are subscribed to the Google Groups 
"pocoo-libs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to pocoo-libs+unsubscr...@googlegroups.com.
To post to this group, send email to pocoo-libs@googlegroups.com.
Visit this group at https://groups.google.com/group/pocoo-libs.
For more options, visit https://groups.google.com/d/optout.