amazon-web-services - Ansible - 即使在以前失败的情况下也能发挥作用
问题描述
我正在构建亚马逊 AMI 构建器剧本。这个想法是:
- 生成一个 EC2 实例
- 提供它
- 注册 AMI
- 终止 EC2 实例
在任何情况下,我都想终止 EC2 实例,即使之前的步骤失败了。
我的剧本目前看起来像(生成的 EC2 实例被动态添加到角色中的ec2_servers
组中aws_spawn_ec2
)):
---
- hosts: localhost
connection: local
gather_facts: False
roles:
- role: aws_spawn_ec2
vars:
ec2_host_group: ec2_servers
- hosts: ec2_servers
roles:
- role: provision_ec2
- hosts: localhost
connection: local
gather_facts: False
roles:
- role: aws_ami_register
- hosts: localhost
connection: local
gather_facts: False
roles:
-role: aws_terminate_ec2
即使以前的播放失败,我也希望运行最后的播放。有没有(最好是干净的)这样做的方法?
[编辑] 我试过@Z.Liu 的回答,我得到了以下错误:
ERROR! 'delegate_to' is not a valid attribute for a IncludeRole
然后我尝试了:
- name: provision ec2
include_role:
name: provision_ec2
apply:
delegate_to: ec2_servers
但我现在有这个错误:
TASK [provision ec2 : Check if reboot is required] **********************************************************************************************************
fatal: [localhost]: FAILED! => {"msg": "The conditional check 'reboot_required.stat.exists' failed. The error was: error while evaluating conditional (reboot_required.stat.exists): 'dict object' has no attribute 'stat'"}
我有ansible 2.9.10
谢谢
解决方案
- ansible 方法,您可以利用 ansible
delegate_to
和block always
delegate_to
可以让你在其他主机上运行剧本
always
无论之前的任务结果如何,都会执行任务。
- name: update AMI
hosts: localhost
tasks:
- name: spawn new ec2 instance
include_role:
name: aws_spawn_ec2
vars:
ec2_host_group: ec2_servers
- name: provision only spaw ec2 succeed
block:
- name: provision ec2
include_role:
name: provision_ec2
delegate_to: ec2_servers
- name: registe aws AMI
include_role:
name: aws_ami_register
always:
- name: terminate ec2 instance regardless of the ami registration results
include_role:
name: aws_terminate_ec2
- 您也可以使用 packer,在 AWS 中构建 AMI 更容易。 https://www.packer.io/intro
推荐阅读
- java - 在 Android Studio (JAVA) 中手动更改指甲颜色
- kubernetes - securityContext.privileged:禁止:集群策略不允许
- html - 如何正确渲染 React.js - 不渲染
- python - 根据另一个字段中的选择显示/隐藏 django 管理表单字段
- jquery - 如何在 jquery 中获取标签的值?
- c# - 如何获取表格单元格的前一个节点
- regex - 打印html标签的开始
- javascript - Angular 4 - 如何解析模板中的连字符变量以进行 Karma 测试?
- python - 通过合并其他列并根据以前的列名重命名,向 pandas 数据框添加新列
- gitlab - 如何通过 API curl 将组添加到 gitlab 中的项目?