Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

24.1.4 test failures in no-network build environment #5211

Closed
nmeyerhans opened this issue Apr 25, 2024 · 3 comments
Closed

24.1.4 test failures in no-network build environment #5211

nmeyerhans opened this issue Apr 25, 2024 · 3 comments
Labels
bug Something isn't working correctly

Comments

@nmeyerhans
Copy link
Contributor

Bug report

Debian build environments lack network connectivity. When building in such an environment, the TestUpgrade.test_all_ds_init_vs_unpickle_attributes[mode1] test fails with the following output:

__________ TestUpgrade.test_all_ds_init_vs_unpickle_attributes[mode1] __________

self = <tests.unittests.test_upgrade.TestUpgrade object at 0x7fb3444264b0>
mode = ['FILESYSTEM', 'NETWORK']
mocker = <pytest_mock.plugin.MockerFixture object at 0x7fb2c673e180>
paths = <cloudinit.helpers.Paths object at 0x7fb2c673c890>
tmpdir = local('/tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1')

    @pytest.mark.parametrize(
        "mode",
        (
            [sources.DEP_FILESYSTEM],
            [sources.DEP_FILESYSTEM, sources.DEP_NETWORK],
        ),
    )
    @mock.patch.object(
        importer,
        "match_case_insensitive_module_name",
        lambda name: f"DataSource{name}",
    )
    def test_all_ds_init_vs_unpickle_attributes(
        self, mode, mocker, paths, tmpdir
    ):
        """Unpickle resets any instance attributes created in __init__
    
        This test asserts that deserialization of a datasource cache
        does proper initialization of any 'new' instance attributes
        created as a side-effect of the __init__ method.
    
        Without proper _unpickle coverage for newly introduced attributes,
        the new deserialized instance will hit AttributeErrors at runtime.
        """
        # Load all cloud-init init-local time-frame DataSource classes
        for ds_class in sources.list_sources(
            settings.CFG_BUILTIN["datasource_list"],
            mode,
            [type_utils.obj_name(sources)],
        ):
            # Expected common instance attrs from __init__ that are typically
            # handled via existing _unpickling and setup in _get_data
            common_instance_attrs = {
                "paths",
                "vendordata2",
                "sys_cfg",
                "ud_proc",
                "vendordata",
                "vendordata2_raw",
                "ds_cfg",
                "distro",
                "userdata",
                "userdata_raw",
                "metadata",
                "vendordata_raw",
            }
            # Grab initial specific-class attributes from magic method
            class_attrs = set(ds_class.__dict__)
    
            # Mock known subp calls from some datasource __init__ setup
            mocker.patch("cloudinit.util.is_container", return_value=False)
            mocker.patch("cloudinit.dmi.read_dmi_data", return_value="")
            mocker.patch("cloudinit.subp.subp", return_value=("", ""))
    
            # Initialize the class to grab the instance attributes from
            # instance.__dict__ magic method.
>           ds = ds_class(sys_cfg={}, distro=MockDistro(), paths=paths)

tests/unittests/test_upgrade.py:233: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <cloudinit.sources.DataSourceCloudStack.DataSourceCloudStack object at 0x7fb2c6aeeae0>
sys_cfg = {}
distro = <tests.unittests.util.MockDistro object at 0x7fb2c682f860>
paths = <cloudinit.helpers.Paths object at 0x7fb2c673c890>

    def __init__(self, sys_cfg, distro, paths):
        sources.DataSource.__init__(self, sys_cfg, distro, paths)
        self.seed_dir = os.path.join(paths.seed_dir, "cs")
        # Cloudstack has its metadata/userdata URLs located at
        # http://<virtual-router-ip>/latest/
        self.api_ver = "latest"
    
        self.distro = distro
        self.vr_addr = get_vr_address(self.distro)
        if not self.vr_addr:
>           raise RuntimeError("No virtual router found!")
E           RuntimeError: No virtual router found!

cloudinit/sources/DataSourceCloudStack.py:95: RuntimeError
----------------------------- Captured stderr call -----------------------------
FALLBACK: 2024-04-25 01:15:02,681 - sources[DEBUG]: Looking for data source in: ['NoCloud', 'ConfigDrive', 'LXD', 'OpenNebula', 'DigitalOcean', 'Azure', 'AltCloud', 'OVF', 'MAAS', 'GCE', 'OpenStack', 'AliYun', 'Vultr', 'Ec2', 'CloudSigma', 'CloudStack', 'SmartOS', 'Bigstep', 'Scaleway', 'Hetzner', 'IBMCloud', 'Oracle', 'Exoscale', 'RbxCloud', 'UpCloud', 'VMware', 'NWCS', 'Akamai', 'WSL', 'None'], via packages ['cloudinit.sources'] that matches dependencies ['FILESYSTEM', 'NETWORK']
FALLBACK: 2024-04-25 01:15:02,682 - util.py[DEBUG]: Writing to /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/NoCloud.obj.pkl - wb: [400] 2268 bytes
FALLBACK: 2024-04-25 01:15:02,683 - util.py[DEBUG]: Reading from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/NoCloud.obj.pkl (quiet=False)
FALLBACK: 2024-04-25 01:15:02,683 - util.py[DEBUG]: Read 2268 bytes from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/NoCloud.obj.pkl
FALLBACK: 2024-04-25 01:15:02,683 - util.py[DEBUG]: Writing to /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/AltCloud.obj.pkl - wb: [400] 2061 bytes
FALLBACK: 2024-04-25 01:15:02,684 - util.py[DEBUG]: Reading from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/AltCloud.obj.pkl (quiet=False)
FALLBACK: 2024-04-25 01:15:02,684 - util.py[DEBUG]: Read 2061 bytes from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/AltCloud.obj.pkl
FALLBACK: 2024-04-25 01:15:02,685 - util.py[DEBUG]: Writing to /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/OVF.obj.pkl - wb: [400] 2193 bytes
FALLBACK: 2024-04-25 01:15:02,686 - util.py[DEBUG]: Reading from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/OVF.obj.pkl (quiet=False)
FALLBACK: 2024-04-25 01:15:02,686 - util.py[DEBUG]: Read 2193 bytes from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/OVF.obj.pkl
FALLBACK: 2024-04-25 01:15:02,687 - util.py[DEBUG]: Writing to /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/MAAS.obj.pkl - wb: [400] 2184 bytes
FALLBACK: 2024-04-25 01:15:02,687 - util.py[DEBUG]: Reading from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/MAAS.obj.pkl (quiet=False)
FALLBACK: 2024-04-25 01:15:02,687 - util.py[DEBUG]: Read 2184 bytes from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/MAAS.obj.pkl
FALLBACK: 2024-04-25 01:15:02,688 - util.py[DEBUG]: Writing to /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/GCE.obj.pkl - wb: [400] 2110 bytes
FALLBACK: 2024-04-25 01:15:02,689 - util.py[DEBUG]: Reading from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/GCE.obj.pkl (quiet=False)
FALLBACK: 2024-04-25 01:15:02,689 - util.py[DEBUG]: Read 2110 bytes from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/GCE.obj.pkl
FALLBACK: 2024-04-25 01:15:02,691 - util.py[DEBUG]: Writing to /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/OpenStack.obj.pkl - wb: [400] 2101 bytes
FALLBACK: 2024-04-25 01:15:02,691 - util.py[DEBUG]: Reading from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/OpenStack.obj.pkl (quiet=False)
FALLBACK: 2024-04-25 01:15:02,691 - util.py[DEBUG]: Read 2101 bytes from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/OpenStack.obj.pkl
FALLBACK: 2024-04-25 01:15:02,692 - util.py[DEBUG]: Writing to /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/AliYun.obj.pkl - wb: [400] 2176 bytes
FALLBACK: 2024-04-25 01:15:02,693 - util.py[DEBUG]: Reading from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/AliYun.obj.pkl (quiet=False)
FALLBACK: 2024-04-25 01:15:02,693 - util.py[DEBUG]: Read 2176 bytes from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/AliYun.obj.pkl
FALLBACK: 2024-04-25 01:15:02,694 - util.py[DEBUG]: Writing to /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/Ec2.obj.pkl - wb: [400] 2023 bytes
FALLBACK: 2024-04-25 01:15:02,694 - util.py[DEBUG]: Reading from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/Ec2.obj.pkl (quiet=False)
FALLBACK: 2024-04-25 01:15:02,694 - util.py[DEBUG]: Read 2023 bytes from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/Ec2.obj.pkl
FALLBACK: 2024-04-25 01:15:03,002 - DataSourceCloudStack.py[DEBUG]: DNS Entry data-server not found
FALLBACK: 2024-04-25 01:15:03,002 - util.py[DEBUG]: Reading from /run/dhclient.lease (quiet=False)
FALLBACK: 2024-04-25 01:15:03,003 - DataSourceCloudStack.py[DEBUG]: No DHCP found, using default gateway
FALLBACK: 2024-04-25 01:15:03,003 - util.py[DEBUG]: Reading from /proc/net/route (quiet=False)
FALLBACK: 2024-04-25 01:15:03,003 - util.py[DEBUG]: Read 128 bytes from /proc/net/route
------------------------------ Captured log call -------------------------------
2024-04-25 01:15:02 DEBUG     cloudinit.sources:sources:1049 Looking for data source in: ['NoCloud', 'ConfigDrive', 'LXD', 'OpenNebula', 'DigitalOcean', 'Azure', 'AltCloud', 'OVF', 'MAAS', 'GCE', 'OpenStack', 'AliYun', 'Vultr', 'Ec2', 'CloudSigma', 'CloudStack', 'SmartOS', 'Bigstep', 'Scaleway', 'Hetzner', 'IBMCloud', 'Oracle', 'Exoscale', 'RbxCloud', 'UpCloud', 'VMware', 'NWCS', 'Akamai', 'WSL', 'None'], via packages ['cloudinit.sources'] that matches dependencies ['FILESYSTEM', 'NETWORK']
2024-04-25 01:15:02 DEBUG     cloudinit.util:util.py:2299 Writing to /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/NoCloud.obj.pkl - wb: [400] 2268 bytes
2024-04-25 01:15:02 DEBUG     cloudinit.util:util.py:1599 Reading from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/NoCloud.obj.pkl (quiet=False)
2024-04-25 01:15:02 DEBUG     cloudinit.util:util.py:1608 Read 2268 bytes from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/NoCloud.obj.pkl
2024-04-25 01:15:02 DEBUG     cloudinit.util:util.py:2299 Writing to /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/AltCloud.obj.pkl - wb: [400] 2061 bytes
2024-04-25 01:15:02 DEBUG     cloudinit.util:util.py:1599 Reading from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/AltCloud.obj.pkl (quiet=False)
2024-04-25 01:15:02 DEBUG     cloudinit.util:util.py:1608 Read 2061 bytes from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/AltCloud.obj.pkl
2024-04-25 01:15:02 DEBUG     cloudinit.util:util.py:2299 Writing to /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/OVF.obj.pkl - wb: [400] 2193 bytes
2024-04-25 01:15:02 DEBUG     cloudinit.util:util.py:1599 Reading from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/OVF.obj.pkl (quiet=False)
2024-04-25 01:15:02 DEBUG     cloudinit.util:util.py:1608 Read 2193 bytes from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/OVF.obj.pkl
2024-04-25 01:15:02 DEBUG     cloudinit.util:util.py:2299 Writing to /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/MAAS.obj.pkl - wb: [400] 2184 bytes
2024-04-25 01:15:02 DEBUG     cloudinit.util:util.py:1599 Reading from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/MAAS.obj.pkl (quiet=False)
2024-04-25 01:15:02 DEBUG     cloudinit.util:util.py:1608 Read 2184 bytes from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/MAAS.obj.pkl
2024-04-25 01:15:02 DEBUG     cloudinit.util:util.py:2299 Writing to /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/GCE.obj.pkl - wb: [400] 2110 bytes
2024-04-25 01:15:02 DEBUG     cloudinit.util:util.py:1599 Reading from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/GCE.obj.pkl (quiet=False)
2024-04-25 01:15:02 DEBUG     cloudinit.util:util.py:1608 Read 2110 bytes from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/GCE.obj.pkl
2024-04-25 01:15:02 DEBUG     cloudinit.util:util.py:2299 Writing to /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/OpenStack.obj.pkl - wb: [400] 2101 bytes
2024-04-25 01:15:02 DEBUG     cloudinit.util:util.py:1599 Reading from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/OpenStack.obj.pkl (quiet=False)
2024-04-25 01:15:02 DEBUG     cloudinit.util:util.py:1608 Read 2101 bytes from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/OpenStack.obj.pkl
2024-04-25 01:15:02 DEBUG     cloudinit.util:util.py:2299 Writing to /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/AliYun.obj.pkl - wb: [400] 2176 bytes
2024-04-25 01:15:02 DEBUG     cloudinit.util:util.py:1599 Reading from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/AliYun.obj.pkl (quiet=False)
2024-04-25 01:15:02 DEBUG     cloudinit.util:util.py:1608 Read 2176 bytes from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/AliYun.obj.pkl
2024-04-25 01:15:02 DEBUG     cloudinit.util:util.py:2299 Writing to /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/Ec2.obj.pkl - wb: [400] 2023 bytes
2024-04-25 01:15:02 DEBUG     cloudinit.util:util.py:1599 Reading from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/Ec2.obj.pkl (quiet=False)
2024-04-25 01:15:02 DEBUG     cloudinit.util:util.py:1608 Read 2023 bytes from /tmp/pytest-of-buildd/pytest-0/test_all_ds_init_vs_unpickle_a1/Ec2.obj.pkl
2024-04-25 01:15:03 DEBUG     cloudinit.sources.DataSourceCloudStack:DataSourceCloudStack.py:264 DNS Entry data-server not found
2024-04-25 01:15:03 DEBUG     cloudinit.util:util.py:1599 Reading from /run/dhclient.lease (quiet=False)
2024-04-25 01:15:03 DEBUG     cloudinit.sources.DataSourceCloudStack:DataSourceCloudStack.py:327 No DHCP found, using default gateway
2024-04-25 01:15:03 DEBUG     cloudinit.util:util.py:1599 Reading from /proc/net/route (quiet=False)
2024-04-25 01:15:03 DEBUG     cloudinit.util:util.py:1608 Read 128 bytes from /proc/net/route

A complete build log is available at https://buildd.debian.org/status/fetch.php?pkg=cloud-init&arch=all&ver=24.1.4-1&stamp=1714007718&file=log

Steps to reproduce the problem

I'm able to reproduce this with a local containerized build with networking disabled, e.g. docker with --net=none, and running pytest. For example:

With networking (test passes)

builder@44b02a74ddb3:/src/cloud-init$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
26: eth0@if27: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
builder@44b02a74ddb3:/src/cloud-init$ python3 --version
Python 3.11.9
builder@44b02a74ddb3:/src/cloud-init$ pytest --log-level=ERROR -q -q 'tests/unittests/test_upgrade.py::TestUpgrade::test_all_ds_init_vs_unpickle_attributes[mode1]'
.                                                                                                              [100%]
================================================== warnings summary ==================================================
tests/unittests/helpers.py:555
  /src/cloud-init/tests/unittests/helpers.py:555: DeprecationWarning: Accessing jsonschema.__version__ is deprecated and will be removed in a future release. Use importlib.metadata directly to query for jsonschema's version.
    int(part) for part in jsonschema.__version__.split(".")  # type: ignore

cloudinit/sources/DataSourceAzure.py:52
  /src/cloud-init/cloudinit/sources/DataSourceAzure.py:52: DeprecationWarning: 'crypt' is deprecated and slated for removal in Python 3.13
    import crypt

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html

Without networking (test fails)

builder@3e3839ab502b:/src/cloud-init$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
builder@3e3839ab502b:/src/cloud-init$ python3 --version
Python 3.11.9
builder@3e3839ab502b:/src/cloud-init$ pytest --log-level=ERROR -q -q 'tests/unittests/test_upgrade.py::TestUpgrade::test_all_ds_init_vs_unpickle_attributes[mode1]'
F                                                                                                              [100%]
====================================================== FAILURES ======================================================
_____________________________ TestUpgrade.test_all_ds_init_vs_unpickle_attributes[mode1] _____________________________

self = <tests.unittests.test_upgrade.TestUpgrade object at 0x7f31cf3b0e50>, mode = ['FILESYSTEM', 'NETWORK']
mocker = <pytest_mock.plugin.MockerFixture object at 0x7f31cf3576d0>
paths = <cloudinit.helpers.Paths object at 0x7f31cf3b06d0>
tmpdir = local('/tmp/pytest-of-builder/pytest-0/test_all_ds_init_vs_unpickle_a0')

    @pytest.mark.parametrize(
        "mode",
        (
            [sources.DEP_FILESYSTEM],
            [sources.DEP_FILESYSTEM, sources.DEP_NETWORK],
        ),
    )
    @mock.patch.object(
        importer,
        "match_case_insensitive_module_name",
        lambda name: f"DataSource{name}",
    )
    def test_all_ds_init_vs_unpickle_attributes(
        self, mode, mocker, paths, tmpdir
    ):
        """Unpickle resets any instance attributes created in __init__
    
        This test asserts that deserialization of a datasource cache
        does proper initialization of any 'new' instance attributes
        created as a side-effect of the __init__ method.
    
        Without proper _unpickle coverage for newly introduced attributes,
        the new deserialized instance will hit AttributeErrors at runtime.
        """
        # Load all cloud-init init-local time-frame DataSource classes
        for ds_class in sources.list_sources(
            settings.CFG_BUILTIN["datasource_list"],
            mode,
            [type_utils.obj_name(sources)],
        ):
            # Expected common instance attrs from __init__ that are typically
            # handled via existing _unpickling and setup in _get_data
            common_instance_attrs = {
                "paths",
                "vendordata2",
                "sys_cfg",
                "ud_proc",
                "vendordata",
                "vendordata2_raw",
                "ds_cfg",
                "distro",
                "userdata",
                "userdata_raw",
                "metadata",
                "vendordata_raw",
            }
            # Grab initial specific-class attributes from magic method
            class_attrs = set(ds_class.__dict__)
    
            # Mock known subp calls from some datasource __init__ setup
            mocker.patch("cloudinit.util.is_container", return_value=False)
            mocker.patch("cloudinit.dmi.read_dmi_data", return_value="")
            mocker.patch("cloudinit.subp.subp", return_value=("", ""))
    
            # Initialize the class to grab the instance attributes from
            # instance.__dict__ magic method.
>           ds = ds_class(sys_cfg={}, distro=MockDistro(), paths=paths)

tests/unittests/test_upgrade.py:233: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <cloudinit.sources.DataSourceCloudStack.DataSourceCloudStack object at 0x7f31cf101850>, sys_cfg = {}
distro = <tests.unittests.util.MockDistro object at 0x7f31cf0b8510>
paths = <cloudinit.helpers.Paths object at 0x7f31cf3b06d0>

    def __init__(self, sys_cfg, distro, paths):
        sources.DataSource.__init__(self, sys_cfg, distro, paths)
        self.seed_dir = os.path.join(paths.seed_dir, "cs")
        # Cloudstack has its metadata/userdata URLs located at
        # http://<virtual-router-ip>/latest/
        self.api_ver = "latest"
    
        self.distro = distro
        self.vr_addr = get_vr_address(self.distro)
        if not self.vr_addr:
>           raise RuntimeError("No virtual router found!")
E           RuntimeError: No virtual router found!

cloudinit/sources/DataSourceCloudStack.py:95: RuntimeError
================================================== warnings summary ==================================================
tests/unittests/helpers.py:555
  /src/cloud-init/tests/unittests/helpers.py:555: DeprecationWarning: Accessing jsonschema.__version__ is deprecated and will be removed in a future release. Use importlib.metadata directly to query for jsonschema's version.
    int(part) for part in jsonschema.__version__.split(".")  # type: ignore

cloudinit/sources/DataSourceAzure.py:52
  /src/cloud-init/cloudinit/sources/DataSourceAzure.py:52: DeprecationWarning: 'crypt' is deprecated and slated for removal in Python 3.13
    import crypt

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
============================================== short test summary info ===============================================
FAILED tests/unittests/test_upgrade.py::TestUpgrade::test_all_ds_init_vs_unpickle_attributes[mode1] - RuntimeError: No virtual router found!

Environment details

  • Cloud-init version: 24.1.3, 24.1.4
  • Operating System Distribution: Debian sid/unstable
  • Cloud provider, platform or installer type: n/a
@nmeyerhans nmeyerhans added bug Something isn't working correctly new An issue that still needs triage labels Apr 25, 2024
@CalvoM
Copy link
Contributor

CalvoM commented Apr 25, 2024

Thanks @nmeyerhans, thanks for filing this bug.
We will be looking into it and will update here soon.

aciba90 added a commit to aciba90/cloud-init that referenced this issue Apr 25, 2024
@CalvoM
Copy link
Contributor

CalvoM commented Apr 25, 2024

@nmeyerhans this is a valid bug where we failed to provide mocks for some functions i.e. get_vr_address in the CloudStack datasource.

@CalvoM CalvoM removed the new An issue that still needs triage label Apr 25, 2024
@CalvoM
Copy link
Contributor

CalvoM commented Apr 25, 2024

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working correctly
Projects
None yet
Development

No branches or pull requests

2 participants