sailesh1993 / rpms / cloud-init

Forked from rpms/cloud-init 10 months ago
Clone
c1c26e
From b2500e258b930479cef36f514fcf9581ba68c976 Mon Sep 17 00:00:00 2001
c1c26e
From: Eduardo Otubo <otubo@redhat.com>
c1c26e
Date: Wed, 29 May 2019 13:41:48 +0200
c1c26e
Subject: [PATCH 4/5] DataSourceAzure: Adjust timeout for polling IMDS
c1c26e
c1c26e
RH-Author: Eduardo Otubo <otubo@redhat.com>
c1c26e
Message-id: <20190529134149.842-5-otubo@redhat.com>
c1c26e
Patchwork-id: 88267
c1c26e
O-Subject: [RHEL-8.0.1/RHEL-8.1.0 cloud-init PATCHv2 4/5] DataSourceAzure: Adjust timeout for polling IMDS
c1c26e
Bugzilla: 1691986
c1c26e
RH-Acked-by: Vitaly Kuznetsov <vkuznets@redhat.com>
c1c26e
RH-Acked-by: Cathy Avery <cavery@redhat.com>
c1c26e
c1c26e
From: Anh Vo <anhvo@microsoft.com>
c1c26e
commit ab6621d849b24bb652243e88c79f6f3b446048d7
c1c26e
Author: Anh Vo <anhvo@microsoft.com>
c1c26e
Date:   Wed May 8 14:54:03 2019 +0000
c1c26e
c1c26e
    DataSourceAzure: Adjust timeout for polling IMDS
c1c26e
c1c26e
    If the IMDS primary server is not available, falling back to the
c1c26e
    secondary server takes about 1s. The net result is that the
c1c26e
    expected E2E time is slightly more than 1s. This change increases
c1c26e
    the timeout to 2s to prevent the infinite loop of timeouts.
c1c26e
c1c26e
Signed-off-by: Eduardo Otubo <otubo@redhat.com>
c1c26e
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
c1c26e
---
c1c26e
 cloudinit/sources/DataSourceAzure.py          | 15 ++++++++++-----
c1c26e
 tests/unittests/test_datasource/test_azure.py | 10 +++++++---
c1c26e
 2 files changed, 17 insertions(+), 8 deletions(-)
c1c26e
c1c26e
diff --git a/cloudinit/sources/DataSourceAzure.py b/cloudinit/sources/DataSourceAzure.py
c1c26e
index c827816..5baf8da 100755
c1c26e
--- a/cloudinit/sources/DataSourceAzure.py
c1c26e
+++ b/cloudinit/sources/DataSourceAzure.py
c1c26e
@@ -57,7 +57,12 @@ AZURE_CHASSIS_ASSET_TAG = '7783-7084-3265-9085-8269-3286-77'
c1c26e
 REPROVISION_MARKER_FILE = "/var/lib/cloud/data/poll_imds"
c1c26e
 REPORTED_READY_MARKER_FILE = "/var/lib/cloud/data/reported_ready"
c1c26e
 AGENT_SEED_DIR = '/var/lib/waagent'
c1c26e
+
c1c26e
+# In the event where the IMDS primary server is not
c1c26e
+# available, it takes 1s to fallback to the secondary one
c1c26e
+IMDS_TIMEOUT_IN_SECONDS = 2
c1c26e
 IMDS_URL = "http://169.254.169.254/metadata/"
c1c26e
+
c1c26e
 PLATFORM_ENTROPY_SOURCE = "/sys/firmware/acpi/tables/OEM0"
c1c26e
 
c1c26e
 # List of static scripts and network config artifacts created by
c1c26e
@@ -582,9 +587,9 @@ class DataSourceAzure(sources.DataSource):
c1c26e
                         return
c1c26e
                     self._ephemeral_dhcp_ctx.clean_network()
c1c26e
                 else:
c1c26e
-                    return readurl(url, timeout=1, headers=headers,
c1c26e
-                                   exception_cb=exc_cb, infinite=True,
c1c26e
-                                   log_req_resp=False).contents
c1c26e
+                    return readurl(url, timeout=IMDS_TIMEOUT_IN_SECONDS,
c1c26e
+                                   headers=headers, exception_cb=exc_cb,
c1c26e
+                                   infinite=True, log_req_resp=False).contents
c1c26e
             except UrlError:
c1c26e
                 # Teardown our EphemeralDHCPv4 context on failure as we retry
c1c26e
                 self._ephemeral_dhcp_ctx.clean_network()
c1c26e
@@ -1291,8 +1296,8 @@ def _get_metadata_from_imds(retries):
c1c26e
     headers = {"Metadata": "true"}
c1c26e
     try:
c1c26e
         response = readurl(
c1c26e
-            url, timeout=1, headers=headers, retries=retries,
c1c26e
-            exception_cb=retry_on_url_exc)
c1c26e
+            url, timeout=IMDS_TIMEOUT_IN_SECONDS, headers=headers,
c1c26e
+            retries=retries, exception_cb=retry_on_url_exc)
c1c26e
     except Exception as e:
c1c26e
         LOG.debug('Ignoring IMDS instance metadata: %s', e)
c1c26e
         return {}
c1c26e
diff --git a/tests/unittests/test_datasource/test_azure.py b/tests/unittests/test_datasource/test_azure.py
c1c26e
index eacf225..bc8b42c 100644
c1c26e
--- a/tests/unittests/test_datasource/test_azure.py
c1c26e
+++ b/tests/unittests/test_datasource/test_azure.py
c1c26e
@@ -163,7 +163,8 @@ class TestGetMetadataFromIMDS(HttprettyTestCase):
c1c26e
 
c1c26e
         m_readurl.assert_called_with(
c1c26e
             self.network_md_url, exception_cb=mock.ANY,
c1c26e
-            headers={'Metadata': 'true'}, retries=2, timeout=1)
c1c26e
+            headers={'Metadata': 'true'}, retries=2,
c1c26e
+            timeout=dsaz.IMDS_TIMEOUT_IN_SECONDS)
c1c26e
 
c1c26e
     @mock.patch('cloudinit.url_helper.time.sleep')
c1c26e
     @mock.patch(MOCKPATH + 'net.is_up')
c1c26e
@@ -1789,7 +1790,8 @@ class TestAzureDataSourcePreprovisioning(CiTestCase):
c1c26e
                                     headers={'Metadata': 'true',
c1c26e
                                              'User-Agent':
c1c26e
                                              'Cloud-Init/%s' % vs()
c1c26e
-                                             }, method='GET', timeout=1,
c1c26e
+                                             }, method='GET',
c1c26e
+                                    timeout=dsaz.IMDS_TIMEOUT_IN_SECONDS,
c1c26e
                                     url=full_url)])
c1c26e
         self.assertEqual(m_dhcp.call_count, 2)
c1c26e
         m_net.assert_any_call(
c1c26e
@@ -1826,7 +1828,9 @@ class TestAzureDataSourcePreprovisioning(CiTestCase):
c1c26e
                                     headers={'Metadata': 'true',
c1c26e
                                              'User-Agent':
c1c26e
                                              'Cloud-Init/%s' % vs()},
c1c26e
-                                    method='GET', timeout=1, url=full_url)])
c1c26e
+                                    method='GET',
c1c26e
+                                    timeout=dsaz.IMDS_TIMEOUT_IN_SECONDS,
c1c26e
+                                    url=full_url)])
c1c26e
         self.assertEqual(m_dhcp.call_count, 2)
c1c26e
         m_net.assert_any_call(
c1c26e
             broadcast='192.168.2.255', interface='eth9', ip='192.168.2.9',
c1c26e
-- 
c1c26e
1.8.3.1
c1c26e