This is the playbook:

- hosts: webservers
  remote_user: ubuntu
  tasks:
    - name: create an ami
      ec2_ami:
        region: eu-west-2
        instance_id: i-077xxxxxxxxxxx
        name: "{{ inventory_hostname }}-{{ 
ansible_date_time.iso8601_basic_short }}"
        tags:
          Name: "{{ inventory_hostname }}-{{ 
ansible_date_time.iso8601_basic_short }}"
      register: ami


    - name: set ami id
      set_fact:
      new_ami_id: "{{ ami.results[0].image_id }}"


    - pause:
        seconds: 60


    - name: copy AMI to a different region
      ec2_ami_copy:
        source_region: eu-west-2
        source_image_id: "{{ new_ami_id }}"
        name: "{{ new_ami_id }}"
        region: eu-west-1

And the full output:

ansible-playbook 2.6.4
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/ubuntu/.ansible/plugins/modules', 
u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible-playbook
  python version = 2.7.15rc1 (default, Nov 12 2018, 14:31:15) [GCC 7.3.0]
Using /etc/ansible/ansible.cfg as config file
 [WARNING]: Ignoring invalid attribute: new_ami_id




PLAYBOOK: create-ami.new.yml 
**************************************************************************************************************************************************************************************
1 plays in create-ami.new.yml


PLAY [webservers] 
*************************************************************************************************************************************************************************************************


TASK [Gathering Facts] 
********************************************************************************************************************************************************************************************
task path: /opt/ansible-scripts/update/create-ami.new.yml:2
ok: [server.mydomain.com]
META: ran handlers


TASK [create an ami] 
**********************************************************************************************************************************************************************************************
task path: /opt/ansible-scripts/update/create-ami.new.yml:5
changed: [server.mydomain.com] => {"architecture": "x86_64", 
"block_device_mapping": {}, "changed": true, "creationDate": 
"2018-12-04T16:14:50.000Z", "description": "", "enhanced_networking": true, 
"hypervisor": "xen", "image_id": "ami-02867e4b6aec13ee5", 
"image_owner_alias": null, "image_type": "machine", "is_public": false, 
"kernel_id": null, "launch_permissions": [], "location": 
"541818391026/server.mydomain.com-20181204T161449", "msg": "AMI creation 
operation complete.", "name": "server.mydomain.com-20181204T161449", 
"ownerId": "541818391026", "platform": null, "product_codes": [], 
"ramdisk_id": null, "root_device_name": null, "root_device_type": "ebs", 
"sriov_net_support": null, "state": "pending", "state_reason": null, "tags": 
{"Name": "server.mydomain.com-20181204T161449"}, "virtualization_type": 
"hvm"}


TASK [set ami id] 
*************************************************************************************************************************************************************************************************
task path: /opt/ansible-scripts/update/create-ami.new.yml:14
ok: [server.mydomain.com] => {"ansible_facts": {}, "changed": false}


TASK [pause] 
******************************************************************************************************************************************************************************************************
task path: /opt/ansible-scripts/update/create-ami.new.yml:18
Pausing for 60 seconds
(ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort)
ok: [server.mydomain.com] => {"changed": false, "delta": 60, "echo": true, 
"rc": 0, "start": "2018-12-04 16:14:51.149347", "stderr": "", "stdout": "Paused 
for 60.0 seconds", "stop": "2018-12-04 16:15:51.149596", "user_input": ""}


TASK [copy AMI to a different region] 
*****************************************************************************************************************************************************************************
task path: /opt/ansible-scripts/update/create-ami.new.yml:21
fatal: [server.mydomain.com]: FAILED! => {"msg": "The task includes an 
option with an undefined variable. The error was: 'new_ami_id' is 
undefined\n\nThe error appears to have been in 
'/opt/ansible-scripts/update/create-ami.new.yml': line 21, column 7, but 
may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe 
offending line appears to be:\n\n\n    - name: copy AMI to a different 
region\n      ^ here\n"}
        to retry, use: --limit @/opt/ansible-scripts/update/create-ami.new.
retry


PLAY RECAP 
********************************************************************************************************************************************************************************************************
server.mydomain.com    : ok=4    changed=1    unreachable=0    failed=1


On Tuesday, 4 December 2018 16:03:22 UTC, Karl Auer wrote:
>
> On what line was that error thrown?
>
> I think you should provide the entire playbook and the complete output.
>
> Regards, K.
>
>
> On Wed, Dec 5, 2018 at 2:37 AM shaneoh1980 McP <[email protected] 
> <javascript:>> wrote:
>
>> I had actually tried that already, and when I do I get this error:
>>
>> "msg": "The task includes an option with an undefined variable. The error 
>> was: 'new_ami_id' is undefined\
>>
>> Which is confusing because it seems to me it clearly is being defined.
>>
>> On Tue, 4 Dec 2018 at 15:26, Karl Auer <[email protected] 
>> <javascript:>> wrote:
>>
>>> You need to wrap wrap the variable up in curly braces so that it is 
>>> interpreted rather than taken literally.
>>>
>>> I.e., where you have:
>>> new_ami_id: ami.results[0].image_id
>>>
>>> you need:
>>> new_ami_id: "{{ ami.results[0].image_id }}"
>>>
>>> Regards, K.
>>>
>>> On Wed, Dec 5, 2018 at 2:14 AM shaneoh1980 McP <[email protected] 
>>> <javascript:>> wrote:
>>>
>>>> After more searching I also tried this:
>>>>
>>>> ---
>>>> - hosts: webservers
>>>>   remote_user: ubuntu
>>>>   tasks:
>>>>     - name: create an ami
>>>>       ec2_ami:
>>>>         region: eu-west-2
>>>>         instance_id: i-0771xxxxxxxxxx
>>>>         name: "{{ inventory_hostname }}-{{ 
>>>> ansible_date_time.iso8601_basic_short }}"
>>>>         tags:
>>>>           Name: "{{ inventory_hostname }}-{{ 
>>>> ansible_date_time.iso8601_basic_short }}"
>>>>       register: ami
>>>>
>>>>
>>>>     - name: set ami id
>>>>       set_fact:
>>>>         new_ami_id: ami.results[0].image_id
>>>>
>>>>
>>>>     - pause:
>>>>         seconds: 60
>>>>
>>>>
>>>>     - name: copy AMI to a different region
>>>>       ec2_ami_copy:
>>>>         source_region: eu-west-2
>>>>         source_image_id: "{{ new_ami_id }}"
>>>>         name: "{{ new_ami_id }}"
>>>>         region: eu-west-1
>>>>
>>>> But again, Ansible seems to interpret this literally:
>>>>
>>>> ami.results[0].image_id
>>>>
>>>> Rather than finding the ID of the newly created AMI.
>>>>
>>>> On Tuesday, 4 December 2018 12:04:52 UTC, shaneoh1980 McP wrote:
>>>>>
>>>>> I am trying to create a playbook which does the following:
>>>>>
>>>>>
>>>>>    - creates an image of an AWS instance
>>>>>    - copies the image to a different region
>>>>>    - installs updates to the instance
>>>>>
>>>>>
>>>>> I can do all of this apart from getting the AMI to copy to a different 
>>>>> region. I've tried a few things but this is my current playbook (this is 
>>>>> only for the AMI creation and copying, installing updates is handled 
>>>>> separately). 
>>>>>
>>>>> - hosts: webservers
>>>>>   remote_user: ubuntu
>>>>>   tasks:
>>>>>     - name: create an ami
>>>>>       ec2_ami:
>>>>>         region: eu-west-2
>>>>>         instance_id: i-0771a2e4289c057e9
>>>>>         name: "{{ inventory_hostname }}-{{ 
>>>>> ansible_date_time.iso8601_basic_short }}"
>>>>>         tags:
>>>>>           Name: "{{ inventory_hostname }}-{{ 
>>>>> ansible_date_time.iso8601_basic_short }}"
>>>>>
>>>>>
>>>>>     - name: set ID name
>>>>>       set_fact:
>>>>>         new_ami_name: ec2_ami.image_id
>>>>>
>>>>>
>>>>>     - pause:
>>>>>         seconds: 60
>>>>>
>>>>>
>>>>>     - name: copy AMI to a different region
>>>>>       ec2_ami_copy:
>>>>>         source_region: eu-west-2
>>>>>         source_image_id: "{{ new_ami_name }}"
>>>>>         name: "{{ new_ami_name }}"
>>>>>         region: eu-west-1
>>>>>
>>>>> For which the creation, setting fact, and pause work, but on the last 
>>>>> part I get this error output:
>>>>>
>>>>> An exception occurred during task execution. To see the full traceback
>>>>> , use -vvv. The error was: ClientError: An error occurred (
>>>>> InvalidAMIID.Malformed) when calling the CopyImage operation: Invalid 
>>>>> id: "ec2_ami.image_id" (expecting "ami-...")
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> I've tried a few different things I'm fairly new to Ansible, but 
>>>>> basically I can't figure out how to pass the image_id of the newly 
>>>>> created 
>>>>> AMI to the next play so that it can use this as the basis of the copying.
>>>>>
>>>>> I can see clearly that it's not registering the image_id as it's 
>>>>> saying it's not in the expected "ami-" format, but I'm stuck from there.
>>>>>  
>>>>>
>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "Ansible Project" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to [email protected] <javascript:>.
>>>> To post to this group, send email to [email protected] 
>>>> <javascript:>.
>>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msgid/ansible-project/8995dac7-5f1b-470f-b1e6-11ce3b1a4074%40googlegroups.com
>>>>  
>>>> <https://groups.google.com/d/msgid/ansible-project/8995dac7-5f1b-470f-b1e6-11ce3b1a4074%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>
>>> -- 
>>> Karl Auer
>>>
>>> Email  : [email protected] <javascript:>
>>> Website: http://2pisoftware.com
>>>
>>> GPG/PGP : 958A 2647 6C44 D376 3D63 86A5 FFB2 20BC 0257 5816
>>> Previous: F0AB 6C70 A49D 1927 6E05 81E7 AD95 268F 2AB6 40EA
>>>
>>> -- 
>>> You received this message because you are subscribed to a topic in the 
>>> Google Groups "Ansible Project" group.
>>> To unsubscribe from this topic, visit 
>>> https://groups.google.com/d/topic/ansible-project/ouLsLPAFuec/unsubscribe
>>> .
>>> To unsubscribe from this group and all its topics, send an email to 
>>> [email protected] <javascript:>.
>>> To post to this group, send email to [email protected] 
>>> <javascript:>.
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/ansible-project/CA%2B%2BT08SN%3DZL1hX%3DBEBCB%3DYKi40rhd6Y%2BHeCTkopjOKRFgS6zEQ%40mail.gmail.com
>>>  
>>> <https://groups.google.com/d/msgid/ansible-project/CA%2B%2BT08SN%3DZL1hX%3DBEBCB%3DYKi40rhd6Y%2BHeCTkopjOKRFgS6zEQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Ansible Project" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <javascript:>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/ansible-project/CAEu1aFzMhVJ-ZGiE0tG48vvRw42Z3tR5qFmGTKxOD33kWvygeQ%40mail.gmail.com
>>  
>> <https://groups.google.com/d/msgid/ansible-project/CAEu1aFzMhVJ-ZGiE0tG48vvRw42Z3tR5qFmGTKxOD33kWvygeQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
> -- 
> Karl Auer
>
> Email  : [email protected] <javascript:>
> Website: http://2pisoftware.com
>
> GPG/PGP : 958A 2647 6C44 D376 3D63 86A5 FFB2 20BC 0257 5816
> Previous: F0AB 6C70 A49D 1927 6E05 81E7 AD95 268F 2AB6 40EA
>

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/a37cfe49-febb-4ea6-a6d9-9058e360be71%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to