From 9c9a70b168ac1350eaf5d7ce626fdccb537c5937 Mon Sep 17 00:00:00 2001 From: Ryan Brown Date: Mon, 23 Apr 2018 15:58:35 -0400 Subject: [PATCH] Add retry to ec2_metadata_facts query (#38957) * Add retry to ec2_metadata_facts query * Fix conditional to allow for 404 errors --- .../modules/cloud/amazon/ec2_metadata_facts.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/ansible/modules/cloud/amazon/ec2_metadata_facts.py b/lib/ansible/modules/cloud/amazon/ec2_metadata_facts.py index 4594058d9d8..d2ae6deb511 100644 --- a/lib/ansible/modules/cloud/amazon/ec2_metadata_facts.py +++ b/lib/ansible/modules/cloud/amazon/ec2_metadata_facts.py @@ -420,6 +420,7 @@ ansible_facts: import json import re import socket +import time from ansible.module_utils.basic import AnsibleModule from ansible.module_utils._text import to_text @@ -445,7 +446,16 @@ class Ec2Metadata(object): self._prefix = 'ansible_ec2_%s' def _fetch(self, url): - (response, info) = fetch_url(self.module, url, force=True) + response, info = fetch_url(self.module, url, force=True) + + if info.get('status') not in (200, 404): + time.sleep(3) + # request went bad, retry once then raise + self.module.warn('Retrying query to metadata service. First attempt failed: {0}'.format(info['msg'])) + response, info = fetch_url(self.module, url, force=True) + if info.get('status') not in (200, 404): + # fail out now + self.module.fail_json(msg='Failed to retrieve metadata from AWS: {0}'.format(info['msg']), response=info) if response: data = response.read() else: