Amazon web services Ansible-即使在以前失败的情况下也能发挥作用
我正在建立一个亚马逊AMI建设者剧本。这个想法是:Amazon web services Ansible-即使在以前失败的情况下也能发挥作用,amazon-web-services,ansible,Amazon Web Services,Ansible,我正在建立一个亚马逊AMI建设者剧本。这个想法是: 生成一个EC2实例 提供它 注册AMI 终止EC2实例 在任何情况下,我都希望终止EC2实例,即使前面的步骤失败 我的剧本目前看起来像(生成的EC2实例被动态添加到aws\u spawn\u EC2角色中的EC2\u服务器组): 我希望即使前一场比赛失败,最后一场比赛也能继续进行。有没有(最好是干净的)方法 [编辑] 我尝试@Z.Liu回答,我得到以下错误: 错误delegate_to'不是IncludeRole的有效属性 然后我试着:
- 生成一个EC2实例
- 提供它
- 注册AMI
- 终止EC2实例
aws\u spawn\u EC2
角色中的EC2\u服务器
组):
我希望即使前一场比赛失败,最后一场比赛也能继续进行。有没有(最好是干净的)方法
[编辑]
我尝试@Z.Liu回答,我得到以下错误:
错误delegate_to'不是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'"}
我的答案是2.9.10
谢谢
委托给
和始终阻止
delegate_to
可以让您在其他主机上运行剧本
无论以前的任务结果如何,始终
都将执行该任务
- 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,原因超出了我的范围:)@jidey,哎呀,我想你把委托给的级别放错了,没有必要在这里使用apply。它应该是``-name:provision ec2 include\u角色:name:provision\u ec2委托给:ec2\u服务器
- 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