在ansible剧本中合并两个复杂的词典
我找不到合并两个变量的方法。 因为我的剧本中有好几个部分都用到了它们,所以它们必须留在这个结构中 当主机属于特定组时,我要做的是设置特殊的ssh公钥 主持人:在ansible剧本中合并两个复杂的词典,ansible,jinja2,Ansible,Jinja2,我找不到合并两个变量的方法。 因为我的剧本中有好几个部分都用到了它们,所以它们必须留在这个结构中 当主机属于特定组时,我要做的是设置特殊的ssh公钥 主持人: ... [special-bla] blahost1 blahost2 ... 变量: 及 在我的ansible playbook中,我根据主机是否在特定组中创建了一个特殊的\u本地\u用户列表: - name: Create special_local_users list set_fact: special_
...
[special-bla]
blahost1
blahost2
...
变量:
及
在我的ansible playbook中,我根据主机是否在特定组中创建了一个特殊的\u本地\u用户列表:
- name: Create special_local_users list
set_fact:
special_local_user_list: |
{% for item in special_host_groups -%}
{% set section= item ~ '_users' %}
{% if special_users[section] is defined -%}
{% for user in special_users[section] -%}
{{ user | to_json }},
{%- endfor %}
{%- endif %}
{%- endfor %}
现在我想合并两个列表的设置。这将导致
user_list:
- user: root
uid: 0
# ... other A settings ...
# ... other B settings ...
keys:
- {
file: files/ssh/pubkeys/admin1.pub,
options: 'from="10.28.89.0/24"',
}
- {
file: files/ssh/pubkeys/admin2.pub,
options: 'from="10.28.89.0/24"',
}
- {
file: files/ssh/pubkeys/admin3.pub,
options: 'from="10.28.10.32,10.28.89.0/24"',
}
- {
file: files/ssh/pubkeys/bla/bla_admin.pub,
options: 'from="10.0.0.1"',
}
我对jinja2的了解非常有限,所以我没有找到方法
有什么想法吗?
提前谢谢!
拉尔斯很抱歉问你。。。
我自己找到了一个解决办法:
- name: Merge user_list with special_local_user_list
set_fact:
user_list: |
{% set user_list_users=user_list | map(attribute='user') | list %}
{% set special_local_user_list_users=special_local_user_list | map(attribute='user') | list %}
{% set _users=user_list | map(attribute='user') | list %}
{% for item1 in special_local_user_list -%}
{% if item1['user'] in user_list_users %}
{% for item2 in user_list if item2['user'] == item1['user'] -%}
{{
item1.update(keys = item1['keys'] + item2['keys'])
}}{{ item2 | combine(item1) }},
{%- endfor %}
{%- else %}
{{ item1 }},
{%- endif %}
{%- endfor %}
{% for item2 in user_list if item2['user'] not in special_local_user_list_users -%}
{{ item2 }},
{%- endfor %}
它看起来不是很酷,但它很管用
它组合除添加的键之外的所有值
user_list:
- user: root
uid: 0
# ... other A settings ...
# ... other B settings ...
keys:
- {
file: files/ssh/pubkeys/admin1.pub,
options: 'from="10.28.89.0/24"',
}
- {
file: files/ssh/pubkeys/admin2.pub,
options: 'from="10.28.89.0/24"',
}
- {
file: files/ssh/pubkeys/admin3.pub,
options: 'from="10.28.10.32,10.28.89.0/24"',
}
- {
file: files/ssh/pubkeys/bla/bla_admin.pub,
options: 'from="10.0.0.1"',
}
- name: Merge user_list with special_local_user_list
set_fact:
user_list: |
{% set user_list_users=user_list | map(attribute='user') | list %}
{% set special_local_user_list_users=special_local_user_list | map(attribute='user') | list %}
{% set _users=user_list | map(attribute='user') | list %}
{% for item1 in special_local_user_list -%}
{% if item1['user'] in user_list_users %}
{% for item2 in user_list if item2['user'] == item1['user'] -%}
{{
item1.update(keys = item1['keys'] + item2['keys'])
}}{{ item2 | combine(item1) }},
{%- endfor %}
{%- else %}
{{ item1 }},
{%- endif %}
{%- endfor %}
{% for item2 in user_list if item2['user'] not in special_local_user_list_users -%}
{{ item2 }},
{%- endfor %}