【发布时间】:2016-09-27 07:49:27
【问题描述】:
我正在为我的项目设置 Ansible 动态清单配置。当发生 AWS 自动缩放事件时,会向 Jenkins(通过 Ansible 管理构建过程)发出请求以触发在新添加的服务器上的构建。
由于动态清单使用基于标签的方法,自动缩放事件会添加新服务器并触发构建。但是,在所有服务器上都会触发新构建,因为旧服务器和新添加的服务器中都存在相同的标签。
我正在采取的解决方法是在参数化构建过程中将公共 ip 参数传递给 Jenkins。然后可以使用此公共 IP 来决定两个 Ansible 命令中的任何一个:
if ["x$public_ip" == "x"] then
ansible-playbook -i inventories/demo api.yml
else
ansible-playbook -i $public_ip, api.yml
第一个命令将实质上指示 Ansible 在所有带有标签的服务器上运行构建过程。
从第二个命令我想告诉 ansible 它应该只在新添加的服务器上运行构建。我的 api.yml 文件看起来像
---
- hosts: apiservers
sudo: yes
roles:
- common
现在我应该能够知道主机“apiservers”是什么意思,或者基本上所有 IP 都包含在这个组中。如果涉及更多主机,我应该能够在通过 shell 运行的同一命令中传递多个组及其对应的 IP 地址。
有什么想法吗?
【问题讨论】:
标签: amazon-web-services amazon-ec2 ansible ansible-playbook autoscaling