diff --git a/pytest_fixtures/component/provision_pxe.py b/pytest_fixtures/component/provision_pxe.py index ffd93d847a7..4878a9d4671 100644 --- a/pytest_fixtures/component/provision_pxe.py +++ b/pytest_fixtures/component/provision_pxe.py @@ -172,23 +172,25 @@ def module_provisioning_sat( ) broker_data_out = Box(**broker_data_out['data_out']) - provisioning_interface = ipaddress.ip_interface(broker_data_out.provisioning_addr_ipv4) + provisioning_interface = ipaddress.ip_interface(broker_data_out.provisioning_addr_ip) provisioning_network = provisioning_interface.network # TODO: investigate DNS setup issue on Satellite, # we might need to set up Sat's DNS server as the primary one on the Sat host provisioning_upstream_dns_primary = ( - broker_data_out.provisioning_upstream_dns.pop() + broker_data_out.provisioning_upstream_dns + if settings.server.is_ipv6 + else broker_data_out.provisioning_upstream_dns.pop() ) # There should always be at least one upstream DNS provisioning_upstream_dns_secondary = ( broker_data_out.provisioning_upstream_dns.pop() - if len(broker_data_out.provisioning_upstream_dns) + if len(broker_data_out.provisioning_upstream_dns) and not settings.server.is_ipv6 else None ) domain = sat.api.Domain( location=[module_location], organization=[module_sca_manifest_org], - dns=module_provisioning_capsule.id, + dns=None if settings.server.is_ipv6 else module_provisioning_capsule.id, name=provisioning_domain_name, ).create() @@ -196,18 +198,19 @@ def module_provisioning_sat( location=[module_location], organization=[module_sca_manifest_org], network=str(provisioning_network.network_address), + network_type='IPv6' if settings.server.is_ipv6 else 'IPv4', mask=str(provisioning_network.netmask), - gateway=broker_data_out.provisioning_gw_ipv4, + gateway=broker_data_out.provisioning_gw_ip, from_=broker_data_out.provisioning_host_range_start, to=broker_data_out.provisioning_host_range_end, dns_primary=provisioning_upstream_dns_primary, dns_secondary=provisioning_upstream_dns_secondary, boot_mode='DHCP', - ipam='DHCP', - dhcp=module_provisioning_capsule.id, + ipam='None' if settings.server.is_ipv6 else 'DHCP', + dhcp=None if settings.server.is_ipv6 else module_provisioning_capsule.id, tftp=module_provisioning_capsule.id, template=module_provisioning_capsule.id, - dns=module_provisioning_capsule.id, + dns=None if settings.server.is_ipv6 else module_provisioning_capsule.id, httpboot=module_provisioning_capsule.id, discovery=module_provisioning_capsule.id, remote_execution_proxy=[module_provisioning_capsule.id], @@ -249,6 +252,20 @@ def provisioning_host(module_ssh_key_file, pxe_loader, module_provisioning_sat): prov_host.blank = getattr(prov_host, 'blank', False) +@pytest.fixture(scope='module') +def configure_kea_dhcp6_server(): + if settings.server.is_ipv6: + kea_host = Broker( + workflow='configure-kea-dhcp6', + artifacts='last', + host_class=ContentHost, + blank=True, + target_vlan_id=settings.provisioning.vlan_id, + ).execute() + yield kea_host + Broker(workflow='remove-vm', source_vm=kea_host['_broker_facts']['name'][0]).execute() + + @pytest.fixture def provisioning_hostgroup( module_provisioning_sat, diff --git a/pytest_plugins/fixture_markers.py b/pytest_plugins/fixture_markers.py index c2570ec921a..106564fd7dc 100644 --- a/pytest_plugins/fixture_markers.py +++ b/pytest_plugins/fixture_markers.py @@ -10,6 +10,7 @@ 'content_hosts', 'module_provisioning_rhel_content', 'capsule_provisioning_rhel_content', + 'configure_kea_dhcp6_server', 'module_sync_kickstart_content', 'rex_contenthost', 'rex_contenthosts', diff --git a/pytest_plugins/infra_dependent_markers.py b/pytest_plugins/infra_dependent_markers.py index cdd854bc7ee..b246849b3d9 100644 --- a/pytest_plugins/infra_dependent_markers.py +++ b/pytest_plugins/infra_dependent_markers.py @@ -5,6 +5,7 @@ def pytest_configure(config): """Register custom markers to avoid warnings.""" markers = [ "on_premises_provisioning: Tests that runs on on_premises Providers", + "ipv6_provisioning: Tests for IPv6 provisioning" "libvirt_discovery: Tests depends on Libvirt Provider for discovery", "external_auth: External Authentication tests", "vlan_networking: Tests depends on static predefined vlan networking etc", diff --git a/pytest_plugins/marker_deselection.py b/pytest_plugins/marker_deselection.py index ee2cd4c1485..73fdba59db9 100644 --- a/pytest_plugins/marker_deselection.py +++ b/pytest_plugins/marker_deselection.py @@ -9,6 +9,7 @@ def pytest_addoption(parser): """Add options for pytest to collect tests than can run on SatLab infra""" infra_options = [ '--include-onprem-provisioning', + '--include-ipv6-provisioning', '--include-libvirt', '--include-external-auth', '--include-vlan-networking', @@ -34,6 +35,7 @@ def pytest_collection_modifyitems(items, config): Collects and modifies tests collection based on pytest option to deselect tests for new infra """ include_onprem_provision = config.getoption('include_onprem_provisioning', False) + include_ipv6_provisioning = config.getoption('include_ipv6_provisioning', False) include_libvirt = config.getoption('include_libvirt', False) include_eauth = config.getoption('include_external_auth', False) include_vlan = config.getoption('include_vlan_networking', False) @@ -59,6 +61,10 @@ def pytest_collection_modifyitems(items, config): if 'on_premises_provisioning' in item_marks: selected.append(item) if include_onprem_provision else deselected.append(item) continue + # Include / Exclude IPv6 Provisioning Tests + if 'ipv6_provisioning' in item_marks: + selected.append(item) if include_ipv6_provisioning else deselected.append(item) + continue # Include / Exclude External Libvirt based Tests if 'libvirt_discovery' in item_marks: selected.append(item) if include_libvirt else deselected.append(item) @@ -67,7 +73,7 @@ def pytest_collection_modifyitems(items, config): if 'external_auth' in item_marks: selected.append(item) if include_eauth else deselected.append(item) continue - # Include / Exclude VLAN networking based based Tests + # Include / Exclude VLAN networking based Tests if 'vlan_networking' in item_marks: selected.append(item) if include_vlan else deselected.append(item) continue diff --git a/tests/foreman/api/test_provisioning.py b/tests/foreman/api/test_provisioning.py index ef3a1eb8ea4..f78f12b2391 100644 --- a/tests/foreman/api/test_provisioning.py +++ b/tests/foreman/api/test_provisioning.py @@ -64,11 +64,13 @@ def assert_host_logs(channel, pattern): @pytest.mark.e2e @pytest.mark.upgrade @pytest.mark.parametrize('pxe_loader', ['bios', 'uefi'], indirect=True) +@pytest.mark.ipv6_provisioning @pytest.mark.on_premises_provisioning @pytest.mark.rhel_ver_match(r'^(?!.*fips).*$') def test_rhel_pxe_provisioning( request, module_provisioning_sat, + configure_kea_dhcp6_server, module_sca_manifest_org, module_location, provisioning_host, @@ -98,8 +100,16 @@ def test_rhel_pxe_provisioning( :parametrized: yes """ + + if pxe_loader.vm_firmware == 'bios': + pytest.skip('Test cannot be run on BIOS as its not supported') host_mac_addr = provisioning_host._broker_facts['provisioning_nic_mac_addr'] sat = module_provisioning_sat.sat + # Configure the grubx64.efi image to setup the interface and use TFTP to load the configuration + sat.execute('net_bootp6\nset root=tftp\nset prefix=(tftp)/grub2 > pre.cfg') + sat.execute( + 'grub2-mkimage -c pre.cfg -o /var/lib/tftpboot/grub2/grubx64.efi -p /grub2/ -O x86_64-efi efinet efi_netfs efienv efifwsetup efi_gop tftp net normal chain configfile loadenv procfs romfs' + ) host = sat.api.Host( hostgroup=provisioning_hostgroup, organization=module_sca_manifest_org, @@ -848,3 +858,11 @@ def test_rhel_provisioning_using_realm(): :CaseAutomation: NotAutomated """ + + +# @pytest.mark.ipv6_provisioning +# @pytest.mark.rhel_ver_match('9') +# @pytest.mark.parametrize('pxe_loader', ['uefi'], indirect=True) +# def test_123(configure_kea_dhcp6_server,pxe_loader): +# print("test") +# print("end test")