Ansible / Rackspace - 将多个节点添加到负载均衡器

时间:2016-07-13 21:00:50

标签: ansible load-balancing rackspace

我使用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=yeswait_timeout=60,所以我不确定为什么会这样。

对修复的任何见解?

1 个答案:

答案 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'] }}"