我们在aws中运行了100台机器,标签为Name = ad_server 那我怎么能只运行50%的机器发布代码。 例如:
- hosts: tag_Name_ad_server
sudo: yes
remote_user: ubuntu
tasks:
- name: whatever
所以我怎么能这样做..
答案 0 :(得分:8)
这将使用批次的标准功能滚动更新并需要一些用户交互
我们添加带有提示的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
每个Playbook运行serial
将始终从库存中选择相同的服务器。在这种情况下,首先从列表中获得50%。
循环遍历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
随着Playbook的运行,random
将从列表中选择50%的随机服务器。
如果您只有一个任务要运行,您可以使用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