如何在Ansibe中的50%机器上发布代码

Obi*_*van 3 amazon-ec2 ansible

我们在aws中运行了100台具有标签名称= ad_server的机器,那么我如何只运行50%的机器发布代码.例:

 - hosts: tag_Name_ad_server
   sudo: yes
   remote_user: ubuntu

   tasks:
     - name: whatever
Run Code Online (Sandbox Code Playgroud)

那怎么能这样做..

Kon*_*rov 8

选项1:串行+暂停

这将使用批处理的标准功能来滚动更新并需要一些用户交互.
我们添加pause提示作为第一个任务,等待每个批次开始时按下ENTER.
因此,在第一个50%-batch上按ENTER键,然后在被要求开始下半场时中止执行.

- hosts: tag_Name_ad_server
  user: ubuntu
  serial: "50%"
  tasks:
    - pause: prompt="Press ENTER to run this batch"
    - shell: echo task1
    - shell: echo task2
Run Code Online (Sandbox Code Playgroud)

每个playbook运行serial总是从库存中选择相同的服务器.在这种情况下,首先50%来自列表.

选项2:组建一个新的动态组

循环遍历tag_Name_ad_server组中的主机并形成新的50_percent组.
然后在这个新组中执行您的实际任务.
无需用户交互.

- hosts: tag_Name_ad_server
  gather_facts: no
  tasks:
    - group_by: key=50_percent
      when: 100 | random > 50

- hosts: 50_percent
  user: ubuntu
  tasks:
    - shell: echo task1
    - shell: echo task2
Run Code Online (Sandbox Code Playgroud)

随着playbook运行random将从列表中选择50%的随机服务器.

选项3:max_fail_percentage的脏技巧

如果只有一个任务要运行,则可以使用max_fail_percentage: -1在第一个批处理的第一个任务后停止执行.
这将产生50%的分数,在该批次的每个主机上执行第一个任务并检查失败的服务器计数,因为它始终高于-1,playbook将停止执行.

- hosts: tag_Name_ad_server
  user: ubuntu
  serial: "50%"
  max_fail_percentage: -1
  tasks:
    - shell: echo task1
    - shell: echo task2 # this task will never be executed with max_fail_percentage == -1
Run Code Online (Sandbox Code Playgroud)