diff options
author | Chris Patterson <cpatterson@microsoft.com> | 2022-04-21 15:41:35 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-21 13:41:35 -0600 |
commit | 913c2987d3d2c354085847ca482736e0c215f7d4 (patch) | |
tree | 7517bbfe46a00e9757e84fd6e16047f3614c5f0e | |
parent | 622dcf5620514f63f6a19681506998de7478d35f (diff) | |
download | cloud-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-x | cloudinit/sources/DataSourceAzure.py | 2 | ||||
-rw-r--r-- | tests/unittests/sources/test_azure.py | 25 |
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), |