amazon-ec2 - 如何在 Ansible 的 50% 机器上发布代码

标签 amazon-ec2 ansible

我们在 aws 中运行了 100 台机器,标签为 Name=ad_server
那么我如何才能仅在 50% 的机器上运行发布代码。
例子:

 - hosts: tag_Name_ad_server
   sudo: yes
   remote_user: ubuntu

   tasks:
     - name: whatever

那我该怎么做..

最佳答案

选项 1:串行 + 暂停

这将使用批量的标准功能进行滚动更新,并需要一些用户交互。
我们添加 pause将提示作为第一个任务,等待在每个批次开始时按下 ENTER。
因此,在第一个 50% 批次上按 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

随着每个剧本的运行 serial将始终从 list 中选择相同的服务器。在这种情况下,列表中的前 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

随着剧本运行 random将从列表中随机选择 50% 的服务器。

选项 3:使用 max_fail_percentage 的肮脏技巧

如果你只有一个任务要运行,你可以使用 max_fail_percentage: -1在第一批的第一个任务后停止执行。
这将生成 50% 批次,在该批次的每个主机上执行第一个任务并检查失败的服务器计数,因为它总是高于 -1 剧本将停止执行。
- 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

关于amazon-ec2 - 如何在 Ansible 的 50% 机器上发布代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38262690/

相关文章:

apache - 在亚马逊 VPC 上设置多个 SSL 证书

即使配置为无密码,Ansible become_user 仍要求输入密码

authentication - 在具有域用户的 Windows 上使用 Ansible

command-line - 如何获取 Amazon EC2 集群中所有节点的公有 IP 地址?

python - 坚持亚马逊 ec2 实例的状态检查

amazon-ec2 - Cassandra 内存不足(堆空间)

python - 切换服务器时过滤损坏的引用 Django 电子邮件

unzip - 无法使用 Ansible 解压位于远程 centos 机器上的文件

ansible - 在 Ansible playbook 中循环列表数据

ansible - 将变量从就地渲染的 jinja2 模板包含到剧本中,无需中间文件