[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#973062: marked as done (cloud-init: FTBFS: AttributeError: 'Thread' object has no attribute 'isAlive')



Your message dated Wed, 28 Oct 2020 17:48:35 +0000
with message-id <E1kXpYp-0006lD-Pd@fasolo.debian.org>
and subject line Bug#973062: fixed in cloud-init 20.2-3
has caused the Debian Bug report #973062,
regarding cloud-init: FTBFS: AttributeError: 'Thread' object has no attribute 'isAlive'
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
973062: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=973062
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Source: cloud-init
Version: 20.2-2
Severity: serious
Justification: FTBFS on amd64
Tags: bullseye sid ftbfs
Usertags: ftbfs-20201027 ftbfs-bullseye

Hi,

During a rebuild of all packages in sid, your package failed to build
on amd64.

Relevant part (hopefully):
> make[1]: Entering directory '/<<PKGBUILDDIR>>'
> py3versions: no X-Python3-Version in control file, using supported versions
> set -e && set -x && for pyvers in 3.9 3.8; do \
> 	PYMAJOR=`echo $pyvers | cut -d'.' -f1` ; \
> 	echo "===> Testing with python$pyvers (python$PYMAJOR)" ; \
> 	PYTHON=python$pyvers PYTHONPATH=. python$pyvers -m pytest -v tests/unittests ; \
> done
> + echo 3.9
> + cut -d. -f1
> + PYMAJOR=3
> + echo ===> Testing with python3.9 (python3)
> ===> Testing with python3.9 (python3)
> + PYTHON=python3.9 PYTHONPATH=. python3.9 -m pytest -v tests/unittests
> ============================= test session starts ==============================
> platform linux -- Python 3.9.0+, pytest-4.6.11, py-1.9.0, pluggy-0.13.0 -- /usr/bin/python3.9
> cachedir: .pytest_cache
> rootdir: /<<PKGBUILDDIR>>
> collecting ... collected 1644 items
> 
> tests/unittests/test__init__.py::TestWalkerHandleHandler::test_attribute_error PASSED [  0%]
> tests/unittests/test__init__.py::TestWalkerHandleHandler::test_import_error PASSED [  0%]
> tests/unittests/test__init__.py::TestWalkerHandleHandler::test_no_errors PASSED [  0%]
> tests/unittests/test__init__.py::TestHandlerHandlePart::test_exception_is_caught PASSED [  0%]
> tests/unittests/test__init__.py::TestHandlerHandlePart::test_modfreq_per_always PASSED [  0%]
> tests/unittests/test__init__.py::TestHandlerHandlePart::test_no_handle_when_modfreq_once PASSED [  0%]
> tests/unittests/test__init__.py::TestHandlerHandlePart::test_normal_version_1 PASSED [  0%]
> tests/unittests/test__init__.py::TestHandlerHandlePart::test_normal_version_2 PASSED [  0%]
> tests/unittests/test__init__.py::TestCmdlineUrl::test_exception_warns PASSED [  0%]
> tests/unittests/test__init__.py::TestCmdlineUrl::test_invalid_content PASSED [  0%]
> tests/unittests/test__init__.py::TestCmdlineUrl::test_no_key_found PASSED [  0%]
> tests/unittests/test__init__.py::TestCmdlineUrl::test_parse_cmdline_url_found PASSED [  0%]
> tests/unittests/test__init__.py::TestCmdlineUrl::test_parse_cmdline_url_nokey_raises_keyerror PASSED [  0%]
> tests/unittests/test__init__.py::TestCmdlineUrl::test_valid_content PASSED [  0%]
> tests/unittests/test_atomic_helper.py::TestAtomicHelper::test_basic_usage PASSED [  0%]
> tests/unittests/test_atomic_helper.py::TestAtomicHelper::test_file_permissions PASSED [  0%]
> tests/unittests/test_atomic_helper.py::TestAtomicHelper::test_string PASSED [  1%]
> tests/unittests/test_atomic_helper.py::TestAtomicHelper::test_write_json PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestUpstartJobPartHandler::test_upstart_frequency_no_out PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestUpstartJobPartHandler::test_upstart_frequency_single PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestJinjaTemplatePartHandler::test_jinja_template_handle_errors_on_missing_instance_data_json PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestJinjaTemplatePartHandler::test_jinja_template_handle_errors_on_unreadable_instance_data PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestJinjaTemplatePartHandler::test_jinja_template_handle_noop_on_content_signals PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestJinjaTemplatePartHandler::test_jinja_template_handle_renders_jinja_content PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestJinjaTemplatePartHandler::test_jinja_template_handle_renders_jinja_content_missing_keys PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestJinjaTemplatePartHandler::test_jinja_template_handle_subhandler_v2_with_clean_payload PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestJinjaTemplatePartHandler::test_jinja_template_handle_subhandler_v3_with_clean_payload PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestJinjaTemplatePartHandler::test_jinja_template_part_handler_defaults PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestJinjaTemplatePartHandler::test_jinja_template_part_handler_looks_up_sub_handler_types PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestJinjaTemplatePartHandler::test_jinja_template_part_handler_looks_up_subhandler_types PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestConvertJinjaInstanceData::test_convert_instance_data_decodes_decode_paths PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestConvertJinjaInstanceData::test_convert_instance_data_hyphens_to_underscores PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestConvertJinjaInstanceData::test_convert_instance_data_most_recent_version_of_promoted_keys PASSED [  2%]
> tests/unittests/test_builtin_handlers.py::TestConvertJinjaInstanceData::test_convert_instance_data_promotes_versioned_keys_to_top_level PASSED [  2%]
> tests/unittests/test_builtin_handlers.py::TestRenderJinjaPayload::test_render_jinja_payload_logs_jinja_vars_on_debug PASSED [  2%]
> tests/unittests/test_builtin_handlers.py::TestRenderJinjaPayload::test_render_jinja_payload_replaces_missing_variables_and_warns PASSED [  2%]
> tests/unittests/test_cli.py::TestCLI::test_all_subcommands_represented_in_help PASSED [  2%]
> tests/unittests/test_cli.py::TestCLI::test_analyze_subcommand_parser PASSED [  2%]
> tests/unittests/test_cli.py::TestCLI::test_clean_subcommand_parser PASSED [  2%]
> tests/unittests/test_cli.py::TestCLI::test_collect_logs_subcommand_parser PASSED [  2%]
> tests/unittests/test_cli.py::TestCLI::test_conditional_subcommands_from_entry_point_sys_argv PASSED [  2%]
> tests/unittests/test_cli.py::TestCLI::test_devel_subcommand_parser PASSED [  2%]
> tests/unittests/test_cli.py::TestCLI::test_dhclient_hook_subcommand PASSED [  2%]
> tests/unittests/test_cli.py::TestCLI::test_features_hook_subcommand PASSED [  2%]
> tests/unittests/test_cli.py::TestCLI::test_init_subcommand_parser PASSED [  2%]
> tests/unittests/test_cli.py::TestCLI::test_modules_subcommand_parser PASSED [  2%]
> tests/unittests/test_cli.py::TestCLI::test_no_arguments_shows_error_message PASSED [  2%]
> tests/unittests/test_cli.py::TestCLI::test_no_arguments_shows_usage PASSED [  2%]
> tests/unittests/test_cli.py::TestCLI::test_single_subcommand PASSED      [  2%]
> tests/unittests/test_cli.py::TestCLI::test_status_subcommand_parser PASSED [  3%]
> tests/unittests/test_cli.py::TestCLI::test_status_wrapper_errors_on_invalid_modes PASSED [  3%]
> tests/unittests/test_cli.py::TestCLI::test_status_wrapper_errors_on_invalid_name PASSED [  3%]
> tests/unittests/test_cli.py::TestCLI::test_status_wrapper_init_local_writes_fresh_status_info PASSED [  3%]
> tests/unittests/test_cli.py::TestCLI::test_wb_devel_schema_subcommand_doc_content PASSED [  3%]
> tests/unittests/test_cli.py::TestCLI::test_wb_devel_schema_subcommand_parser PASSED [  3%]
> tests/unittests/test_cs_util.py::CepkoResultTests::test_contains SKIPPED [  3%]
> tests/unittests/test_cs_util.py::CepkoResultTests::test_getitem SKIPPED  [  3%]
> tests/unittests/test_cs_util.py::CepkoResultTests::test_iter SKIPPED     [  3%]
> tests/unittests/test_cs_util.py::CepkoResultTests::test_len SKIPPED      [  3%]
> tests/unittests/test_cs_util.py::CepkoResultTests::test_with_list_as_result SKIPPED [  3%]
> tests/unittests/test_data.py::TestConsumeUserData::test_cloud_config_archive PASSED [  3%]
> tests/unittests/test_data.py::TestConsumeUserData::test_cloud_config_as_x_shell_script PASSED [  3%]
> tests/unittests/test_data.py::TestConsumeUserData::test_dont_allow_user_data PASSED [  3%]
> tests/unittests/test_data.py::TestConsumeUserData::test_merging_cloud_config PASSED [  3%]
> tests/unittests/test_data.py::TestConsumeUserData::test_mime_application_octet_stream PASSED [  3%]
> tests/unittests/test_data.py::TestConsumeUserData::test_mime_gzip_compressed PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserData::test_mime_text_plain PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserData::test_mime_text_plain_shell PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserData::test_mime_text_x_shellscript PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserData::test_mixed_cloud_config PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserData::test_shellscript PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserData::test_simple_jsonp PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserData::test_simple_jsonp_no_vendor_consumed PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserData::test_simple_jsonp_vendor_and_user PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserData::test_unhandled_type_warning PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserData::test_vendor_user_yaml_cloud_config PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserData::test_vendordata_script PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_cloud_config_archive PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_cloud_config_as_x_shell_script PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_dont_allow_user_data PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_include FAILED [  4%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_include_bad_url FAILED [  4%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_merging_cloud_config PASSED [  5%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_mime_application_octet_stream PASSED [  5%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_mime_gzip_compressed PASSED [  5%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_mime_text_plain PASSED [  5%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_mime_text_plain_shell PASSED [  5%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_mime_text_x_shellscript PASSED [  5%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_mixed_cloud_config PASSED [  5%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_shellscript PASSED [  5%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_simple_jsonp PASSED [  5%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_simple_jsonp_no_vendor_consumed PASSED [  5%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_simple_jsonp_vendor_and_user PASSED [  5%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_unhandled_type_warning PASSED [  5%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_vendor_user_yaml_cloud_config PASSED [  5%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_vendordata_script PASSED [  5%]
> tests/unittests/test_data.py::TestUDProcess::test_bytes_in_userdata PASSED [  5%]
> tests/unittests/test_data.py::TestUDProcess::test_compressed_in_userdata PASSED [  5%]
> tests/unittests/test_data.py::TestUDProcess::test_string_in_userdata PASSED [  6%]
> tests/unittests/test_data.py::TestConvertString::test_handle_headers PASSED [  6%]
> tests/unittests/test_data.py::TestConvertString::test_handle_mime_parts PASSED [  6%]
> tests/unittests/test_data.py::TestConvertString::test_handles_binary_non_utf8_decodable PASSED [  6%]
> tests/unittests/test_data.py::TestConvertString::test_handles_binary_utf8_decodable PASSED [  6%]
> tests/unittests/test_data.py::TestFetchBaseConfig::test_cmdline_overrides_confd_runtime_and_defaults PASSED [  6%]
> tests/unittests/test_data.py::TestFetchBaseConfig::test_cmdline_overrides_defaults PASSED [  6%]
> tests/unittests/test_data.py::TestFetchBaseConfig::test_conf_d_overrides_defaults PASSED [  6%]
> tests/unittests/test_data.py::TestFetchBaseConfig::test_only_builtin_gets_builtin PASSED [  6%]
> tests/unittests/test_data.py::TestFetchBaseConfig::test_order_precedence_is_builtin_system_runtime_cmdline PASSED [  6%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_aliyun_identified PASSED [  6%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_aliyun_over_ec2 PASSED [  6%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_aws_ec2_hvm PASSED [  6%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_aws_ec2_xen PASSED [  6%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_azure_dmi_detection_from_chassis_asset_tag PASSED [  6%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_azure_seed_file_detection PASSED [  6%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_bobrightbox_is_not_brightbox PASSED [  6%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_brightbox_is_ec2 PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_config_drive PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_config_drive_interacts_with_ibmcloud_config_disk PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_config_drive_seed PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_config_drive_upper PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_configured_list_with_none PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_default_nocloud_as_vdb_iso9660 PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_default_openstack_intel_is_found PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_default_ovf_is_found PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_default_ovf_returns_not_found_on_azure PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_default_ovf_with_detect_virt_none_not_found PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_e24cloud_is_ec2 PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_e24cloud_not_active PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_gce_by_product_name PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_gce_by_serial PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_hetzner_found PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ibmcloud_os_code PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ibmcloud_os_code_different_uuid PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ibmcloud_template_no_userdata PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ibmcloud_template_no_userdata_in_provisioning PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ibmcloud_template_userdata PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ibmcloud_template_userdata_in_provisioning PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ibmcloud_with_configdrive_seed PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ibmcloud_with_nocloud_seed PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_nocloud_seed PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_nocloud_seed_ubuntu_core_writable PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_nocloud_upper PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_openstack_asset_tag_copute PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_openstack_asset_tag_nova PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_openstack_on_non_intel_is_maybe PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_openstack_open_telekom_cloud PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_openstack_sap_ccloud PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ovf_on_vmware_guestinfo_found PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ovf_on_vmware_iso_found_by_cdrom_with_different_size PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ovf_on_vmware_iso_found_by_cdrom_with_matching_fs_label PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ovf_on_vmware_iso_found_by_cdrom_with_ovf_schema_match PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ovf_on_vmware_iso_found_open_vm_tools_64 PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ovf_on_vmware_iso_found_when_vmware_customization PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_path_env_gets_set_from_main PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_policy_config_disable_overrides_builtin PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_policy_disabled PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_rbx_cloud PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_single_entry_defines_datasource PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_smartos_bhyve PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_smartos_lxbrand PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_smartos_lxbrand_requires_socket PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_wb_print_variables PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_zstack_is_ec2 PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestBSDNoSys::test_dmi_decode PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestIsIBMProvisioning::test_config_only PASSED [ 10%]
> tests/unittests/test_ds_identify.py::TestIsIBMProvisioning::test_config_with_new_log PASSED [ 10%]
> tests/unittests/test_ds_identify.py::TestIsIBMProvisioning::test_config_with_old_log PASSED [ 10%]
> tests/unittests/test_ds_identify.py::TestIsIBMProvisioning::test_no_config PASSED [ 10%]
> tests/unittests/test_ds_identify.py::TestOracle::test_found_by_chassis PASSED [ 10%]
> tests/unittests/test_ds_identify.py::TestOracle::test_not_found PASSED   [ 10%]
> tests/unittests/test_ec2_util.py::TestEc2Util::test_metadata_fetch_bdm FAILED [ 10%]
> tests/unittests/test_ec2_util.py::TestEc2Util::test_metadata_fetch_key FAILED [ 10%]
> tests/unittests/test_ec2_util.py::TestEc2Util::test_metadata_fetch_no_keys FAILED [ 10%]
> tests/unittests/test_ec2_util.py::TestEc2Util::test_metadata_fetch_with_2_keys FAILED [ 10%]
> tests/unittests/test_ec2_util.py::TestEc2Util::test_metadata_no_security_credentials FAILED [ 10%]
> tests/unittests/test_ec2_util.py::TestEc2Util::test_userdata_fetch FAILED [ 10%]
> tests/unittests/test_ec2_util.py::TestEc2Util::test_userdata_fetch_fail_not_found PASSED [ 10%]
> tests/unittests/test_ec2_util.py::TestEc2Util::test_userdata_fetch_fail_server_dead PASSED [ 10%]
> tests/unittests/test_ec2_util.py::TestEc2Util::test_userdata_fetch_fail_server_not_found PASSED [ 10%]
> tests/unittests/test_helpers.py::TestPaths::test_get_ipath_and_empty_instance_id_returns_none PASSED [ 10%]
> tests/unittests/test_helpers.py::TestPaths::test_get_ipath_and_instance_id_with_slashes PASSED [ 11%]
> tests/unittests/test_log.py::TestCloudInitLogger::test_logger_uses_gmtime PASSED [ 11%]
> tests/unittests/test_merging.py::TestSimpleRun::test_compat_merge_sub_dict PASSED [ 11%]
> tests/unittests/test_merging.py::TestSimpleRun::test_compat_merge_sub_dict2 PASSED [ 11%]
> tests/unittests/test_merging.py::TestSimpleRun::test_compat_merge_sub_list PASSED [ 11%]
> tests/unittests/test_merging.py::TestSimpleRun::test_compat_merges_dict PASSED [ 11%]
> tests/unittests/test_merging.py::TestSimpleRun::test_compat_merges_dict2 PASSED [ 11%]
> tests/unittests/test_merging.py::TestSimpleRun::test_compat_merges_list PASSED [ 11%]
> tests/unittests/test_merging.py::TestSimpleRun::test_compat_merges_str PASSED [ 11%]
> tests/unittests/test_merging.py::TestSimpleRun::test_merge_cc_samples PASSED [ 11%]
> tests/unittests/test_merging.py::TestSimpleRun::test_seed_runs PASSED    [ 11%]
> tests/unittests/test_net.py::TestGenerateFallbackConfig::test_device_driver PASSED [ 11%]
> tests/unittests/test_net.py::TestGenerateFallbackConfig::test_device_driver_blacklist PASSED [ 11%]
> tests/unittests/test_net.py::TestGenerateFallbackConfig::test_device_driver_v2 PASSED [ 11%]
> tests/unittests/test_net.py::TestGenerateFallbackConfig::test_unstable_names PASSED [ 11%]
> tests/unittests/test_net.py::TestGenerateFallbackConfig::test_unstable_names_disabled PASSED [ 11%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_all_config PASSED [ 11%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_bond_config PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_bridge_config PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_check_ifcfg_rh PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_check_ifcfg_rh_plugins_no_plugins PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_check_ifcfg_rh_plugins_string PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_config_with_explicit_loopback PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_default_generation PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_dhcpv6_accept_ra_config_v1 PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_dhcpv6_accept_ra_config_v2 PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_dhcpv6_only_config PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_dhcpv6_reject_ra_config_v1 PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_dhcpv6_reject_ra_config_v2 PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_dhcpv6_stateful_config PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_dhcpv6_stateless_config PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_from_v2_bond_mtu PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_from_v2_route_metric PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_from_v2_vlan_mtu PASSED [ 13%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_manual_config PASSED [ 13%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_multiple_ipv4_default_gateways PASSED [ 13%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_multiple_ipv6_default_gateways PASSED [ 13%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_netplan_dhcp_false_disable_dhcp_in_state PASSED [ 13%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_netplan_dhcp_false_no_dhcp_in_sysconfig PASSED [ 13%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_network_config_v1_multi_iface_samples PASSED [ 13%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_network_config_v1_samples PASSED [ 13%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_openstack_rendering_samples PASSED [ 13%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_small_config PASSED [ 13%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_v4_and_v6_static_config PASSED [ 13%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_vlan_config PASSED [ 13%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_all_config PASSED [ 13%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_bond_config PASSED [ 13%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_bridge_config PASSED [ 13%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_config_with_explicit_loopback PASSED [ 13%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_default_generation PASSED [ 13%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_dhcpv6_only_config PASSED [ 14%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_dhcpv6_stateless_config PASSED [ 14%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_manual_config PASSED [ 14%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_network_config_v1_samples PASSED [ 14%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_openstack_rendering_samples PASSED [ 14%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_render_v4_and_v6 PASSED [ 14%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_render_v6_and_v4 PASSED [ 14%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_simple_render_ipv6_slaac PASSED [ 14%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_small_config PASSED [ 14%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_v4_and_v6_static_config PASSED [ 14%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_vlan_config PASSED [ 14%]
> tests/unittests/test_net.py::TestEniNetRendering::test_config_with_explicit_loopback PASSED [ 14%]
> tests/unittests/test_net.py::TestEniNetRendering::test_default_generation PASSED [ 14%]
> tests/unittests/test_net.py::TestEniNetRendering::test_v2_route_metric_to_eni PASSED [ 14%]
> tests/unittests/test_net.py::TestNetplanNetRendering::test_default_generation PASSED [ 14%]
> tests/unittests/test_net.py::TestNetplanCleanDefault::test_clean_known_config_cleaned PASSED [ 14%]
> tests/unittests/test_net.py::TestNetplanCleanDefault::test_clean_known_config_cleans_only_expected PASSED [ 15%]
> tests/unittests/test_net.py::TestNetplanCleanDefault::test_clean_unknown_config_not_cleaned PASSED [ 15%]
> tests/unittests/test_net.py::TestNetplanPostcommands::test_netplan_postcmds PASSED [ 15%]
> tests/unittests/test_net.py::TestNetplanPostcommands::test_netplan_render_calls_postcmds PASSED [ 15%]
> tests/unittests/test_net.py::TestEniNetworkStateToEni::test_no_header PASSED [ 15%]
> tests/unittests/test_net.py::TestEniNetworkStateToEni::test_no_hwaddress PASSED [ 15%]
> tests/unittests/test_net.py::TestEniNetworkStateToEni::test_with_header PASSED [ 15%]
> tests/unittests/test_net.py::TestCmdlineConfigParsing::test_cmdline_convert_dhcp PASSED [ 15%]
> tests/unittests/test_net.py::TestCmdlineConfigParsing::test_cmdline_convert_dhcp6 PASSED [ 15%]
> tests/unittests/test_net.py::TestCmdlineConfigParsing::test_cmdline_convert_static PASSED [ 15%]
> tests/unittests/test_net.py::TestCmdlineConfigParsing::test_cmdline_with_b64 PASSED [ 15%]
> tests/unittests/test_net.py::TestCmdlineConfigParsing::test_cmdline_with_b64_gz PASSED [ 15%]
> tests/unittests/test_net.py::TestCmdlineConfigParsing::test_cmdline_with_net_config_disabled PASSED [ 15%]
> tests/unittests/test_net.py::TestCmdlineConfigParsing::test_cmdline_with_net_config_unencoded_logs_error PASSED [ 15%]
> tests/unittests/test_net.py::TestCmdlineConfigParsing::test_config_from_cmdline_net_cfg PASSED [ 15%]
> tests/unittests/test_net.py::TestCmdlineKlibcNetworkConfigSource::test_with_both_ip_ip6 PASSED [ 15%]
> tests/unittests/test_net.py::TestCmdlineKlibcNetworkConfigSource::test_with_ip PASSED [ 15%]
> tests/unittests/test_net.py::TestCmdlineKlibcNetworkConfigSource::test_with_ip6 PASSED [ 16%]
> tests/unittests/test_net.py::TestCmdlineKlibcNetworkConfigSource::test_with_no_ip_or_ip6 PASSED [ 16%]
> tests/unittests/test_net.py::TestCmdlineKlibcNetworkConfigSource::test_without_ip PASSED [ 16%]
> tests/unittests/test_net.py::TestReadInitramfsConfig::test_first_applicable_source_is_used PASSED [ 16%]
> tests/unittests/test_net.py::TestReadInitramfsConfig::test_no_applicable_sources PASSED [ 16%]
> tests/unittests/test_net.py::TestReadInitramfsConfig::test_no_sources PASSED [ 16%]
> tests/unittests/test_net.py::TestReadInitramfsConfig::test_one_applicable_source PASSED [ 16%]
> tests/unittests/test_net.py::TestReadInitramfsConfig::test_one_applicable_source_after_inapplicable_sources PASSED [ 16%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::test_render_output_has_yaml_no_aliases PASSED [ 16%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::test_render_output_supports_both_grat_arp_spelling PASSED [ 16%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::testsimple_render_all PASSED [ 16%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::testsimple_render_bond_netplan PASSED [ 16%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::testsimple_render_bond_v2_input_netplan PASSED [ 16%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::testsimple_render_dhcpv6_accept_ra PASSED [ 16%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::testsimple_render_dhcpv6_only PASSED [ 16%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::testsimple_render_dhcpv6_reject_ra PASSED [ 16%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::testsimple_render_dhcpv6_stateful PASSED [ 17%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::testsimple_render_dhcpv6_stateless PASSED [ 17%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::testsimple_render_ipv6_slaac PASSED [ 17%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::testsimple_render_manual PASSED [ 17%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::testsimple_render_small_netplan PASSED [ 17%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::testsimple_render_v4_and_v6 PASSED [ 17%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::testsimple_render_v4_and_v6_static PASSED [ 17%]
> tests/unittests/test_net.py::TestEniRoundTrip::test_ipv6_static_routes PASSED [ 17%]
> tests/unittests/test_net.py::TestEniRoundTrip::test_routes_rendered PASSED [ 17%]
> tests/unittests/test_net.py::TestEniRoundTrip::testsimple_convert_and_render PASSED [ 17%]
> tests/unittests/test_net.py::TestEniRoundTrip::testsimple_render_all PASSED [ 17%]
> tests/unittests/test_net.py::TestEniRoundTrip::testsimple_render_bond PASSED [ 17%]
> tests/unittests/test_net.py::TestEniRoundTrip::testsimple_render_dhcpv6_accept_ra PASSED [ 17%]
> tests/unittests/test_net.py::TestEniRoundTrip::testsimple_render_dhcpv6_only PASSED [ 17%]
> tests/unittests/test_net.py::TestEniRoundTrip::testsimple_render_dhcpv6_reject_ra PASSED [ 17%]
> tests/unittests/test_net.py::TestEniRoundTrip::testsimple_render_dhcpv6_stateful PASSED [ 17%]
> tests/unittests/test_net.py::TestEniRoundTrip::testsimple_render_dhcpv6_stateless PASSED [ 18%]
> tests/unittests/test_net.py::TestEniRoundTrip::testsimple_render_ipv6_slaac PASSED [ 18%]
> tests/unittests/test_net.py::TestEniRoundTrip::testsimple_render_manual PASSED [ 18%]
> tests/unittests/test_net.py::TestEniRoundTrip::testsimple_render_small PASSED [ 18%]
> tests/unittests/test_net.py::TestEniRoundTrip::testsimple_render_v4_and_v6 PASSED [ 18%]
> tests/unittests/test_net.py::TestEniRoundTrip::testsimple_render_v4_and_v6_static PASSED [ 18%]
> tests/unittests/test_net.py::TestRenderersSelect::test_valid_renderer_from_defaults_depending_on_availability[RendererNotFoundError-False-False-False-False-False] PASSED [ 18%]
> tests/unittests/test_net.py::TestRenderersSelect::test_valid_renderer_from_defaults_depending_on_availability[eni-False-True-False-False-False] PASSED [ 18%]
> tests/unittests/test_net.py::TestRenderersSelect::test_valid_renderer_from_defaults_depending_on_availability[eni-True-True-False-False-False] PASSED [ 18%]
> tests/unittests/test_net.py::TestRenderersSelect::test_valid_renderer_from_defaults_depending_on_availability[netplan-True-False-False-False-False] PASSED [ 18%]
> tests/unittests/test_net.py::TestRenderersSelect::test_valid_renderer_from_defaults_depending_on_availability[netplan-True-False-True-False-False] PASSED [ 18%]
> tests/unittests/test_net.py::TestRenderersSelect::test_valid_renderer_from_defaults_depending_on_availability[sysconfig-False-False-True-False-True] PASSED [ 18%]
> tests/unittests/test_net.py::TestNetRenderers::test_eni_and_sysconfig_available PASSED [ 18%]
> tests/unittests/test_net.py::TestNetRenderers::test_first_in_priority PASSED [ 18%]
> tests/unittests/test_net.py::TestNetRenderers::test_search_returns_empty_on_none PASSED [ 18%]
> tests/unittests/test_net.py::TestNetRenderers::test_select_none_found_raises PASSED [ 18%]
> tests/unittests/test_net.py::TestNetRenderers::test_select_positive PASSED [ 18%]
> tests/unittests/test_net.py::TestNetRenderers::test_sysconfig_available_uses_variant_mapping PASSED [ 19%]
> tests/unittests/test_net.py::TestGetInterfaces::test_gi_excludes_any_without_mac_address PASSED [ 19%]
> tests/unittests/test_net.py::TestGetInterfaces::test_gi_excludes_bridges PASSED [ 19%]
> tests/unittests/test_net.py::TestGetInterfaces::test_gi_excludes_stolen_macs PASSED [ 19%]
> tests/unittests/test_net.py::TestGetInterfaces::test_gi_includes_duplicate_macs PASSED [ 19%]
> tests/unittests/test_net.py::TestInterfaceHasOwnMac::test_expected_values PASSED [ 19%]
> tests/unittests/test_net.py::TestInterfaceHasOwnMac::test_non_strict_with_no_addr_assign_type PASSED [ 19%]
> tests/unittests/test_net.py::TestInterfaceHasOwnMac::test_strict_with_no_addr_assign_type_raises PASSED [ 19%]
> tests/unittests/test_net.py::TestGetInterfacesByMac::test_duplicates_of_empty_mac_are_ok PASSED [ 19%]
> tests/unittests/test_net.py::TestGetInterfacesByMac::test_excludes_any_without_mac_address PASSED [ 19%]
> tests/unittests/test_net.py::TestGetInterfacesByMac::test_excludes_bridges PASSED [ 19%]
> tests/unittests/test_net.py::TestGetInterfacesByMac::test_excludes_stolen_macs PASSED [ 19%]
> tests/unittests/test_net.py::TestGetInterfacesByMac::test_excludes_vlans PASSED [ 19%]
> tests/unittests/test_net.py::TestGetInterfacesByMac::test_ib PASSED      [ 19%]
> tests/unittests/test_net.py::TestGetInterfacesByMac::test_raise_exception_on_duplicate_macs PASSED [ 19%]
> tests/unittests/test_net.py::TestGetInterfacesByMac::test_skip_all_zeros PASSED [ 19%]
> tests/unittests/test_net.py::TestInterfacesSorting::test_natural_order PASSED [ 20%]
> tests/unittests/test_net.py::TestGetIBHwaddrsByInterface::test_ethernet PASSED [ 20%]
> tests/unittests/test_net.py::TestGetIBHwaddrsByInterface::test_ib PASSED [ 20%]
> tests/unittests/test_net.py::TestRenameInterfaces::test_rename_all PASSED [ 20%]
> tests/unittests/test_net.py::TestRenameInterfaces::test_rename_all_bounce PASSED [ 20%]
> tests/unittests/test_net.py::TestRenameInterfaces::test_rename_duplicate_macs PASSED [ 20%]
> tests/unittests/test_net.py::TestRenameInterfaces::test_rename_duplicate_macs_driver_no_devid PASSED [ 20%]
> tests/unittests/test_net.py::TestRenameInterfaces::test_rename_macs_case_insensitive PASSED [ 20%]
> tests/unittests/test_net.py::TestRenameInterfaces::test_rename_multi_mac_dups PASSED [ 20%]
> tests/unittests/test_net.py::TestRenameInterfaces::test_rename_no_driver_no_device_id PASSED [ 20%]
> tests/unittests/test_net.py::TestNetworkState::test_bcast_addr PASSED    [ 20%]
> tests/unittests/test_net_freebsd.py::TestInterfacesByMac::test_get_interfaces_by_mac PASSED [ 20%]
> tests/unittests/test_pathprefix2dict.py::TestPathPrefix2Dict::test_no_required_and_optional PASSED [ 20%]
> tests/unittests/test_pathprefix2dict.py::TestPathPrefix2Dict::test_required_and_optional PASSED [ 20%]
> tests/unittests/test_pathprefix2dict.py::TestPathPrefix2Dict::test_required_missing PASSED [ 20%]
> tests/unittests/test_pathprefix2dict.py::TestPathPrefix2Dict::test_required_only PASSED [ 20%]
> tests/unittests/test_registry.py::TestDictRegistry::test_added_item_included_in_output PASSED [ 20%]
> tests/unittests/test_registry.py::TestDictRegistry::test_keys_cannot_be_replaced PASSED [ 21%]
> tests/unittests/test_registry.py::TestDictRegistry::test_modifying_registered_items_isnt_exposed_to_other_callers PASSED [ 21%]
> tests/unittests/test_registry.py::TestDictRegistry::test_registry_starts_out_empty PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_distro_in_cloud_cfg[amazon] PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_distro_in_cloud_cfg[arch] PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_distro_in_cloud_cfg[centos] PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_distro_in_cloud_cfg[debian] PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_distro_in_cloud_cfg[fedora] PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_distro_in_cloud_cfg[freebsd] PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_distro_in_cloud_cfg[netbsd] PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_distro_in_cloud_cfg[openbsd] PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_distro_in_cloud_cfg[rhel] PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_distro_in_cloud_cfg[suse] PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_distro_in_cloud_cfg[ubuntu] PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_distro_in_cloud_cfg[unknown] PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_default_user_in_cloud_cfg[amazon] PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_default_user_in_cloud_cfg[arch] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_default_user_in_cloud_cfg[centos] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_default_user_in_cloud_cfg[debian] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_default_user_in_cloud_cfg[fedora] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_default_user_in_cloud_cfg[freebsd] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_default_user_in_cloud_cfg[netbsd] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_default_user_in_cloud_cfg[openbsd] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_default_user_in_cloud_cfg[rhel] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_default_user_in_cloud_cfg[suse] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_default_user_in_cloud_cfg[ubuntu] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_default_user_in_cloud_cfg[unknown] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_network_renderer_priority_in_cloud_cfg[freebsd-renderers0] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_network_renderer_priority_in_cloud_cfg[netbsd-renderers1] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_network_renderer_priority_in_cloud_cfg[openbsd-renderers2] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_network_renderer_priority_in_cloud_cfg[ubuntu-renderers3] PASSED [ 22%]
> tests/unittests/test_reporting.py::TestReportStartEvent::test_report_start_event_passes_something_with_as_string_to_handlers PASSED [ 22%]
> tests/unittests/test_reporting.py::TestReportFinishEvent::test_invalid_result_raises_attribute_error PASSED [ 22%]
> tests/unittests/test_reporting.py::TestReportFinishEvent::test_report_finish_event_passes_something_with_as_string_to_handlers PASSED [ 23%]
> tests/unittests/test_reporting.py::TestReportFinishEvent::test_reporting_successful_finish_has_sensible_string_repr PASSED [ 23%]
> tests/unittests/test_reporting.py::TestReportFinishEvent::test_reporting_unsuccessful_finish_has_sensible_string_repr PASSED [ 23%]
> tests/unittests/test_reporting.py::TestReportingEvent::test_as_dict PASSED [ 23%]
> tests/unittests/test_reporting.py::TestReportingEvent::test_as_string PASSED [ 23%]
> tests/unittests/test_reporting.py::TestFinishReportingEvent::test_as_has_result PASSED [ 23%]
> tests/unittests/test_reporting.py::TestBaseReportingHandler::test_base_reporting_handler_is_abstract PASSED [ 23%]
> tests/unittests/test_reporting.py::TestLogHandler::test_appropriate_logger_used PASSED [ 23%]
> tests/unittests/test_reporting.py::TestLogHandler::test_log_message_uses_event_as_string PASSED [ 23%]
> tests/unittests/test_reporting.py::TestLogHandler::test_single_log_message_at_info_published PASSED [ 23%]
> tests/unittests/test_reporting.py::TestDefaultRegisteredHandler::test_log_handler_registered_by_default PASSED [ 23%]
> tests/unittests/test_reporting.py::TestReportingConfiguration::test_empty_configuration_doesnt_add_handlers PASSED [ 23%]
> tests/unittests/test_reporting.py::TestReportingConfiguration::test_handler_config_not_modified PASSED [ 23%]
> tests/unittests/test_reporting.py::TestReportingConfiguration::test_handlers_removed_if_falseish_specified PASSED [ 23%]
> tests/unittests/test_reporting.py::TestReportingConfiguration::test_looks_up_handler_by_type_and_adds_it PASSED [ 23%]
> tests/unittests/test_reporting.py::TestReportingConfiguration::test_uses_non_type_parts_of_config_dict_as_kwargs PASSED [ 23%]
> tests/unittests/test_reporting.py::TestReportingEventStack::test_child_fullname_respects_parent PASSED [ 24%]
> tests/unittests/test_reporting.py::TestReportingEventStack::test_child_result_bubbles_up PASSED [ 24%]
> tests/unittests/test_reporting.py::TestReportingEventStack::test_finish_exception_defaults_fail PASSED [ 24%]
> tests/unittests/test_reporting.py::TestReportingEventStack::test_message_updatable PASSED [ 24%]
> tests/unittests/test_reporting.py::TestReportingEventStack::test_message_used_in_finish PASSED [ 24%]
> tests/unittests/test_reporting.py::TestReportingEventStack::test_reporting_child_default_to_parent PASSED [ 24%]
> tests/unittests/test_reporting.py::TestReportingEventStack::test_reporting_disabled_does_not_report_events PASSED [ 24%]
> tests/unittests/test_reporting.py::TestReportingEventStack::test_reporting_event_has_sane_repr PASSED [ 24%]
> tests/unittests/test_reporting.py::TestReportingEventStack::test_result_on_exception_used PASSED [ 24%]
> tests/unittests/test_reporting.py::TestReportingEventStack::test_set_invalid_result_raises_value_error PASSED [ 24%]
> tests/unittests/test_reporting.py::TestReportingEventStack::test_start_and_finish_success PASSED [ 24%]
> tests/unittests/test_reporting.py::TestStatusAccess::test_invalid_status_access_raises_value_error PASSED [ 24%]
> tests/unittests/test_reporting_hyperv.py::TestKvpEncoding::test_encode_decode PASSED [ 24%]
> tests/unittests/test_reporting_hyperv.py::TextKvpReporter::test_event_very_long PASSED [ 24%]
> tests/unittests/test_reporting_hyperv.py::TextKvpReporter::test_events_with_higher_incarnation_not_over_written PASSED [ 24%]
> tests/unittests/test_reporting_hyperv.py::TextKvpReporter::test_file_operation_issue PASSED [ 24%]
> tests/unittests/test_reporting_hyperv.py::TextKvpReporter::test_finish_event_result_is_logged PASSED [ 25%]
> tests/unittests/test_reporting_hyperv.py::TextKvpReporter::test_get_boot_telemetry PASSED [ 25%]
> tests/unittests/test_reporting_hyperv.py::TextKvpReporter::test_get_system_info PASSED [ 25%]
> tests/unittests/test_reporting_hyperv.py::TextKvpReporter::test_not_truncate_kvp_file_modified_after_boot PASSED [ 25%]
> tests/unittests/test_reporting_hyperv.py::TextKvpReporter::test_report_diagnostic_event PASSED [ 25%]
> tests/unittests/test_reporting_hyperv.py::TextKvpReporter::test_truncate_stale_kvp_file PASSED [ 25%]
> tests/unittests/test_reporting_hyperv.py::TextKvpReporter::test_unique_kvp_key PASSED [ 25%]
> tests/unittests/test_rh_subscription.py::GoodTests::test_already_registered PASSED [ 25%]
> tests/unittests/test_rh_subscription.py::GoodTests::test_full_registration PASSED [ 25%]
> tests/unittests/test_rh_subscription.py::GoodTests::test_simple_registration PASSED [ 25%]
> tests/unittests/test_rh_subscription.py::GoodTests::test_update_repos_disable_with_none PASSED [ 25%]
> tests/unittests/test_rh_subscription.py::TestBadInput::test_bad_key_value PASSED [ 25%]
> tests/unittests/test_rh_subscription.py::TestBadInput::test_no_org PASSED [ 25%]
> tests/unittests/test_rh_subscription.py::TestBadInput::test_no_password PASSED [ 25%]
> tests/unittests/test_rh_subscription.py::TestBadInput::test_pool_not_a_list PASSED [ 25%]
> tests/unittests/test_rh_subscription.py::TestBadInput::test_repo_not_a_list PASSED [ 25%]
> tests/unittests/test_rh_subscription.py::TestBadInput::test_service_level_without_auto PASSED [ 25%]
> tests/unittests/test_sshutil.py::TestAuthKeyLineParser::test_parse_invalid_keytype PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestAuthKeyLineParser::test_parse_no_comment PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestAuthKeyLineParser::test_parse_with_keyoptions PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestAuthKeyLineParser::test_parse_with_options_passed_in PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestAuthKeyLineParser::test_simple_parse PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestUpdateAuthorizedKeys::test_new_invalid_keys_are_ignored PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestUpdateAuthorizedKeys::test_new_keys_replace PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestParseSSHConfig::test_blank_lines PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestParseSSHConfig::test_comment_line PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestParseSSHConfig::test_empty_file PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestParseSSHConfig::test_lower_case_config PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestParseSSHConfig::test_lower_case_with_equals PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestParseSSHConfig::test_not_a_file PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestParseSSHConfig::test_upper_case_config PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestParseSSHConfig::test_upper_case_with_equals PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestUpdateSshConfigLines::test_commented_out_not_updated_but_appended PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestUpdateSshConfigLines::test_keycase_not_modified PASSED [ 27%]
> tests/unittests/test_sshutil.py::TestUpdateSshConfigLines::test_multiple_updates_with_add PASSED [ 27%]
> tests/unittests/test_sshutil.py::TestUpdateSshConfigLines::test_new_option_added PASSED [ 27%]
> tests/unittests/test_sshutil.py::TestUpdateSshConfigLines::test_return_empty_if_no_changes PASSED [ 27%]
> tests/unittests/test_sshutil.py::TestUpdateSshConfigLines::test_single_option_updated PASSED [ 27%]
> tests/unittests/test_sshutil.py::TestUpdateSshConfig::test_modified PASSED [ 27%]
> tests/unittests/test_sshutil.py::TestUpdateSshConfig::test_not_modified PASSED [ 27%]
> tests/unittests/test_sshutil.py::TestBasicAuthorizedKeyParse::test_home PASSED [ 27%]
> tests/unittests/test_sshutil.py::TestBasicAuthorizedKeyParse::test_multiple PASSED [ 27%]
> tests/unittests/test_sshutil.py::TestBasicAuthorizedKeyParse::test_relative PASSED [ 27%]
> tests/unittests/test_sshutil.py::TestBasicAuthorizedKeyParse::test_user PASSED [ 27%]
> tests/unittests/test_sshutil.py::TestMultipleSshAuthorizedKeysFile::test_multiple_authorizedkeys_file_order1 PASSED [ 27%]
> tests/unittests/test_sshutil.py::TestMultipleSshAuthorizedKeysFile::test_multiple_authorizedkeys_file_order2 PASSED [ 27%]
> tests/unittests/test_templating.py::TestTemplates::test_detection SKIPPED [ 27%]
> tests/unittests/test_templating.py::TestTemplates::test_jinja_nonascii_render_from_file PASSED [ 27%]
> tests/unittests/test_templating.py::TestTemplates::test_jinja_nonascii_render_to_file PASSED [ 27%]
> tests/unittests/test_templating.py::TestTemplates::test_jinja_nonascii_render_to_string PASSED [ 27%]
> tests/unittests/test_templating.py::TestTemplates::test_jinja_nonascii_render_undefined_variables_to_default_py3 PASSED [ 28%]
> tests/unittests/test_templating.py::TestTemplates::test_jinja_warns_on_missing_dep_and_uses_basic_renderer SKIPPED [ 28%]
> tests/unittests/test_templating.py::TestTemplates::test_render_basic PASSED [ 28%]
> tests/unittests/test_templating.py::TestTemplates::test_render_basic2 PASSED [ 28%]
> tests/unittests/test_templating.py::TestTemplates::test_render_basic_deeper PASSED [ 28%]
> tests/unittests/test_templating.py::TestTemplates::test_render_basic_no_parens PASSED [ 28%]
> tests/unittests/test_templating.py::TestTemplates::test_render_basic_parens PASSED [ 28%]
> tests/unittests/test_templating.py::TestTemplates::test_render_cheetah PASSED [ 28%]
> tests/unittests/test_templating.py::TestTemplates::test_render_default PASSED [ 28%]
> tests/unittests/test_templating.py::TestTemplates::test_render_jinja PASSED [ 28%]
> tests/unittests/test_util.py::TestGetCfgOptionListOrStr::test_found_convert_to_list PASSED [ 28%]
> tests/unittests/test_util.py::TestGetCfgOptionListOrStr::test_found_with_default PASSED [ 28%]
> tests/unittests/test_util.py::TestGetCfgOptionListOrStr::test_not_found_no_default PASSED [ 28%]
> tests/unittests/test_util.py::TestGetCfgOptionListOrStr::test_not_found_with_default PASSED [ 28%]
> tests/unittests/test_util.py::TestGetCfgOptionListOrStr::test_value_is_none PASSED [ 28%]
> tests/unittests/test_util.py::TestWriteFile::test_basic_usage PASSED     [ 28%]
> tests/unittests/test_util.py::TestWriteFile::test_copy_mode_no_existing PASSED [ 29%]
> tests/unittests/test_util.py::TestWriteFile::test_copy_mode_with_existing PASSED [ 29%]
> tests/unittests/test_util.py::TestWriteFile::test_custom_omode PASSED    [ 29%]
> tests/unittests/test_util.py::TestWriteFile::test_dir_is_created_if_required PASSED [ 29%]
> tests/unittests/test_util.py::TestWriteFile::test_explicit_mode PASSED   [ 29%]
> tests/unittests/test_util.py::TestWriteFile::test_restorecon_if_possible_is_called PASSED [ 29%]
> tests/unittests/test_util.py::TestDeleteDirContents::test_deletes_empty_dirs PASSED [ 29%]
> tests/unittests/test_util.py::TestDeleteDirContents::test_deletes_files PASSED [ 29%]
> tests/unittests/test_util.py::TestDeleteDirContents::test_deletes_nested_dirs PASSED [ 29%]
> tests/unittests/test_util.py::TestDeleteDirContents::test_deletes_non_empty_dirs PASSED [ 29%]
> tests/unittests/test_util.py::TestDeleteDirContents::test_deletes_symlinks PASSED [ 29%]
> tests/unittests/test_util.py::TestDeleteDirContents::test_does_not_delete_dir PASSED [ 29%]
> tests/unittests/test_util.py::TestKeyValStrings::test_keyval_str_to_dict PASSED [ 29%]
> tests/unittests/test_util.py::TestGetCmdline::test_cmdline_reads_debug_env PASSED [ 29%]
> tests/unittests/test_util.py::TestLoadYaml::test_bogus_parse_error_returns_default PASSED [ 29%]
> tests/unittests/test_util.py::TestLoadYaml::test_bogus_scan_error_returns_default PASSED [ 29%]
> tests/unittests/test_util.py::TestLoadYaml::test_nonallowed_returns_default PASSED [ 29%]
> tests/unittests/test_util.py::TestLoadYaml::test_none_returns_default PASSED [ 30%]
> tests/unittests/test_util.py::TestLoadYaml::test_python_unicode PASSED   [ 30%]
> tests/unittests/test_util.py::TestLoadYaml::test_simple PASSED           [ 30%]
> tests/unittests/test_util.py::TestLoadYaml::test_unsafe_types PASSED     [ 30%]
> tests/unittests/test_util.py::TestMountinfoParsing::test_get_device_info_from_zpool PASSED [ 30%]
> tests/unittests/test_util.py::TestMountinfoParsing::test_get_device_info_from_zpool_handles_no_zpool PASSED [ 30%]
> tests/unittests/test_util.py::TestMountinfoParsing::test_get_device_info_from_zpool_no_dev_zfs PASSED [ 30%]
> tests/unittests/test_util.py::TestMountinfoParsing::test_get_device_info_from_zpool_on_error PASSED [ 30%]
> tests/unittests/test_util.py::TestMountinfoParsing::test_invalid_mountinfo PASSED [ 30%]
> tests/unittests/test_util.py::TestMountinfoParsing::test_parse_mount_with_ext PASSED [ 30%]
> tests/unittests/test_util.py::TestMountinfoParsing::test_parse_mount_with_zfs PASSED [ 30%]
> tests/unittests/test_util.py::TestMountinfoParsing::test_precise_ext4_root PASSED [ 30%]
> tests/unittests/test_util.py::TestMountinfoParsing::test_raring_btrfs_root PASSED [ 30%]
> tests/unittests/test_util.py::TestIsX86::test_is_x86_calls_uname_for_architecture PASSED [ 30%]
> tests/unittests/test_util.py::TestIsX86::test_is_x86_matches_x86_types PASSED [ 30%]
> tests/unittests/test_util.py::TestIsX86::test_is_x86_unmatched_types PASSED [ 30%]
> tests/unittests/test_util.py::TestReadDMIData::test_container_returns_none PASSED [ 31%]
> tests/unittests/test_util.py::TestReadDMIData::test_container_returns_none_on_unknown PASSED [ 31%]
> tests/unittests/test_util.py::TestReadDMIData::test_dmidecode_not_used_on_arm PASSED [ 31%]
> tests/unittests/test_util.py::TestReadDMIData::test_dmidecode_used_if_no_sysfs_file_on_disk PASSED [ 31%]
> tests/unittests/test_util.py::TestReadDMIData::test_dots_returned_instead_of_foxfox PASSED [ 31%]
> tests/unittests/test_util.py::TestReadDMIData::test_none_returned_if_dmidecode_not_in_path PASSED [ 31%]
> tests/unittests/test_util.py::TestReadDMIData::test_none_returned_if_neither_source_has_data PASSED [ 31%]
> tests/unittests/test_util.py::TestReadDMIData::test_sysfs_used_with_key_in_mapping_and_file_on_disk PASSED [ 31%]
> tests/unittests/test_util.py::TestGetConfigLogfiles::test_default_log_file_present PASSED [ 31%]
> tests/unittests/test_util.py::TestGetConfigLogfiles::test_empty_cfg_returns_empty_list PASSED [ 31%]
> tests/unittests/test_util.py::TestGetConfigLogfiles::test_output_logs_parsed_when_appending PASSED [ 31%]
> tests/unittests/test_util.py::TestGetConfigLogfiles::test_output_logs_parsed_when_redirecting PASSED [ 31%]
> tests/unittests/test_util.py::TestGetConfigLogfiles::test_output_logs_parsed_when_teeing_files PASSED [ 31%]
> tests/unittests/test_util.py::TestMultiLog::test_given_log_level_used PASSED [ 31%]
> tests/unittests/test_util.py::TestMultiLog::test_log_level_defaults_to_debug PASSED [ 31%]
> tests/unittests/test_util.py::TestMultiLog::test_logs_dont_go_to_stdout_if_console_exists PASSED [ 31%]
> tests/unittests/test_util.py::TestMultiLog::test_logs_go_to_console_by_default PASSED [ 31%]
> tests/unittests/test_util.py::TestMultiLog::test_logs_go_to_log_if_given PASSED [ 32%]
> tests/unittests/test_util.py::TestMultiLog::test_logs_go_to_stdout_if_console_does_not_exist PASSED [ 32%]
> tests/unittests/test_util.py::TestMultiLog::test_newlines_stripped_from_log_call PASSED [ 32%]
> tests/unittests/test_util.py::TestMultiLog::test_stderr_not_used_if_false PASSED [ 32%]
> tests/unittests/test_util.py::TestMultiLog::test_stderr_used_by_default PASSED [ 32%]
> tests/unittests/test_util.py::TestMessageFromString::test_unicode_not_messed_up PASSED [ 32%]
> tests/unittests/test_util.py::TestReadSeeded::test_unicode_not_messed_up PASSED [ 32%]
> tests/unittests/test_util.py::TestSubp::test_bogus_command_logs_status_messages PASSED [ 32%]
> tests/unittests/test_util.py::TestSubp::test_bunch_of_slashes_in_path PASSED [ 32%]
> tests/unittests/test_util.py::TestSubp::test_c_lang_can_take_utf8_args PASSED [ 32%]
> tests/unittests/test_util.py::TestSubp::test_command_logs_exit_codes_to_status_cb PASSED [ 32%]
> tests/unittests/test_util.py::TestSubp::test_exception_has_out_err_are_bytes_if_decode_false PASSED [ 32%]
> tests/unittests/test_util.py::TestSubp::test_exception_has_out_err_are_bytes_if_decode_true PASSED [ 32%]
> tests/unittests/test_util.py::TestSubp::test_returns_none_if_no_capture PASSED [ 32%]
> tests/unittests/test_util.py::TestSubp::test_subp_capture_stderr PASSED  [ 32%]
> tests/unittests/test_util.py::TestSubp::test_subp_combined_stderr_stdout PASSED [ 32%]
> tests/unittests/test_util.py::TestSubp::test_subp_decode_ignore PASSED   [ 33%]
> tests/unittests/test_util.py::TestSubp::test_subp_decode_invalid_utf8_replaces PASSED [ 33%]
> tests/unittests/test_util.py::TestSubp::test_subp_decode_strict_raises PASSED [ 33%]
> tests/unittests/test_util.py::TestSubp::test_subp_decode_strict_valid_utf8 PASSED [ 33%]
> tests/unittests/test_util.py::TestSubp::test_subp_env_and_update_env PASSED [ 33%]
> tests/unittests/test_util.py::TestSubp::test_subp_handles_bytestrings PASSED [ 33%]
> tests/unittests/test_util.py::TestSubp::test_subp_handles_strings PASSED [ 33%]
> tests/unittests/test_util.py::TestSubp::test_subp_handles_utf8 PASSED    [ 33%]
> tests/unittests/test_util.py::TestSubp::test_subp_reads_env PASSED       [ 33%]
> tests/unittests/test_util.py::TestSubp::test_subp_respects_decode_false PASSED [ 33%]
> tests/unittests/test_util.py::TestSubp::test_subp_update_env PASSED      [ 33%]
> tests/unittests/test_util.py::TestSubp::test_subp_warn_missing_shebang PASSED [ 33%]
> tests/unittests/test_util.py::TestEncode::test_decode_binary_plain_text_with_hex PASSED [ 33%]
> tests/unittests/test_util.py::TestProcessExecutionError::test_pexec_error_empty_msgs PASSED [ 33%]
> tests/unittests/test_util.py::TestProcessExecutionError::test_pexec_error_indent_text PASSED [ 33%]
> tests/unittests/test_util.py::TestProcessExecutionError::test_pexec_error_multi_line_msgs PASSED [ 33%]
> tests/unittests/test_util.py::TestProcessExecutionError::test_pexec_error_single_line_msgs PASSED [ 34%]
> tests/unittests/test_util.py::TestProcessExecutionError::test_pexec_error_type PASSED [ 34%]
> tests/unittests/test_util.py::TestSystemIsSnappy::test_bad_content_in_os_release_no_effect PASSED [ 34%]
> tests/unittests/test_util.py::TestSystemIsSnappy::test_channel_ini_with_snappy_is_snappy PASSED [ 34%]
> tests/unittests/test_util.py::TestSystemIsSnappy::test_id_in_os_release PASSED [ 34%]
> tests/unittests/test_util.py::TestSystemIsSnappy::test_id_in_os_release_quoted PASSED [ 34%]
> tests/unittests/test_util.py::TestSystemIsSnappy::test_nothing_found_is_not_snappy PASSED [ 34%]
> tests/unittests/test_util.py::TestSystemIsSnappy::test_snap_core_in_cmdline_is_snappy PASSED [ 34%]
> tests/unittests/test_util.py::TestSystemIsSnappy::test_system_image_config_dir_is_snappy PASSED [ 34%]
> tests/unittests/test_util.py::TestLoadShellContent::test_comments_handled_correctly PASSED [ 34%]
> tests/unittests/test_util.py::TestGetProcEnv::test_all_utf8_encoded PASSED [ 34%]
> tests/unittests/test_util.py::TestGetProcEnv::test_encoding_none_returns_bytes PASSED [ 34%]
> tests/unittests/test_util.py::TestGetProcEnv::test_get_proc_ppid PASSED  [ 34%]
> tests/unittests/test_util.py::TestGetProcEnv::test_non_existing_file_returns_empty_dict PASSED [ 34%]
> tests/unittests/test_util.py::TestGetProcEnv::test_non_utf8_in_environment PASSED [ 34%]
> tests/unittests/test_util.py::test_find_devs_with_openbsd PASSED         [ 34%]
> tests/unittests/test_util.py::test_find_devs_with_openbsd_with_criteria PASSED [ 34%]
> tests/unittests/test_util.py::test_find_devs_with_freebsd PASSED         [ 35%]
> tests/unittests/test_util.py::test_find_devs_with_netbsd PASSED          [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareConfigFile::test_config_file_dhcp_2nics PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareConfigFile::test_config_password PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareConfigFile::test_config_reset_passwd PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareConfigFile::test_configfile_static_2nics PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareConfigFile::test_custom_script PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareConfigFile::test_datasource_instance_id PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareConfigFile::test_gen_subnet PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareConfigFile::test_get_config_dns_suffixes PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareConfigFile::test_get_config_nameservers PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareConfigFile::test_get_nics_list_dhcp PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareConfigFile::test_get_nics_list_static PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareConfigFile::test_post_gc_status PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareConfigFile::test_utility_methods PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareNetConfig::test_a_primary_nic_with_gateway PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareNetConfig::test_cust_non_primary_nic_with_gateway_ PASSED [ 36%]
> tests/unittests/test_vmware_config_file.py::TestVmwareNetConfig::test_non_primary_nic_with_gateway PASSED [ 36%]
> tests/unittests/test_vmware_config_file.py::TestVmwareNetConfig::test_non_primary_nic_without_gateway PASSED [ 36%]
> tests/unittests/test_datasource/test_aliyun.py::TestAliYunDatasource::test_parse_public_keys PASSED [ 36%]
> tests/unittests/test_datasource/test_aliyun.py::TestAliYunDatasource::test_returns_false_when_not_on_aliyun PASSED [ 36%]
> tests/unittests/test_datasource/test_aliyun.py::TestAliYunDatasource::test_with_mock_server FAILED [ 36%]
> tests/unittests/test_datasource/test_aliyun.py::TestIsAliYun::test_false_on_empty_string PASSED [ 36%]
> tests/unittests/test_datasource/test_aliyun.py::TestIsAliYun::test_false_on_unknown_string PASSED [ 36%]
> tests/unittests/test_datasource/test_aliyun.py::TestIsAliYun::test_true_on_aliyun_product PASSED [ 36%]
> tests/unittests/test_datasource/test_altcloud.py::TestGetCloudType::test_cloud_info_file PASSED [ 36%]
> tests/unittests/test_datasource/test_altcloud.py::TestGetCloudType::test_cloud_info_file_ioerror PASSED [ 36%]
> tests/unittests/test_datasource/test_altcloud.py::TestGetCloudType::test_rhev PASSED [ 36%]
> tests/unittests/test_datasource/test_altcloud.py::TestGetCloudType::test_unknown PASSED [ 36%]
> tests/unittests/test_datasource/test_altcloud.py::TestGetCloudType::test_vsphere PASSED [ 36%]
> tests/unittests/test_datasource/test_altcloud.py::TestGetDataCloudInfoFile::test_fail_rhev PASSED [ 36%]
> tests/unittests/test_datasource/test_altcloud.py::TestGetDataCloudInfoFile::test_fail_vsphere PASSED [ 36%]
> tests/unittests/test_datasource/test_altcloud.py::TestGetDataCloudInfoFile::test_rhev PASSED [ 36%]
> tests/unittests/test_datasource/test_altcloud.py::TestGetDataCloudInfoFile::test_unrecognized PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestGetDataCloudInfoFile::test_vsphere PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestGetDataNoCloudInfoFile::test_failure_no_cloud_file PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestGetDataNoCloudInfoFile::test_rhev_no_cloud_file PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestGetDataNoCloudInfoFile::test_vsphere_no_cloud_file PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestUserDataRhevm::test_modprobe_fails PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestUserDataRhevm::test_mount_cb_fails PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestUserDataRhevm::test_no_modprobe_cmd PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestUserDataRhevm::test_no_udevadm_cmd PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestUserDataRhevm::test_udevadm_fails PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestUserDataVsphere::test_user_data_vsphere_mcb_fail PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestUserDataVsphere::test_user_data_vsphere_no_cdrom PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestUserDataVsphere::test_user_data_vsphere_success PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestReadUserDataCallback::test_callback_both PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestReadUserDataCallback::test_callback_dc PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestReadUserDataCallback::test_callback_non_dc PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestReadUserDataCallback::test_callback_none PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestParseNetworkConfig::test_increases_route_metric_for_non_primary_nics PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestParseNetworkConfig::test_ipv4_and_ipv6_route_metrics_match_for_nics PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestParseNetworkConfig::test_ipv4_secondary_ips_will_be_static_addrs PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestParseNetworkConfig::test_ipv6_secondary_ips_will_be_static_cidrs PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestParseNetworkConfig::test_single_ipv4_nic_configuration PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestGetMetadataFromIMDS::test_get_metadata_does_not_dhcp_if_network_is_up PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestGetMetadataFromIMDS::test_get_metadata_from_imds_empty_when_no_imds_present FAILED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestGetMetadataFromIMDS::test_get_metadata_from_imds_retries_on_timeout PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestGetMetadataFromIMDS::test_get_metadata_performs_dhcp_when_network_is_down PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_availability_zone_set_from_imds PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_basic_dev_file PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_basic_seed_dir PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_call_is_platform_viable_seed PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_cfg_has_no_fingerprint_has_value PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_cfg_has_pubkeys_fingerprint PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_cfg_has_pubkeys_value PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_crawl_metadata_on_reprovision_reports_ready PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_crawl_metadata_on_reprovision_reports_ready_using_lease PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_crawl_metadata_raises_invalid_metadata_on_error PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_crawl_metadata_returns_structured_data_and_caches_nothing PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_default_ephemeral PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_exception_fetching_fabric_data_doesnt_propagate PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_fabric_data_included_in_metadata PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_fallback_network_config PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_fallback_network_config_blacklist PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_get_data_non_ubuntu_will_not_remove_network_scripts PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_get_data_on_ubuntu_will_not_remove_network_scripts_disabled PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_get_data_on_ubuntu_will_remove_network_scripts PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_get_hostname_with_iterable_arg PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_get_hostname_with_no_args PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_get_hostname_with_string_arg PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_get_resource_disk PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_imds_network_config PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_imds_network_ignored_when_apply_network_config_false PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_instance_id_endianness PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_instance_id_from_dmidecode_used PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_instance_id_from_dmidecode_used_for_builtin PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_list_possible_azure_ds_devs PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_network_config_set_from_imds PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_network_config_set_from_imds_route_metric_for_secondary_nic PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_no_datasource_expected PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_ovf_can_include_unicode PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_ovf_env_arrives_in_waagent_dir PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_password_given PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_password_redacted_in_ovf PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_provide_disk_aliases PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_region_set_from_imds PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_sys_cfg_set_agent_command PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_sys_cfg_set_never_destroy_ntfs PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_user_cfg_set_agent_command PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_user_cfg_set_agent_command_plain PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_user_not_locked_if_password_redacted PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_userdata_arrives PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_userdata_found PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_userdata_plain PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_username_used PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_waagent_d_has_0700_perms PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_bounce_skipped_on_ifupdown_absent PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_default_bounce_command_ifup_used_by_default PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_different_hostnames_performs_bounce PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_different_hostnames_sets_hostname PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_different_hostnames_sets_hostname_back PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_disabled_bounce_does_not_change_hostname PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_disabled_bounce_does_not_perform_bounce PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_environment_correct_for_bounce_command PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_failure_in_bounce_still_resets_host_name PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_force_performs_bounce_regardless PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_same_hostname_does_not_change_hostname PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_set_hostname_option_can_disable_bounce PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_set_hostname_option_can_disable_hostname_set PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_unchanged_hostname_does_not_perform_bounce PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestLoadAzureDsDir::test_missing_ovf_env_xml_raises_non_azure_datasource_error PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestLoadAzureDsDir::test_wb_invalid_ovf_env_xml_calls_read_azure_ovf PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestReadAzureOvf::test_invalid_xml_raises_non_azure_ds PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestReadAzureOvf::test_load_with_pubkeys PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestCanDevBeReformatted::test_never_destroy_ntfs_config_false PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestCanDevBeReformatted::test_no_partitions_is_false PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestCanDevBeReformatted::test_ntfs_mount_errors_true PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestCanDevBeReformatted::test_one_partition_not_ntfs_false PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestCanDevBeReformatted::test_one_partition_ntfs_empty_is_true PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestCanDevBeReformatted::test_one_partition_ntfs_empty_with_dataloss_file_is_true PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestCanDevBeReformatted::test_one_partition_ntfs_populated_false PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestCanDevBeReformatted::test_one_partition_through_realpath_is_true PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestCanDevBeReformatted::test_three_partition_through_realpath_is_false PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestCanDevBeReformatted::test_three_partitions_is_false PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestCanDevBeReformatted::test_two_partitions_not_ntfs_false PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestCanDevBeReformatted::test_two_partitions_ntfs_empty_is_true PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestCanDevBeReformatted::test_two_partitions_ntfs_populated_false PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestClearCachedData::test_clear_cached_attrs_clears_imds PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestAzureNetExists::test_azure_net_must_exist_for_legacy_objpkl PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestPreprovisioningReadAzureOvfFlag::test_read_azure_ovf_with_false_flag PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestPreprovisioningReadAzureOvfFlag::test_read_azure_ovf_with_true_flag PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestPreprovisioningReadAzureOvfFlag::test_read_azure_ovf_without_flag PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestPreprovisioningShouldReprovision::test__should_reprovision_returns_false PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestPreprovisioningShouldReprovision::test__should_reprovision_with_file_existing PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestPreprovisioningShouldReprovision::test__should_reprovision_with_true_cfg PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestPreprovisioningShouldReprovision::test_reprovision_calls__poll_imds PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestPreprovisioningPollIMDS::test_poll_imds_re_dhcp_on_timeout PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestPreprovisioningPollIMDS::test_poll_imds_report_ready_false PASSED [ 44%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSourcePreprovisioning::test__reprovision_calls__poll_imds PASSED [ 44%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSourcePreprovisioning::test_poll_imds_returns_ovf_env PASSED [ 44%]
> tests/unittests/test_datasource/test_azure.py::TestRemoveUbuntuNetworkConfigScripts::test_remove_network_scripts_default_removes_stock_scripts PASSED [ 44%]
> tests/unittests/test_datasource/test_azure.py::TestRemoveUbuntuNetworkConfigScripts::test_remove_network_scripts_only_attempts_removal_if_path_exists PASSED [ 44%]
> tests/unittests/test_datasource/test_azure.py::TestRemoveUbuntuNetworkConfigScripts::test_remove_network_scripts_removes_both_files_and_directories PASSED [ 44%]
> tests/unittests/test_datasource/test_azure.py::TestWBIsPlatformViable::test_false_on_no_matching_azure_criteria PASSED [ 44%]
> tests/unittests/test_datasource/test_azure.py::TestWBIsPlatformViable::test_true_on_azure_ovf_env_in_seed_dir PASSED [ 44%]
> tests/unittests/test_datasource/test_azure.py::TestWBIsPlatformViable::test_true_on_non_azure_chassis PASSED [ 44%]
> tests/unittests/test_datasource/test_azure.py::TestRandomSeed::test_non_ascii_seed_is_serializable PASSED [ 44%]
> tests/unittests/test_datasource/test_azure_helper.py::TestFindEndpoint::test_from_dhcp_client PASSED [ 44%]
> tests/unittests/test_datasource/test_azure_helper.py::TestFindEndpoint::test_latest_lease_used PASSED [ 44%]
> tests/unittests/test_datasource/test_azure_helper.py::TestFindEndpoint::test_missing_file PASSED [ 44%]
> tests/unittests/test_datasource/test_azure_helper.py::TestFindEndpoint::test_missing_special_azure_line PASSED [ 44%]
> tests/unittests/test_datasource/test_azure_helper.py::TestExtractIpAddressFromLeaseValue::test_hex_string PASSED [ 44%]
> tests/unittests/test_datasource/test_azure_helper.py::TestExtractIpAddressFromLeaseValue::test_hex_string_with_single_character_part PASSED [ 44%]
> tests/unittests/test_datasource/test_azure_helper.py::TestExtractIpAddressFromLeaseValue::test_packed_string PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestExtractIpAddressFromLeaseValue::test_packed_string_containing_a_colon PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestExtractIpAddressFromLeaseValue::test_packed_string_with_escaped_quote PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestGoalStateParsing::test_certificates_xml_parsed_and_fetched_correctly PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestGoalStateParsing::test_container_id_parsed_correctly PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestGoalStateParsing::test_incarnation_parsed_correctly PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestGoalStateParsing::test_instance_id_byte_swap PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestGoalStateParsing::test_instance_id_no_byte_swap_diff_instance_id PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestGoalStateParsing::test_instance_id_no_byte_swap_same_instance_id PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestGoalStateParsing::test_instance_id_parsed_correctly PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestGoalStateParsing::test_missing_certificates_skips_http_get PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestAzureEndpointHttpClient::test_non_secure_get PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestAzureEndpointHttpClient::test_post PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestAzureEndpointHttpClient::test_post_with_extra_headers PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestAzureEndpointHttpClient::test_secure_get PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestOpenSSLManager::test_clean_up PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestOpenSSLManager::test_generate_certificate_uses_tmpdir PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestOpenSSLManager::test_openssl_manager_creates_a_tmpdir PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestOpenSSLManagerActions::test_parse_certificates SKIPPED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestOpenSSLManagerActions::test_pubkey_extract SKIPPED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestWALinuxAgentShim::test_absent_certificates_produces_empty_public_keys PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestWALinuxAgentShim::test_certificates_used_to_determine_public_keys PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestWALinuxAgentShim::test_clean_up_can_be_called_at_any_time PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestWALinuxAgentShim::test_clean_up_will_clean_up_openssl_manager_if_instantiated PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestWALinuxAgentShim::test_correct_url_used_for_goalstate PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestWALinuxAgentShim::test_correct_url_used_for_report_ready PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestWALinuxAgentShim::test_failure_to_fetch_goalstate_bubbles_up PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestWALinuxAgentShim::test_goal_state_values_used_for_report_ready PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestWALinuxAgentShim::test_http_client_uses_certificate PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestGetMetadataFromFabric::test_data_from_shim_returned PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestGetMetadataFromFabric::test_failure_in_registration_calls_clean_up PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestGetMetadataFromFabric::test_success_calls_clean_up PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestExtractIpAddressFromNetworkd::test_multiple_returns_first PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestExtractIpAddressFromNetworkd::test_no_valid_leases_is_none PASSED [ 47%]
> tests/unittests/test_datasource/test_azure_helper.py::TestExtractIpAddressFromNetworkd::test_option_245_is_found_in_single PASSED [ 47%]
> tests/unittests/test_datasource/test_azure_helper.py::TestExtractIpAddressFromNetworkd::test_option_245_not_found_returns_None PASSED [ 47%]
> tests/unittests/test_datasource/test_cloudsigma.py::DataSourceCloudSigmaTest::test_encoded_user_data PASSED [ 47%]
> tests/unittests/test_datasource/test_cloudsigma.py::DataSourceCloudSigmaTest::test_get_hostname PASSED [ 47%]
> tests/unittests/test_datasource/test_cloudsigma.py::DataSourceCloudSigmaTest::test_get_instance_id PASSED [ 47%]
> tests/unittests/test_datasource/test_cloudsigma.py::DataSourceCloudSigmaTest::test_get_public_ssh_keys PASSED [ 47%]
> tests/unittests/test_datasource/test_cloudsigma.py::DataSourceCloudSigmaTest::test_lack_of_cloudinit_key_in_vendor_data PASSED [ 47%]
> tests/unittests/test_datasource/test_cloudsigma.py::DataSourceCloudSigmaTest::test_lack_of_vendor_data PASSED [ 47%]
> tests/unittests/test_datasource/test_cloudsigma.py::DataSourceCloudSigmaTest::test_metadata PASSED [ 47%]
> tests/unittests/test_datasource/test_cloudsigma.py::DataSourceCloudSigmaTest::test_platform PASSED [ 47%]
> tests/unittests/test_datasource/test_cloudsigma.py::DataSourceCloudSigmaTest::test_user_data PASSED [ 47%]
> tests/unittests/test_datasource/test_cloudsigma.py::DataSourceCloudSigmaTest::test_vendor_data PASSED [ 47%]
> tests/unittests/test_datasource/test_cloudsigma.py::DsLoads::test_get_datasource_list_returns_in_local PASSED [ 47%]
> tests/unittests/test_datasource/test_cloudsigma.py::DsLoads::test_list_sources_finds_ds PASSED [ 47%]
> tests/unittests/test_datasource/test_cloudstack.py::TestCloudStackPasswordFetching::test_bad_request_doesnt_stop_ds_from_working SKIPPED [ 47%]
> tests/unittests/test_datasource/test_cloudstack.py::TestCloudStackPasswordFetching::test_empty_password_doesnt_create_config SKIPPED [ 47%]
> tests/unittests/test_datasource/test_cloudstack.py::TestCloudStackPasswordFetching::test_password_not_saved_if_already_saved SKIPPED [ 48%]
> tests/unittests/test_datasource/test_cloudstack.py::TestCloudStackPasswordFetching::test_password_not_saved_if_bad_request SKIPPED [ 48%]
> tests/unittests/test_datasource/test_cloudstack.py::TestCloudStackPasswordFetching::test_password_not_saved_if_empty SKIPPED [ 48%]
> tests/unittests/test_datasource/test_cloudstack.py::TestCloudStackPasswordFetching::test_password_sets_password SKIPPED [ 48%]
> tests/unittests/test_datasource/test_cloudstack.py::TestCloudStackPasswordFetching::test_saved_password_doesnt_create_config SKIPPED [ 48%]
> tests/unittests/test_datasource/test_cloudstack.py::TestCloudStackPasswordFetching::test_valid_response_means_password_marked_as_saved SKIPPED [ 48%]
> tests/unittests/test_datasource/test_cloudstack.py::TestGetLatestLease::test_ignores_by_extension PASSED [ 48%]
> tests/unittests/test_datasource/test_cloudstack.py::TestGetLatestLease::test_selects_dhclient_dash_files PASSED [ 48%]
> tests/unittests/test_datasource/test_cloudstack.py::TestGetLatestLease::test_selects_dhclient_dot_files PASSED [ 48%]
> tests/unittests/test_datasource/test_cloudstack.py::TestGetLatestLease::test_selects_newest_matching PASSED [ 48%]
> tests/unittests/test_datasource/test_cloudstack.py::TestGetLatestLease::test_skips_dhcpv6_files PASSED [ 48%]
> tests/unittests/test_datasource/test_common.py::ExpectedDataSources::test_expected_default_local_sources_found PASSED [ 48%]
> tests/unittests/test_datasource/test_common.py::ExpectedDataSources::test_expected_default_network_sources_found PASSED [ 48%]
> tests/unittests/test_datasource/test_common.py::ExpectedDataSources::test_expected_nondefault_network_sources_found PASSED [ 48%]
> tests/unittests/test_datasource/test_common.py::TestDataSourceInvariants::test_data_sources_have_valid_network_config_sources PASSED [ 48%]
> tests/unittests/test_datasource/test_common.py::TestDataSourceInvariants::test_expected_dsname_defined PASSED [ 48%]
> tests/unittests/test_datasource/test_configdrive.py::TestConfigDriveDataSource::test_dev_ec2_map PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestConfigDriveDataSource::test_dev_ec2_remap PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestConfigDriveDataSource::test_dev_os_map PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestConfigDriveDataSource::test_dev_os_remap PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestConfigDriveDataSource::test_dir_valid PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestConfigDriveDataSource::test_ec2_metadata PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestConfigDriveDataSource::test_find_candidates PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestConfigDriveDataSource::test_pubkeys_v2 PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestConfigDriveDataSource::test_seed_dir_bad_json_metadata PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestConfigDriveDataSource::test_seed_dir_missing PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestConfigDriveDataSource::test_seed_dir_no_configdrive PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestConfigDriveDataSource::test_seed_dir_valid_extra PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestConfigDriveDataSource::test_subplatform_config_drive_when_starts_with_dev PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestNetJson::test_network_config_conversion_dhcp6 PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestNetJson::test_network_config_conversions PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestNetJson::test_network_config_is_converted PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestNetJson::test_network_data_is_found PASSED [ 50%]
> tests/unittests/test_datasource/test_configdrive.py::TestConvertNetworkData::test_bond_conversion PASSED [ 50%]
> tests/unittests/test_datasource/test_configdrive.py::TestConvertNetworkData::test_conversion_fills_names PASSED [ 50%]
> tests/unittests/test_datasource/test_configdrive.py::TestConvertNetworkData::test_conversion_with_route PASSED [ 50%]
> tests/unittests/test_datasource/test_configdrive.py::TestConvertNetworkData::test_conversion_with_tap PASSED [ 50%]
> tests/unittests/test_datasource/test_configdrive.py::TestConvertNetworkData::test_convert_raises_value_error_on_missing_name PASSED [ 50%]
> tests/unittests/test_datasource/test_configdrive.py::TestConvertNetworkData::test_convert_reads_system_prefers_name PASSED [ 50%]
> tests/unittests/test_datasource/test_configdrive.py::TestConvertNetworkData::test_mac_addrs_can_be_upper_case PASSED [ 50%]
> tests/unittests/test_datasource/test_configdrive.py::TestConvertNetworkData::test_unknown_device_types_accepted PASSED [ 50%]
> tests/unittests/test_datasource/test_configdrive.py::TestConvertNetworkData::test_vlan PASSED [ 50%]
> tests/unittests/test_datasource/test_digitalocean.py::TestDataSourceDigitalOcean::test_metadata PASSED [ 50%]
> tests/unittests/test_datasource/test_digitalocean.py::TestDataSourceDigitalOcean::test_multiple_ssh_keys PASSED [ 50%]
> tests/unittests/test_datasource/test_digitalocean.py::TestDataSourceDigitalOcean::test_returns_false_not_on_docean PASSED [ 50%]
> tests/unittests/test_datasource/test_digitalocean.py::TestNetworkConvert::test_convert_without_private PASSED [ 50%]
> tests/unittests/test_datasource/test_digitalocean.py::TestNetworkConvert::test_correct_gateways_defined PASSED [ 50%]
> tests/unittests/test_datasource/test_digitalocean.py::TestNetworkConvert::test_networking_defined PASSED [ 50%]
> tests/unittests/test_datasource/test_digitalocean.py::TestNetworkConvert::test_private_interface_defined PASSED [ 50%]
> tests/unittests/test_datasource/test_digitalocean.py::TestNetworkConvert::test_public_interface_anchor_ipv4 PASSED [ 51%]
> tests/unittests/test_datasource/test_digitalocean.py::TestNetworkConvert::test_public_interface_defined PASSED [ 51%]
> tests/unittests/test_datasource/test_digitalocean.py::TestNetworkConvert::test_public_interface_ipv4 PASSED [ 51%]
> tests/unittests/test_datasource/test_digitalocean.py::TestNetworkConvert::test_public_interface_ipv6 PASSED [ 51%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_aws_inaccessible_imds_service_fails_with_retries PASSED [ 51%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_aws_token_403_fails_without_retries FAILED [ 51%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_aws_token_redacted FAILED [ 51%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_classic_instance_false FAILED [ 51%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_classic_instance_true FAILED [ 51%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_ec2_get_instance_id_refreshes_identity_on_upgrade FAILED [ 51%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_ec2_local_performs_dhcp_on_non_bsd FAILED [ 51%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_ec2_local_returns_false_on_bsd PASSED [ 51%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_ec2_local_returns_false_on_non_aws PASSED [ 51%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_network_config_cached_property_refreshed_on_upgrade FAILED [ 51%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_network_config_property_is_cached_in_datasource PASSED [ 51%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_network_config_property_returns_version_2_network_data FAILED [ 51%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_network_config_property_secondary_private_ips FAILED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_network_config_property_set_dhcp4 FAILED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_unknown_platform_with_strict_false FAILED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_unknown_platform_with_strict_true PASSED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_valid_platform_with_strict_false FAILED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_valid_platform_with_strict_true FAILED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestGetSecondaryAddresses::test_invalid_ipv4_ipv6_cidr_metadata_logged_with_defaults PASSED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestGetSecondaryAddresses::test_md_with_no_secondary_addresses PASSED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestGetSecondaryAddresses::test_md_with_secondary_v4_and_v6_addresses PASSED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestConvertEc2MetadataNetworkConfig::test_convert_ec2_metadata_gets_macs_from_get_interfaces_by_mac PASSED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestConvertEc2MetadataNetworkConfig::test_convert_ec2_metadata_network_config_handles_absent_dhcp4 PASSED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestConvertEc2MetadataNetworkConfig::test_convert_ec2_metadata_network_config_handles_dhcp4_and_dhcp6 PASSED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestConvertEc2MetadataNetworkConfig::test_convert_ec2_metadata_network_config_handles_local_v4_and_v6 PASSED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestConvertEc2MetadataNetworkConfig::test_convert_ec2_metadata_network_config_handles_multiple_nics PASSED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestConvertEc2MetadataNetworkConfig::test_convert_ec2_metadata_network_config_handles_only_dhcp6 PASSED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestConvertEc2MetadataNetworkConfig::test_convert_ec2_metadata_network_config_local_only_dhcp4 PASSED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestConvertEc2MetadataNetworkConfig::test_convert_ec2_metadata_network_config_skips_absent_macs PASSED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TesIdentifyPlatform::test_identify_e24cloud PASSED [ 53%]
> tests/unittests/test_datasource/test_ec2.py::TesIdentifyPlatform::test_identify_e24cloud_negative PASSED [ 53%]
> tests/unittests/test_datasource/test_ec2.py::TesIdentifyPlatform::test_identify_zstack PASSED [ 53%]
> tests/unittests/test_datasource/test_ec2.py::TesIdentifyPlatform::test_identify_zstack_full_domain_only PASSED [ 53%]
> tests/unittests/test_datasource/test_exoscale.py::TestDatasourceExoscale::test_activate_removes_set_passwords_semaphore PASSED [ 53%]
> tests/unittests/test_datasource/test_exoscale.py::TestDatasourceExoscale::test_get_data FAILED [ 53%]
> tests/unittests/test_datasource/test_exoscale.py::TestDatasourceExoscale::test_get_data_no_password FAILED [ 53%]
> tests/unittests/test_datasource/test_exoscale.py::TestDatasourceExoscale::test_get_data_saved_password FAILED [ 53%]
> tests/unittests/test_datasource/test_exoscale.py::TestDatasourceExoscale::test_non_viable_platform PASSED [ 53%]
> tests/unittests/test_datasource/test_exoscale.py::TestDatasourceExoscale::test_password FAILED [ 53%]
> tests/unittests/test_datasource/test_exoscale.py::TestDatasourceExoscale::test_password_empty FAILED [ 53%]
> tests/unittests/test_datasource/test_exoscale.py::TestDatasourceExoscale::test_password_saved FAILED [ 53%]
> tests/unittests/test_datasource/test_exoscale.py::TestDatasourceExoscale::test_read_metadata_when_password_server_unreachable FAILED [ 53%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_block_project_ssh_keys_override FAILED [ 53%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_cloudinit_ssh_keys FAILED [ 53%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_connection FAILED [ 53%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_default_user_ssh_keys FAILED [ 54%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_get_data_returns_false_if_not_on_gce PASSED [ 54%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_has_expired PASSED [ 54%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_instance_ssh_keys_override FAILED [ 54%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_metadata FAILED [ 54%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_metadata_encoding FAILED [ 54%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_metadata_partial FAILED [ 54%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_missing_required_keys_return_false FAILED [ 54%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_no_ssh_keys_metadata FAILED [ 54%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_only_last_part_of_zone_used_for_availability_zone FAILED [ 54%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_parse_public_keys_non_ascii PASSED [ 54%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_publish_host_keys PASSED [ 54%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_userdata_no_encoding FAILED [ 54%]
> tests/unittests/test_datasource/test_hetzner.py::TestDataSourceHetzner::test_not_on_hetzner_returns_false PASSED [ 54%]
> tests/unittests/test_datasource/test_hetzner.py::TestDataSourceHetzner::test_read_data PASSED [ 54%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestGetIBMPlatform::test_id_os_code PASSED [ 54%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestGetIBMPlatform::test_id_os_code_must_match_uuid PASSED [ 54%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestGetIBMPlatform::test_id_template_live_metadata PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestGetIBMPlatform::test_id_template_prov_metadata PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestGetIBMPlatform::test_id_template_prov_nodata PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestReadMD::test_os_code_live PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestReadMD::test_os_code_live_no_userdata PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestReadMD::test_provisioning_md PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestReadMD::test_provisioning_no_metadata PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestReadMD::test_provisioning_not_ibm PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestReadMD::test_template_live PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestIsIBMProvisioning::test_config_and_log_no_reference PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestIsIBMProvisioning::test_config_only PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestIsIBMProvisioning::test_config_with_new_log PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestIsIBMProvisioning::test_config_with_old_log PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestIsIBMProvisioning::test_no_config PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestDataSourceIBMCloud::test_get_data_false PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestDataSourceIBMCloud::test_get_data_processes_read_md PASSED [ 55%]
> tests/unittests/test_datasource/test_maas.py::TestMAASDataSource::test_seed_dir_invalid PASSED [ 56%]
> tests/unittests/test_datasource/test_maas.py::TestMAASDataSource::test_seed_dir_missing PASSED [ 56%]
> tests/unittests/test_datasource/test_maas.py::TestMAASDataSource::test_seed_dir_none PASSED [ 56%]
> tests/unittests/test_datasource/test_maas.py::TestMAASDataSource::test_seed_dir_valid PASSED [ 56%]
> tests/unittests/test_datasource/test_maas.py::TestMAASDataSource::test_seed_dir_valid_extra PASSED [ 56%]
> tests/unittests/test_datasource/test_maas.py::TestMAASDataSource::test_seed_url_valid PASSED [ 56%]
> tests/unittests/test_datasource/test_maas.py::TestMAASDataSource::test_seed_url_vendor_data_dict PASSED [ 56%]
> tests/unittests/test_datasource/test_maas.py::TestGetOauthHelper::test_all_required PASSED [ 56%]
> tests/unittests/test_datasource/test_maas.py::TestGetOauthHelper::test_other_fields_not_passed_through PASSED [ 56%]
> tests/unittests/test_datasource/test_maas.py::TestGetIdHash::test_v1_expected PASSED [ 56%]
> tests/unittests/test_datasource/test_maas.py::TestGetIdHash::test_v1_extra_fields_are_ignored PASSED [ 56%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_fs_config_lowercase_label PASSED [ 56%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_fs_config_lowercase_label_search_uppercase PASSED [ 56%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_fs_config_uppercase_label PASSED [ 56%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_fs_config_uppercase_label_search_uppercase PASSED [ 56%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_fs_label PASSED [ 56%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_metadata_network_config PASSED [ 56%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_metadata_network_config_over_interfaces PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_metadata_network_config_with_toplevel_network PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_metadata_network_interfaces PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_no_datasource_expected PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_nocloud_get_devices_freebsd PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_nocloud_no_vendordata PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_nocloud_seed_dir_non_lxd_platform_is_nocloud PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_nocloud_seed_dir_on_lxd PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_nocloud_seed_with_vendordata PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_seed_in_config PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestParseCommandLineData::test_parse_cmdline_data_none PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestParseCommandLineData::test_parse_cmdline_data_valid PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestMaybeRemoveToplevelNetwork::test_no_remove_if_missing_config_or_version PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestMaybeRemoveToplevelNetwork::test_no_remove_if_non_dict PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestMaybeRemoveToplevelNetwork::test_no_remove_if_other_keys PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestMaybeRemoveToplevelNetwork::test_remove_with_config_disabled PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestMaybeRemoveToplevelNetwork::test_should_remove_safely PASSED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_context_parser FAILED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_find_candidates PASSED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_get_data PASSED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_get_data_broken_contextdisk PASSED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_get_data_invalid_identity PASSED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_get_data_non_contextdisk PASSED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_hostname PASSED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_network_interfaces PASSED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_seed_dir_broken_context PASSED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_seed_dir_empty1_context FAILED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_seed_dir_empty2_context FAILED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_seed_dir_non_contextdisk PASSED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_ssh_key PASSED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_user_data_base64_encoding PASSED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_user_data_encoding_required_for_decode PASSED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_user_data_plain PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_context_devname PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_eth0 PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_eth0_override PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_eth0_v4v6_override PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_gen_conf_dns PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_gen_conf_gateway PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_gen_conf_gateway6 PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_gen_conf_ipv6address PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_gen_conf_mtu PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_field PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_field_emptycontext PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_field_nonecontext PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_field_withdefaultvalue PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_field_withdefaultvalue_emptycontext PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_gateway PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_gateway6 PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_ip PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_ip6 PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_ip6_dual PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_ip6_prefix PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_ip6_prefix_emptystring PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_ip6_ula PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_ip_emptystring PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_mask PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_mask_emptystring PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_mtu PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_nameservers PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_network PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_network_emptystring PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_multiple_nics PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestParseShellConfig::test_no_seconds FAILED [ 60%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_bad_datasource_meta FAILED [ 60%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_bad_metadata FAILED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_bad_uuid FAILED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_datasource FAILED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_disabled_datasource PASSED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_local_datasource FAILED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_metadata_invalid FAILED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_network_config_cached PASSED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_network_config_disabled_by_datasource_config PASSED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_network_config_from_network_json PASSED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_no_datasource PASSED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_no_ec2 FAILED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_successful FAILED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_userdata_empty FAILED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_vendordata_empty FAILED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_vendordata_invalid FAILED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_wb__crawl_metadata_does_not_persist FAILED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestVendorDataLoading::test_vd_load_dict_ci_dict PASSED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestVendorDataLoading::test_vd_load_dict_ci_list PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestVendorDataLoading::test_vd_load_dict_ci_string PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestVendorDataLoading::test_vd_load_dict_no_ci PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestVendorDataLoading::test_vd_load_list PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestVendorDataLoading::test_vd_load_none PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestVendorDataLoading::test_vd_load_string PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestDetectOpenStack::test_detect_openstack_by_proc_1_environ PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestDetectOpenStack::test_detect_openstack_intel_product_name_compute PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestDetectOpenStack::test_detect_openstack_non_intel_x86 PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestDetectOpenStack::test_detect_openstack_opentelekomcloud_chassis_asset_tag PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestDetectOpenStack::test_detect_openstack_oraclecloud_chassis_asset_tag PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestDetectOpenStack::test_detect_openstack_sapccloud_chassis_asset_tag PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestDetectOpenStack::test_not_detect_openstack_intel_x86_ec2 PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestMetadataReader::test__find_working_version FAILED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestMetadataReader::test__find_working_version_uses_latest PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestMetadataReader::test_read_v2_os_ocata FAILED [ 62%]
> tests/unittests/test_datasource/test_ovf.py::TestReadOvfEnv::test_with_b64_userdata PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestReadOvfEnv::test_with_no_userdata PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestReadOvfEnv::test_with_non_b64_userdata PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestMarkerFiles::test_false_when_markerid_none PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestMarkerFiles::test_marker_file_setup PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestMarkerFiles::test_markerid_file_exist PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestDatasourceOVF::test_get_data_cust_script_disabled PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestDatasourceOVF::test_get_data_false_on_none_dmi_data PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestDatasourceOVF::test_get_data_no_vmware_customization_disabled PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestDatasourceOVF::test_get_data_non_vmware_seed_platform_info PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestDatasourceOVF::test_get_data_vmware_customization_disabled PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestDatasourceOVF::test_get_data_vmware_seed_platform_info PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportIso9660::test_find_already_mounted PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportIso9660::test_find_already_mounted_matches_kname PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportIso9660::test_find_already_mounted_skips_non_iso9660 PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportIso9660::test_maybe_cdrom_device_false_on_multi_dir_paths PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportIso9660::test_maybe_cdrom_device_non_string_exception PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportIso9660::test_maybe_cdrom_device_none PASSED [ 64%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportIso9660::test_maybe_cdrom_device_true_on_hd_partitions PASSED [ 64%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportIso9660::test_maybe_cdrom_device_true_on_valid_relative_paths PASSED [ 64%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportIso9660::test_maybe_cdrom_device_true_on_xvd_partitions PASSED [ 64%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportIso9660::test_mount_cb_called_on_blkdevs_with_iso9660 PASSED [ 64%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportIso9660::test_mount_cb_called_on_blkdevs_with_iso9660_check_regex PASSED [ 64%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportIso9660::test_mount_cb_called_require_iso_false PASSED [ 64%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportIso9660::test_mount_cb_not_called_no_matches PASSED [ 64%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportVmwareGuestinfo::test_found_when_guestinfo_present PASSED [ 64%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportVmwareGuestinfo::test_notfound_and_warns_on_unexpected_exit_code PASSED [ 64%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportVmwareGuestinfo::test_notfound_if_no_content_but_exit_zero PASSED [ 64%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportVmwareGuestinfo::test_notfound_on_exit_code_1 PASSED [ 64%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportVmwareGuestinfo::test_without_vmware_rpctool_returns_notfound PASSED [ 64%]
> tests/unittests/test_datasource/test_rbx.py::TestRbxDataSource::test_continue_on_arping_error PASSED [ 64%]
> tests/unittests/test_datasource/test_rbx.py::TestRbxDataSource::test_generate_network_config PASSED [ 64%]
> tests/unittests/test_datasource/test_rbx.py::TestRbxDataSource::test_gratuitous_arp_run_standard_arping PASSED [ 64%]
> tests/unittests/test_datasource/test_rbx.py::TestRbxDataSource::test_handle_rhel_like_arping PASSED [ 65%]
> tests/unittests/test_datasource/test_rbx.py::TestRbxDataSource::test_seed_read_user_data_callback_empty_file PASSED [ 65%]
> tests/unittests/test_datasource/test_rbx.py::TestRbxDataSource::test_seed_read_user_data_callback_userdata PASSED [ 65%]
> tests/unittests/test_datasource/test_rbx.py::TestRbxDataSource::test_seed_read_user_data_callback_valid_disk PASSED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestOnScaleway::test_not_on_scaleway PASSED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestOnScaleway::test_on_scaleway_cmdline PASSED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestOnScaleway::test_on_scaleway_dmi PASSED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestOnScaleway::test_on_scaleway_var_run_scaleway PASSED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestDataSourceScaleway::test_metadata_404 FAILED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestDataSourceScaleway::test_metadata_ok FAILED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestDataSourceScaleway::test_metadata_rate_limit FAILED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestDataSourceScaleway::test_network_config_cached_none PASSED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestDataSourceScaleway::test_network_config_existing PASSED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestDataSourceScaleway::test_network_config_ipv6_ok PASSED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestDataSourceScaleway::test_network_config_ok PASSED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestDataSourceScaleway::test_network_config_unset PASSED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestDataSourceScaleway::test_ssh_keys_both PASSED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestDataSourceScaleway::test_ssh_keys_empty PASSED [ 66%]
> tests/unittests/test_datasource/test_scaleway.py::TestDataSourceScaleway::test_ssh_keys_only_conf PASSED [ 66%]
> tests/unittests/test_datasource/test_scaleway.py::TestDataSourceScaleway::test_ssh_keys_only_tags PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_default_ephemeral PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_default_vendor_data PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_disable_iptables_flag PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_hostname PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_hostname_b64 PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_hostname_if_no_sdc_hostname PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_motd_sys_info PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_no_base64 PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_override_disk_aliases PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_platform_info PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_reconfig_network_on_boot PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_root_keys PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_scripts_shebang_not_added PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_scripts_shebanged PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_sdc_hostname_if_no_hostname PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_sdc_nics PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_sdc_scripts PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_sdc_uuid_if_no_hostname_or_sdc_hostname PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_userdata PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_userdata_removed PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_uuid PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_vendor_data_not_default PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestIdentifyFile::test_file_happy_path PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestIdentifyFile::test_returns_none_on_error PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_flush_failure PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_flush_many_timeouts PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_base64_encodes_argument PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_calculates_length_correctly PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_checksums_correctly PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_line_starts_with_v2 PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_reads_a_line PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_returns_None_if_value_not_found PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_returns_valid_value PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_throws_exception_for_incorrect_crc PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_throws_exception_for_incorrect_length PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_throws_exception_for_request_id_mismatch PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_uses_appropriate_request_id PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_uses_get_command PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_uses_random_number_for_request_id PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_writes_a_single_line PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_writes_bytes PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_list_metadata_returns_empty_list_if_no_customer_metadata PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_list_metadata_returns_list PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_negotiate PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_negotiate_bad_response PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_negotiate_short_response PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_serial_open_transport PASSED [ 69%]
> tests/unittests/test_datasource/test_smartos.py::TestNetworkConversion::test_convert_simple PASSED [ 69%]
> tests/unittests/test_datasource/test_smartos.py::TestNetworkConversion::test_convert_simple_alt PASSED [ 69%]
> tests/unittests/test_datasource/test_smartos.py::TestNetworkConversion::test_convert_simple_both_ipv4_ipv6 PASSED [ 69%]
> tests/unittests/test_datasource/test_smartos.py::TestNetworkConversion::test_convert_simple_dhcp PASSED [ 69%]
> tests/unittests/test_datasource/test_smartos.py::TestNetworkConversion::test_convert_simple_multi_ip PASSED [ 69%]
> tests/unittests/test_datasource/test_smartos.py::TestNetworkConversion::test_convert_simple_multi_ipv6 PASSED [ 69%]
> tests/unittests/test_datasource/test_smartos.py::TestNetworkConversion::test_convert_with_dns PASSED [ 69%]
> tests/unittests/test_datasource/test_smartos.py::TestNetworkConversion::test_gateways_not_on_all_nics PASSED [ 69%]
> tests/unittests/test_datasource/test_smartos.py::TestNetworkConversion::test_routes_on_all_nics PASSED [ 69%]
> tests/unittests/test_datasource/test_smartos.py::TestSerialConcurrency::test_all_keys SKIPPED [ 69%]
> tests/unittests/test_distros/test_arch.py::TestArch::test_get_distro PASSED [ 69%]
> tests/unittests/test_distros/test_arch.py::TestRenderNetwork::test_basic_static PASSED [ 69%]
> tests/unittests/test_distros/test_bsd_utils.py::TestBsdUtils::test_get_rc_config_value PASSED [ 69%]
> tests/unittests/test_distros/test_bsd_utils.py::TestBsdUtils::test_set_rc_config_value PASSED [ 69%]
> tests/unittests/test_distros/test_bsd_utils.py::TestBsdUtils::test_set_rc_config_value_unchanged PASSED [ 69%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_basic PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_create_groups_with_whitespace_string PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_create_user_with_ssh_redirect_user_does_not_disable_auth_keys PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_create_user_with_ssh_redirect_user_no_cloud_keys PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_create_user_with_ssh_redirect_user_with_cloud_keys PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_explicit_no_home_false PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_explicit_sudo_false PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_group_added PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_lock_raises_runtime_if_no_commands PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_lock_with_passwd_if_available PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_lock_with_usermod_if_no_passwd PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_no_home PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_only_new_group_added PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_set_password PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_setup_ssh_authorized_keys_with_integer PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_setup_ssh_authorized_keys_with_list PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_setup_ssh_authorized_keys_with_string PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_system_user PASSED [ 71%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_unlocked PASSED [ 71%]
> tests/unittests/test_distros/test_debian.py::TestDebianApplyLocale::test_falseish_locale_raises_valueerror PASSED [ 71%]
> tests/unittests/test_distros/test_debian.py::TestDebianApplyLocale::test_no_regen_on_c_utf8 PASSED [ 71%]
> tests/unittests/test_distros/test_debian.py::TestDebianApplyLocale::test_no_rerun PASSED [ 71%]
> tests/unittests/test_distros/test_debian.py::TestDebianApplyLocale::test_rerun_if_different PASSED [ 71%]
> tests/unittests/test_distros/test_debian.py::TestDebianApplyLocale::test_rerun_if_no_file PASSED [ 71%]
> tests/unittests/test_distros/test_debian.py::TestDebianApplyLocale::test_rerun_on_mismatched_keys PASSED [ 71%]
> tests/unittests/test_distros/test_debian.py::TestDebianApplyLocale::test_rerun_on_unset_system_locale PASSED [ 71%]
> tests/unittests/test_distros/test_freebsd.py::TestDeviceLookUp::test_find_freebsd_part_gpt PASSED [ 71%]
> tests/unittests/test_distros/test_freebsd.py::TestDeviceLookUp::test_find_freebsd_part_label PASSED [ 71%]
> tests/unittests/test_distros/test_freebsd.py::TestDeviceLookUp::test_get_path_dev_freebsd_label PASSED [ 71%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_arch_package_mirror_info_known PASSED [ 71%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_arch_package_mirror_info_unknown PASSED [ 71%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_expire_passwd_freebsd_uses_pw_command PASSED [ 71%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_expire_passwd_uses_chpasswd PASSED [ 71%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_get_locale_rhel PASSED [ 72%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_get_locale_ubuntu PASSED [ 72%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_get_package_mirror_info_az_ec2 PASSED [ 72%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_get_package_mirror_info_az_non_ec2 PASSED [ 72%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_get_package_mirror_info_none PASSED [ 72%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_sudoers_ensure_append PASSED [ 72%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_sudoers_ensure_new PASSED [ 72%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_sudoers_ensure_rules PASSED [ 72%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_sudoers_ensure_rules_list PASSED [ 72%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_systemd_in_use PASSED [ 72%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_systemd_not_in_use PASSED [ 72%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_systemd_symlink PASSED [ 72%]
> tests/unittests/test_distros/test_hostname.py::TestHostnameHelper::test_adjust_hostname PASSED [ 72%]
> tests/unittests/test_distros/test_hostname.py::TestHostnameHelper::test_no_adjust_hostname PASSED [ 72%]
> tests/unittests/test_distros/test_hostname.py::TestHostnameHelper::test_parse_same PASSED [ 72%]
> tests/unittests/test_distros/test_hosts.py::TestHostsHelper::test_add PASSED [ 72%]
> tests/unittests/test_distros/test_hosts.py::TestHostsHelper::test_del PASSED [ 72%]
> tests/unittests/test_distros/test_hosts.py::TestHostsHelper::test_parse PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroFreeBSD::test_apply_network_config_freebsd_ifrename PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroFreeBSD::test_apply_network_config_freebsd_nameserver PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroFreeBSD::test_apply_network_config_freebsd_standard PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroUbuntuEni::test_apply_network_config_eni_ub PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroUbuntuEni::test_apply_network_config_ipv6_ub PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroUbuntuNetplan::test_apply_network_config_v1_ipv6_to_netplan_ub PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroUbuntuNetplan::test_apply_network_config_v1_to_netplan_ub PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroUbuntuNetplan::test_apply_network_config_v2_passthrough_ub PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroRedhat::test_apply_network_config_ipv6_rh PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroRedhat::test_apply_network_config_rh PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroOpensuse::test_apply_network_config_ipv6_opensuse PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroOpensuse::test_apply_network_config_opensuse PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroArch::test_apply_network_config_v1_with_netplan PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroArch::test_apply_network_config_v1_without_netplan PASSED [ 73%]
> tests/unittests/test_distros/test_opensuse.py::TestopenSUSE::test_get_distro PASSED [ 73%]
> tests/unittests/test_distros/test_resolv.py::TestResolvHelper::test_local_domain PASSED [ 74%]
> tests/unittests/test_distros/test_resolv.py::TestResolvHelper::test_nameservers PASSED [ 74%]
> tests/unittests/test_distros/test_resolv.py::TestResolvHelper::test_parse_same PASSED [ 74%]
> tests/unittests/test_distros/test_resolv.py::TestResolvHelper::test_search_domains PASSED [ 74%]
> tests/unittests/test_distros/test_resolv.py::TestResolvHelper::test_write_works PASSED [ 74%]
> tests/unittests/test_distros/test_sles.py::TestSLES::test_get_distro PASSED [ 74%]
> tests/unittests/test_distros/test_sysconfig.py::TestSysConfHelper::test_parse_add_new PASSED [ 74%]
> tests/unittests/test_distros/test_sysconfig.py::TestSysConfHelper::test_parse_adjust PASSED [ 74%]
> tests/unittests/test_distros/test_sysconfig.py::TestSysConfHelper::test_parse_empty PASSED [ 74%]
> tests/unittests/test_distros/test_sysconfig.py::TestSysConfHelper::test_parse_no_adjust_shell PASSED [ 74%]
> tests/unittests/test_distros/test_sysconfig.py::TestSysConfHelper::test_parse_no_change PASSED [ 74%]
> tests/unittests/test_distros/test_sysconfig.py::TestSysConfHelper::test_parse_shell_vars PASSED [ 74%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_add_user_on_snappy_system PASSED [ 74%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_basic_groups PASSED [ 74%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_create_snap_user PASSED [ 74%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_create_snap_user_known PASSED [ 74%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_csv_groups PASSED [ 75%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_group_dict PASSED [ 75%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_member_groups PASSED [ 75%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_more_groups PASSED [ 75%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_users_dict PASSED [ 75%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_users_dict_default PASSED [ 75%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_users_dict_default_additional PASSED [ 75%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_users_dict_extract PASSED [ 75%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_users_dict_trans PASSED [ 75%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_users_old_user PASSED [ 75%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_users_simple PASSED [ 75%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_users_simple_csv PASSED [ 75%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_users_simple_dict PASSED [ 75%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_users_simple_dict_no PASSED [ 75%]
> tests/unittests/test_filters/test_launch_index.py::TestLaunchFilter::testConfigEmailIndex PASSED [ 75%]
> tests/unittests/test_filters/test_launch_index.py::TestLaunchFilter::testHeaderEmailIndex PASSED [ 75%]
> tests/unittests/test_filters/test_launch_index.py::TestLaunchFilter::testIndexes PASSED [ 75%]
> tests/unittests/test_filters/test_launch_index.py::TestLaunchFilter::testMultiEmailIndex PASSED [ 76%]
> tests/unittests/test_filters/test_launch_index.py::TestLaunchFilter::testNoneIndex PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_conf_v1.py::TestAptProxyConfig::test_apt_all_proxy_written PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_conf_v1.py::TestAptProxyConfig::test_apt_http_proxy_written PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_conf_v1.py::TestAptProxyConfig::test_apt_proxy_written PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_conf_v1.py::TestAptProxyConfig::test_config_deleted PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_conf_v1.py::TestAptProxyConfig::test_config_replaced PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_conf_v1.py::TestAptProxyConfig::test_config_written PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_conf_v1.py::TestAptProxyConfig::test_proxy_deleted PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_conf_v1.py::TestAptProxyConfig::test_proxy_replaced PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_conf_v1.py::TestConversion::test_convert_with_apt_mirror PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_conf_v1.py::TestConversion::test_convert_with_apt_mirror_as_empty_string PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_conf_v1.py::TestConversion::test_no_old_content PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_configure_sources_list_v1.py::TestAptSourceConfigSourceList::test_apt_v1_source_list_debian PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_configure_sources_list_v1.py::TestAptSourceConfigSourceList::test_apt_v1_source_list_ubuntu PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_configure_sources_list_v1.py::TestAptSourceConfigSourceList::test_apt_v1_srcl_custom PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_configure_sources_list_v1.py::TestAptSourceConfigSourceList::test_apt_v1_srcl_debian_mirrorfail PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_configure_sources_list_v1.py::TestAptSourceConfigSourceList::test_apt_v1_srcl_ubuntu_mirrorfail PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_configure_sources_list_v3.py::TestAptSourceConfigSourceList::test_apt_v3_source_list_centos PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_configure_sources_list_v3.py::TestAptSourceConfigSourceList::test_apt_v3_source_list_debian PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_configure_sources_list_v3.py::TestAptSourceConfigSourceList::test_apt_v3_source_list_psm PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_configure_sources_list_v3.py::TestAptSourceConfigSourceList::test_apt_v3_source_list_ubuntu PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_configure_sources_list_v3.py::TestAptSourceConfigSourceList::test_apt_v3_source_list_ubuntu_snappy PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_configure_sources_list_v3.py::TestAptSourceConfigSourceList::test_apt_v3_srcl_custom PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_basic PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_basic_dict PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_basic_dict_tri PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_basic_nofn PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_basic_tri PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_key PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_key_nofn PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_keyid PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_keyid_nofn PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_keyid_real PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_keyid_tri PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_keyidonly PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_keyonly PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_longkeyid_ks_real PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_longkeyid_real PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_ppa PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_ppa_tri PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_replace PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_replace_dict_tri PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_replace_nofn PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_replace_tri PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_convert_to_new_format PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_convert_to_new_format_collision PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_convert_to_new_format_dict_collision PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_disable_suites PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_get_def_mir_non_intel_no_arch PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_get_default_mirrors_non_intel_with_arch PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_list_rename PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_list_rename_non_slash PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_mirror PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_mirror_arches PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_mirror_arches_default PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_mirror_arches_sysdefault PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_mirror_default PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_mirror_search PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_mirror_search_dns SKIPPED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_mirror_search_many2 PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_proxy PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_basic PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_basic_tri PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_key PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_keyid PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_keyid_keyserver PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_keyid_real PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_keyid_tri PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_keyidonly PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_keyonly PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_longkeyid_ks_real PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_longkeyid_real PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_ppa PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_ppa_tri PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_replace PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_replace_fn PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_replace_tri PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_url_resolvable PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_disable_suites_blank_lines PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestDebconfSelections::test_dpkg_reconfigure_does_reconfigure PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestDebconfSelections::test_dpkg_reconfigure_not_done_if_no_cleaners PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestDebconfSelections::test_dpkg_reconfigure_not_done_on_no_data PASSED [ 81%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestDebconfSelections::test_no_set_sel_if_none_to_set PASSED [ 81%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestDebconfSelections::test_reconfigure_if_intersection PASSED [ 81%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestDebconfSelections::test_reconfigure_if_no_intersection PASSED [ 81%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestDebconfSelections::test_set_sel_appends_newline_if_absent PASSED [ 81%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestDebconfSelections::test_set_sel_call_has_expected_input PASSED [ 81%]
> tests/unittests/test_handler/test_handler_bootcmd.py::TestBootcmd::test_handler_creates_and_runs_bootcmd_script_with_instance_id PASSED [ 81%]
> tests/unittests/test_handler/test_handler_bootcmd.py::TestBootcmd::test_handler_invalid_command_set PASSED [ 81%]
> tests/unittests/test_handler/test_handler_bootcmd.py::TestBootcmd::test_handler_runs_bootcmd_script_with_error PASSED [ 81%]
> tests/unittests/test_handler/test_handler_bootcmd.py::TestBootcmd::test_handler_schema_validation_warns_non_array_item_type PASSED [ 81%]
> tests/unittests/test_handler/test_handler_bootcmd.py::TestBootcmd::test_handler_schema_validation_warns_non_array_type PASSED [ 81%]
> tests/unittests/test_handler/test_handler_bootcmd.py::TestBootcmd::test_handler_skip_if_no_bootcmd PASSED [ 81%]
> tests/unittests/test_handler/test_handler_bootcmd.py::TestSchema::test_duplicates_are_fine_array_array PASSED [ 81%]
> tests/unittests/test_handler/test_handler_bootcmd.py::TestSchema::test_duplicates_are_fine_array_string PASSED [ 81%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestNoConfig::test_no_config PASSED [ 81%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestConfig::test_correct_order_for_remove_then_add PASSED [ 81%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestConfig::test_empty_trusted_list PASSED [ 81%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestConfig::test_multiple_trusted PASSED [ 82%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestConfig::test_no_remove_defaults_if_false PASSED [ 82%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestConfig::test_no_trusted_list PASSED [ 82%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestConfig::test_remove_default_ca_certs PASSED [ 82%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestConfig::test_single_trusted PASSED [ 82%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestAddCaCerts::test_multiple_certs PASSED [ 82%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestAddCaCerts::test_no_certs_in_list PASSED [ 82%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestAddCaCerts::test_single_cert_no_trailing_cr PASSED [ 82%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestAddCaCerts::test_single_cert_trailing_cr PASSED [ 82%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestUpdateCaCerts::test_commands PASSED [ 82%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestRemoveDefaultCaCerts::test_commands PASSED [ 82%]
> tests/unittests/test_handler/test_handler_chef.py::TestInstallChefOmnibus::test_install_chef_from_omnibus_has_omnibus_version FAILED [ 82%]
> tests/unittests/test_handler/test_handler_chef.py::TestInstallChefOmnibus::test_install_chef_from_omnibus_retries_url PASSED [ 82%]
> tests/unittests/test_handler/test_handler_chef.py::TestInstallChefOmnibus::test_install_chef_from_omnibus_runs_chef_url_content FAILED [ 82%]
> tests/unittests/test_handler/test_handler_chef.py::TestChef::test_basic_config PASSED [ 82%]
> tests/unittests/test_handler/test_handler_chef.py::TestChef::test_firstboot_json PASSED [ 82%]
> tests/unittests/test_handler/test_handler_chef.py::TestChef::test_no_config PASSED [ 83%]
> tests/unittests/test_handler/test_handler_chef.py::TestChef::test_template_deletes PASSED [ 83%]
> tests/unittests/test_handler/test_handler_chef.py::TestChef::test_validation_cert_and_validation_key PASSED [ 83%]
> tests/unittests/test_handler/test_handler_chef.py::TestChef::test_validation_cert_with_system PASSED [ 83%]
> tests/unittests/test_handler/test_handler_debug.py::TestDebug::test_debug_no_write PASSED [ 83%]
> tests/unittests/test_handler/test_handler_debug.py::TestDebug::test_debug_write PASSED [ 83%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestIsDiskUsed::test_multiple_child_nodes_returns_true PASSED [ 83%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestIsDiskUsed::test_one_child_nodes_and_no_fs_returns_false PASSED [ 83%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestIsDiskUsed::test_valid_filesystem_returns_true PASSED [ 83%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestGetMbrHddSize::test_size_for_1024_byte_sectors PASSED [ 83%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestGetMbrHddSize::test_size_for_2048_byte_sectors PASSED [ 83%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestGetMbrHddSize::test_size_for_4096_byte_sectors PASSED [ 83%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestGetMbrHddSize::test_size_for_512_byte_sectors PASSED [ 83%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestGetPartitionMbrLayout::test_half_and_half PASSED [ 83%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestGetPartitionMbrLayout::test_single_partition_using_boolean PASSED [ 83%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestGetPartitionMbrLayout::test_single_partition_using_list PASSED [ 83%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestGetPartitionMbrLayout::test_thirds_with_different_partition_type PASSED [ 84%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestUpdateFsSetupDevices::test_dotted_devname PASSED [ 84%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestUpdateFsSetupDevices::test_dotted_devname_populates_partition PASSED [ 84%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestUpdateFsSetupDevices::test_regression_1634678 PASSED [ 84%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestMkfsCommandHandling::test_mkswap PASSED [ 84%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestMkfsCommandHandling::test_overwrite_and_extra_opts_without_cmd PASSED [ 84%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestMkfsCommandHandling::test_with_cmd PASSED [ 84%]
> tests/unittests/test_handler/test_handler_etc_hosts.py::TestHostsFile::test_write_etc_hosts_suse_localhost PASSED [ 84%]
> tests/unittests/test_handler/test_handler_etc_hosts.py::TestHostsFile::test_write_etc_hosts_suse_template PASSED [ 84%]
> tests/unittests/test_handler/test_handler_growpart.py::TestDisabled::test_mode_off PASSED [ 84%]
> tests/unittests/test_handler/test_handler_growpart.py::TestConfig::test_handle_with_no_growpart_entry PASSED [ 84%]
> tests/unittests/test_handler/test_handler_growpart.py::TestConfig::test_mode_auto_falls_back_to_gpart PASSED [ 84%]
> tests/unittests/test_handler/test_handler_growpart.py::TestConfig::test_mode_auto_prefers_growpart PASSED [ 84%]
> tests/unittests/test_handler/test_handler_growpart.py::TestConfig::test_no_resizers_auto_is_fine PASSED [ 84%]
> tests/unittests/test_handler/test_handler_growpart.py::TestConfig::test_no_resizers_mode_growpart_is_exception PASSED [ 84%]
> tests/unittests/test_handler/test_handler_growpart.py::TestResize::test_simple_devices PASSED [ 84%]
> tests/unittests/test_handler/test_handler_landscape.py::TestLandscape::test_handler_error_on_invalid_landscape_type PASSED [ 84%]
> tests/unittests/test_handler/test_handler_landscape.py::TestLandscape::test_handler_installs_client_and_creates_config_file PASSED [ 85%]
> tests/unittests/test_handler/test_handler_landscape.py::TestLandscape::test_handler_restarts_landscape_client PASSED [ 85%]
> tests/unittests/test_handler/test_handler_landscape.py::TestLandscape::test_handler_skips_empty_landscape_cloudconfig PASSED [ 85%]
> tests/unittests/test_handler/test_handler_landscape.py::TestLandscape::test_handler_writes_merged_client_config_file_with_defaults PASSED [ 85%]
> tests/unittests/test_handler/test_handler_landscape.py::TestLandscape::test_handler_writes_merged_provided_cloudconfig_with_defaults PASSED [ 85%]
> tests/unittests/test_handler/test_handler_locale.py::TestLocale::test_locale_rhel_defaults_en_us_utf8 PASSED [ 85%]
> tests/unittests/test_handler/test_handler_locale.py::TestLocale::test_locale_update_config_if_different_than_default PASSED [ 85%]
> tests/unittests/test_handler/test_handler_locale.py::TestLocale::test_set_locale_sles PASSED [ 85%]
> tests/unittests/test_handler/test_handler_locale.py::TestLocale::test_set_locale_sles_default PASSED [ 85%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxd::test_lxd_cmd_existing PASSED [ 85%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxd::test_lxd_cmd_new_full PASSED [ 85%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxd::test_lxd_cmd_new_partial PASSED [ 85%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxd::test_lxd_cmd_none PASSED [ 85%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxd::test_lxd_debconf_existing PASSED [ 85%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxd::test_lxd_debconf_new_full PASSED [ 85%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxd::test_lxd_debconf_new_partial PASSED [ 85%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxd::test_lxd_debconf_none PASSED [ 86%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxd::test_lxd_init PASSED [ 86%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxd::test_lxd_install PASSED [ 86%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxd::test_no_init_does_nothing PASSED [ 86%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxd::test_no_lxd_does_nothing PASSED [ 86%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxdMaybeCleanupDefault::test_device_removed_if_attach_true PASSED [ 86%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxdMaybeCleanupDefault::test_did_init_false_does_not_delete PASSED [ 86%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxdMaybeCleanupDefault::test_network_deleted_if_create_true PASSED [ 86%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxdMaybeCleanupDefault::test_network_other_than_default_not_deleted PASSED [ 86%]
> tests/unittests/test_handler/test_handler_mcollective.py::TestConfig::test_basic_config PASSED [ 86%]
> tests/unittests/test_handler/test_handler_mcollective.py::TestConfig::test_certificats_written PASSED [ 86%]
> tests/unittests/test_handler/test_handler_mcollective.py::TestConfig::test_existing_config_is_saved PASSED [ 86%]
> tests/unittests/test_handler/test_handler_mcollective.py::TestConfig::test_existing_updated PASSED [ 86%]
> tests/unittests/test_handler/test_handler_mcollective.py::TestHandler::test_mcollective_install PASSED [ 86%]
> tests/unittests/test_handler/test_handler_mounts.py::TestSanitizeDevname::test_existent_disk_but_missing_partition_returns_none PASSED [ 86%]
> tests/unittests/test_handler/test_handler_mounts.py::TestSanitizeDevname::test_existent_disk_name_returns_full_path PASSED [ 86%]
> tests/unittests/test_handler/test_handler_mounts.py::TestSanitizeDevname::test_existent_full_disk_path_is_returned PASSED [ 86%]
> tests/unittests/test_handler/test_handler_mounts.py::TestSanitizeDevname::test_existent_meta_disk_is_returned PASSED [ 87%]
> tests/unittests/test_handler/test_handler_mounts.py::TestSanitizeDevname::test_existent_meta_partition_is_returned PASSED [ 87%]
> tests/unittests/test_handler/test_handler_mounts.py::TestSanitizeDevname::test_existent_meta_partition_with_p_is_returned PASSED [ 87%]
> tests/unittests/test_handler/test_handler_mounts.py::TestSanitizeDevname::test_first_partition_returned_if_existent_disk_is_partitioned PASSED [ 87%]
> tests/unittests/test_handler/test_handler_mounts.py::TestSanitizeDevname::test_missing_device_returns_none PASSED [ 87%]
> tests/unittests/test_handler/test_handler_mounts.py::TestSanitizeDevname::test_missing_sys_returns_none PASSED [ 87%]
> tests/unittests/test_handler/test_handler_mounts.py::TestSanitizeDevname::test_network_device_returns_network_device PASSED [ 87%]
> tests/unittests/test_handler/test_handler_mounts.py::TestSanitizeDevname::test_nth_partition_returned_if_requested PASSED [ 87%]
> tests/unittests/test_handler/test_handler_mounts.py::TestSanitizeDevname::test_transformer_returning_none_returns_none PASSED [ 87%]
> tests/unittests/test_handler/test_handler_mounts.py::TestFstabHandling::test_fstab_alternate_swap_device_already_configured PASSED [ 87%]
> tests/unittests/test_handler/test_handler_mounts.py::TestFstabHandling::test_fstab_no_swap_device PASSED [ 87%]
> tests/unittests/test_handler/test_handler_mounts.py::TestFstabHandling::test_fstab_same_swap_device_already_configured PASSED [ 87%]
> tests/unittests/test_handler/test_handler_mounts.py::TestFstabHandling::test_no_change_fstab_sets_needs_mount_all PASSED [ 87%]
> tests/unittests/test_handler/test_handler_mounts.py::TestFstabHandling::test_swap_integrity PASSED [ 87%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_defaults_pools_empty_lists_sles PASSED [ 87%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_distro_ntp_client_configs PASSED [ 87%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_no_ntpcfg_does_nothing PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_custom_client_overrides_installed_clients PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_distro_searches_all_preferred_clients PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_handler_enabled_false PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_handler_real_distro_ntp_templates PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_handler_schema_validation_allows_empty_ntp_config PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_handler_schema_validation_warns_invalid_key_present PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_handler_schema_validation_warns_non_string_item_type PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_handler_schema_validation_warns_of_duplicates PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_handler_schema_validation_warns_of_non_array_type PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_handler_timesyncd PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_install PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_install_no_op_with_empty_pkg_list PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_install_not_needed PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_rename_ntp_conf PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_rename_ntp_conf_skip_missing PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_system_config_overrides_distro_builtin_clients PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_the_whole_package PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_user_config_overrides_system_cfg PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_user_provided_config_template_only PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_user_provided_config_with_template PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_opensuse_picks_chrony PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_reload_ntp_defaults PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_reload_ntp_systemd PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_snappy_system_picks_timesyncd PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_timesyncd_template PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ubuntu_xenial_picks_ntp PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_user_cfg_ntp_client_auto_uses_distro_clients PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_write_ntp_config_template_defaults_pools_w_empty_lists PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_write_ntp_config_template_uses_ntp_conf_distro_no_servers PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestSupplementalSchemaValidation::test_error_on_missing_keys PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestSupplementalSchemaValidation::test_error_on_non_list_values PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestSupplementalSchemaValidation::test_error_on_non_string_values PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestSupplementalSchemaValidation::test_error_requiring_either_template_or_template_name PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestLoadPowerState::test_condition_default_is_true PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestLoadPowerState::test_condition_null_raises PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestLoadPowerState::test_empty_mode PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestLoadPowerState::test_invalid_delay PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestLoadPowerState::test_invalid_mode PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestLoadPowerState::test_irrelevant_config PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestLoadPowerState::test_message_present PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestLoadPowerState::test_no_config PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestLoadPowerState::test_no_message PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestLoadPowerState::test_valid_delay PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestLoadPowerState::test_valid_modes PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestCheckCondition::test_cmd_exit_nonzero_warns PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestCheckCondition::test_cmd_exit_one_false PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestCheckCondition::test_cmd_exit_zero_true PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestCheckCondition::test_false_is_false PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestCheckCondition::test_true_is_true PASSED [ 90%]
> tests/unittests/test_handler/test_handler_puppet.py::TestAutostartPuppet::test_wb_autostart_puppet_updates_puppet_default PASSED [ 91%]
> tests/unittests/test_handler/test_handler_puppet.py::TestAutostartPuppet::test_wb_autostart_pupppet_enables_puppet_chkconfig PASSED [ 91%]
> tests/unittests/test_handler/test_handler_puppet.py::TestAutostartPuppet::test_wb_autostart_pupppet_enables_puppet_systemctl PASSED [ 91%]
> tests/unittests/test_handler/test_handler_puppet.py::TestPuppetHandle::test_handler_empty_puppet_config_installs_puppet PASSED [ 91%]
> tests/unittests/test_handler/test_handler_puppet.py::TestPuppetHandle::test_handler_puppet_config_installs_puppet_on_true PASSED [ 91%]
> tests/unittests/test_handler/test_handler_puppet.py::TestPuppetHandle::test_handler_puppet_config_installs_puppet_version PASSED [ 91%]
> tests/unittests/test_handler/test_handler_puppet.py::TestPuppetHandle::test_handler_puppet_config_starts_puppet_service PASSED [ 91%]
> tests/unittests/test_handler/test_handler_puppet.py::TestPuppetHandle::test_handler_puppet_config_updates_puppet_conf PASSED [ 91%]
> tests/unittests/test_handler/test_handler_puppet.py::TestPuppetHandle::test_handler_puppet_writes_csr_attributes_file PASSED [ 91%]
> tests/unittests/test_handler/test_handler_puppet.py::TestPuppetHandle::test_handler_skips_missing_puppet_key_in_cloudconfig PASSED [ 91%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestResizefs::test_can_skip_resize_ext PASSED [ 91%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestResizefs::test_handle_modern_zfsroot PASSED [ 91%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestResizefs::test_handle_noops_on_disabled PASSED [ 91%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestResizefs::test_handle_schema_validation_logs_invalid_resize_rootfs_value PASSED [ 91%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestResizefs::test_handle_warns_on_undiscoverable_root_path_in_commandline PASSED [ 91%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestResizefs::test_handle_warns_on_unknown_mount_info PASSED [ 91%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestResizefs::test_handle_zfs_root PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestResizefs::test_resize_ext_cmd_return PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestResizefs::test_resize_ufs_cmd_return PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestResizefs::test_resize_xfs_cmd_return PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestResizefs::test_resize_zfs_cmd_return PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestResizefs::test_skip_ufs_resize PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestResizefs::test_skip_ufs_resize_roundup PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestRootDevFromCmdline::test_rootdev_from_cmdline_with_no_root PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestRootDevFromCmdline::test_rootdev_from_cmdline_with_root_startswith_dev PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestRootDevFromCmdline::test_rootdev_from_cmdline_with_root_with_label PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestRootDevFromCmdline::test_rootdev_from_cmdline_with_root_with_uuid PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestRootDevFromCmdline::test_rootdev_from_cmdline_with_root_without_dev_prefix PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestMaybeGetDevicePathAsWritableBlock::test_maybe_get_writable_device_path_does_not_exist PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestMaybeGetDevicePathAsWritableBlock::test_maybe_get_writable_device_path_does_not_exist_in_container PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestMaybeGetDevicePathAsWritableBlock::test_maybe_get_writable_device_path_non_block PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestMaybeGetDevicePathAsWritableBlock::test_maybe_get_writable_device_path_non_block_on_container PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestMaybeGetDevicePathAsWritableBlock::test_maybe_get_writable_device_path_none_on_overlayroot PASSED [ 93%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestMaybeGetDevicePathAsWritableBlock::test_maybe_get_writable_device_path_raises_oserror PASSED [ 93%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestMaybeGetDevicePathAsWritableBlock::test_maybe_get_writable_device_path_returns_cmdline_root PASSED [ 93%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestMaybeGetDevicePathAsWritableBlock::test_maybe_get_writable_device_path_warns_missing_cmdline_root PASSED [ 93%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestMaybeGetDevicePathAsWritableBlock::test_maybe_get_writable_device_path_zfs_freebsd PASSED [ 93%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestMaybeGetDevicePathAsWritableBlock::test_resize_btrfs_mount_is_ro PASSED [ 93%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestMaybeGetDevicePathAsWritableBlock::test_resize_btrfs_mount_is_rw PASSED [ 93%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestLoadConfig::test_legacy_defaults PASSED [ 93%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestLoadConfig::test_legacy_full PASSED [ 93%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestLoadConfig::test_new_configs PASSED [ 93%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestLoadConfig::test_new_defaults PASSED [ 93%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestApplyChanges::test_multiline_content PASSED [ 93%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestApplyChanges::test_multiple_files PASSED [ 93%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestApplyChanges::test_repeat_def PASSED [ 93%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestApplyChanges::test_simple PASSED [ 93%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestParseRemotesLine::test_invalid_multiple_colon PASSED [ 93%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestParseRemotesLine::test_invalid_port PASSED [ 93%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestParseRemotesLine::test_name_in_string PASSED [ 94%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestParseRemotesLine::test_valid_ipv6 PASSED [ 94%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestParseRemotesLine::test_valid_ipv6_with_port PASSED [ 94%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestParseRemotesLine::test_valid_port PASSED [ 94%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestRemotesToSyslog::test_header_footer PASSED [ 94%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestRemotesToSyslog::test_simple PASSED [ 94%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestRemotesToSyslog::test_with_empty_or_null PASSED [ 94%]
> tests/unittests/test_handler/test_handler_runcmd.py::TestRuncmd::test_handler_invalid_command_set PASSED [ 94%]
> tests/unittests/test_handler/test_handler_runcmd.py::TestRuncmd::test_handler_schema_validation_warns_non_array_item_type PASSED [ 94%]
> tests/unittests/test_handler/test_handler_runcmd.py::TestRuncmd::test_handler_schema_validation_warns_non_array_type PASSED [ 94%]
> tests/unittests/test_handler/test_handler_runcmd.py::TestRuncmd::test_handler_skip_if_no_runcmd PASSED [ 94%]
> tests/unittests/test_handler/test_handler_runcmd.py::TestRuncmd::test_handler_write_valid_runcmd_schema_to_file PASSED [ 94%]
> tests/unittests/test_handler/test_handler_runcmd.py::TestSchema::test_duplicates_are_fine_array_array PASSED [ 94%]
> tests/unittests/test_handler/test_handler_runcmd.py::TestSchema::test_duplicates_are_fine_array_string PASSED [ 94%]
> tests/unittests/test_handler/test_handler_seed_random.py::TestRandomSeed::test_append_random PASSED [ 94%]
> tests/unittests/test_handler/test_handler_seed_random.py::TestRandomSeed::test_append_random_b64 PASSED [ 94%]
> tests/unittests/test_handler/test_handler_seed_random.py::TestRandomSeed::test_append_random_base64 PASSED [ 95%]
> tests/unittests/test_handler/test_handler_seed_random.py::TestRandomSeed::test_append_random_gz PASSED [ 95%]
> tests/unittests/test_handler/test_handler_seed_random.py::TestRandomSeed::test_append_random_gzip PASSED [ 95%]
> tests/unittests/test_handler/test_handler_seed_random.py::TestRandomSeed::test_append_random_metadata PASSED [ 95%]
> tests/unittests/test_handler/test_handler_seed_random.py::TestRandomSeed::test_append_random_unknown_encoding PASSED [ 95%]
> tests/unittests/test_handler/test_handler_seed_random.py::TestRandomSeed::test_file_in_environment_for_command PASSED [ 95%]
> tests/unittests/test_handler/test_handler_seed_random.py::TestRandomSeed::test_seed_command_and_required PASSED [ 95%]
> tests/unittests/test_handler/test_handler_seed_random.py::TestRandomSeed::test_seed_command_not_provided PASSED [ 95%]
> tests/unittests/test_handler/test_handler_seed_random.py::TestRandomSeed::test_seed_command_provided_and_available PASSED [ 95%]
> tests/unittests/test_handler/test_handler_seed_random.py::TestRandomSeed::test_unavailable_seed_command_and_required_raises_error PASSED [ 95%]
> tests/unittests/test_handler/test_handler_set_hostname.py::TestHostname::test_error_on_distro_set_hostname_errors PASSED [ 95%]
> tests/unittests/test_handler/test_handler_set_hostname.py::TestHostname::test_multiple_calls_skips_unchanged_hostname PASSED [ 95%]
> tests/unittests/test_handler/test_handler_set_hostname.py::TestHostname::test_write_hostname_debian PASSED [ 95%]
> tests/unittests/test_handler/test_handler_set_hostname.py::TestHostname::test_write_hostname_rhel PASSED [ 95%]
> tests/unittests/test_handler/test_handler_set_hostname.py::TestHostname::test_write_hostname_sles PASSED [ 95%]
> tests/unittests/test_handler/test_handler_spacewalk.py::TestSpacewalk::test_do_register PASSED [ 95%]
> tests/unittests/test_handler/test_handler_spacewalk.py::TestSpacewalk::test_is_registered PASSED [ 95%]
> tests/unittests/test_handler/test_handler_spacewalk.py::TestSpacewalk::test_not_is_registered PASSED [ 96%]
> tests/unittests/test_handler/test_handler_timezone.py::TestTimezone::test_set_timezone_sles PASSED [ 96%]
> tests/unittests/test_handler/test_handler_write_files.py::TestWriteFilesSchema::test_schema_validation_warns_missing_path PASSED [ 96%]
> tests/unittests/test_handler/test_handler_write_files.py::TestWriteFilesSchema::test_schema_validation_warns_non_string_type_for_files PASSED [ 96%]
> tests/unittests/test_handler/test_handler_write_files.py::TestWriteFilesSchema::test_schema_validation_warns_on_additional_undefined_propertes PASSED [ 96%]
> tests/unittests/test_handler/test_handler_write_files.py::TestWriteFiles::test_all_decodings PASSED [ 96%]
> tests/unittests/test_handler/test_handler_write_files.py::TestWriteFiles::test_append PASSED [ 96%]
> tests/unittests/test_handler/test_handler_write_files.py::TestWriteFiles::test_handler_schema_validation_warns_non_array_type PASSED [ 96%]
> tests/unittests/test_handler/test_handler_write_files.py::TestWriteFiles::test_simple PASSED [ 96%]
> tests/unittests/test_handler/test_handler_write_files.py::TestWriteFiles::test_yaml_binary PASSED [ 96%]
> tests/unittests/test_handler/test_handler_write_files.py::TestDecodePerms::test_integer PASSED [ 96%]
> tests/unittests/test_handler/test_handler_write_files.py::TestDecodePerms::test_invalid_octal_string_returns_default_and_warns PASSED [ 96%]
> tests/unittests/test_handler/test_handler_write_files.py::TestDecodePerms::test_none_returns_default PASSED [ 96%]
> tests/unittests/test_handler/test_handler_write_files.py::TestDecodePerms::test_valid_octal_string PASSED [ 96%]
> tests/unittests/test_handler/test_handler_yum_add_repo.py::TestConfig::test_bad_config PASSED [ 96%]
> tests/unittests/test_handler/test_handler_yum_add_repo.py::TestConfig::test_write_config PASSED [ 96%]
> tests/unittests/test_handler/test_handler_yum_add_repo.py::TestConfig::test_write_config_array PASSED [ 97%]
> tests/unittests/test_handler/test_handler_zypper_add_repo.py::TestConfig::test_bad_repo_config PASSED [ 97%]
> tests/unittests/test_handler/test_handler_zypper_add_repo.py::TestConfig::test_config_write PASSED [ 97%]
> tests/unittests/test_handler/test_handler_zypper_add_repo.py::TestConfig::test_config_write_skip_configdir PASSED [ 97%]
> tests/unittests/test_handler/test_handler_zypper_add_repo.py::TestConfig::test_empty_config_section_no_new_data PASSED [ 97%]
> tests/unittests/test_handler/test_handler_zypper_add_repo.py::TestConfig::test_empty_config_value_no_new_data PASSED [ 97%]
> tests/unittests/test_handler/test_handler_zypper_add_repo.py::TestConfig::test_handler_full_setup PASSED [ 97%]
> tests/unittests/test_handler/test_handler_zypper_add_repo.py::TestConfig::test_no_config_section_no_new_data PASSED [ 97%]
> tests/unittests/test_handler/test_handler_zypper_add_repo.py::TestConfig::test_no_repo_data PASSED [ 97%]
> tests/unittests/test_handler/test_handler_zypper_add_repo.py::TestConfig::test_write_repo PASSED [ 97%]
> tests/unittests/test_handler/test_handler_zypper_add_repo.py::TestConfig::test_write_repos PASSED [ 97%]
> tests/unittests/test_handler/test_schema.py::GetSchemaTest::test_get_schema_coalesces_known_schema PASSED [ 97%]
> tests/unittests/test_handler/test_schema.py::GetSchemaTest::test_get_schema_returns_global_when_set PASSED [ 97%]
> tests/unittests/test_handler/test_schema.py::SchemaValidationErrorTest::test_schema_validation_error_expects_schema_errors PASSED [ 97%]
> tests/unittests/test_handler/test_schema.py::ValidateCloudConfigSchemaTest::test_validateconfig_schema_emits_warning_on_missing_jsonschema PASSED [ 97%]
> tests/unittests/test_handler/test_schema.py::ValidateCloudConfigSchemaTest::test_validateconfig_schema_honors_formats PASSED [ 97%]
> tests/unittests/test_handler/test_schema.py::ValidateCloudConfigSchemaTest::test_validateconfig_schema_non_strict_emits_warnings PASSED [ 97%]
> tests/unittests/test_handler/test_schema.py::ValidateCloudConfigSchemaTest::test_validateconfig_schema_strict_raises_errors PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::ValidateCloudConfigFileTest::test_validateconfig_file_error_on_absent_file PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::ValidateCloudConfigFileTest::test_validateconfig_file_error_on_invalid_header PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::ValidateCloudConfigFileTest::test_validateconfig_file_error_on_non_yaml_parser_error PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::ValidateCloudConfigFileTest::test_validateconfig_file_error_on_non_yaml_scanner_error PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::ValidateCloudConfigFileTest::test_validateconfig_file_sctrictly_validates_schema PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::GetSchemaDocTest::test_get_schema_doc_handles_enum_types PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::GetSchemaDocTest::test_get_schema_doc_handles_multiple_types PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::GetSchemaDocTest::test_get_schema_doc_handles_nested_oneof_property_types PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::GetSchemaDocTest::test_get_schema_doc_handles_string_examples PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::GetSchemaDocTest::test_get_schema_doc_raises_key_errors PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::GetSchemaDocTest::test_get_schema_doc_returns_restructured_text PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::AnnotatedCloudconfigFileTest::test_annotated_cloudconfig_file_annotates_separate_line_items PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::AnnotatedCloudconfigFileTest::test_annotated_cloudconfig_file_no_schema_errors PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::AnnotatedCloudconfigFileTest::test_annotated_cloudconfig_file_schema_annotates_and_adds_footer PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::MainTest::test_main_absent_config_file PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::MainTest::test_main_missing_args PASSED [ 99%]
> tests/unittests/test_handler/test_schema.py::MainTest::test_main_prints_docs PASSED [ 99%]
> tests/unittests/test_handler/test_schema.py::MainTest::test_main_validates_config_file PASSED [ 99%]
> tests/unittests/test_handler/test_schema.py::CloudTestsIntegrationTest::test_all_integration_test_cloud_config_schema PASSED [ 99%]
> tests/unittests/test_runs/test_merge_run.py::TestMergeRun::test_none_ds PASSED [ 99%]
> tests/unittests/test_runs/test_simple_run.py::TestSimpleRun::test_none_ds_forces_run_via_unverified_modules PASSED [ 99%]
> tests/unittests/test_runs/test_simple_run.py::TestSimpleRun::test_none_ds_populates_var_lib_cloud PASSED [ 99%]
> tests/unittests/test_runs/test_simple_run.py::TestSimpleRun::test_none_ds_run_with_no_config_modules PASSED [ 99%]
> tests/unittests/test_runs/test_simple_run.py::TestSimpleRun::test_none_ds_runs_modules_which_distros_all PASSED [ 99%]
> tests/unittests/test_runs/test_simple_run.py::TestSimpleRun::test_none_ds_runs_modules_which_do_not_define_distros PASSED [ 99%]
> tests/unittests/test_runs/test_simple_run.py::TestSimpleRun::test_none_ds_skips_modules_which_define_unmatched_distros PASSED [ 99%]
> tests/unittests/test_vmware/test_custom_script.py::TestVmwareCustomScript::test_execute_post_cust PASSED [ 99%]
> tests/unittests/test_vmware/test_custom_script.py::TestVmwareCustomScript::test_prepare_custom_script PASSED [ 99%]
> tests/unittests/test_vmware/test_guestcust_util.py::TestGuestCustUtil::test_get_tools_config_internal_exception PASSED [ 99%]
> tests/unittests/test_vmware/test_guestcust_util.py::TestGuestCustUtil::test_get_tools_config_normal PASSED [ 99%]
> tests/unittests/test_vmware/test_guestcust_util.py::TestGuestCustUtil::test_get_tools_config_not_installed PASSED [ 99%]
> tests/unittests/test_vmware/test_guestcust_util.py::TestGuestCustUtil::test_set_gc_status PASSED [100%]
> 
> =================================== FAILURES ===================================
> _____________________ TestConsumeUserDataHttp.test_include _____________________
> 
> self = <tests.unittests.test_data.TestConsumeUserDataHttp testMethod=test_include>
> mock_sleep = <MagicMock name='sleep' id='140126866054160'>
> 
>     @mock.patch('cloudinit.url_helper.time.sleep')
>     def test_include(self, mock_sleep):
>         """Test #include."""
>         included_url = 'http://hostname/path'
>         included_data = '#cloud-config\nincluded: true\n'
>         httpretty.register_uri(httpretty.GET, included_url, included_data)
>     
>         blob = '#include\n%s\n' % included_url
>     
>         self.reRoot()
>         ci = stages.Init()
>         ci.datasource = FakeDataSource(blob)
>         ci.fetch()
> >       ci.consume_data()
> 
> tests/unittests/test_data.py:621: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/stages.py:551: in consume_data
>     self._consume_userdata(frequency)
> cloudinit/stages.py:622: in _consume_userdata
>     user_data_msg = self.datasource.get_userdata(True)
> cloudinit/sources/__init__.py:385: in get_userdata
>     self.userdata = self.ud_proc.process(self.get_userdata_raw())
> cloudinit/user_data.py:83: in process
>     self._process_msg(convert_string(blob), accumulating_msg)
> cloudinit/user_data.py:147: in _process_msg
>     self._do_include(payload, append_msg)
> cloudinit/user_data.py:226: in _do_include
>     resp = read_file_or_url(include_url, timeout=5, retries=10,
> cloudinit/url_helper.py:101: in read_file_or_url
>     return readurl(url, **kwargs)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d3201220>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1419 Reading from /tmp/ci-TestConsumeUserDataHttp.ft_dqzdc/etc/cloud/cloud.cfg (quiet=False)
> DEBUG    cloudinit.util:util.py:1419 Reading from /tmp/ci-TestConsumeUserDataHttp.ft_dqzdc/run/cloud-init/cloud.cfg (quiet=False)
> DEBUG    cloudinit.util:util.py:940 Attempting to load yaml from string of length 0 with allowed root types (<class 'dict'>,)
> DEBUG    cloudinit.util:util.py:945 loaded blob returned None, returning default.
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/11] open 'http://hostname/path' with {'url': 'http://hostname/path', 'allow_redirects': True, 'method': 'GET', 'timeout': 5.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): hostname:80
> _________________ TestConsumeUserDataHttp.test_include_bad_url _________________
> 
> self = <tests.unittests.test_data.TestConsumeUserDataHttp testMethod=test_include_bad_url>
> mock_sleep = <MagicMock name='sleep' id='140126836106960'>
> 
>     @mock.patch('cloudinit.url_helper.time.sleep')
>     def test_include_bad_url(self, mock_sleep):
>         """Test #include with a bad URL."""
>         bad_url = 'http://bad/forbidden'
>         bad_data = '#cloud-config\nbad: true\n'
>         httpretty.register_uri(httpretty.GET, bad_url, bad_data, status=403)
>     
>         included_url = 'http://hostname/path'
>         included_data = '#cloud-config\nincluded: true\n'
>         httpretty.register_uri(httpretty.GET, included_url, included_data)
>     
>         blob = '#include\n%s\n%s' % (bad_url, included_url)
>     
>         self.reRoot()
>         ci = stages.Init()
>         ci.datasource = FakeDataSource(blob)
>         log_file = self.capture_log(logging.WARNING)
>         ci.fetch()
> >       ci.consume_data()
> 
> tests/unittests/test_data.py:644: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/stages.py:551: in consume_data
>     self._consume_userdata(frequency)
> cloudinit/stages.py:622: in _consume_userdata
>     user_data_msg = self.datasource.get_userdata(True)
> cloudinit/sources/__init__.py:385: in get_userdata
>     self.userdata = self.ud_proc.process(self.get_userdata_raw())
> cloudinit/user_data.py:83: in process
>     self._process_msg(convert_string(blob), accumulating_msg)
> cloudinit/user_data.py:147: in _process_msg
>     self._do_include(payload, append_msg)
> cloudinit/user_data.py:226: in _do_include
>     resp = read_file_or_url(include_url, timeout=5, retries=10,
> cloudinit/url_helper.py:101: in read_file_or_url
>     return readurl(url, **kwargs)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d2645040>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1419 Reading from /tmp/ci-TestConsumeUserDataHttp.z38hc_7a/etc/cloud/cloud.cfg (quiet=False)
> DEBUG    cloudinit.util:util.py:1419 Reading from /tmp/ci-TestConsumeUserDataHttp.z38hc_7a/run/cloud-init/cloud.cfg (quiet=False)
> DEBUG    cloudinit.util:util.py:940 Attempting to load yaml from string of length 0 with allowed root types (<class 'dict'>,)
> DEBUG    cloudinit.util:util.py:945 loaded blob returned None, returning default.
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/11] open 'http://bad/forbidden' with {'url': 'http://bad/forbidden', 'allow_redirects': True, 'method': 'GET', 'timeout': 5.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): bad:80
> _____________________ TestEc2Util.test_metadata_fetch_bdm ______________________
> 
> self = <tests.unittests.test_ec2_util.TestEc2Util testMethod=test_metadata_fetch_bdm>
> 
>     def test_metadata_fetch_bdm(self):
>         base_url = 'http://169.254.169.254/%s/meta-data/' % (self.VERSION)
>         hp.register_uri(hp.GET, base_url, status=200,
>                         body="\n".join(['hostname',
>                                         'instance-id',
>                                         'block-device-mapping/']))
>         hp.register_uri(hp.GET, uh.combine_url(base_url, 'hostname'),
>                         status=200, body='ec2.fake.host.name.com')
>         hp.register_uri(hp.GET, uh.combine_url(base_url, 'instance-id'),
>                         status=200, body='123')
>         hp.register_uri(hp.GET,
>                         uh.combine_url(base_url, 'block-device-mapping/'),
>                         status=200,
>                         body="\n".join(['ami', 'ephemeral0']))
>         hp.register_uri(hp.GET,
>                         uh.combine_url(base_url, 'block-device-mapping/ami'),
>                         status=200,
>                         body="sdb")
>         hp.register_uri(hp.GET,
>                         uh.combine_url(base_url,
>                                        'block-device-mapping/ephemeral0'),
>                         status=200,
>                         body="sdc")
>         md = eu.get_instance_metadata(self.VERSION, retries=0, timeout=0.1)
> >       self.assertEqual(md['hostname'], 'ec2.fake.host.name.com')
> E       KeyError: 'hostname'
> 
> tests/unittests/test_ec2_util.py:128: KeyError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/latest/meta-data/' with {'url': 'http://169.254.169.254/latest/meta-data/', 'allow_redirects': True, 'method': 'GET', 'timeout': 0.1, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> WARNING  cloudinit.ec2_utils:util.py:1598 Failed fetching meta-data/ from url http://169.254.169.254/latest/meta-data/
> DEBUG    cloudinit.ec2_utils:util.py:1607 Failed fetching meta-data/ from url http://169.254.169.254/latest/meta-data/
> Traceback (most recent call last):
>   File "/<<PKGBUILDDIR>>/cloudinit/ec2_utils.py", line 187, in _get_instance_metadata
>     response = caller(md_url)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 101, in read_file_or_url
>     return readurl(url, **kwargs)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 303, in readurl
>     r = sess.request(**req_args)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 530, in request
>     resp = self.send(prep, **send_kwargs)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 643, in send
>     r = adapter.send(request, **kwargs)
>   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
>     resp = conn.urlopen(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 670, in urlopen
>     httplib_response = self._make_request(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 426, in _make_request
>     six.raise_from(e, None)
>   File "<string>", line 3, in raise_from
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 421, in _make_request
>     httplib_response = conn.getresponse()
>   File "/usr/lib/python3.9/http/client.py", line 1343, in getresponse
>     response = self.response_class(self.sock, method=self._method)
>   File "/usr/lib/python3.9/http/client.py", line 245, in __init__
>     self.fp = sock.makefile("rb")
>   File "/usr/lib/python3/dist-packages/httpretty/core.py", line 438, in makefile
>     if t.isAlive():
> AttributeError: 'Thread' object has no attribute 'isAlive'
> _____________________ TestEc2Util.test_metadata_fetch_key ______________________
> 
> self = <tests.unittests.test_ec2_util.TestEc2Util testMethod=test_metadata_fetch_key>
> 
>     def test_metadata_fetch_key(self):
>         base_url = 'http://169.254.169.254/%s/meta-data/' % (self.VERSION)
>         hp.register_uri(hp.GET, base_url, status=200,
>                         body="\n".join(['hostname',
>                                         'instance-id',
>                                         'public-keys/']))
>         hp.register_uri(hp.GET, uh.combine_url(base_url, 'hostname'),
>                         status=200, body='ec2.fake.host.name.com')
>         hp.register_uri(hp.GET, uh.combine_url(base_url, 'instance-id'),
>                         status=200, body='123')
>         hp.register_uri(hp.GET, uh.combine_url(base_url, 'public-keys/'),
>                         status=200, body='0=my-public-key')
>         hp.register_uri(hp.GET,
>                         uh.combine_url(base_url, 'public-keys/0/openssh-key'),
>                         status=200, body='ssh-rsa AAAA.....wZEf my-public-key')
>         md = eu.get_instance_metadata(self.VERSION, retries=0, timeout=0.1)
> >       self.assertEqual(md['hostname'], 'ec2.fake.host.name.com')
> E       KeyError: 'hostname'
> 
> tests/unittests/test_ec2_util.py:76: KeyError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/latest/meta-data/' with {'url': 'http://169.254.169.254/latest/meta-data/', 'allow_redirects': True, 'method': 'GET', 'timeout': 0.1, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> WARNING  cloudinit.ec2_utils:util.py:1598 Failed fetching meta-data/ from url http://169.254.169.254/latest/meta-data/
> DEBUG    cloudinit.ec2_utils:util.py:1607 Failed fetching meta-data/ from url http://169.254.169.254/latest/meta-data/
> Traceback (most recent call last):
>   File "/<<PKGBUILDDIR>>/cloudinit/ec2_utils.py", line 187, in _get_instance_metadata
>     response = caller(md_url)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 101, in read_file_or_url
>     return readurl(url, **kwargs)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 303, in readurl
>     r = sess.request(**req_args)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 530, in request
>     resp = self.send(prep, **send_kwargs)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 643, in send
>     r = adapter.send(request, **kwargs)
>   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
>     resp = conn.urlopen(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 670, in urlopen
>     httplib_response = self._make_request(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 426, in _make_request
>     six.raise_from(e, None)
>   File "<string>", line 3, in raise_from
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 421, in _make_request
>     httplib_response = conn.getresponse()
>   File "/usr/lib/python3.9/http/client.py", line 1343, in getresponse
>     response = self.response_class(self.sock, method=self._method)
>   File "/usr/lib/python3.9/http/client.py", line 245, in __init__
>     self.fp = sock.makefile("rb")
>   File "/usr/lib/python3/dist-packages/httpretty/core.py", line 438, in makefile
>     if t.isAlive():
> AttributeError: 'Thread' object has no attribute 'isAlive'
> ___________________ TestEc2Util.test_metadata_fetch_no_keys ____________________
> 
> self = <tests.unittests.test_ec2_util.TestEc2Util testMethod=test_metadata_fetch_no_keys>
> 
>     def test_metadata_fetch_no_keys(self):
>         base_url = 'http://169.254.169.254/%s/meta-data/' % (self.VERSION)
>         hp.register_uri(hp.GET, base_url, status=200,
>                         body="\n".join(['hostname',
>                                         'instance-id',
>                                         'ami-launch-index']))
>         hp.register_uri(hp.GET, uh.combine_url(base_url, 'hostname'),
>                         status=200, body='ec2.fake.host.name.com')
>         hp.register_uri(hp.GET, uh.combine_url(base_url, 'instance-id'),
>                         status=200, body='123')
>         hp.register_uri(hp.GET, uh.combine_url(base_url, 'ami-launch-index'),
>                         status=200, body='1')
>         md = eu.get_instance_metadata(self.VERSION, retries=0)
> >       self.assertEqual(md['hostname'], 'ec2.fake.host.name.com')
> E       KeyError: 'hostname'
> 
> tests/unittests/test_ec2_util.py:56: KeyError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/latest/meta-data/' with {'url': 'http://169.254.169.254/latest/meta-data/', 'allow_redirects': True, 'method': 'GET', 'timeout': 5.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> WARNING  cloudinit.ec2_utils:util.py:1598 Failed fetching meta-data/ from url http://169.254.169.254/latest/meta-data/
> DEBUG    cloudinit.ec2_utils:util.py:1607 Failed fetching meta-data/ from url http://169.254.169.254/latest/meta-data/
> Traceback (most recent call last):
>   File "/<<PKGBUILDDIR>>/cloudinit/ec2_utils.py", line 187, in _get_instance_metadata
>     response = caller(md_url)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 101, in read_file_or_url
>     return readurl(url, **kwargs)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 303, in readurl
>     r = sess.request(**req_args)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 530, in request
>     resp = self.send(prep, **send_kwargs)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 643, in send
>     r = adapter.send(request, **kwargs)
>   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
>     resp = conn.urlopen(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 670, in urlopen
>     httplib_response = self._make_request(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 426, in _make_request
>     six.raise_from(e, None)
>   File "<string>", line 3, in raise_from
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 421, in _make_request
>     httplib_response = conn.getresponse()
>   File "/usr/lib/python3.9/http/client.py", line 1343, in getresponse
>     response = self.response_class(self.sock, method=self._method)
>   File "/usr/lib/python3.9/http/client.py", line 245, in __init__
>     self.fp = sock.makefile("rb")
>   File "/usr/lib/python3/dist-packages/httpretty/core.py", line 438, in makefile
>     if t.isAlive():
> AttributeError: 'Thread' object has no attribute 'isAlive'
> _________________ TestEc2Util.test_metadata_fetch_with_2_keys __________________
> 
> self = <tests.unittests.test_ec2_util.TestEc2Util testMethod=test_metadata_fetch_with_2_keys>
> 
>     def test_metadata_fetch_with_2_keys(self):
>         base_url = 'http://169.254.169.254/%s/meta-data/' % (self.VERSION)
>         hp.register_uri(hp.GET, base_url, status=200,
>                         body="\n".join(['hostname',
>                                         'instance-id',
>                                         'public-keys/']))
>         hp.register_uri(hp.GET, uh.combine_url(base_url, 'hostname'),
>                         status=200, body='ec2.fake.host.name.com')
>         hp.register_uri(hp.GET, uh.combine_url(base_url, 'instance-id'),
>                         status=200, body='123')
>         hp.register_uri(hp.GET, uh.combine_url(base_url, 'public-keys/'),
>                         status=200,
>                         body="\n".join(['0=my-public-key', '1=my-other-key']))
>         hp.register_uri(hp.GET,
>                         uh.combine_url(base_url, 'public-keys/0/openssh-key'),
>                         status=200, body='ssh-rsa AAAA.....wZEf my-public-key')
>         hp.register_uri(hp.GET,
>                         uh.combine_url(base_url, 'public-keys/1/openssh-key'),
>                         status=200, body='ssh-rsa AAAA.....wZEf my-other-key')
>         md = eu.get_instance_metadata(self.VERSION, retries=0, timeout=0.1)
> >       self.assertEqual(md['hostname'], 'ec2.fake.host.name.com')
> E       KeyError: 'hostname'
> 
> tests/unittests/test_ec2_util.py:100: KeyError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/latest/meta-data/' with {'url': 'http://169.254.169.254/latest/meta-data/', 'allow_redirects': True, 'method': 'GET', 'timeout': 0.1, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> WARNING  cloudinit.ec2_utils:util.py:1598 Failed fetching meta-data/ from url http://169.254.169.254/latest/meta-data/
> DEBUG    cloudinit.ec2_utils:util.py:1607 Failed fetching meta-data/ from url http://169.254.169.254/latest/meta-data/
> Traceback (most recent call last):
>   File "/<<PKGBUILDDIR>>/cloudinit/ec2_utils.py", line 187, in _get_instance_metadata
>     response = caller(md_url)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 101, in read_file_or_url
>     return readurl(url, **kwargs)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 303, in readurl
>     r = sess.request(**req_args)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 530, in request
>     resp = self.send(prep, **send_kwargs)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 643, in send
>     r = adapter.send(request, **kwargs)
>   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
>     resp = conn.urlopen(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 670, in urlopen
>     httplib_response = self._make_request(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 426, in _make_request
>     six.raise_from(e, None)
>   File "<string>", line 3, in raise_from
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 421, in _make_request
>     httplib_response = conn.getresponse()
>   File "/usr/lib/python3.9/http/client.py", line 1343, in getresponse
>     response = self.response_class(self.sock, method=self._method)
>   File "/usr/lib/python3.9/http/client.py", line 245, in __init__
>     self.fp = sock.makefile("rb")
>   File "/usr/lib/python3/dist-packages/httpretty/core.py", line 438, in makefile
>     if t.isAlive():
> AttributeError: 'Thread' object has no attribute 'isAlive'
> ______________ TestEc2Util.test_metadata_no_security_credentials _______________
> 
> self = <tests.unittests.test_ec2_util.TestEc2Util testMethod=test_metadata_no_security_credentials>
> 
>     def test_metadata_no_security_credentials(self):
>         base_url = 'http://169.254.169.254/%s/meta-data/' % (self.VERSION)
>         hp.register_uri(hp.GET, base_url, status=200,
>                         body="\n".join(['instance-id',
>                                         'iam/']))
>         hp.register_uri(hp.GET, uh.combine_url(base_url, 'instance-id'),
>                         status=200, body='i-0123451689abcdef0')
>         hp.register_uri(hp.GET,
>                         uh.combine_url(base_url, 'iam/'),
>                         status=200,
>                         body="\n".join(['info/', 'security-credentials/']))
>         hp.register_uri(hp.GET,
>                         uh.combine_url(base_url, 'iam/info/'),
>                         status=200,
>                         body='LastUpdated')
>         hp.register_uri(hp.GET,
>                         uh.combine_url(base_url, 'iam/info/LastUpdated'),
>                         status=200, body='2016-10-27T17:29:39Z')
>         hp.register_uri(hp.GET,
>                         uh.combine_url(base_url, 'iam/security-credentials/'),
>                         status=200,
>                         body='ReadOnly/')
>         hp.register_uri(hp.GET,
>                         uh.combine_url(base_url,
>                                        'iam/security-credentials/ReadOnly/'),
>                         status=200,
>                         body="\n".join(['LastUpdated', 'Expiration']))
>         hp.register_uri(hp.GET,
>                         uh.combine_url(
>                             base_url,
>                             'iam/security-credentials/ReadOnly/LastUpdated'),
>                         status=200, body='2016-10-27T17:28:17Z')
>         hp.register_uri(hp.GET,
>                         uh.combine_url(
>                             base_url,
>                             'iam/security-credentials/ReadOnly/Expiration'),
>                         status=200, body='2016-10-28T00:00:34Z')
>         md = eu.get_instance_metadata(self.VERSION, retries=0, timeout=0.1)
> >       self.assertEqual(md['instance-id'], 'i-0123451689abcdef0')
> E       KeyError: 'instance-id'
> 
> tests/unittests/test_ec2_util.py:173: KeyError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/latest/meta-data/' with {'url': 'http://169.254.169.254/latest/meta-data/', 'allow_redirects': True, 'method': 'GET', 'timeout': 0.1, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> WARNING  cloudinit.ec2_utils:util.py:1598 Failed fetching meta-data/ from url http://169.254.169.254/latest/meta-data/
> DEBUG    cloudinit.ec2_utils:util.py:1607 Failed fetching meta-data/ from url http://169.254.169.254/latest/meta-data/
> Traceback (most recent call last):
>   File "/<<PKGBUILDDIR>>/cloudinit/ec2_utils.py", line 187, in _get_instance_metadata
>     response = caller(md_url)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 101, in read_file_or_url
>     return readurl(url, **kwargs)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 303, in readurl
>     r = sess.request(**req_args)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 530, in request
>     resp = self.send(prep, **send_kwargs)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 643, in send
>     r = adapter.send(request, **kwargs)
>   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
>     resp = conn.urlopen(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 670, in urlopen
>     httplib_response = self._make_request(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 426, in _make_request
>     six.raise_from(e, None)
>   File "<string>", line 3, in raise_from
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 421, in _make_request
>     httplib_response = conn.getresponse()
>   File "/usr/lib/python3.9/http/client.py", line 1343, in getresponse
>     response = self.response_class(self.sock, method=self._method)
>   File "/usr/lib/python3.9/http/client.py", line 245, in __init__
>     self.fp = sock.makefile("rb")
>   File "/usr/lib/python3/dist-packages/httpretty/core.py", line 438, in makefile
>     if t.isAlive():
> AttributeError: 'Thread' object has no attribute 'isAlive'
> _______________________ TestEc2Util.test_userdata_fetch ________________________
> 
> self = <tests.unittests.test_ec2_util.TestEc2Util testMethod=test_userdata_fetch>
> 
>     def test_userdata_fetch(self):
>         hp.register_uri(hp.GET,
>                         'http://169.254.169.254/%s/user-data' % (self.VERSION),
>                         body='stuff',
>                         status=200)
>         userdata = eu.get_instance_userdata(self.VERSION)
> >       self.assertEqual('stuff', userdata.decode('utf-8'))
> E       AttributeError: 'str' object has no attribute 'decode'
> 
> tests/unittests/test_ec2_util.py:20: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/6] open 'http://169.254.169.254/latest/user-data' with {'url': 'http://169.254.169.254/latest/user-data', 'allow_redirects': True, 'method': 'GET', 'timeout': 5.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> WARNING  cloudinit.ec2_utils:util.py:1598 Failed fetching userdata from url http://169.254.169.254/latest/user-data
> DEBUG    cloudinit.ec2_utils:util.py:1607 Failed fetching userdata from url http://169.254.169.254/latest/user-data
> Traceback (most recent call last):
>   File "/<<PKGBUILDDIR>>/cloudinit/ec2_utils.py", line 157, in get_instance_userdata
>     response = url_helper.read_file_or_url(
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 101, in read_file_or_url
>     return readurl(url, **kwargs)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 303, in readurl
>     r = sess.request(**req_args)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 530, in request
>     resp = self.send(prep, **send_kwargs)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 643, in send
>     r = adapter.send(request, **kwargs)
>   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
>     resp = conn.urlopen(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 670, in urlopen
>     httplib_response = self._make_request(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 426, in _make_request
>     six.raise_from(e, None)
>   File "<string>", line 3, in raise_from
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 421, in _make_request
>     httplib_response = conn.getresponse()
>   File "/usr/lib/python3.9/http/client.py", line 1343, in getresponse
>     response = self.response_class(self.sock, method=self._method)
>   File "/usr/lib/python3.9/http/client.py", line 245, in __init__
>     self.fp = sock.makefile("rb")
>   File "/usr/lib/python3/dist-packages/httpretty/core.py", line 438, in makefile
>     if t.isAlive():
> AttributeError: 'Thread' object has no attribute 'isAlive'
> __________________ TestAliYunDatasource.test_with_mock_server __________________
> 
> self = <tests.unittests.test_datasource.test_aliyun.TestAliYunDatasource testMethod=test_with_mock_server>
> m_is_aliyun = <MagicMock name='_is_aliyun' id='140126840142624'>
> 
>     @mock.patch("cloudinit.sources.DataSourceAliYun._is_aliyun")
>     def test_with_mock_server(self, m_is_aliyun):
>         m_is_aliyun.return_value = True
>         self.regist_default_server()
>         ret = self.ds.get_data()
> >       self.assertEqual(True, ret)
> E       AssertionError: True != False
> 
> tests/unittests/test_datasource/test_aliyun.py:137: AssertionError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.sources.DataSourceEc2:DataSourceEc2.py:90 strict_mode: warn, cloud_name=aliyun cloud_platform=ec2
> DEBUG    cloudinit.util:util.py:1183 detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}
> DEBUG    cloudinit.util:util.py:2635 Resolving URL: http://100.100.100.200 took 0.000 seconds
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://100.100.100.200/2016-01-01/meta-data/instance-id' with {'url': 'http://100.100.100.200/2016-01-01/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 1.0} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 100.100.100.200:80
> WARNING  cloudinit.sources.DataSourceEc2:url_helper.py:447 Calling 'http://100.100.100.200/2016-01-01/meta-data/instance-id' failed [0/1s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> CRITICAL cloudinit.sources.DataSourceEc2:DataSourceEc2.py:295 Giving up on md from ['http://100.100.100.200/2016-01-01/meta-data/instance-id'] after 1 seconds
> DEBUG    cloudinit.sources.DataSourceEc2:util.py:2635 Crawl of metadata service took 1.004 seconds
> _ TestGetMetadataFromIMDS.test_get_metadata_from_imds_empty_when_no_imds_present _
> 
> self = <tests.unittests.test_datasource.test_azure.TestGetMetadataFromIMDS testMethod=test_get_metadata_from_imds_empty_when_no_imds_present>
> m_net_is_up = <MagicMock name='is_up' id='140126839982736'>
> m_sleep = <MagicMock name='sleep' id='140126835250656'>
> 
>     @mock.patch('cloudinit.url_helper.time.sleep')
>     @mock.patch(MOCKPATH + 'net.is_up')
>     def test_get_metadata_from_imds_empty_when_no_imds_present(
>             self, m_net_is_up, m_sleep):
>         """Return empty dict when IMDS network metadata is absent."""
>         httpretty.register_uri(
>             httpretty.GET,
>             dsaz.IMDS_URL + 'instance?api-version=2017-12-01',
>             body={}, status=404)
>     
>         m_net_is_up.return_value = True  # skips dhcp
>     
>         self.assertEqual({}, dsaz.get_metadata_from_imds('eth9', retries=2))
>     
>         m_net_is_up.assert_called_with('eth9')
> >       self.assertEqual([mock.call(1), mock.call(1)], m_sleep.call_args_list)
> E       AssertionError: [call(1), call(1)] != []
> 
> tests/unittests/test_datasource/test_azure.py:349: AssertionError
> _______________ TestEc2.test_aws_token_403_fails_without_retries _______________
> 
> self = <tests.unittests.test_datasource.test_ec2.TestEc2 testMethod=test_aws_token_403_fails_without_retries>
> 
>     def test_aws_token_403_fails_without_retries(self):
>         """Verify that 403s fetching AWS tokens are not retried."""
>         ds = self._setup_ds(
>             platform_data=self.valid_platform_data,
>             sys_cfg={'datasource': {'Ec2': {'strict_id': False}}},
>             md=None)
>         token_url = self.data_url('latest', data_item='api/token')
>         httpretty.register_uri(httpretty.PUT, token_url, body={}, status=403)
>         self.assertFalse(ds.get_data())
>         # Just one /latest/api/token request
>         logs = self.logs.getvalue()
>         failed_put_log = '"PUT /latest/api/token HTTP/1.1" 403 0'
>         expected_logs = [
>             'WARNING: Ec2 IMDS endpoint returned a 403 error. HTTP endpoint is'
>             ' disabled. Aborting.',
>             "WARNING: IMDS's HTTP endpoint is probably disabled",
>             failed_put_log
>         ]
>         for log in expected_logs:
> >           self.assertIn(log, logs)
> E           AssertionError: 'WARNING: Ec2 IMDS endpoint returned a 403 error. HTTP endpoint is disabled. Aborting.' not found in "DEBUG: strict_mode: false, cloud_name=aws cloud_platform=ec2\nDEBUG: detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}\nDEBUG: Resolving URL: http://169.254.169.254 took 0.000 seconds\nDEBUG: Resolving URL: http://instance-data.:8773 took 0.000 seconds\nDEBUG: Fetching Ec2 IMDSv2 API Token\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [0/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [0/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 1 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [1/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [1/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 1 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [2/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [2/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 1 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [3/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [3/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 1 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [4/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [4/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 1 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [5/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [5/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 2 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [7/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [7/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 2 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [9/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [9/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 2 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [11/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [11/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 2 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [13/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [13/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 2 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [15/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [15/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 3 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [18/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [18/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 3 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [21/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [21/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 3 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [24/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [24/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 3 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [27/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [27/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 3 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [30/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [30/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 4 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [34/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [34/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 4 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [38/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [38/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 4 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [42/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [42/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 4 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [46/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [46/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 4 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [50/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [50/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 5 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [55/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [55/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 5 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [60/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [60/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 5 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [65/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [65/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 5 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 49.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [70/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 49.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [70/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 5 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 44.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [75/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 44.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [75/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 6 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 38.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [81/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 38.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [81/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 6 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 32.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [87/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 32.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [87/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 6 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 26.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [93/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 26.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [93/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 6 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 20.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [99/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 20.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [99/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 6 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 14.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [105/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 14.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [105/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 7 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 7.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [112/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 7.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [112/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 7 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 0.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [119/120s]: unexpected error [Attempted to set connect timeout to 0.0, but the timeout cannot be set to a value less than or equal to 0.]\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 0.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [119/120s]: unexpected error [Attempted to set connect timeout to 0.0, but the timeout cannot be set to a value less than or equal to 0.]\nDEBUG: Please wait 7 seconds while we wait to try again\nWARNING: IMDS's HTTP endpoint is probably disabled\nDEBUG: Crawl of metadata service took 126.235 seconds\n"
> 
> tests/unittests/test_datasource/test_ec2.py:611: AssertionError
> _______________________ TestEc2.test_aws_token_redacted ________________________
> 
> self = <tests.unittests.test_datasource.test_ec2.TestEc2 testMethod=test_aws_token_redacted>
> 
>     def test_aws_token_redacted(self):
>         """Verify that aws tokens are redacted when logged."""
>         ds = self._setup_ds(
>             platform_data=self.valid_platform_data,
>             sys_cfg={'datasource': {'Ec2': {'strict_id': False}}},
>             md={'md': DEFAULT_METADATA})
> >       self.assertTrue(ds.get_data())
> E       AssertionError: False is not true
> 
> tests/unittests/test_datasource/test_ec2.py:621: AssertionError
> _____________________ TestEc2.test_classic_instance_false ______________________
> 
> self = <tests.unittests.test_datasource.test_ec2.TestEc2 testMethod=test_classic_instance_false>
> 
>     def test_classic_instance_false(self):
>         """If vpc-id in metadata, is_classic_instance must return false."""
>         ds = self._setup_ds(
>             platform_data=self.valid_platform_data,
>             sys_cfg={'datasource': {'Ec2': {'strict_id': False}}},
>             md={'md': DEFAULT_METADATA})
> >       self.assertTrue(ds.get_data())
> E       AssertionError: False is not true
> 
> tests/unittests/test_datasource/test_ec2.py:566: AssertionError
> ______________________ TestEc2.test_classic_instance_true ______________________
> 
> self = <tests.unittests.test_datasource.test_ec2.TestEc2 testMethod=test_classic_instance_true>
> 
>     def test_classic_instance_true(self):
>         """If no vpc-id in metadata, is_classic_instance must return true."""
>         md_copy = copy.deepcopy(DEFAULT_METADATA)
>         ifaces_md = md_copy.get('network', {}).get('interfaces', {})
>         for _mac, mac_data in ifaces_md.get('macs', {}).items():
>             if 'vpc-id' in mac_data:
>                 del mac_data['vpc-id']
>     
>         ds = self._setup_ds(
>             platform_data=self.valid_platform_data,
>             sys_cfg={'datasource': {'Ec2': {'strict_id': False}}},
>             md={'md': md_copy})
> >       self.assertTrue(ds.get_data())
> E       AssertionError: False is not true
> 
> tests/unittests/test_datasource/test_ec2.py:557: AssertionError
> ________ TestEc2.test_ec2_get_instance_id_refreshes_identity_on_upgrade ________
> 
> self = <tests.unittests.test_datasource.test_ec2.TestEc2 testMethod=test_ec2_get_instance_id_refreshes_identity_on_upgrade>
> 
>     def test_ec2_get_instance_id_refreshes_identity_on_upgrade(self):
>         """get_instance-id gets DataSourceEc2Local.identity if not present.
>     
>         This handles an upgrade case where the old pickled datasource didn't
>         set up self.identity, but 'systemctl cloud-init init' runs
>         get_instance_id which traces on missing self.identity. lp:1748354.
>         """
>         self.datasource = ec2.DataSourceEc2Local
>         ds = self._setup_ds(
>             platform_data=self.valid_platform_data,
>             sys_cfg={'datasource': {'Ec2': {'strict_id': False}}},
>             md={'md': DEFAULT_METADATA})
>         # Mock 404s on all versions except latest
>         all_versions = (
>             [ds.min_metadata_version] + ds.extended_metadata_versions)
>         for ver in all_versions[:-1]:
>             register_mock_metaserver(
>                 'http://169.254.169.254/{0}/meta-data/instance-id'.format(ver),
>                 None)
>         ds.metadata_address = 'http://169.254.169.254'
>         register_mock_metaserver(
>             '{0}/{1}/meta-data/'.format(ds.metadata_address, all_versions[-1]),
>             DEFAULT_METADATA)
>         # Register dynamic/instance-identity document which we now read.
>         register_mock_metaserver(
>             '{0}/{1}/dynamic/'.format(ds.metadata_address, all_versions[-1]),
>             DYNAMIC_METADATA)
>         ds._cloud_name = ec2.CloudNames.AWS
>         # Setup cached metadata on the Datasource
>         ds.metadata = DEFAULT_METADATA
> >       self.assertEqual('my-identity-id', ds.get_instance_id())
> 
> tests/unittests/test_datasource/test_ec2.py:543: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/DataSourceEc2.py:182: in get_instance_id
>     api_version = self.get_metadata_api_version()
> cloudinit/sources/DataSourceEc2.py:159: in get_metadata_api_version
>     headers = self._get_headers()
> cloudinit/sources/DataSourceEc2.py:566: in _get_headers
>     self._api_token = self._refresh_api_token()
> cloudinit/sources/DataSourceEc2.py:499: in _refresh_api_token
>     response = uhelp.readurl(token_url, headers=request_header,
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d23d1c40>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> _______________ TestEc2.test_ec2_local_performs_dhcp_on_non_bsd ________________
> 
> self = <tests.unittests.test_datasource.test_ec2.TestEc2 testMethod=test_ec2_local_performs_dhcp_on_non_bsd>
> m_is_bsd = <MagicMock name='is_FreeBSD' id='140126840194192'>
> m_dhcp = <MagicMock name='maybe_perform_dhcp_discovery' id='140126840174240'>
> m_fallback_nic = <MagicMock name='find_fallback_nic' id='140126839064656'>
> m_net = <MagicMock name='EphemeralIPv4Network' id='140126839034592'>
> 
>     @mock.patch('cloudinit.net.dhcp.EphemeralIPv4Network')
>     @mock.patch('cloudinit.net.find_fallback_nic')
>     @mock.patch('cloudinit.net.dhcp.maybe_perform_dhcp_discovery')
>     @mock.patch('cloudinit.sources.DataSourceEc2.util.is_FreeBSD')
>     def test_ec2_local_performs_dhcp_on_non_bsd(self, m_is_bsd, m_dhcp,
>                                                 m_fallback_nic, m_net):
>         """Ec2Local returns True for valid platform data on non-BSD with dhcp.
>     
>         DataSourceEc2Local will setup initial IPv4 network via dhcp discovery.
>         Then the metadata services is crawled for more network config info.
>         When the platform data is valid, return True.
>         """
>     
>         m_fallback_nic.return_value = 'eth9'
>         m_is_bsd.return_value = False
>         m_dhcp.return_value = [{
>             'interface': 'eth9', 'fixed-address': '192.168.2.9',
>             'routers': '192.168.2.1', 'subnet-mask': '255.255.255.0',
>             'broadcast-address': '192.168.2.255'}]
>         self.datasource = ec2.DataSourceEc2Local
>         ds = self._setup_ds(
>             platform_data=self.valid_platform_data,
>             sys_cfg={'datasource': {'Ec2': {'strict_id': False}}},
>             md={'md': DEFAULT_METADATA})
>     
>         ret = ds.get_data()
> >       self.assertTrue(ret)
> E       AssertionError: False is not true
> 
> tests/unittests/test_datasource/test_ec2.py:741: AssertionError
> _______ TestEc2.test_network_config_cached_property_refreshed_on_upgrade _______
> 
> self = <tests.unittests.test_datasource.test_ec2.TestEc2 testMethod=test_network_config_cached_property_refreshed_on_upgrade>
> m_dhcp = <MagicMock name='maybe_perform_dhcp_discovery' id='140126837553472'>
> 
>     @mock.patch('cloudinit.net.dhcp.maybe_perform_dhcp_discovery')
>     def test_network_config_cached_property_refreshed_on_upgrade(self, m_dhcp):
>         """Refresh the network_config Ec2 cache if network key is absent.
>     
>         This catches an upgrade issue where obj.pkl contained stale metadata
>         which lacked newly required network key.
>         """
>         old_metadata = copy.deepcopy(DEFAULT_METADATA)
>         old_metadata.pop('network')
>         ds = self._setup_ds(
>             platform_data=self.valid_platform_data,
>             sys_cfg={'datasource': {'Ec2': {'strict_id': True}}},
>             md={'md': old_metadata})
> >       self.assertTrue(ds.get_data())
> E       AssertionError: False is not true
> 
> tests/unittests/test_datasource/test_ec2.py:494: AssertionError
> _____ TestEc2.test_network_config_property_returns_version_2_network_data ______
> 
> self = <tests.unittests.test_datasource.test_ec2.TestEc2 testMethod=test_network_config_property_returns_version_2_network_data>
> 
>     def test_network_config_property_returns_version_2_network_data(self):
>         """network_config property returns network version 2 for metadata"""
>         ds = self._setup_ds(
>             platform_data=self.valid_platform_data,
>             sys_cfg={'datasource': {'Ec2': {'strict_id': True}}},
>             md={'md': DEFAULT_METADATA})
>         find_fallback_path = M_PATH_NET + 'find_fallback_nic'
>         with mock.patch(find_fallback_path) as m_find_fallback:
>             m_find_fallback.return_value = 'eth9'
>             ds.get_data()
>     
>         mac1 = '06:17:04:d7:26:09'  # Defined in DEFAULT_METADATA
>         expected = {'version': 2, 'ethernets': {'eth9': {
>             'match': {'macaddress': '06:17:04:d7:26:09'}, 'set-name': 'eth9',
>             'dhcp4': True, 'dhcp6': True}}}
>         patch_path = M_PATH_NET + 'get_interfaces_by_mac'
>         get_interface_mac_path = M_PATH_NET + 'get_interface_mac'
>         with mock.patch(patch_path) as m_get_interfaces_by_mac:
>             with mock.patch(find_fallback_path) as m_find_fallback:
>                 with mock.patch(get_interface_mac_path) as m_get_mac:
>                     m_get_interfaces_by_mac.return_value = {mac1: 'eth9'}
>                     m_find_fallback.return_value = 'eth9'
>                     m_get_mac.return_value = mac1
> >                   self.assertEqual(expected, ds.network_config)
> E                   AssertionError: {'version': 2, 'ethernets': {'eth9': {'ma[89 chars]ue}}} != None
> 
> tests/unittests/test_datasource/test_ec2.py:409: AssertionError
> __________ TestEc2.test_network_config_property_secondary_private_ips __________
> 
> self = <tests.unittests.test_datasource.test_ec2.TestEc2 testMethod=test_network_config_property_secondary_private_ips>
> 
>     def test_network_config_property_secondary_private_ips(self):
>         """network_config property configures any secondary ipv4 addresses.
>     
>         Only one device is configured based on get_interfaces_by_mac even when
>         multiple MACs exist in metadata.
>         """
>         ds = self._setup_ds(
>             platform_data=self.valid_platform_data,
>             sys_cfg={'datasource': {'Ec2': {'strict_id': True}}},
>             md={'md': SECONDARY_IP_METADATA_2018_09_24})
>         find_fallback_path = M_PATH_NET + 'find_fallback_nic'
>         with mock.patch(find_fallback_path) as m_find_fallback:
>             m_find_fallback.return_value = 'eth9'
>             ds.get_data()
>     
>         mac1 = '0a:07:84:3d:6e:38'  # 1 secondary IPv4 and 2 secondary IPv6
>         expected = {'version': 2, 'ethernets': {'eth9': {
>             'match': {'macaddress': mac1}, 'set-name': 'eth9',
>             'addresses': ['172.31.45.70/20',
>                           '2600:1f16:292:100:f152:2222:3333:4444/128',
>                           '2600:1f16:292:100:f153:12a3:c37c:11f9/128'],
>             'dhcp4': True, 'dhcp6': True}}}
>         patch_path = M_PATH_NET + 'get_interfaces_by_mac'
>         get_interface_mac_path = M_PATH_NET + 'get_interface_mac'
>         with mock.patch(patch_path) as m_get_interfaces_by_mac:
>             with mock.patch(find_fallback_path) as m_find_fallback:
>                 with mock.patch(get_interface_mac_path) as m_get_mac:
>                     m_get_interfaces_by_mac.return_value = {mac1: 'eth9'}
>                     m_find_fallback.return_value = 'eth9'
>                     m_get_mac.return_value = mac1
> >                   self.assertEqual(expected, ds.network_config)
> E                   AssertionError: {'version': 2, 'ethernets': {'eth9': {'ma[213 chars]ue}}} != None
> 
> tests/unittests/test_datasource/test_ec2.py:470: AssertionError
> ________________ TestEc2.test_network_config_property_set_dhcp4 ________________
> 
> self = <tests.unittests.test_datasource.test_ec2.TestEc2 testMethod=test_network_config_property_set_dhcp4>
> 
>     def test_network_config_property_set_dhcp4(self):
>         """network_config property configures dhcp4 on nics with local-ipv4s.
>     
>         Only one device is configured based on get_interfaces_by_mac even when
>         multiple MACs exist in metadata.
>         """
>         ds = self._setup_ds(
>             platform_data=self.valid_platform_data,
>             sys_cfg={'datasource': {'Ec2': {'strict_id': True}}},
>             md={'md': DEFAULT_METADATA})
>         find_fallback_path = M_PATH_NET + 'find_fallback_nic'
>         with mock.patch(find_fallback_path) as m_find_fallback:
>             m_find_fallback.return_value = 'eth9'
>             ds.get_data()
>     
>         mac1 = '06:17:04:d7:26:0A'  # IPv4 only in DEFAULT_METADATA
>         expected = {'version': 2, 'ethernets': {'eth9': {
>             'match': {'macaddress': mac1.lower()}, 'set-name': 'eth9',
>             'dhcp4': True, 'dhcp6': False}}}
>         patch_path = M_PATH_NET + 'get_interfaces_by_mac'
>         get_interface_mac_path = M_PATH_NET + 'get_interface_mac'
>         with mock.patch(patch_path) as m_get_interfaces_by_mac:
>             with mock.patch(find_fallback_path) as m_find_fallback:
>                 with mock.patch(get_interface_mac_path) as m_get_mac:
>                     m_get_interfaces_by_mac.return_value = {mac1: 'eth9'}
>                     m_find_fallback.return_value = 'eth9'
>                     m_get_mac.return_value = mac1
> >                   self.assertEqual(expected, ds.network_config)
> E                   AssertionError: {'version': 2, 'ethernets': {'eth9': {'ma[90 chars]se}}} != None
> 
> tests/unittests/test_datasource/test_ec2.py:438: AssertionError
> _______________ TestEc2.test_unknown_platform_with_strict_false ________________
> 
> self = <tests.unittests.test_datasource.test_ec2.TestEc2 testMethod=test_unknown_platform_with_strict_false>
> 
>     def test_unknown_platform_with_strict_false(self):
>         """Unknown platform data with strict_id false should return True."""
>         uuid = 'ab439480-72bf-11d3-91fc-b8aded755F9a'
>         ds = self._setup_ds(
>             platform_data={'uuid': uuid, 'uuid_source': 'dmi', 'serial': ''},
>             sys_cfg={'datasource': {'Ec2': {'strict_id': False}}},
>             md={'md': DEFAULT_METADATA})
>         ret = ds.get_data()
> >       self.assertTrue(ret)
> E       AssertionError: False is not true
> 
> tests/unittests/test_datasource/test_ec2.py:673: AssertionError
> ________________ TestEc2.test_valid_platform_with_strict_false _________________
> 
> self = <tests.unittests.test_datasource.test_ec2.TestEc2 testMethod=test_valid_platform_with_strict_false>
> 
>     def test_valid_platform_with_strict_false(self):
>         """Valid platform data should return true with strict_id false."""
>         ds = self._setup_ds(
>             platform_data=self.valid_platform_data,
>             sys_cfg={'datasource': {'Ec2': {'strict_id': False}}},
>             md={'md': DEFAULT_METADATA})
>         ret = ds.get_data()
> >       self.assertTrue(ret)
> E       AssertionError: False is not true
> 
> tests/unittests/test_datasource/test_ec2.py:653: AssertionError
> _________________ TestEc2.test_valid_platform_with_strict_true _________________
> 
> self = <tests.unittests.test_datasource.test_ec2.TestEc2 testMethod=test_valid_platform_with_strict_true>
> m_dhcp = <MagicMock name='maybe_perform_dhcp_discovery' id='140126834752192'>
> 
>     @mock.patch('cloudinit.net.dhcp.maybe_perform_dhcp_discovery')
>     def test_valid_platform_with_strict_true(self, m_dhcp):
>         """Valid platform data should return true with strict_id true."""
>         ds = self._setup_ds(
>             platform_data=self.valid_platform_data,
>             sys_cfg={'datasource': {'Ec2': {'strict_id': True}}},
>             md={'md': DEFAULT_METADATA})
>         ret = ds.get_data()
> >       self.assertTrue(ret)
> E       AssertionError: False is not true
> 
> tests/unittests/test_datasource/test_ec2.py:640: AssertionError
> _____________________ TestDatasourceExoscale.test_get_data _____________________
> 
> self = <tests.unittests.test_datasource.test_exoscale.TestDatasourceExoscale testMethod=test_get_data>
> 
>     def test_get_data(self):
>         """The datasource conforms to expected behavior when supplied
>         full test data."""
>         path = helpers.Paths({'run_dir': self.tmp})
>         ds = DataSourceExoscale({}, None, path)
>         ds._is_platform_viable = lambda: True
>         expected_password = "p@ssw0rd"
>         expected_id = "12345"
>         expected_hostname = "myname"
>         expected_userdata = "#cloud-config"
>         httpretty.register_uri(httpretty.GET,
>                                self.userdata_url,
>                                body=expected_userdata)
>         httpretty.register_uri(httpretty.GET,
>                                self.password_url,
>                                body=expected_password)
>         httpretty.register_uri(httpretty.GET,
>                                self.metadata_url,
>                                body="instance-id\nlocal-hostname")
>         httpretty.register_uri(httpretty.GET,
>                                "{}local-hostname".format(self.metadata_url),
>                                body=expected_hostname)
>         httpretty.register_uri(httpretty.GET,
>                                "{}instance-id".format(self.metadata_url),
>                                body=expected_id)
> >       self.assertTrue(ds._get_data())
> E       AssertionError: False is not true
> 
> tests/unittests/test_datasource/test_exoscale.py:105: AssertionError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.sources.DataSourceExoscale:DataSourceExoscale.py:33 Initializing the Exoscale datasource
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [0/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [1/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [2/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [3/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [4/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [5/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [7/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [9/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [11/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [13/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [15/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [18/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [21/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [24/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [27/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [30/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [34/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [38/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [42/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [46/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [50/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [55/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [60/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [65/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [70/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [75/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [81/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [87/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [93/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [99/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [105/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 7 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 7.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [112/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 7 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 0.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [119/120s]: unexpected error [Attempted to set connect timeout to 0.0, but the timeout cannot be set to a value less than or equal to 0.]
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 7 seconds while we wait to try again
> INFO     cloudinit.sources.DataSourceExoscale:util.py:2635 waiting for the metadata service took 126.195 seconds
> DEBUG    cloudinit.sources.DataSourceExoscale:util.py:2635 Crawl of metadata service took 126.195 seconds
> _______________ TestDatasourceExoscale.test_get_data_no_password _______________
> 
> self = <tests.unittests.test_datasource.test_exoscale.TestDatasourceExoscale testMethod=test_get_data_no_password>
> 
>     def test_get_data_no_password(self):
>         """The datasource conforms to expected behavior when no password is
>         returned by the password server."""
>         path = helpers.Paths({'run_dir': self.tmp})
>         ds = DataSourceExoscale({}, None, path)
>         ds._is_platform_viable = lambda: True
>         expected_answer = ""
>         expected_id = "12345"
>         expected_hostname = "myname"
>         expected_userdata = "#cloud-config"
>         httpretty.register_uri(httpretty.GET,
>                                self.userdata_url,
>                                body=expected_userdata)
>         httpretty.register_uri(httpretty.GET,
>                                self.password_url,
>                                body=expected_answer)
>         httpretty.register_uri(httpretty.GET,
>                                self.metadata_url,
>                                body="instance-id\nlocal-hostname")
>         httpretty.register_uri(httpretty.GET,
>                                "{}local-hostname".format(self.metadata_url),
>                                body=expected_hostname)
>         httpretty.register_uri(httpretty.GET,
>                                "{}instance-id".format(self.metadata_url),
>                                body=expected_id)
> >       self.assertTrue(ds._get_data())
> E       AssertionError: False is not true
> 
> tests/unittests/test_datasource/test_exoscale.py:172: AssertionError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.sources.DataSourceExoscale:DataSourceExoscale.py:33 Initializing the Exoscale datasource
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [0/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [1/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [2/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [3/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [4/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [5/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [7/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [9/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [11/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [13/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [15/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [18/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [21/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [24/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [27/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [30/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [34/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [38/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [42/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [46/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [50/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [55/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [60/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [65/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [70/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [75/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [81/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [87/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [93/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [99/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [105/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 7 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 7.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [112/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 7 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 0.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [119/120s]: unexpected error [Attempted to set connect timeout to 0.0, but the timeout cannot be set to a value less than or equal to 0.]
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 7 seconds while we wait to try again
> INFO     cloudinit.sources.DataSourceExoscale:util.py:2635 waiting for the metadata service took 126.194 seconds
> DEBUG    cloudinit.sources.DataSourceExoscale:util.py:2635 Crawl of metadata service took 126.194 seconds
> _____________ TestDatasourceExoscale.test_get_data_saved_password ______________
> 
> self = <tests.unittests.test_datasource.test_exoscale.TestDatasourceExoscale testMethod=test_get_data_saved_password>
> 
>     def test_get_data_saved_password(self):
>         """The datasource conforms to expected behavior when saved_password is
>         returned by the password server."""
>         path = helpers.Paths({'run_dir': self.tmp})
>         ds = DataSourceExoscale({}, None, path)
>         ds._is_platform_viable = lambda: True
>         expected_answer = "saved_password"
>         expected_id = "12345"
>         expected_hostname = "myname"
>         expected_userdata = "#cloud-config"
>         httpretty.register_uri(httpretty.GET,
>                                self.userdata_url,
>                                body=expected_userdata)
>         httpretty.register_uri(httpretty.GET,
>                                self.password_url,
>                                body=expected_answer)
>         httpretty.register_uri(httpretty.GET,
>                                self.metadata_url,
>                                body="instance-id\nlocal-hostname")
>         httpretty.register_uri(httpretty.GET,
>                                "{}local-hostname".format(self.metadata_url),
>                                body=expected_hostname)
>         httpretty.register_uri(httpretty.GET,
>                                "{}instance-id".format(self.metadata_url),
>                                body=expected_id)
> >       self.assertTrue(ds._get_data())
> E       AssertionError: False is not true
> 
> tests/unittests/test_datasource/test_exoscale.py:141: AssertionError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.sources.DataSourceExoscale:DataSourceExoscale.py:33 Initializing the Exoscale datasource
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [0/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [1/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [2/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [3/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [4/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [5/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [7/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [9/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [11/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [13/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [15/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [18/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [21/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [24/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [27/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [30/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [34/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [38/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [42/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [46/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [50/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [55/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [60/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [65/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [70/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [75/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [81/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [87/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [93/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [99/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [105/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 7 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 7.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [112/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 7 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 0.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [119/120s]: unexpected error [Attempted to set connect timeout to 0.0, but the timeout cannot be set to a value less than or equal to 0.]
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 7 seconds while we wait to try again
> INFO     cloudinit.sources.DataSourceExoscale:util.py:2635 waiting for the metadata service took 126.194 seconds
> DEBUG    cloudinit.sources.DataSourceExoscale:util.py:2635 Crawl of metadata service took 126.194 seconds
> _____________________ TestDatasourceExoscale.test_password _____________________
> 
> self = <tests.unittests.test_datasource.test_exoscale.TestDatasourceExoscale testMethod=test_password>
> 
>     def test_password(self):
>         """The password is set to what is found in the metadata
>         service."""
>         expected_password = "p@ssw0rd"
>         httpretty.register_uri(httpretty.GET,
>                                self.password_url,
>                                body=expected_password)
> >       password = get_password()
> 
> tests/unittests/test_datasource/test_exoscale.py:65: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/DataSourceExoscale.py:164: in get_password
>     response = url_helper.read_file_or_url(
> cloudinit/url_helper.py:101: in read_file_or_url
>     return readurl(url, **kwargs)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d25e9160>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/7] open 'http://169.254.169.254:8080/1.0/' with {'url': 'http://169.254.169.254:8080/1.0/', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'DomU_Request': 'send_my_password'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:8080
> __________________ TestDatasourceExoscale.test_password_empty __________________
> 
> self = <tests.unittests.test_datasource.test_exoscale.TestDatasourceExoscale testMethod=test_password_empty>
> 
>     def test_password_empty(self):
>         """No password is set if the metadata service returns
>         an empty string."""
>         httpretty.register_uri(httpretty.GET,
>                                self.password_url,
>                                body="")
> >       self.assertFalse(get_password())
> 
> tests/unittests/test_datasource/test_exoscale.py:56: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/DataSourceExoscale.py:164: in get_password
>     response = url_helper.read_file_or_url(
> cloudinit/url_helper.py:101: in read_file_or_url
>     return readurl(url, **kwargs)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d2566430>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/7] open 'http://169.254.169.254:8080/1.0/' with {'url': 'http://169.254.169.254:8080/1.0/', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'DomU_Request': 'send_my_password'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:8080
> __________________ TestDatasourceExoscale.test_password_saved __________________
> 
> self = <tests.unittests.test_datasource.test_exoscale.TestDatasourceExoscale testMethod=test_password_saved>
> 
>     def test_password_saved(self):
>         """The password is not set when it is not found
>         in the metadata service."""
>         httpretty.register_uri(httpretty.GET,
>                                self.password_url,
>                                body="saved_password")
> >       self.assertFalse(get_password())
> 
> tests/unittests/test_datasource/test_exoscale.py:48: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/DataSourceExoscale.py:164: in get_password
>     response = url_helper.read_file_or_url(
> cloudinit/url_helper.py:101: in read_file_or_url
>     return readurl(url, **kwargs)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d2625dc0>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/7] open 'http://169.254.169.254:8080/1.0/' with {'url': 'http://169.254.169.254:8080/1.0/', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'DomU_Request': 'send_my_password'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:8080
> __ TestDatasourceExoscale.test_read_metadata_when_password_server_unreachable __
> 
> self = <tests.unittests.test_datasource.test_exoscale.TestDatasourceExoscale testMethod=test_read_metadata_when_password_server_unreachable>
> m_password = <MagicMock name='get_password' id='140126839420240'>
> 
>     @mock.patch('cloudinit.sources.DataSourceExoscale.get_password')
>     def test_read_metadata_when_password_server_unreachable(self, m_password):
>         """The read_metadata function returns partial results in case the
>         password server (only) is unreachable."""
>         expected_id = "12345"
>         expected_hostname = "myname"
>         expected_userdata = "#cloud-config"
>     
>         m_password.side_effect = requests.Timeout('Fake Connection Timeout')
>         httpretty.register_uri(httpretty.GET,
>                                self.userdata_url,
>                                body=expected_userdata)
>         httpretty.register_uri(httpretty.GET,
>                                self.metadata_url,
>                                body="instance-id\nlocal-hostname")
>         httpretty.register_uri(httpretty.GET,
>                                "{}local-hostname".format(self.metadata_url),
>                                body=expected_hostname)
>         httpretty.register_uri(httpretty.GET,
>                                "{}instance-id".format(self.metadata_url),
>                                body=expected_id)
>     
>         result = read_metadata()
>     
>         self.assertIsNone(result.get("password"))
> >       self.assertEqual(result.get("user-data").decode("utf-8"),
>                          expected_userdata)
> E       AttributeError: 'str' object has no attribute 'decode'
> 
> tests/unittests/test_datasource/test_exoscale.py:203: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/7] open 'http://169.254.169.254/1.0/user-data' with {'url': 'http://169.254.169.254/1.0/user-data', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> WARNING  cloudinit.ec2_utils:util.py:1598 Failed fetching userdata from url http://169.254.169.254/1.0/user-data
> DEBUG    cloudinit.ec2_utils:util.py:1607 Failed fetching userdata from url http://169.254.169.254/1.0/user-data
> Traceback (most recent call last):
>   File "/<<PKGBUILDDIR>>/cloudinit/ec2_utils.py", line 157, in get_instance_userdata
>     response = url_helper.read_file_or_url(
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 101, in read_file_or_url
>     return readurl(url, **kwargs)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 303, in readurl
>     r = sess.request(**req_args)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 530, in request
>     resp = self.send(prep, **send_kwargs)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 643, in send
>     r = adapter.send(request, **kwargs)
>   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
>     resp = conn.urlopen(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 670, in urlopen
>     httplib_response = self._make_request(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 426, in _make_request
>     six.raise_from(e, None)
>   File "<string>", line 3, in raise_from
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 421, in _make_request
>     httplib_response = conn.getresponse()
>   File "/usr/lib/python3.9/http/client.py", line 1343, in getresponse
>     response = self.response_class(self.sock, method=self._method)
>   File "/usr/lib/python3.9/http/client.py", line 245, in __init__
>     self.fp = sock.makefile("rb")
>   File "/usr/lib/python3/dist-packages/httpretty/core.py", line 438, in makefile
>     if t.isAlive():
> AttributeError: 'Thread' object has no attribute 'isAlive'
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/7] open 'http://169.254.169.254/1.0/meta-data/' with {'url': 'http://169.254.169.254/1.0/meta-data/', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> WARNING  cloudinit.ec2_utils:util.py:1598 Failed fetching meta-data/ from url http://169.254.169.254/1.0/meta-data/
> DEBUG    cloudinit.ec2_utils:util.py:1607 Failed fetching meta-data/ from url http://169.254.169.254/1.0/meta-data/
> Traceback (most recent call last):
>   File "/<<PKGBUILDDIR>>/cloudinit/ec2_utils.py", line 187, in _get_instance_metadata
>     response = caller(md_url)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 101, in read_file_or_url
>     return readurl(url, **kwargs)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 303, in readurl
>     r = sess.request(**req_args)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 530, in request
>     resp = self.send(prep, **send_kwargs)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 643, in send
>     r = adapter.send(request, **kwargs)
>   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
>     resp = conn.urlopen(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 670, in urlopen
>     httplib_response = self._make_request(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 426, in _make_request
>     six.raise_from(e, None)
>   File "<string>", line 3, in raise_from
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 421, in _make_request
>     httplib_response = conn.getresponse()
>   File "/usr/lib/python3.9/http/client.py", line 1343, in getresponse
>     response = self.response_class(self.sock, method=self._method)
>   File "/usr/lib/python3.9/http/client.py", line 245, in __init__
>     self.fp = sock.makefile("rb")
>   File "/usr/lib/python3/dist-packages/httpretty/core.py", line 438, in makefile
>     if t.isAlive():
> AttributeError: 'Thread' object has no attribute 'isAlive'
> WARNING  cloudinit.sources.DataSourceExoscale:util.py:1598 failed to read from password server url http://169.254.169.254:8080 (Fake Connection Timeout)
> DEBUG    cloudinit.sources.DataSourceExoscale:util.py:1607 failed to read from password server url http://169.254.169.254:8080 (Fake Connection Timeout)
> Traceback (most recent call last):
>   File "/<<PKGBUILDDIR>>/cloudinit/sources/DataSourceExoscale.py", line 211, in read_metadata
>     crawled_metadata['password'] = get_password(
>   File "/usr/lib/python3.9/unittest/mock.py", line 1093, in __call__
>     return self._mock_call(*args, **kwargs)
>   File "/usr/lib/python3.9/unittest/mock.py", line 1097, in _mock_call
>     return self._execute_mock_call(*args, **kwargs)
>   File "/usr/lib/python3.9/unittest/mock.py", line 1152, in _execute_mock_call
>     raise effect
> requests.exceptions.Timeout: Fake Connection Timeout
> ____________ TestDataSourceGCE.test_block_project_ssh_keys_override ____________
> 
> self = <tests.unittests.test_datasource.test_gce.TestDataSourceGCE testMethod=test_block_project_ssh_keys_override>
> 
>     def test_block_project_ssh_keys_override(self):
>         valid_key = 'ssh-rsa VALID {0}'
>         invalid_key = 'ssh-rsa INVALID {0}'
>         project_attributes = {
>             'sshKeys': 'cloudinit:{0}'.format(invalid_key.format(0)),
>             'ssh-keys': 'cloudinit:{0}'.format(invalid_key.format(1)),
>         }
>         instance_attributes = {
>             'ssh-keys': 'cloudinit:{0}'.format(valid_key.format(0)),
>             'block-project-ssh-keys': 'True',
>         }
>     
>         meta = GCE_META.copy()
>         meta['project/attributes'] = project_attributes
>         meta['instance/attributes'] = instance_attributes
>     
>         _set_mock_metadata(meta)
> >       self.ds.get_data()
> 
> tests/unittests/test_datasource/test_gce.py:288: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceGCE.py:70: in _get_data
>     ret = util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceGCE.py:212: in read_md
>     new_value = metadata_fetcher.get_value(path, is_text, is_recursive)
> cloudinit/sources/DataSourceGCE.py:38: in get_value
>     resp = url_helper.readurl(url=url, headers=HEADERS)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d2865640>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1183 detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}
> DEBUG    cloudinit.util:util.py:2635 Resolving URL: http://metadata.google.internal/computeMetadata/v1/ took 0.000 seconds
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://metadata.google.internal/computeMetadata/v1/instance/id' with {'url': 'http://metadata.google.internal/computeMetadata/v1/instance/id', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2', 'Metadata-Flavor': 'Google'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): metadata.google.internal:80
> DEBUG    cloudinit.sources.DataSourceGCE:util.py:2635 Crawl of GCE metadata service took 0.002 seconds
> __________________ TestDataSourceGCE.test_cloudinit_ssh_keys ___________________
> 
> self = <tests.unittests.test_datasource.test_gce.TestDataSourceGCE testMethod=test_cloudinit_ssh_keys>
> 
>     def test_cloudinit_ssh_keys(self):
>         valid_key = 'ssh-rsa VALID {0}'
>         invalid_key = 'ssh-rsa INVALID {0}'
>         project_attributes = {
>             'sshKeys': '\n'.join([
>                 'cloudinit:{0}'.format(valid_key.format(0)),
>                 'user:{0}'.format(invalid_key.format(0)),
>             ]),
>             'ssh-keys': '\n'.join([
>                 'cloudinit:{0}'.format(valid_key.format(1)),
>                 'user:{0}'.format(invalid_key.format(1)),
>             ]),
>         }
>         instance_attributes = {
>             'ssh-keys': '\n'.join([
>                 'cloudinit:{0}'.format(valid_key.format(2)),
>                 'user:{0}'.format(invalid_key.format(2)),
>             ]),
>             'block-project-ssh-keys': 'False',
>         }
>     
>         meta = GCE_META.copy()
>         meta['project/attributes'] = project_attributes
>         meta['instance/attributes'] = instance_attributes
>     
>         _set_mock_metadata(meta)
> >       self.ds.get_data()
> 
> tests/unittests/test_datasource/test_gce.py:205: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceGCE.py:70: in _get_data
>     ret = util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceGCE.py:212: in read_md
>     new_value = metadata_fetcher.get_value(path, is_text, is_recursive)
> cloudinit/sources/DataSourceGCE.py:38: in get_value
>     resp = url_helper.readurl(url=url, headers=HEADERS)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71b875f670>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1183 detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}
> DEBUG    cloudinit.util:util.py:2635 Resolving URL: http://metadata.google.internal/computeMetadata/v1/ took 0.000 seconds
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://metadata.google.internal/computeMetadata/v1/instance/id' with {'url': 'http://metadata.google.internal/computeMetadata/v1/instance/id', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2', 'Metadata-Flavor': 'Google'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): metadata.google.internal:80
> DEBUG    cloudinit.sources.DataSourceGCE:util.py:2635 Crawl of GCE metadata service took 0.002 seconds
> ______________________ TestDataSourceGCE.test_connection _______________________
> 
> self = <tests.unittests.test_datasource.test_gce.TestDataSourceGCE testMethod=test_connection>
> 
>     def test_connection(self):
>         _set_mock_metadata()
> >       success = self.ds.get_data()
> 
> tests/unittests/test_datasource/test_gce.py:113: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceGCE.py:70: in _get_data
>     ret = util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceGCE.py:212: in read_md
>     new_value = metadata_fetcher.get_value(path, is_text, is_recursive)
> cloudinit/sources/DataSourceGCE.py:38: in get_value
>     resp = url_helper.readurl(url=url, headers=HEADERS)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d268a760>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1183 detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}
> DEBUG    cloudinit.util:util.py:2635 Resolving URL: http://metadata.google.internal/computeMetadata/v1/ took 0.000 seconds
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://metadata.google.internal/computeMetadata/v1/instance/id' with {'url': 'http://metadata.google.internal/computeMetadata/v1/instance/id', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2', 'Metadata-Flavor': 'Google'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): metadata.google.internal:80
> DEBUG    cloudinit.sources.DataSourceGCE:util.py:2635 Crawl of GCE metadata service took 0.002 seconds
> _________________ TestDataSourceGCE.test_default_user_ssh_keys _________________
> 
> self = <tests.unittests.test_datasource.test_gce.TestDataSourceGCE testMethod=test_default_user_ssh_keys>
> mock_ug_util = <MagicMock name='ug_util' id='140126402191424'>
> 
>     @mock.patch("cloudinit.sources.DataSourceGCE.ug_util")
>     def test_default_user_ssh_keys(self, mock_ug_util):
>         mock_ug_util.normalize_users_groups.return_value = None, None
>         mock_ug_util.extract_default.return_value = 'ubuntu', None
>         ubuntu_ds = DataSourceGCE.DataSourceGCE(
>             settings.CFG_BUILTIN, self._make_distro('ubuntu'),
>             helpers.Paths({'run_dir': self.tmp_dir()}))
>     
>         valid_key = 'ssh-rsa VALID {0}'
>         invalid_key = 'ssh-rsa INVALID {0}'
>         project_attributes = {
>             'sshKeys': '\n'.join([
>                 'ubuntu:{0}'.format(valid_key.format(0)),
>                 'user:{0}'.format(invalid_key.format(0)),
>             ]),
>             'ssh-keys': '\n'.join([
>                 'ubuntu:{0}'.format(valid_key.format(1)),
>                 'user:{0}'.format(invalid_key.format(1)),
>             ]),
>         }
>         instance_attributes = {
>             'ssh-keys': '\n'.join([
>                 'ubuntu:{0}'.format(valid_key.format(2)),
>                 'user:{0}'.format(invalid_key.format(2)),
>             ]),
>             'block-project-ssh-keys': 'False',
>         }
>     
>         meta = GCE_META.copy()
>         meta['project/attributes'] = project_attributes
>         meta['instance/attributes'] = instance_attributes
>     
>         _set_mock_metadata(meta)
> >       ubuntu_ds.get_data()
> 
> tests/unittests/test_datasource/test_gce.py:243: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceGCE.py:70: in _get_data
>     ret = util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceGCE.py:212: in read_md
>     new_value = metadata_fetcher.get_value(path, is_text, is_recursive)
> cloudinit/sources/DataSourceGCE.py:38: in get_value
>     resp = url_helper.readurl(url=url, headers=HEADERS)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d01f3cd0>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1183 detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}
> DEBUG    cloudinit.util:util.py:2635 Resolving URL: http://metadata.google.internal/computeMetadata/v1/ took 0.000 seconds
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://metadata.google.internal/computeMetadata/v1/instance/id' with {'url': 'http://metadata.google.internal/computeMetadata/v1/instance/id', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2', 'Metadata-Flavor': 'Google'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): metadata.google.internal:80
> DEBUG    cloudinit.sources.DataSourceGCE:util.py:2635 Crawl of GCE metadata service took 0.002 seconds
> ______________ TestDataSourceGCE.test_instance_ssh_keys_override _______________
> 
> self = <tests.unittests.test_datasource.test_gce.TestDataSourceGCE testMethod=test_instance_ssh_keys_override>
> 
>     def test_instance_ssh_keys_override(self):
>         valid_key = 'ssh-rsa VALID {0}'
>         invalid_key = 'ssh-rsa INVALID {0}'
>         project_attributes = {
>             'sshKeys': 'cloudinit:{0}'.format(invalid_key.format(0)),
>             'ssh-keys': 'cloudinit:{0}'.format(invalid_key.format(1)),
>         }
>         instance_attributes = {
>             'sshKeys': 'cloudinit:{0}'.format(valid_key.format(0)),
>             'ssh-keys': 'cloudinit:{0}'.format(valid_key.format(1)),
>             'block-project-ssh-keys': 'False',
>         }
>     
>         meta = GCE_META.copy()
>         meta['project/attributes'] = project_attributes
>         meta['instance/attributes'] = instance_attributes
>     
>         _set_mock_metadata(meta)
> >       self.ds.get_data()
> 
> tests/unittests/test_datasource/test_gce.py:266: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceGCE.py:70: in _get_data
>     ret = util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceGCE.py:212: in read_md
>     new_value = metadata_fetcher.get_value(path, is_text, is_recursive)
> cloudinit/sources/DataSourceGCE.py:38: in get_value
>     resp = url_helper.readurl(url=url, headers=HEADERS)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71b8634c10>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1183 detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}
> DEBUG    cloudinit.util:util.py:2635 Resolving URL: http://metadata.google.internal/computeMetadata/v1/ took 0.000 seconds
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://metadata.google.internal/computeMetadata/v1/instance/id' with {'url': 'http://metadata.google.internal/computeMetadata/v1/instance/id', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2', 'Metadata-Flavor': 'Google'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): metadata.google.internal:80
> DEBUG    cloudinit.sources.DataSourceGCE:util.py:2635 Crawl of GCE metadata service took 0.002 seconds
> _______________________ TestDataSourceGCE.test_metadata ________________________
> 
> self = <tests.unittests.test_datasource.test_gce.TestDataSourceGCE testMethod=test_metadata>
> 
>     def test_metadata(self):
>         # UnicodeDecodeError if set to ds.userdata instead of userdata_raw
>         meta = GCE_META.copy()
>         meta['instance/attributes/user-data'] = b'/bin/echo \xff\n'
>     
>         _set_mock_metadata()
> >       self.ds.get_data()
> 
> tests/unittests/test_datasource/test_gce.py:125: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceGCE.py:70: in _get_data
>     ret = util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceGCE.py:212: in read_md
>     new_value = metadata_fetcher.get_value(path, is_text, is_recursive)
> cloudinit/sources/DataSourceGCE.py:38: in get_value
>     resp = url_helper.readurl(url=url, headers=HEADERS)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71b85c7a30>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1183 detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}
> DEBUG    cloudinit.util:util.py:2635 Resolving URL: http://metadata.google.internal/computeMetadata/v1/ took 0.000 seconds
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://metadata.google.internal/computeMetadata/v1/instance/id' with {'url': 'http://metadata.google.internal/computeMetadata/v1/instance/id', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2', 'Metadata-Flavor': 'Google'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): metadata.google.internal:80
> DEBUG    cloudinit.sources.DataSourceGCE:util.py:2635 Crawl of GCE metadata service took 0.002 seconds
> ___________________ TestDataSourceGCE.test_metadata_encoding ___________________
> 
> self = <tests.unittests.test_datasource.test_gce.TestDataSourceGCE testMethod=test_metadata_encoding>
> 
>     def test_metadata_encoding(self):
>         """user-data is base64 encoded if user-data-encoding is 'base64'."""
>         _set_mock_metadata(GCE_META_ENCODING)
> >       self.ds.get_data()
> 
> tests/unittests/test_datasource/test_gce.py:159: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceGCE.py:70: in _get_data
>     ret = util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceGCE.py:212: in read_md
>     new_value = metadata_fetcher.get_value(path, is_text, is_recursive)
> cloudinit/sources/DataSourceGCE.py:38: in get_value
>     resp = url_helper.readurl(url=url, headers=HEADERS)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d01d5b20>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1183 detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}
> DEBUG    cloudinit.util:util.py:2635 Resolving URL: http://metadata.google.internal/computeMetadata/v1/ took 0.000 seconds
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://metadata.google.internal/computeMetadata/v1/instance/id' with {'url': 'http://metadata.google.internal/computeMetadata/v1/instance/id', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2', 'Metadata-Flavor': 'Google'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): metadata.google.internal:80
> DEBUG    cloudinit.sources.DataSourceGCE:util.py:2635 Crawl of GCE metadata service took 0.002 seconds
> ___________________ TestDataSourceGCE.test_metadata_partial ____________________
> 
> self = <tests.unittests.test_datasource.test_gce.TestDataSourceGCE testMethod=test_metadata_partial>
> 
>     def test_metadata_partial(self):
>         _set_mock_metadata(GCE_META_PARTIAL)
> >       self.ds.get_data()
> 
> tests/unittests/test_datasource/test_gce.py:140: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceGCE.py:70: in _get_data
>     ret = util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceGCE.py:212: in read_md
>     new_value = metadata_fetcher.get_value(path, is_text, is_recursive)
> cloudinit/sources/DataSourceGCE.py:38: in get_value
>     resp = url_helper.readurl(url=url, headers=HEADERS)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71b86c4a60>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1183 detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}
> DEBUG    cloudinit.util:util.py:2635 Resolving URL: http://metadata.google.internal/computeMetadata/v1/ took 0.000 seconds
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://metadata.google.internal/computeMetadata/v1/instance/id' with {'url': 'http://metadata.google.internal/computeMetadata/v1/instance/id', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2', 'Metadata-Flavor': 'Google'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): metadata.google.internal:80
> DEBUG    cloudinit.sources.DataSourceGCE:util.py:2635 Crawl of GCE metadata service took 0.002 seconds
> __________ TestDataSourceGCE.test_missing_required_keys_return_false ___________
> 
> self = <tests.unittests.test_datasource.test_gce.TestDataSourceGCE testMethod=test_missing_required_keys_return_false>
> 
>     def test_missing_required_keys_return_false(self):
>         for required_key in ['instance/id', 'instance/zone',
>                              'instance/hostname']:
>             meta = GCE_META_PARTIAL.copy()
>             del meta[required_key]
>             _set_mock_metadata(meta)
> >           self.assertEqual(False, self.ds.get_data())
> 
> tests/unittests/test_datasource/test_gce.py:171: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceGCE.py:70: in _get_data
>     ret = util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceGCE.py:212: in read_md
>     new_value = metadata_fetcher.get_value(path, is_text, is_recursive)
> cloudinit/sources/DataSourceGCE.py:38: in get_value
>     resp = url_helper.readurl(url=url, headers=HEADERS)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d28488b0>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1183 detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}
> DEBUG    cloudinit.util:util.py:2635 Resolving URL: http://metadata.google.internal/computeMetadata/v1/ took 0.000 seconds
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://metadata.google.internal/computeMetadata/v1/instance/id' with {'url': 'http://metadata.google.internal/computeMetadata/v1/instance/id', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2', 'Metadata-Flavor': 'Google'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): metadata.google.internal:80
> DEBUG    cloudinit.sources.DataSourceGCE:util.py:2635 Crawl of GCE metadata service took 0.002 seconds
> _________________ TestDataSourceGCE.test_no_ssh_keys_metadata __________________
> 
> self = <tests.unittests.test_datasource.test_gce.TestDataSourceGCE testMethod=test_no_ssh_keys_metadata>
> 
>     def test_no_ssh_keys_metadata(self):
>         _set_mock_metadata()
> >       self.ds.get_data()
> 
> tests/unittests/test_datasource/test_gce.py:176: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceGCE.py:70: in _get_data
>     ret = util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceGCE.py:212: in read_md
>     new_value = metadata_fetcher.get_value(path, is_text, is_recursive)
> cloudinit/sources/DataSourceGCE.py:38: in get_value
>     resp = url_helper.readurl(url=url, headers=HEADERS)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d2850cd0>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1183 detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}
> DEBUG    cloudinit.util:util.py:2635 Resolving URL: http://metadata.google.internal/computeMetadata/v1/ took 0.000 seconds
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://metadata.google.internal/computeMetadata/v1/instance/id' with {'url': 'http://metadata.google.internal/computeMetadata/v1/instance/id', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2', 'Metadata-Flavor': 'Google'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): metadata.google.internal:80
> DEBUG    cloudinit.sources.DataSourceGCE:util.py:2635 Crawl of GCE metadata service took 0.002 seconds
> ___ TestDataSourceGCE.test_only_last_part_of_zone_used_for_availability_zone ___
> 
> self = <tests.unittests.test_datasource.test_gce.TestDataSourceGCE testMethod=test_only_last_part_of_zone_used_for_availability_zone>
> 
>     def test_only_last_part_of_zone_used_for_availability_zone(self):
>         _set_mock_metadata()
> >       r = self.ds.get_data()
> 
> tests/unittests/test_datasource/test_gce.py:295: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceGCE.py:70: in _get_data
>     ret = util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceGCE.py:212: in read_md
>     new_value = metadata_fetcher.get_value(path, is_text, is_recursive)
> cloudinit/sources/DataSourceGCE.py:38: in get_value
>     resp = url_helper.readurl(url=url, headers=HEADERS)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71b87948b0>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1183 detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}
> DEBUG    cloudinit.util:util.py:2635 Resolving URL: http://metadata.google.internal/computeMetadata/v1/ took 0.000 seconds
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://metadata.google.internal/computeMetadata/v1/instance/id' with {'url': 'http://metadata.google.internal/computeMetadata/v1/instance/id', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2', 'Metadata-Flavor': 'Google'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): metadata.google.internal:80
> DEBUG    cloudinit.sources.DataSourceGCE:util.py:2635 Crawl of GCE metadata service took 0.002 seconds
> _________________ TestDataSourceGCE.test_userdata_no_encoding __________________
> 
> self = <tests.unittests.test_datasource.test_gce.TestDataSourceGCE testMethod=test_userdata_no_encoding>
> 
>     def test_userdata_no_encoding(self):
>         """check that user-data is read."""
>         _set_mock_metadata(GCE_USER_DATA_TEXT)
> >       self.ds.get_data()
> 
> tests/unittests/test_datasource/test_gce.py:151: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceGCE.py:70: in _get_data
>     ret = util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceGCE.py:212: in read_md
>     new_value = metadata_fetcher.get_value(path, is_text, is_recursive)
> cloudinit/sources/DataSourceGCE.py:38: in get_value
>     resp = url_helper.readurl(url=url, headers=HEADERS)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d23d1f40>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1183 detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}
> DEBUG    cloudinit.util:util.py:2635 Resolving URL: http://metadata.google.internal/computeMetadata/v1/ took 0.000 seconds
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://metadata.google.internal/computeMetadata/v1/instance/id' with {'url': 'http://metadata.google.internal/computeMetadata/v1/instance/id', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2', 'Metadata-Flavor': 'Google'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): metadata.google.internal:80
> DEBUG    cloudinit.sources.DataSourceGCE:util.py:2635 Crawl of GCE metadata service took 0.002 seconds
> _________________ TestOpenNebulaDataSource.test_context_parser _________________
> 
> self = <tests.unittests.test_datasource.test_opennebula.TestOpenNebulaDataSource testMethod=test_context_parser>
> 
>     def test_context_parser(self):
>         populate_context_dir(self.seed_dir, TEST_VARS)
>         results = ds.read_context_disk_dir(self.seed_dir)
>     
>         self.assertTrue('metadata' in results)
> >       self.assertEqual(TEST_VARS, results['metadata'])
> E       AssertionError: {'VAR1': 'single', 'VAR2': 'double word', '[207 chars] '$'} != {'SRANDOM': '286584205', 'VAR1': 'single', [231 chars]e\n'}
> E       + {'SRANDOM': '286584205',
> E       - {'VAR1': 'single',
> E       ? ^
> E       
> E       +  'VAR1': 'single',
> E       ? ^
> E       
> E          'VAR10': '\\',
> E          'VAR11': "'",
> E          'VAR12': '$',
> E          'VAR2': 'double word',
> E          'VAR3': 'multi\nline\n',
> E          'VAR4': "'single'",
> E          'VAR5': "'double word'",
> E          'VAR6': "'multi\nline\n'",
> E          'VAR7': 'single\\t',
> E          'VAR8': 'double\\tword',
> E          'VAR9': 'multi\\t\nline\n'}
> 
> tests/unittests/test_datasource/test_opennebula.py:161: AssertionError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1419 Reading from /tmp/ci-TestOpenNebulaDataSource.i70dj5oc/seed/opennebula/context.sh (quiet=False)
> DEBUG    cloudinit.util:util.py:1430 Read 262 bytes from /tmp/ci-TestOpenNebulaDataSource.i70dj5oc/seed/opennebula/context.sh
> DEBUG    cloudinit.util:util.py:2087 Running command ['bash', '-e'] with allowed return codes [0] (shell=False, capture=True)
> ____________ TestOpenNebulaDataSource.test_seed_dir_empty1_context _____________
> 
> self = <tests.unittests.test_datasource.test_opennebula.TestOpenNebulaDataSource testMethod=test_seed_dir_empty1_context>
> 
>     def test_seed_dir_empty1_context(self):
>         populate_dir(self.seed_dir, {'context.sh': ''})
>         results = ds.read_context_disk_dir(self.seed_dir)
>     
>         self.assertIsNone(results['userdata'])
> >       self.assertEqual(results['metadata'], {})
> E       AssertionError: {'SRANDOM': '1803867237'} != {}
> E       - {'SRANDOM': '1803867237'}
> E       + {}
> 
> tests/unittests/test_datasource/test_opennebula.py:140: AssertionError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1419 Reading from /tmp/ci-TestOpenNebulaDataSource.sdtf9hoj/seed/opennebula/context.sh (quiet=False)
> DEBUG    cloudinit.util:util.py:1430 Read 0 bytes from /tmp/ci-TestOpenNebulaDataSource.sdtf9hoj/seed/opennebula/context.sh
> DEBUG    cloudinit.util:util.py:2087 Running command ['bash', '-e'] with allowed return codes [0] (shell=False, capture=True)
> ____________ TestOpenNebulaDataSource.test_seed_dir_empty2_context _____________
> 
> self = <tests.unittests.test_datasource.test_opennebula.TestOpenNebulaDataSource testMethod=test_seed_dir_empty2_context>
> 
>     def test_seed_dir_empty2_context(self):
>         populate_context_dir(self.seed_dir, {})
>         results = ds.read_context_disk_dir(self.seed_dir)
>     
>         self.assertIsNone(results['userdata'])
> >       self.assertEqual(results['metadata'], {})
> E       AssertionError: {'SRANDOM': '394719205'} != {}
> E       - {'SRANDOM': '394719205'}
> E       + {}
> 
> tests/unittests/test_datasource/test_opennebula.py:147: AssertionError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1419 Reading from /tmp/ci-TestOpenNebulaDataSource.zexnpedd/seed/opennebula/context.sh (quiet=False)
> DEBUG    cloudinit.util:util.py:1430 Read 44 bytes from /tmp/ci-TestOpenNebulaDataSource.zexnpedd/seed/opennebula/context.sh
> DEBUG    cloudinit.util:util.py:2087 Running command ['bash', '-e'] with allowed return codes [0] (shell=False, capture=True)
> _____________________ TestParseShellConfig.test_no_seconds _____________________
> 
> self = <tests.unittests.test_datasource.test_opennebula.TestParseShellConfig testMethod=test_no_seconds>
> 
>     def test_no_seconds(self):
>         cfg = '\n'.join(["foo=bar", "SECONDS=2", "xx=foo"])
>         # we could test 'sleep 2', but that would make the test run slower.
>         ret = ds.parse_shell_config(cfg)
> >       self.assertEqual(ret, {"foo": "bar", "xx": "foo"})
> E       AssertionError: {'foo': 'bar', 'xx': 'foo', 'SRANDOM': '560964075'} != {'foo': 'bar', 'xx': 'foo'}
> E       - {'SRANDOM': '560964075', 'foo': 'bar', 'xx': 'foo'}
> E       + {'foo': 'bar', 'xx': 'foo'}
> 
> tests/unittests/test_datasource/test_opennebula.py:922: AssertionError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:2087 Running command ['bash', '-e'] with allowed return codes [0] (shell=False, capture=True)
> _______________ TestOpenStackDataSource.test_bad_datasource_meta _______________
> 
> self = <tests.unittests.test_datasource.test_openstack.TestOpenStackDataSource testMethod=test_bad_datasource_meta>
> 
>     def test_bad_datasource_meta(self):
>         os_files = copy.deepcopy(OS_FILES)
>         for k in list(os_files.keys()):
>             if k.endswith('meta_data.json'):
>                 os_files[k] = '{'  # some invalid json
>         _register_uris(self.VERSION, {}, {}, os_files)
>         ds_os = ds.DataSourceOpenStack(settings.CFG_BUILTIN,
>                                        None,
>                                        helpers.Paths({'run_dir': self.tmp}))
>         self.assertIsNone(ds_os.version)
>         mock_path = MOCK_PATH + 'detect_openstack'
>         with test_helpers.mock.patch(mock_path) as m_detect_os:
>             m_detect_os.return_value = True
>             found = ds_os.get_data()
>         self.assertFalse(found)
>         self.assertIsNone(ds_os.version)
> >       self.assertIn(
>             'InvalidMetaDataException: Broken metadata address'
>             ' http://169.254.169.25',
>             self.logs.getvalue())
> E       AssertionError: 'InvalidMetaDataException: Broken metadata address http://169.254.169.25' not found in 'DEBUG: detected dns redirection: {\'does-not-exist.example.com.\': [\': does-not-exist.example.com.\'], \'example.invalid.\': [\': example.invalid.\'], \'__cloud_init_expected_not_found__\': [\': __cloud_init_expected_not_found__\']}\nDEBUG: Resolving URL: http://169.254.169.254 took 0.000 seconds\nDEBUG: [0/1] open \'http://169.254.169.254/openstack\' with {\'url\': \'http://169.254.169.254/openstack\', \'allow_redirects\': True, \'method\': \'GET\', \'timeout\': 10.0, \'headers\': {\'User-Agent\': \'Cloud-Init/20.2\'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nDEBUG: Calling \'http://169.254.169.254/openstack\' failed [0/-1s]: unexpected error [\'Thread\' object has no attribute \'isAlive\']\nDEBUG: Giving up on OpenStack md from [\'http://169.254.169.254/openstack\'] after 0 seconds\nWARNING: No active metadata service found\nDEBUG: No active metadata service found\nTraceback (most recent call last):\n  File "/<<PKGBUILDDIR>>/cloudinit/sources/DataSourceOpenStack.py", line 143, in _get_data\n    results = self._crawl_metadata()\n  File "/<<PKGBUILDDIR>>/cloudinit/sources/DataSourceOpenStack.py", line 179, in _crawl_metadata\n    raise sources.InvalidMetaDataException(\ncloudinit.sources.InvalidMetaDataException: No active metadata service found\n'
> 
> tests/unittests/test_datasource/test_openstack.py:300: AssertionError
> __________________ TestOpenStackDataSource.test_bad_metadata ___________________
> 
> self = <tests.unittests.test_datasource.test_openstack.TestOpenStackDataSource testMethod=test_bad_metadata>
> 
>     def test_bad_metadata(self):
>         os_files = copy.deepcopy(OS_FILES)
>         for k in list(os_files.keys()):
>             if k.endswith('meta_data.json'):
>                 os_files.pop(k, None)
>         _register_uris(self.VERSION, {}, {}, os_files)
> >       self.assertRaises(openstack.NonReadable, _read_metadata_service)
> 
> tests/unittests/test_datasource/test_openstack.py:178: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> tests/unittests/test_datasource/test_openstack.py:129: in _read_metadata_service
>     return ds.read_metadata_service(BASE_URL, retries=0, timeout=0.1)
> cloudinit/sources/DataSourceOpenStack.py:220: in read_metadata_service
>     return reader.read_v2()
> cloudinit/sources/helpers/openstack.py:266: in read_v2
>     data = self._path_read(path)
> cloudinit/sources/helpers/openstack.py:477: in _path_read
>     response = url_helper.readurl(path,
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ____________________ TestOpenStackDataSource.test_bad_uuid _____________________
> 
> self = <tests.unittests.test_datasource.test_openstack.TestOpenStackDataSource testMethod=test_bad_uuid>
> 
>     def test_bad_uuid(self):
>         os_files = copy.deepcopy(OS_FILES)
>         os_meta = copy.deepcopy(OSTACK_META)
>         os_meta.pop('uuid')
>         for k in list(os_files.keys()):
>             if k.endswith('meta_data.json'):
>                 os_files[k] = json.dumps(os_meta)
>         _register_uris(self.VERSION, {}, {}, os_files)
> >       self.assertRaises(BrokenMetadata, _read_metadata_service)
> 
> tests/unittests/test_datasource/test_openstack.py:188: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> tests/unittests/test_datasource/test_openstack.py:129: in _read_metadata_service
>     return ds.read_metadata_service(BASE_URL, retries=0, timeout=0.1)
> cloudinit/sources/DataSourceOpenStack.py:220: in read_metadata_service
>     return reader.read_v2()
> cloudinit/sources/helpers/openstack.py:266: in read_v2
>     data = self._path_read(path)
> cloudinit/sources/helpers/openstack.py:477: in _path_read
>     response = url_helper.readurl(path,
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ___________________ TestOpenStackDataSource.test_datasource ____________________
> 
> self = <tests.unittests.test_datasource.test_openstack.TestOpenStackDataSource testMethod=test_datasource>
> m_dhcp = <MagicMock name='maybe_perform_dhcp_discovery' id='140126400769280'>
> 
>     @test_helpers.mock.patch('cloudinit.net.dhcp.maybe_perform_dhcp_discovery')
>     def test_datasource(self, m_dhcp):
>         _register_uris(self.VERSION, EC2_FILES, EC2_META, OS_FILES)
>         ds_os = ds.DataSourceOpenStack(
>             settings.CFG_BUILTIN, None, helpers.Paths({'run_dir': self.tmp}))
>         self.assertIsNone(ds_os.version)
>         mock_path = MOCK_PATH + 'detect_openstack'
>         with test_helpers.mock.patch(mock_path) as m_detect_os:
>             m_detect_os.return_value = True
>             found = ds_os.get_data()
> >       self.assertTrue(found)
> E       AssertionError: False is not true
> 
> tests/unittests/test_datasource/test_openstack.py:239: AssertionError
> ________________ TestOpenStackDataSource.test_local_datasource _________________
> 
> self = <tests.unittests.test_datasource.test_openstack.TestOpenStackDataSource testMethod=test_local_datasource>
> m_dhcp = <MagicMock name='maybe_perform_dhcp_discovery' id='140126839066288'>
> m_net = <MagicMock name='EphemeralIPv4Network' id='140126402437856'>
> 
>     @hp.activate
>     @test_helpers.mock.patch('cloudinit.net.dhcp.EphemeralIPv4Network')
>     @test_helpers.mock.patch('cloudinit.net.dhcp.maybe_perform_dhcp_discovery')
>     def test_local_datasource(self, m_dhcp, m_net):
>         """OpenStackLocal calls EphemeralDHCPNetwork and gets instance data."""
>         _register_uris(self.VERSION, EC2_FILES, EC2_META, OS_FILES)
>         ds_os_local = ds.DataSourceOpenStackLocal(
>             settings.CFG_BUILTIN, None, helpers.Paths({'run_dir': self.tmp}))
>         ds_os_local._fallback_interface = 'eth9'  # Monkey patch for dhcp
>         m_dhcp.return_value = [{
>             'interface': 'eth9', 'fixed-address': '192.168.2.9',
>             'routers': '192.168.2.1', 'subnet-mask': '255.255.255.0',
>             'broadcast-address': '192.168.2.255'}]
>     
>         self.assertIsNone(ds_os_local.version)
>         mock_path = MOCK_PATH + 'detect_openstack'
>         with test_helpers.mock.patch(mock_path) as m_detect_os:
>             m_detect_os.return_value = True
>             found = ds_os_local.get_data()
> >       self.assertTrue(found)
> E       AssertionError: False is not true
> 
> tests/unittests/test_datasource/test_openstack.py:271: AssertionError
> ________________ TestOpenStackDataSource.test_metadata_invalid _________________
> 
> self = <tests.unittests.test_datasource.test_openstack.TestOpenStackDataSource testMethod=test_metadata_invalid>
> 
>     def test_metadata_invalid(self):
>         os_files = copy.deepcopy(OS_FILES)
>         for k in list(os_files.keys()):
>             if k.endswith('meta_data.json'):
>                 os_files[k] = '{'  # some invalid json
>         _register_uris(self.VERSION, {}, {}, os_files)
> >       self.assertRaises(BrokenMetadata, _read_metadata_service)
> 
> tests/unittests/test_datasource/test_openstack.py:227: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> tests/unittests/test_datasource/test_openstack.py:129: in _read_metadata_service
>     return ds.read_metadata_service(BASE_URL, retries=0, timeout=0.1)
> cloudinit/sources/DataSourceOpenStack.py:220: in read_metadata_service
>     return reader.read_v2()
> cloudinit/sources/helpers/openstack.py:266: in read_v2
>     data = self._path_read(path)
> cloudinit/sources/helpers/openstack.py:477: in _path_read
>     response = url_helper.readurl(path,
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> _____________________ TestOpenStackDataSource.test_no_ec2 ______________________
> 
> self = <tests.unittests.test_datasource.test_openstack.TestOpenStackDataSource testMethod=test_no_ec2>
> 
>     def test_no_ec2(self):
>         _register_uris(self.VERSION, {}, {}, OS_FILES)
> >       f = _read_metadata_service()
> 
> tests/unittests/test_datasource/test_openstack.py:164: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> tests/unittests/test_datasource/test_openstack.py:129: in _read_metadata_service
>     return ds.read_metadata_service(BASE_URL, retries=0, timeout=0.1)
> cloudinit/sources/DataSourceOpenStack.py:220: in read_metadata_service
>     return reader.read_v2()
> cloudinit/sources/helpers/openstack.py:266: in read_v2
>     data = self._path_read(path)
> cloudinit/sources/helpers/openstack.py:477: in _path_read
>     response = url_helper.readurl(path,
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d23be250>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ___________________ TestOpenStackDataSource.test_successful ____________________
> 
> self = <tests.unittests.test_datasource.test_openstack.TestOpenStackDataSource testMethod=test_successful>
> 
>     def test_successful(self):
>         _register_uris(self.VERSION, EC2_FILES, EC2_META, OS_FILES)
> >       f = _read_metadata_service()
> 
> tests/unittests/test_datasource/test_openstack.py:143: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> tests/unittests/test_datasource/test_openstack.py:129: in _read_metadata_service
>     return ds.read_metadata_service(BASE_URL, retries=0, timeout=0.1)
> cloudinit/sources/DataSourceOpenStack.py:220: in read_metadata_service
>     return reader.read_v2()
> cloudinit/sources/helpers/openstack.py:266: in read_v2
>     data = self._path_read(path)
> cloudinit/sources/helpers/openstack.py:477: in _path_read
>     response = url_helper.readurl(path,
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d249b490>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> _________________ TestOpenStackDataSource.test_userdata_empty __________________
> 
> self = <tests.unittests.test_datasource.test_openstack.TestOpenStackDataSource testMethod=test_userdata_empty>
> 
>     def test_userdata_empty(self):
>         os_files = copy.deepcopy(OS_FILES)
>         for k in list(os_files.keys()):
>             if k.endswith('user_data'):
>                 os_files.pop(k, None)
>         _register_uris(self.VERSION, {}, {}, os_files)
> >       f = _read_metadata_service()
> 
> tests/unittests/test_datasource/test_openstack.py:196: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> tests/unittests/test_datasource/test_openstack.py:129: in _read_metadata_service
>     return ds.read_metadata_service(BASE_URL, retries=0, timeout=0.1)
> cloudinit/sources/DataSourceOpenStack.py:220: in read_metadata_service
>     return reader.read_v2()
> cloudinit/sources/helpers/openstack.py:266: in read_v2
>     data = self._path_read(path)
> cloudinit/sources/helpers/openstack.py:477: in _path_read
>     response = url_helper.readurl(path,
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71b87e0d90>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ________________ TestOpenStackDataSource.test_vendordata_empty _________________
> 
> self = <tests.unittests.test_datasource.test_openstack.TestOpenStackDataSource testMethod=test_vendordata_empty>
> 
>     def test_vendordata_empty(self):
>         os_files = copy.deepcopy(OS_FILES)
>         for k in list(os_files.keys()):
>             if k.endswith('vendor_data.json'):
>                 os_files.pop(k, None)
>         _register_uris(self.VERSION, {}, {}, os_files)
> >       f = _read_metadata_service()
> 
> tests/unittests/test_datasource/test_openstack.py:208: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> tests/unittests/test_datasource/test_openstack.py:129: in _read_metadata_service
>     return ds.read_metadata_service(BASE_URL, retries=0, timeout=0.1)
> cloudinit/sources/DataSourceOpenStack.py:220: in read_metadata_service
>     return reader.read_v2()
> cloudinit/sources/helpers/openstack.py:266: in read_v2
>     data = self._path_read(path)
> cloudinit/sources/helpers/openstack.py:477: in _path_read
>     response = url_helper.readurl(path,
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d2568820>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> _______________ TestOpenStackDataSource.test_vendordata_invalid ________________
> 
> self = <tests.unittests.test_datasource.test_openstack.TestOpenStackDataSource testMethod=test_vendordata_invalid>
> 
>     def test_vendordata_invalid(self):
>         os_files = copy.deepcopy(OS_FILES)
>         for k in list(os_files.keys()):
>             if k.endswith('vendor_data.json'):
>                 os_files[k] = '{'  # some invalid json
>         _register_uris(self.VERSION, {}, {}, os_files)
> >       self.assertRaises(BrokenMetadata, _read_metadata_service)
> 
> tests/unittests/test_datasource/test_openstack.py:219: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> tests/unittests/test_datasource/test_openstack.py:129: in _read_metadata_service
>     return ds.read_metadata_service(BASE_URL, retries=0, timeout=0.1)
> cloudinit/sources/DataSourceOpenStack.py:220: in read_metadata_service
>     return reader.read_v2()
> cloudinit/sources/helpers/openstack.py:266: in read_v2
>     data = self._path_read(path)
> cloudinit/sources/helpers/openstack.py:477: in _path_read
>     response = url_helper.readurl(path,
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> _______ TestOpenStackDataSource.test_wb__crawl_metadata_does_not_persist _______
> 
> self = <tests.unittests.test_datasource.test_openstack.TestOpenStackDataSource testMethod=test_wb__crawl_metadata_does_not_persist>
> 
>     @hp.activate
>     def test_wb__crawl_metadata_does_not_persist(self):
>         """_crawl_metadata returns current metadata and does not cache."""
>         _register_uris(self.VERSION, EC2_FILES, EC2_META, OS_FILES)
>         ds_os = ds.DataSourceOpenStack(
>             settings.CFG_BUILTIN, None, helpers.Paths({'run_dir': self.tmp}))
> >       crawled_data = ds_os._crawl_metadata()
> 
> tests/unittests/test_datasource/test_openstack.py:397: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <cloudinit.sources.DataSourceOpenStack.DataSourceOpenStack object at 0x7f71d2556940>
> 
>     def _crawl_metadata(self):
>         """Crawl metadata service when available.
>     
>         @returns: Dictionary with all metadata discovered for this datasource.
>         @raise: InvalidMetaDataException on unreadable or broken
>             metadata.
>         """
>         try:
>             if not self.wait_for_metadata_service():
> >               raise sources.InvalidMetaDataException(
>                     'No active metadata service found')
> E                   cloudinit.sources.InvalidMetaDataException: No active metadata service found
> 
> cloudinit/sources/DataSourceOpenStack.py:179: InvalidMetaDataException
> ________________ TestMetadataReader.test__find_working_version _________________
> 
> self = <tests.unittests.test_datasource.test_openstack.TestMetadataReader testMethod=test__find_working_version>
> 
>     def test__find_working_version(self):
>         """Test a working version ignores unsupported."""
>         unsup = "2016-11-09"
>         self.register_versions(
>             [openstack.OS_FOLSOM, openstack.OS_LIBERTY, unsup,
>              openstack.OS_LATEST])
> >       self.assertEqual(
>             openstack.OS_LIBERTY,
>             openstack.MetadataReader(self.burl)._find_working_version())
> E       AssertionError: '2015-10-15' != 'latest'
> E       - 2015-10-15
> E       + latest
> 
> tests/unittests/test_datasource/test_openstack.py:614: AssertionError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/6] open 'http://169.254.169.254/openstack' with {'url': 'http://169.254.169.254/openstack', 'allow_redirects': True, 'method': 'GET', 'timeout': 5.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> DEBUG    cloudinit.sources.helpers.openstack:openstack.py:189 Unable to read openstack versions from http://169.254.169.254/ due to: 'Thread' object has no attribute 'isAlive'
> DEBUG    cloudinit.sources.helpers.openstack:openstack.py:204 Selected version 'latest' from []
> ___________________ TestMetadataReader.test_read_v2_os_ocata ___________________
> 
> self = <tests.unittests.test_datasource.test_openstack.TestMetadataReader testMethod=test_read_v2_os_ocata>
> 
>     def test_read_v2_os_ocata(self):
>         """Validate return value of read_v2 for os_ocata data."""
>         md = copy.deepcopy(self.md_base)
>         md['devices'] = []
>         network_data = {'links': [], 'networks': [], 'services': []}
>         vendor_data = {}
>         vendor_data2 = {"static": {}}
>     
>         data = {
>             'meta_data.json': json.dumps(md),
>             'network_data.json': json.dumps(network_data),
>             'vendor_data.json': json.dumps(vendor_data),
>             'vendor_data2.json': json.dumps(vendor_data2),
>         }
>     
>         self.register_versions([openstack.OS_OCATA, openstack.OS_LATEST])
>         self.register_version(openstack.OS_OCATA, data)
>     
>         mock_read_ec2 = test_helpers.mock.MagicMock(
>             return_value={'instance-id': 'unused-ec2'})
>         expected_md = copy.deepcopy(md)
>         expected_md.update(
>             {'instance-id': md['uuid'], 'local-hostname': md['hostname']})
>         expected = {
>             'userdata': '',  # Annoying, no user-data results in empty string.
>             'version': 2,
>             'metadata': expected_md,
>             'vendordata': vendor_data,
>             'networkdata': network_data,
>             'ec2-metadata': mock_read_ec2.return_value,
>             'files': {},
>         }
>         reader = openstack.MetadataReader(self.burl)
>         reader._read_ec2_metadata = mock_read_ec2
> >       self.assertEqual(expected, reader.read_v2())
> 
> tests/unittests/test_datasource/test_openstack.py:660: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/helpers/openstack.py:266: in read_v2
>     data = self._path_read(path)
> cloudinit/sources/helpers/openstack.py:477: in _path_read
>     response = url_helper.readurl(path,
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:392: in _make_request
>     conn.request(method, url, **httplib_request_kw)
> /usr/lib/python3.9/http/client.py:1255: in request
>     self._send_request(method, url, body, headers, encode_chunked)
> /usr/lib/python3.9/http/client.py:1301: in _send_request
>     self.endheaders(body, encode_chunked=encode_chunked)
> /usr/lib/python3.9/http/client.py:1250: in endheaders
>     self._send_output(message_body, encode_chunked=encode_chunked)
> /usr/lib/python3.9/http/client.py:1010: in _send_output
>     self.send(msg)
> /usr/lib/python3.9/http/client.py:971: in send
>     self.sock.sendall(data)
> /usr/lib/python3/dist-packages/httpretty/core.py:544: in sendall
>     self.real_sendall(data)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d28338e0>
> data = b'GET /openstack/latest/meta_data.json HTTP/1.1\r\nHost: 169.254.169.254\r\nUser-Agent: Cloud-Init/20.2\r\nAccept-Encoding: gzip, deflate\r\nAccept: */*\r\nConnection: keep-alive\r\n\r\n'
> args = (), kw = {}
> 
>     def real_sendall(self, data, *args, **kw):
>         """Sends data to the remote server. This method is called
>         when HTTPretty identifies that someone is trying to send
>         non-http data.
>     
>         The received bytes are written in this socket's tempfile
>         buffer so that HTTPretty can return it accordingly when
>         necessary.
>         """
>         if not self.truesock:
> >           raise UnmockedError()
> E           httpretty.errors.UnmockedError: No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:453: UnmockedError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/6] open 'http://169.254.169.254/openstack' with {'url': 'http://169.254.169.254/openstack', 'allow_redirects': True, 'method': 'GET', 'timeout': 5.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> DEBUG    cloudinit.sources.helpers.openstack:openstack.py:189 Unable to read openstack versions from http://169.254.169.254/ due to: 'Thread' object has no attribute 'isAlive'
> DEBUG    cloudinit.sources.helpers.openstack:openstack.py:204 Selected version 'latest' from []
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/6] open 'http://169.254.169.254/openstack/latest/meta_data.json' with {'url': 'http://169.254.169.254/openstack/latest/meta_data.json', 'allow_redirects': True, 'method': 'GET', 'timeout': 5.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> ___________________ TestDataSourceScaleway.test_metadata_404 ___________________
> 
> self = <tests.unittests.test_datasource.test_scaleway.TestDataSourceScaleway testMethod=test_metadata_404>
> sleep = <MagicMock name='sleep' id='140126838784160'>
> m_get_cmdline = <MagicMock name='get_cmdline' id='140126401547616'>
> dhcpv4 = <MagicMock name='EphemeralDHCPv4' id='140126838504752'>
> 
>     @mock.patch('cloudinit.sources.DataSourceScaleway.EphemeralDHCPv4')
>     @mock.patch('cloudinit.sources.DataSourceScaleway.SourceAddressAdapter',
>                 get_source_address_adapter)
>     @mock.patch('cloudinit.util.get_cmdline')
>     @mock.patch('time.sleep', return_value=None)
>     def test_metadata_404(self, sleep, m_get_cmdline, dhcpv4):
>         """
>         get_data() returns metadata, but no user data nor vendor data.
>         """
>         m_get_cmdline.return_value = 'scaleway'
>     
>         # Make user and vendor data APIs return HTTP/404, which means there is
>         # no user / vendor data for the server.
>         httpretty.register_uri(httpretty.GET, self.metadata_url,
>                                body=MetadataResponses.get_ok)
>         httpretty.register_uri(httpretty.GET, self.userdata_url,
>                                body=DataResponses.empty)
>         httpretty.register_uri(httpretty.GET, self.vendordata_url,
>                                body=DataResponses.empty)
> >       self.datasource.get_data()
> 
> tests/unittests/test_datasource/test_scaleway.py:309: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceScaleway.py:216: in _get_data
>     util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceScaleway.py:194: in _crawl_metadata
>     resp = url_helper.readurl(self.metadata_address,
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d26e74f0>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/6] open 'http://169.254.42.42/conf?format=json' with {'url': 'http://169.254.42.42/conf?format=json', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.42.42:80
> DEBUG    cloudinit.sources.DataSourceScaleway:util.py:2635 Crawl of metadata service took 0.002 seconds
> ___________________ TestDataSourceScaleway.test_metadata_ok ____________________
> 
> self = <tests.unittests.test_datasource.test_scaleway.TestDataSourceScaleway testMethod=test_metadata_ok>
> sleep = <MagicMock name='sleep' id='140126400455392'>
> m_get_cmdline = <MagicMock name='get_cmdline' id='140126838979888'>
> dhcpv4 = <MagicMock name='EphemeralDHCPv4' id='140126837285168'>
> 
>     @mock.patch('cloudinit.sources.DataSourceScaleway.EphemeralDHCPv4')
>     @mock.patch('cloudinit.sources.DataSourceScaleway.SourceAddressAdapter',
>                 get_source_address_adapter)
>     @mock.patch('cloudinit.util.get_cmdline')
>     @mock.patch('time.sleep', return_value=None)
>     def test_metadata_ok(self, sleep, m_get_cmdline, dhcpv4):
>         """
>         get_data() returns metadata, user data and vendor data.
>         """
>         m_get_cmdline.return_value = 'scaleway'
>     
>         # Make user data API return a valid response
>         httpretty.register_uri(httpretty.GET, self.metadata_url,
>                                body=MetadataResponses.get_ok)
>         httpretty.register_uri(httpretty.GET, self.userdata_url,
>                                body=DataResponses.get_ok)
>         httpretty.register_uri(httpretty.GET, self.vendordata_url,
>                                body=DataResponses.get_ok)
> >       self.datasource.get_data()
> 
> tests/unittests/test_datasource/test_scaleway.py:207: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceScaleway.py:216: in _get_data
>     util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceScaleway.py:194: in _crawl_metadata
>     resp = url_helper.readurl(self.metadata_address,
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d2768ee0>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/6] open 'http://169.254.42.42/conf?format=json' with {'url': 'http://169.254.42.42/conf?format=json', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.42.42:80
> DEBUG    cloudinit.sources.DataSourceScaleway:util.py:2635 Crawl of metadata service took 0.002 seconds
> _______________ TestDataSourceScaleway.test_metadata_rate_limit ________________
> 
> self = <tests.unittests.test_datasource.test_scaleway.TestDataSourceScaleway testMethod=test_metadata_rate_limit>
> sleep = <MagicMock name='sleep' id='140126837624784'>
> m_get_cmdline = <MagicMock name='get_cmdline' id='140126839758800'>
> dhcpv4 = <MagicMock name='EphemeralDHCPv4' id='140126849590656'>
> 
>     @mock.patch('cloudinit.sources.DataSourceScaleway.EphemeralDHCPv4')
>     @mock.patch('cloudinit.sources.DataSourceScaleway.SourceAddressAdapter',
>                 get_source_address_adapter)
>     @mock.patch('cloudinit.util.get_cmdline')
>     @mock.patch('time.sleep', return_value=None)
>     def test_metadata_rate_limit(self, sleep, m_get_cmdline, dhcpv4):
>         """
>         get_data() is rate limited two times by the metadata API when fetching
>         user data.
>         """
>         m_get_cmdline.return_value = 'scaleway'
>     
>         httpretty.register_uri(httpretty.GET, self.metadata_url,
>                                body=MetadataResponses.get_ok)
>         httpretty.register_uri(httpretty.GET, self.vendordata_url,
>                                body=DataResponses.empty)
>     
>         httpretty.register_uri(
>             httpretty.GET, self.userdata_url,
>             responses=[
>                 httpretty.Response(body=DataResponses.rate_limited),
>                 httpretty.Response(body=DataResponses.rate_limited),
>                 httpretty.Response(body=DataResponses.get_ok),
>             ]
>         )
> >       self.datasource.get_data()
> 
> tests/unittests/test_datasource/test_scaleway.py:339: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceScaleway.py:216: in _get_data
>     util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceScaleway.py:194: in _crawl_metadata
>     resp = url_helper.readurl(self.metadata_address,
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d0066ca0>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/6] open 'http://169.254.42.42/conf?format=json' with {'url': 'http://169.254.42.42/conf?format=json', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.42.42:80
> DEBUG    cloudinit.sources.DataSourceScaleway:util.py:2635 Crawl of metadata service took 0.002 seconds
> __ TestInstallChefOmnibus.test_install_chef_from_omnibus_has_omnibus_version ___
> 
> self = <tests.unittests.test_handler.test_handler_chef.TestInstallChefOmnibus testMethod=test_install_chef_from_omnibus_has_omnibus_version>
> m_subp_blob = <MagicMock name='subp_blob_in_tempfile' id='140126837139728'>
> 
>     @mock.patch("cloudinit.config.cc_chef.OMNIBUS_URL", OMNIBUS_URL_HTTP)
>     @mock.patch('cloudinit.config.cc_chef.util.subp_blob_in_tempfile')
>     def test_install_chef_from_omnibus_has_omnibus_version(self, m_subp_blob):
>         """install_chef_from_omnibus provides version arg to OMNIBUS_URL."""
>         chef_outfile = self.tmp_path('chef.out', self.new_root)
>         response = '#!/bin/bash\necho "Hi Mom" > {0}'.format(chef_outfile)
>         httpretty.register_uri(
>             httpretty.GET, cc_chef.OMNIBUS_URL, body=response)
> >       cc_chef.install_chef_from_omnibus(omnibus_version='2.0')
> 
> tests/unittests/test_handler/test_handler_chef.py:91: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/config/cc_chef.py:305: in install_chef_from_omnibus
>     content = url_helper.readurl(url=url, retries=retries).contents
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71b879d9a0>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/6] open 'http://www.chef.io/chef/install.sh' with {'url': 'http://www.chef.io/chef/install.sh', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): www.chef.io:80
> _ TestInstallChefOmnibus.test_install_chef_from_omnibus_runs_chef_url_content __
> 
> self = <tests.unittests.test_handler.test_handler_chef.TestInstallChefOmnibus testMethod=test_install_chef_from_omnibus_runs_chef_url_content>
> 
>     @mock.patch("cloudinit.config.cc_chef.OMNIBUS_URL", OMNIBUS_URL_HTTP)
>     def test_install_chef_from_omnibus_runs_chef_url_content(self):
>         """install_chef_from_omnibus calls subp_blob_in_tempfile."""
>         response = b'#!/bin/bash\necho "Hi Mom"'
>         httpretty.register_uri(
>             httpretty.GET, cc_chef.OMNIBUS_URL, body=response, status=200)
>         ret = (None, None)  # stdout, stderr but capture=False
>     
>         with mock.patch("cloudinit.config.cc_chef.util.subp_blob_in_tempfile",
>                         return_value=ret) as m_subp_blob:
> >           cc_chef.install_chef_from_omnibus()
> 
> tests/unittests/test_handler/test_handler_chef.py:46: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/config/cc_chef.py:305: in install_chef_from_omnibus
>     content = url_helper.readurl(url=url, retries=retries).contents
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d245cf70>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/6] open 'http://www.chef.io/chef/install.sh' with {'url': 'http://www.chef.io/chef/install.sh', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): www.chef.io:80
> =============================== warnings summary ===============================
> tests/unittests/test_handler/test_handler_puppet.py::TestPuppetHandle::test_handler_puppet_config_updates_puppet_conf
>   /<<PKGBUILDDIR>>/cloudinit/config/cc_puppet.py:162: DeprecationWarning: This method will be removed in future versions.  Use 'parser.read_file()' instead.
>     puppet_config.readfp(  # pylint: disable=W1505
> 
> -- Docs: https://docs.pytest.org/en/latest/warnings.html
> ====== 65 failed, 1560 passed, 19 skipped, 1 warnings in 2299.04 seconds =======
> make[1]: *** [debian/rules:16: override_dh_auto_test] Error 1

The full build log is available from:
   http://qa-logs.debian.net/2020/10/27/cloud-init_20.2-2_unstable.log

A list of current common problems and possible solutions is available at
http://wiki.debian.org/qa.debian.org/FTBFS . You're welcome to contribute!

About the archive rebuild: The rebuild was done on EC2 VM instances from
Amazon Web Services, using a clean, minimal and up-to-date chroot. Every
failed build was retried once to eliminate random failures.

--- End Message ---
--- Begin Message ---
Source: cloud-init
Source-Version: 20.2-3
Done: Thomas Goirand <zigo@debian.org>

We believe that the bug you reported is fixed in the latest version of
cloud-init, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to 973062@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Thomas Goirand <zigo@debian.org> (supplier of updated cloud-init package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmaster@ftp-master.debian.org)


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Format: 1.8
Date: Wed, 28 Oct 2020 18:23:20 +0100
Source: cloud-init
Architecture: source
Version: 20.2-3
Distribution: unstable
Urgency: medium
Maintainer: Debian Cloud Team <debian-cloud@lists.debian.org>
Changed-By: Thomas Goirand <zigo@debian.org>
Closes: 973062
Changes:
 cloud-init (20.2-3) unstable; urgency=medium
 .
   * Ignore all of test_datasource/test_opennebula.py, as tests are failing
     under Python 3.9, and I don't think anyone cares about opennebula anymore.
     Anyone willing to fix is welcome to send a MR. (Closes: #973062)
Checksums-Sha1:
 b099115483b9a155bd6ba5dafae5a1ae99d0e619 2374 cloud-init_20.2-3.dsc
 557be403a5cc1a96948b6757ae51e42af4663178 24680 cloud-init_20.2-3.debian.tar.xz
 d2683c4698b88048a5eb895882ac757b1b215965 8332 cloud-init_20.2-3_amd64.buildinfo
Checksums-Sha256:
 99145f7ce26715f2144c936c38d0dcfe618601eae0203972c2107205c6a18ff2 2374 cloud-init_20.2-3.dsc
 079a43dfaeaf6338b4d64c7c726a258d7355db96cdf9549d101cd2756ebf6902 24680 cloud-init_20.2-3.debian.tar.xz
 771dbf7914ad5c2e78e199127055fa038e6cb9fc141703ea12d6fca2e2b6e664 8332 cloud-init_20.2-3_amd64.buildinfo
Files:
 babf68206f88193b5ce718c68c61a22f 2374 admin optional cloud-init_20.2-3.dsc
 a7b1df29251e73b9ebf8642dbfdda623 24680 admin optional cloud-init_20.2-3.debian.tar.xz
 48a0c303a604a5cbdf4fe0f4ded21330 8332 admin optional cloud-init_20.2-3_amd64.buildinfo

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEoLGp81CJVhMOekJc1BatFaxrQ/4FAl+Zqw0ACgkQ1BatFaxr
Q/554A/+LryqOiixuPnp8cBN5UNtGF0Plg3t4+kBQwZCUjKVXLViftZb+J41oODU
Uk4k/dyLO/wiSKbn20/inxGSE5xz1WgglC1SLsdF1RppdNoFnmUec2AWpUVFZZ7D
F/TIZFruBo5PVX5v4guTmKKe11QVNKE8QYZNPYW5DLPcQYCHVAm173qq/EbQqo7v
T2+tq97JK773xlW+lCuiBAAL23TbpvWIFg6ukJVvv5HnmbA5211LhvM2QzwxZPgW
vHqFK2QuEEEplJyVRS1516fbkHMsdIesXHyLg6mFSTLF3ptFvtRDSQgXUEViXVkQ
Dcg+jU4kQx3Cw6gIA4EUqeGFiLyKBQvTGXGqiUqbgy4l70ZgYSRVOEo/lzTYN7cP
M5+mQqizw06HLaUcxBDtmmley2KgJu9nMzwju9vdx/w+4pHSpuZXdcBmeEaXgiOD
DPLk6mRxlUN0722u9RaIJtwJTFUEicDRcUgPqN1+astlV96hqGpY9uRkhpUzhfO6
eu8tQrwlBtCRzeJbFaVTwXKyyMlIqN/3tIgvyXtV1CU5TYTbCv9OecZ719RCAiOu
BUEEz98hN8rXU0b7tUIV2hOHJElo19vzM8rZ5r4uZHWLjcM09KOCrG7kxGSmM1Oq
oDIZbuL2JUiPWlNyUaINlta6+vjbU50drbEX7HtO3F/x3d8FNes=
=Ayko
-----END PGP SIGNATURE-----

--- End Message ---

Reply to: