在Ansible中合并2个组
我在ansible的库存中有2个主机组,如下所示:在Ansible中合并2个组,ansible,Ansible,我在ansible的库存中有2个主机组,如下所示: [loadbalancer-add] 172.23.130.97 172.23.130.98 [loadbalancer-remove] 172.23.130.99 172.23.130.100 [loadbalancer] 172.23.130.97 172.23.130.99 172.23.130.98 172.23.130.100 我想合并这些组,将它们传递给loadbalancer API,以便添加服务器,然后删除服务器。因此,我
[loadbalancer-add]
172.23.130.97
172.23.130.98
[loadbalancer-remove]
172.23.130.99
172.23.130.100
[loadbalancer]
172.23.130.97
172.23.130.99
172.23.130.98
172.23.130.100
我想合并这些组,将它们传递给loadbalancer API,以便添加服务器,然后删除服务器。因此,我需要合并这些组以创建一个组,如下所示:
[loadbalancer-add]
172.23.130.97
172.23.130.98
[loadbalancer-remove]
172.23.130.99
172.23.130.100
[loadbalancer]
172.23.130.97
172.23.130.99
172.23.130.98
172.23.130.100
我有以下任务,但它没有产生正确的输出
- name: Merge Dictionaries
gather_facts: false
hosts: localhost
become: true
no_log: false
tasks:
- add_host:
name: "{{ item }}"
ansible_ssh_port: 2020
action: remove
group: loadbalancer
with_items:
- "{{ groups['loadbalancer-remove'] }}"
- "{{ groups['loadbalancer-add'] }}"
delegate_to: localhost
这就产生了
[loadbalancer]
172.23.130.99
172.23.130.100
172.23.130.97
172.23.130.98
有可能得到我需要的输出吗
谢谢也许这就是你需要的:
[loadbalancer-add]
172.23.130.97
172.23.130.98
[loadbalancer-remove]
172.23.130.99
172.23.130.100
[loadbalancer:children]
loadbalancer-remove
loadbalancer-add
所以现在你可以作为一个群体来引用
groups['loadbalancer']*
我确实找到了这样做的方法。这可能不是最好的方法,但我的解决方案是:
- name: Merge Dictionaries
gather_facts: false
hosts: localhost
no_log: false
vars:
merged_lb_hosts: |
{% if (groups['loadbalancer-add'] | length) >= (groups['loadbalancer-remove'] | length) %}
{% for i in range(0, groups['loadbalancer-add'] | length) -%}
{{ groups['loadbalancer-add'][i] | default('') }}:add|{{ groups['loadbalancer-remove'][i] | default('') }}:remove|
{%- endfor %}
{% else %}
{% for i in range(0, groups['loadbalancer-remove'] | length) -%}
{{ groups['loadbalancer-add'][i] | default('') }}:add|{{ groups['loadbalancer-remove'][i] | default('') }}:remove|
{%- endfor %}
{% endif %}
tasks:
- debug: msg="{{ merged_lb_hosts }}"
- add_host:
name: "{{ item.split(':')[0] }}"
action: "{{ item.split(':')[1] }}"
ansible_ssh_port: 2020
group: loadbalancer
with_items:
- "{{ (merged_lb_hosts | trim()).split('|') }}"
when: "{{item.split(':')[0] != ''}}"
这将获取添加和删除组,并将它们合并到一个名为merged\u lb\u hosts
add_host
任务将使用_items部分拆分其中的该变量,以创建一个可编辑列表
它感觉很粗糙,但它完成了我所追求的工作啊,对不起,这是一个打字错误,我现在就修复它。很抱歉,我已经更新了问题。我希望最后的列表首先从LB中删除一个主机(即从
loadbalancer删除
中删除一个项目,然后添加一个主机以添加到LB)(例如,loadbalancer add
中的一个项目。我的问题的顺序有点错误,现在我已经纠正了。嗨,谢谢你的回答。我不认为这会像我需要的那样合并列表,它会将一个列表附加到另一个列表。