--- - hosts: local vars: src_region: 'us-east-1' dst_regions: - us-east-1 - us-west-1 - us-west-2 - eu-central-1 - eu-west-1 - ap-northeast-1 - ap-southeast-1 - ap-southeast-2 - sa-east-1 tasks: - fail: msg: 'No source AMI id defined, please provide a value for variable src_ami_id.' when: src_ami_id is undefined - name: Gather AMI information ec2_ami_find: ami_id: '{{ src_ami_id }}' region: '{{ src_region }}' no_result_action: fail register: ami_info - name: Assert that the AMI is not already public assert: that: 'not {{ item.is_public }}' with_items: ami_info.results - name: Copy AMI to desired regions command: 'ec2-copy-image --source-region {{ src_region }} --source-ami-id {{ src_ami_id }} --region {{ item }} --client-token {{ src_ami_id }}-{{ item }}' with_items: dst_regions register: ami_copy # ec2_ami_copy: # source_region: '{{ src_region }}' # region: '{{ item }}' # source_image_id: '{{ ami_info.results[0].ami_id }}' # name: '{{ ami_info.results[0].name }}' # description: '{{ ami_info.results[0].description }}' # tags: '{{ ami_info.results[0].tags }}' # wait: true # with_items: dst_regions # register: ami_copy - name: Wait for AMI's to become available command: 'ec2-describe-images --region {{ item.item }} --filter state=available {{ item.stdout[-12:] }}' until: ami_available.stdout.find("available") != -1 retries: 10 delay: 120 with_items: ami_copy.results register: ami_available - name: Make image publicly available command: 'ec2-modify-image-attribute --region {{ item.item }} {{ item.stdout[-12:] }} --launch-permission -a all' with_items: ami_copy.results - name: Display AMI launch URL debug: msg: 'https://console.aws.amazon.com/ec2/home?region={{ item.item }}#launchAmi={{ item.stdout[-12:] }}' with_items: ami_copy.results when: ami_copy is defined