Amazon web services Ansible-即使在以前失败的情况下也能发挥作用

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的有效属性 然后我试着:

我正在建立一个亚马逊AMI建设者剧本。这个想法是:

  • 生成一个EC2实例
  • 提供它
  • 注册AMI
  • 终止EC2实例
在任何情况下,我都希望终止EC2实例,即使前面的步骤失败

我的剧本目前看起来像(生成的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

谢谢

  • 易变法 您可以利用ansible
    委托给
    始终阻止
  • 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,它更容易在AWS中构建AMI。

  • 谢谢你的帮助。不幸的是,我没能使你的建议奏效。我据此编辑了我的问题。我们不想使用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