我已将字典的键
domain
设置为空字符串“”。我正在检查 dict key
ssluser
的 var 字段是否已定义,如果是,则我需要从提供的用户值中填写电子邮件域数据。
{%
set sslusers= [
{
'ssluser': SSL_VPN_User01,
'sslusercred': SSL_USER_CRED01,
'index': 0,
'domain': ""
},
{
'ssluser': SSL_VPN_User02,
'sslusercred': SSL_USER_CRED02,
'index': 1,
'domain': ""
},
{
'ssluser': SSL_VPN_User03,
'sslusercred': SSL_USER_CRED03,
'index': 2,
'domain': ""
},
{
'ssluser': SSL_VPN_User04,
'sslusercred': SSL_USER_CRED04,
'index': 3,
'domain': ""
},
{
'ssluser': SSL_VPN_User05,
'sslusercred': SSL_USER_CRED05,
'index': 4,
'domain': ""
},
{
'ssluser': SSL_VPN_User06,
'sslusercred': SSL_USER_CRED06,
'index': 5,
'domain': ""
},
{
'ssluser': SSL_VPN_User07,
'sslusercred': SSL_USER_CRED07,
'index': 6,
'domain': ""
},
{
'ssluser': SSL_VPN_User08,
'sslusercred': SSL_USER_CRED08,
'index': 7,
'domain': ""
},
{
'ssluser': SSL_VPN_User09,
'sslusercred': SSL_USER_CRED09,
'index': 8,
'domain': ""
},
{
'ssluser': SSL_VPN_User10,
'sslusercred': SSL_USER_CRED10,
'index': 9,
'domain': ""
}
]
%}
我正在尝试做的 jinja 块这个:
{%- for item in sslusers if item.ssluser is defined %}
{% set domain_value_old = item.ssluser['domain'] %}
{% for key, value in item.items() %}
{% if key == 'domain' %}
{% set domain_value_new = value.split('@') | last %}
<update dicts in the list with the new value only for 'domain' key>
{% endif %}
{% endfor %}
{% endfor %}
我被困在
set domain_value_new...
下的线路上。对于上下文,我在 cli 脚本中使用它,该脚本是在网络设备上运行的 jinja 模板。
可以在 Jinja2 中使用循环索引来更新字典列表中的“domain”键。以下是如何执行此操作:
{% set sslusers= [
{
'ssluser': SSL_VPN_User01,
'sslusercred': SSL_USER_CRED01,
'index': 0,
'domain': ""
},
{
'ssluser': SSL_VPN_User02,
'sslusercred': SSL_USER_CRED02,
'index': 1,
'domain': ""
},
{
'ssluser': SSL_VPN_User03,
'sslusercred': SSL_USER_CRED03,
'index': 2,
'domain': ""
},
{
'ssluser': SSL_VPN_User04,
'sslusercred': SSL_USER_CRED04,
'index': 3,
'domain': ""
},
{
'ssluser': SSL_VPN_User05,
'sslusercred': SSL_USER_CRED05,
'index': 4,
'domain': ""
},
{
'ssluser': SSL_VPN_User06,
'sslusercred': SSL_USER_CRED06,
'index': 5,
'domain': ""
},
{
'ssluser': SSL_VPN_User07,
'sslusercred': SSL_USER_CRED07,
'index': 6,
'domain': ""
},
{
'ssluser': SSL_VPN_User08,
'sslusercred': SSL_USER_CRED08,
'index': 7,
'domain': ""
},
{
'ssluser': SSL_VPN_User09,
'sslusercred': SSL_USER_CRED09,
'index': 8,
'domain': ""
},
{
'ssluser': SSL_VPN_User10,
'sslusercred': SSL_USER_CRED10,
'index': 9,
'domain': ""
}
]
%}
{% for item in sslusers %}
{% if item.ssluser is defined and item.ssluser %}
{% set sslusers[loop.index0].domain = item.ssluser.split('@') | last %}
{% endif %}
{% endfor %}
{{ sslusers }}
解释:
-
loop.index0
: 我们使用loop.index0
来获取当前循环迭代的索引。请注意,loop.index0
从 0 开始。 -
sslusers[loop.index0].domain
: 我们使用此语法来直接访问sslusers
列表中特定索引处的字典元素的domain
键。 -
item.ssluser.split('@') | last
: 如果item.ssluser
已定义且非空,则此部分会提取@
符号后的电子邮件地址部分,并将其赋值给相应的domain
键。
通过这种方式,可以在迭代列表时更新
sslusers
列表中每个字典的
domain
键。