我已将字典的键
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': ""
}
]
%}
我正在努力做到这一点:
{%- for item in sslusers if item.ssluser is defined %}
{% set domain_value_old = item.domain %}
{% for key, value in item.items() %}
{% if key == 'domain' %}
{% set domain_value_new = item.domain.split('@') | last %}
<update dicts in the list with the new value only for 'domain' key>
{% endif %}
{% endfor %}
{% endfor %}
我被困在
{% if key == 'domain' %}
之后的部分,因为我得到domain_value_new未定义,然后我不知道如何将密钥更新为新值,如果我可以定义它的话。对于上下文,我在 cli 脚本中使用它,该脚本是在网络设备上运行的 jinja 模板。
更新---
我能够通过这个块克服未定义的 var 部分:
{%- for item in sslusers if item.ssluser is defined %}
{% set domain_value_old = item.domain %}
{% set domain_value_new = item.ssluser.split('@') | last %}
{% for dict_item in item['domain'] %}
{{ domain_value_new }}
{% endfor %}
{% endfor %}
现在我已经将
domain
键的新字符串分配给了新的 var,我将如何传递回字典列表以用新值替换空字符串?不确定我所拥有的是否正常工作,因为我所拥有的设备中的调试微不足道。
这是我的用例的工作解决方案
{%- for item in sslusers if item.ssluser is defined %}
{% set domain_value_new = item.ssluser.split('@') | last %}
{%- set _ = item.update({'domain': domain_value_new}) -%}
{% endfor %}