我想通过主机上设置的变量来过滤主机。例如:
我有一组主机,一个是主机,其余是从机。在主服务器上设置了变量replica_type: master
。我现在想动态获取主服务器。
我的工作方式是:
- set_fact:
master_server_string: >-
{% for server in groups.my_servers %}
{% if hostvars[server]['replica_type']=='master' -%}
{{ server }}
{% endif %}
{% endfor %}
- set_fact:
master_server: "{{ master_server_string|trim }}"
是否可以通过过滤器(或至少在单个任务中)执行相同的操作? 例如像
"{{ server for server in groups.my_servers if hostvars[server]['replica_type'] == 'master' }}"
答案 0 :(得分:1)
我相信您正在寻找group_by
模块。
https://docs.ansible.com/ansible/latest/modules/group_by_module.html
- group_by:
key: {{ replica_type }}
答案 1 :(得分:1)
您可以通过循环遍历主机组并检查匹配值来通过属性从一组主机中提取值:
- set_fact:
master_server: "{{ item }}"
with_items: "{{ groups.my_servers }}"
when: hostvars[item].replica_type == 'master'