Read the documentation for ec2_ami:
https://docs.ansible.com/ansible/latest/modules/ec2_ami_module.html#return-values
... or the doco for the particular version of Ansible that you are using.
The section "Return values" describes the structure inside your registered
variable "ami".
It looks to me as if to retrieve the AMI ID, you need to use "{{
ami.image_id }}".
'dict object' has no attribute 'result' means "there is no thing called
'result' inside the variable you are looking at".
That means you either have the wrong variable (and 'result' is to be found
in a different variable) or you have the correct variable, but there is
nothing called "result" inside it.
Regards, K.
On Wed, Dec 5, 2018 at 7:23 PM shaneoh1980 McP <[email protected]>
wrote:
> Ah yes, apologies for that. So I've corrected that, but getting an
> undefined variable error.
>
> fatal: [server.mydomain.com]: FAILED! => {"msg": "The task includes an
> option with an undefined variable. The error was: 'dict object' has no
> attribute 'results'\n\nThe error appears to have been in
> '/opt/ansible-scripts/update/create-ami.new.yml': line 14, 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: set ami id\n ^ here\n"
> }
>
>
>
> On Tuesday, 4 December 2018 16:29:56 UTC, Karl Auer wrote:
>>
>> The line where you set new_ami_id, immediately below set_fact:, does not
>> appear to be indented correctly. Indent it a few spaces and try again.
>>
>> Regards, K.
>>
>>
>> On Wed, Dec 5, 2018 at 3:17 AM shaneoh1980 McP <[email protected]>
>> wrote:
>>
>>> 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]>
>>>> 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]> 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]>
>>>>>> 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].
>>>>>>> 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/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]
>>>>>> 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].
>>>>>> 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/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].
>>>>> 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/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]
>>>> 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
>>> <https://groups.google.com/d/msgid/ansible-project/a37cfe49-febb-4ea6-a6d9-9058e360be71%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>
>> --
>> Karl Auer
>>
>> Email : [email protected]
>> 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/1eef7d41-cd3c-47e2-b7da-905c51f1918a%40googlegroups.com
> <https://groups.google.com/d/msgid/ansible-project/1eef7d41-cd3c-47e2-b7da-905c51f1918a%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>
--
Karl Auer
Email : [email protected]
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/CA%2B%2BT08SPaoujZz%3DeX5PCe-tvfNSW4WTtW%3D%2B5-J5KQGXgACi8Gg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.