我使用Ansible构建多个节点,然后将它们添加到负载均衡器。出现的问题是,当使用rax_clb_nodes模块添加第二个节点时,我得到:
TASK: [build-servers | add nodes to load balancer] **************************
failed: [myserver-v0-0-1-ord -> 127.0.0.1] => {"failed": true}
msg: Load Balancer '123456' has a status of 'PENDING_UPDATE' and is considered immutable.
changed: [myserver-v0-0-1-ord -> 127.0.0.1]
我的Playbook在rax_clb_nodes中定义了wait=yes
和wait_timeout=60
,所以我不确定为什么会这样。
对修复的任何见解?
答案 0 :(得分:0)
这种情况正在发生,因为代表库存中每个匹配主机并行执行rax_clb_nodes
任务,但一次只能执行一个负载均衡器更新。有一些方法可以串行执行它,取决于你的剧本的组织方式。
如果可以轻松将此任务移至自己的游戏中,请使用serial: 1
代表一个主机执行该任务:
- name: Load balancer membership
hosts: build-servers
serial: 1
tasks:
- name: Add {{ inventory_hostname }} node to the load balancer
local_action:
module: rax_clb_nodes
address: "{{ rax_addresses.private.0.addr }}"
port: 443
state: present
wait: yes
wait_timeout: 60
# ...
不幸的是,serial
一次只能在整个游戏中指定,而不是单个任务。如果任务无法轻松移动到自己的游戏中(例如,如果它位于角色内或包含的任务列表中),则可以通过{的组合实现串行执行{3}}和run_once
:
- name: Add nodes to load balancer
local_action:
module: rax_clb_nodes
address: "{{ hostvars[item].rax_addresses.private.0.addr }}"
port: 443
state: present
wait: yes
wait_timeout: 60
# ...
run_once: yes
with_items: "{{ groups['build-servers'] }}"