summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Patterson <cpatterson@microsoft.com>2022-04-21 15:41:35 -0400
committerGitHub <noreply@github.com>2022-04-21 13:41:35 -0600
commit913c2987d3d2c354085847ca482736e0c215f7d4 (patch)
tree7517bbfe46a00e9757e84fd6e16047f3614c5f0e
parent622dcf5620514f63f6a19681506998de7478d35f (diff)
downloadcloud-init-git-913c2987d3d2c354085847ca482736e0c215f7d4.tar.gz
Fix provisioning dhcp timeout to 20 minutes (#1394)
While this was a previously intended change, the actual logic was backwards. Try for 20 minutes during provisioning, only 5 minutes otherwise. Add test coverage to verify the timeout for provisioning scenarios.
-rwxr-xr-xcloudinit/sources/DataSourceAzure.py2
-rw-r--r--tests/unittests/sources/test_azure.py25
2 files changed, 26 insertions, 1 deletions
diff --git a/cloudinit/sources/DataSourceAzure.py b/cloudinit/sources/DataSourceAzure.py
index 81414f92..65ed990a 100755
--- a/cloudinit/sources/DataSourceAzure.py
+++ b/cloudinit/sources/DataSourceAzure.py
@@ -530,7 +530,7 @@ class DataSourceAzure(sources.DataSource):
# If we require IMDS metadata, try harder to obtain networking, waiting
# for at least 20 minutes. Otherwise only wait 5 minutes.
requires_imds_metadata = bool(self._iso_dev) or not ovf_is_accessible
- timeout_minutes = 5 if requires_imds_metadata else 20
+ timeout_minutes = 20 if requires_imds_metadata else 5
try:
self._setup_ephemeral_networking(timeout_minutes=timeout_minutes)
except NoDHCPLeaseError:
diff --git a/tests/unittests/sources/test_azure.py b/tests/unittests/sources/test_azure.py
index 21e22012..f9f65c48 100644
--- a/tests/unittests/sources/test_azure.py
+++ b/tests/unittests/sources/test_azure.py
@@ -50,6 +50,16 @@ def azure_ds(paths):
@pytest.fixture
+def mock_wrapping_setup_ephemeral_networking(azure_ds):
+ with mock.patch.object(
+ azure_ds,
+ "_setup_ephemeral_networking",
+ wraps=azure_ds._setup_ephemeral_networking,
+ ) as m:
+ yield m
+
+
+@pytest.fixture
def mock_azure_helper_readurl():
with mock.patch(
"cloudinit.sources.helpers.azure.url_helper.readurl", autospec=True
@@ -4013,6 +4023,7 @@ class TestProvisioning:
mock_util_load_file,
mock_util_mount_cb,
mock_util_write_file,
+ mock_wrapping_setup_ephemeral_networking,
):
self.azure_ds = azure_ds
self.mock_azure_get_metadata_from_fabric = (
@@ -4039,6 +4050,9 @@ class TestProvisioning:
self.mock_util_load_file = mock_util_load_file
self.mock_util_mount_cb = mock_util_mount_cb
self.mock_util_write_file = mock_util_write_file
+ self.mock_wrapping_setup_ephemeral_networking = (
+ mock_wrapping_setup_ephemeral_networking
+ )
self.imds_md = {
"extended": {"compute": {"ppsType": "None"}},
@@ -4095,6 +4109,9 @@ class TestProvisioning:
]
# Verify DHCP is setup once.
+ assert self.mock_wrapping_setup_ephemeral_networking.mock_calls == [
+ mock.call(timeout_minutes=20)
+ ]
assert self.mock_net_dhcp_maybe_perform_dhcp_discovery.mock_calls == [
mock.call(None, dsaz.dhcp_log_cb)
]
@@ -4182,6 +4199,10 @@ class TestProvisioning:
]
# Verify DHCP is setup twice.
+ assert self.mock_wrapping_setup_ephemeral_networking.mock_calls == [
+ mock.call(timeout_minutes=20),
+ mock.call(timeout_minutes=5),
+ ]
assert self.mock_net_dhcp_maybe_perform_dhcp_discovery.mock_calls == [
mock.call(None, dsaz.dhcp_log_cb),
mock.call(None, dsaz.dhcp_log_cb),
@@ -4301,6 +4322,10 @@ class TestProvisioning:
]
# Verify DHCP is setup twice.
+ assert self.mock_wrapping_setup_ephemeral_networking.mock_calls == [
+ mock.call(timeout_minutes=20),
+ mock.call(iface="ethAttached1", timeout_minutes=20),
+ ]
assert self.mock_net_dhcp_maybe_perform_dhcp_discovery.mock_calls == [
mock.call(None, dsaz.dhcp_log_cb),
mock.call("ethAttached1", dsaz.dhcp_log_cb),