diff --git a/lib/cloudregister/registerutils.py b/lib/cloudregister/registerutils.py index 173b499..cd5cd21 100644 --- a/lib/cloudregister/registerutils.py +++ b/lib/cloudregister/registerutils.py @@ -56,10 +56,12 @@ def add_hosts_entry(smt_server): smt_ip = smt_server.get_ipv4() if has_ipv6_access(smt_server): smt_ip = smt_server.get_ipv6() - entry = '%s\t%s\t%s\n' % ( + entry = '%s\t%s\t%s\n%s\t%s\n' % ( smt_ip, smt_server.get_FQDN(), - smt_server.get_name() + smt_server.get_name(), + smt_ip, + smt_server.get_registry_FQDN() ) with open('/etc/hosts', 'a') as hosts_file: hosts_file.write(smt_hosts_entry_comment) @@ -86,10 +88,12 @@ def add_region_server_args_to_URL(api, cfg): # ---------------------------------------------------------------------------- -def clean_hosts_file(domain_name): +def clean_hosts_file(domain_name, registry_name): """Remove the smt server entry from the /etc/hosts file""" if isinstance(domain_name, str): domain_name = domain_name.encode() + if isinstance(registry_name, str): + registry_name = registry_name.encode() new_hosts_content = [] # Handle entries as bytes, # Yes, users put non ascii characters into /etc/hosts @@ -97,12 +101,17 @@ def clean_hosts_file(domain_name): content = hosts_file.readlines() smt_announce_found = None + smt_domain_found = None for entry in content: if b'# Added by SMT' in entry: smt_announce_found = True continue if smt_announce_found and domain_name in entry: smt_announce_found = False + smt_domain_found = True + continue + if smt_domain_found and registry_name in entry: + smt_domain_found = False continue new_hosts_content.append(entry) @@ -790,7 +799,7 @@ def get_smt(cache_refreshed=None): '"%s"' % str((server.get_ipv4(), server.get_ipv6())) ) # Assume the new server is in the same domain - clean_hosts_file(server.get_FQDN()) + clean_hosts_file(server.get_FQDN(), server.get_registry_FQDN()) add_hosts_entry(server) set_as_current_smt(server) return server @@ -1293,7 +1302,7 @@ def remove_registration_data(): logging.warning('Unable to remove client registration from server') logging.warning(e) logging.info('Continue with local artifact removal') - clean_hosts_file(domain_name) + clean_hosts_file(domain_name, smt.get_registry_FQDN()) __remove_repo_artifacts(server_name) os.unlink(smt_data_file) if is_scc_connected(): @@ -1327,7 +1336,7 @@ def remove_registration_data(): # ---------------------------------------------------------------------------- def replace_hosts_entry(current_smt, new_smt): - clean_hosts_file(current_smt.get_FQDN()) + clean_hosts_file(current_smt.get_FQDN(), current_smt.get_registry_FQDN()) add_hosts_entry(new_smt) diff --git a/lib/cloudregister/smt.py b/lib/cloudregister/smt.py index 5969eec..0d68ed9 100644 --- a/lib/cloudregister/smt.py +++ b/lib/cloudregister/smt.py @@ -40,6 +40,7 @@ def __init__(self, smtXMLNode, https_only=False): except KeyError: self._region = 'unknown' self._fqdn = smtXMLNode.attrib['SMTserverName'] + self._registry_fqdn = smtXMLNode.attrib['SMTregistryName'] self._fingerprint = smtXMLNode.attrib['fingerprint'] self._cert = None self._cert_names = ('smt.crt', 'rmt.crt') @@ -56,6 +57,7 @@ def __eq__(self, other_smt): self.get_ipv4() == other_smt.get_ipv4() and self.get_ipv6() == other_smt.get_ipv6() and self.get_FQDN() == other_smt.get_FQDN() and + self.get_registry_FQDN() == other_smt.get_registry_FQDN() and self.get_fingerprint() == other_smt.get_fingerprint() and self.get_region() == other_smt.get_region() ): @@ -94,6 +96,11 @@ def get_FQDN(self): """Return the fully qualified domain name""" return self._fqdn + # -------------------------------------------------------------------- + def get_registry_FQDN(self): + """Return the fully qualified domain registry name""" + return self._registry_fqdn + # -------------------------------------------------------------------- def get_name(self): """Return the name""" diff --git a/tests/test_registerutils.py b/tests/test_registerutils.py index f4829ff..f0fe5cc 100644 --- a/tests/test_registerutils.py +++ b/tests/test_registerutils.py @@ -238,6 +238,7 @@ def test_has_rmt_in_hosts_has_ipv4(): # simulates hosts file containing the ipv4 we are looking for in the test 1.1.1.1 smt-foo.susecloud.net smt-foo + 1.1.1.1 registry-foo.susecloud.net """ server = MockServer() with mock.patch('builtins.open', mock.mock_open(read_data=hosts_content)): @@ -252,7 +253,9 @@ def test_has_rmt_in_hosts_has_ipv4_6(): # in the test 1.1.1.1 smt-foo.susecloud.net smt-foo + 1.1.1.1 registry-foo.susecloud.net 11:22:33:44::00 smt-foo.susecloud.net smt-foo + 11:22:33:44::00 registry-foo.susecloud.net """ server = MockServer() with mock.patch('builtins.open', mock.mock_open(read_data=hosts_content)): @@ -323,6 +326,7 @@ def test_clean_host_file_no_empty_bottom_lines(): # Added by SMT, please, do NOT remove this line 2.3.4.5 smt-entry.susecloud.net smt-entry +2.3.4.5 registry-entry.susecloud.net 4.3.2.1 another_entry.whatever.com another_entry""" expected_cleaned_hosts = """ @@ -333,7 +337,7 @@ def test_clean_host_file_no_empty_bottom_lines(): 4.3.2.1 another_entry.whatever.com another_entry""" with mock.patch('builtins.open', mock.mock_open(read_data=hosts_content.encode())) as m: # noqa: E501 - utils.clean_hosts_file('smt-entry') + utils.clean_hosts_file('smt-entry', 'registry-entry') expected_write_calls = [] expected_lines = expected_cleaned_hosts.split('\n') @@ -356,6 +360,7 @@ def test_clean_host_file_one_empty_bottom_line(): # Added by SMT, please, do NOT remove this line 2.3.4.5 smt-entry.susecloud.net smt-entry +2.3.4.5 registry-entry.susecloud.net 4.3.2.1 another_entry.whatever.com another_entry """ @@ -368,7 +373,7 @@ def test_clean_host_file_one_empty_bottom_line(): 4.3.2.1 another_entry.whatever.com another_entry """ with mock.patch('builtins.open', mock.mock_open(read_data=hosts_content.encode())) as m: # noqa: E501 - utils.clean_hosts_file('smt-entry'.encode()) + utils.clean_hosts_file('smt-entry'.encode(), 'registry-entry'.encode()) expected_write_calls = [] expected_lines = expected_cleaned_hosts.split('\n') @@ -391,6 +396,7 @@ def test_clean_host_file_some_empty_bottom_lines(): # Added by SMT, please, do NOT remove this line 2.3.4.5 smt-entry.susecloud.net smt-entry +2.3.4.5 registry-entry.susecloud.net 4.3.2.1 another_entry.whatever.com another_entry @@ -406,7 +412,7 @@ def test_clean_host_file_some_empty_bottom_lines(): 4.3.2.1 another_entry.whatever.com another_entry """ with mock.patch('builtins.open', mock.mock_open(read_data=hosts_content.encode())) as m: # noqa: E501 - utils.clean_hosts_file('smt-entry'.encode()) + utils.clean_hosts_file('smt-entry'.encode(), 'registry-entry'.encode()) expected_write_calls = [] expected_lines = expected_cleaned_hosts.split('\n') @@ -432,7 +438,7 @@ def test_clean_host_file_some_empty_bottom_lines_smt_entry_is_last(): # Added by SMT, please, do NOT remove this line 2.3.4.5 smt-entry.susecloud.net smt-entry - +2.3.4.5 registry-entry.susecloud.net """ @@ -446,7 +452,7 @@ def test_clean_host_file_some_empty_bottom_lines_smt_entry_is_last(): """ with mock.patch('builtins.open', mock.mock_open(read_data=hosts_content.encode())) as m: # noqa: E501 - utils.clean_hosts_file('smt-entry'.encode()) + utils.clean_hosts_file('smt-entry'.encode(), 'registry-entry'.encode()) expected_write_calls = [] expected_lines = expected_cleaned_hosts.split('\n') @@ -472,6 +478,8 @@ def test_clean_host_file_one_empty_bottom_lines_smt_entry_is_last(): # Added by SMT, please, do NOT remove this line 2.3.4.5 smt-entry.susecloud.net smt-entry +2.3.4.5 registry-entry.susecloud.net + """ expected_cleaned_hosts = """ @@ -484,7 +492,7 @@ def test_clean_host_file_one_empty_bottom_lines_smt_entry_is_last(): """ with mock.patch('builtins.open', mock.mock_open(read_data=hosts_content.encode())) as m: # noqa: E501 - utils.clean_hosts_file('smt-entry'.encode()) + utils.clean_hosts_file('smt-entry'.encode(), 'registry-entry'.encode()) expected_write_calls = [] expected_lines = expected_cleaned_hosts.split('\n') @@ -509,7 +517,8 @@ def test_clean_host_file_no_empty_bottom_lines_smt_entry_is_last(): 4.3.2.1 another_entry.whatever.com another_entry # Added by SMT, please, do NOT remove this line -2.3.4.5 smt-entry.susecloud.net smt-entry""" +2.3.4.5 smt-entry.susecloud.net smt-entry +2.3.4.5 registry-entry.susecloud.net""" expected_cleaned_hosts = """ # simulates hosts file containing the ipv6 we are looking for in the test @@ -519,7 +528,7 @@ def test_clean_host_file_no_empty_bottom_lines_smt_entry_is_last(): 4.3.2.1 another_entry.whatever.com another_entry """ with mock.patch('builtins.open', mock.mock_open(read_data=hosts_content.encode())) as m: # noqa: E501 - utils.clean_hosts_file('smt-entry'.encode()) + utils.clean_hosts_file('smt-entry'.encode(), 'registry-entry'.encode()) expected_write_calls = [] expected_lines = expected_cleaned_hosts.split('\n') @@ -537,7 +546,7 @@ def test_clean_host_file_no_empty_bottom_lines_smt_entry_is_last(): def test_clean_host_file_raised_exception(): hosts_content = "" with mock.patch('builtins.open', mock.mock_open(read_data=hosts_content.encode())) as m: # noqa: E501 - utils.clean_hosts_file('smt-entry') + utils.clean_hosts_file('smt-entry', ''.encode()) assert m().write.mock_calls == [] @@ -550,6 +559,7 @@ def test_add_hosts_entry(mock_has_ipv6_access): SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="fantasy.example.com" + SMTregistryName="registry-fantasy.example.com" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) @@ -563,10 +573,14 @@ def test_add_hosts_entry(mock_has_ipv6_access): '\n# Added by SMT registration do not remove, ' 'retain comment as well\n' ) - file_content_entry = '{ip}\t{fqdn}\t{name}\n'.format( - ip=smt_server.get_ipv6(), - fqdn=smt_server.get_FQDN(), - name=smt_server.get_name() + file_content_entry = ( + '{ip}\t{fqdn}\t{name}\n{ip_reg}\t{reg_name}\n'.format( + ip=smt_server.get_ipv6(), + fqdn=smt_server.get_FQDN(), + name=smt_server.get_name(), + ip_reg=smt_server.get_ipv6(), + reg_name=smt_server.get_registry_FQDN() + ) ) assert file_handle.write.mock_calls == [ call(file_content_comment), @@ -995,12 +1009,14 @@ def test_find_equivalent_smt_server(mock_is_responsive): SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="fantasy.example.com" + SMTregistryName="registry-fantasy.example.com" region="antarctica-1"/>''') smt_data_ipv46_2 = dedent('''\ ''') smt_a = SMT(etree.fromstring(smt_data_ipv46)) smt_b = SMT(etree.fromstring(smt_data_ipv46_2)) @@ -1031,6 +1047,7 @@ def test_get_activations_no_user_pass( SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="fantasy.example.com" + SMTregistryName="registry-fantasy.example.com" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) mock_get_smt.return_value = smt_server @@ -1064,6 +1081,7 @@ def test_get_activations_request_wrong( SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="fantasy.example.com" + SMTregistryName="registry-fantasy.example.com" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) mock_get_smt.return_value = smt_server @@ -1113,6 +1131,7 @@ def test_get_activations_request_OK( SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="fantasy.example.com" + SMTregistryName="registry-fantasy.example.com" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) mock_get_smt.return_value = smt_server @@ -1165,6 +1184,7 @@ def test_get_credentials_file_no_file(mock_logging, mock_glob): SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="fantasy.example.com" + SMTregistryName="registry-fantasy.example.com" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) utils.get_credentials_file(smt_server, 'bar') @@ -1188,6 +1208,7 @@ def test_get_credentials_two_files(mock_logging, mock_glob): SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="fantasy.example.com" + SMTregistryName="registry-fantasy.example.com" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) assert utils.get_credentials_file(smt_server) == 'foo' @@ -1211,30 +1232,44 @@ def test_get_current_smt_no_match(mock_get_smt_from_store, mock_os_unlink): SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="fantasy.example.com" + SMTregistryName="registry-fantasy.example.com" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) mock_get_smt_from_store.return_value = smt_server - utils.get_current_smt() + assert utils.get_current_smt() is None +@patch('cloudregister.registerutils.glob.glob') @patch('cloudregister.registerutils.get_smt_from_store') -def test_get_current_smt_no_registered(mock_get_smt_from_store): +def test_get_current_smt_no_registered( + mock_get_smt_from_store, + mock_glob_glob +): smt_data_ipv46 = dedent('''\ ''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) mock_get_smt_from_store.return_value = smt_server + mock_glob_glob.return_value = ['tests/data/service.service'] hosts_content = """ # simulates hosts file containing the ipv4 we are looking for in the test 192.168.1.1 smt-foo.susecloud.net smt-foo """ - with mock.patch('builtins.open', mock.mock_open( - read_data=hosts_content.encode() - )): + open_mock_hosts = mock.mock_open(read_data=hosts_content.encode()) + open_mock = mock.mock_open(read_data=hosts_content) + + def open_f(filename, *args, **kwargs): + if filename == '/etc/hosts': + return open_mock_hosts() + return open_mock() + + with mock.patch('builtins.open') as mock_open: + mock_open.side_effect = open_f assert utils.get_current_smt() is None @@ -1246,6 +1281,7 @@ def test_get_current_smt(mock_get_smt_from_store, mock_is_registered): SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="smt-foo.susecloud.net" + SMTregistryName="registry-foo.susecloud.net" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) mock_get_smt_from_store.return_value = smt_server @@ -1547,6 +1583,7 @@ def test_get_smt_network_issue( SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="smt-foo.susecloud.net" + SMTregistryName="registry-foo.susecloud.net" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) mock_get_current_smt.return_value = smt_server @@ -1576,6 +1613,7 @@ def test_get_smt_registered_no_network( SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="smt-foo.susecloud.net" + SMTregistryName="registry-foo.susecloud.net" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) mock_get_current_smt.return_value = smt_server @@ -1618,6 +1656,7 @@ def test_get_smt_find_equivalent( SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="smt-foo.susecloud.net" + SMTregistryName="registry-foo.susecloud.net" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) smt_data_ipv46 = dedent('''\ @@ -1625,6 +1664,7 @@ def test_get_smt_find_equivalent( SMTserverIP="42.168.1.1" SMTserverIPv6="fc00::7" SMTserverName="smt-foo.susecloud.net" + SMTregistryName="registry-foo.susecloud.net" region="antarctica-1"/>''') equivalent_smt_server = SMT(etree.fromstring(smt_data_ipv46)) mock_get_current_smt.return_value = smt_server @@ -1673,6 +1713,7 @@ def test_get_smt_equivalent_smt_no_access( SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="smt-foo.susecloud.net" + SMTregistryName="registry-foo.susecloud.net" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) smt_data_ipv46 = dedent('''\ @@ -1680,6 +1721,7 @@ def test_get_smt_equivalent_smt_no_access( SMTserverIP="42.168.1.1" SMTserverIPv6="fc00::7" SMTserverName="smt-foo.susecloud.net" + SMTregistryName="registry-foo.susecloud.net" region="antarctica-1"/>''') equivalent_smt_server = SMT(etree.fromstring(smt_data_ipv46)) mock_get_current_smt.return_value = smt_server @@ -1725,6 +1767,7 @@ def test_get_smt_alternative_server( SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="smt-foo.susecloud.net" + SMTregistryName="registry-foo.susecloud.net" region="antarctica-1"/>''') alternative_smt_server = SMT(etree.fromstring(smt_data_ipv46)) mock_get_available_smt_servers.return_value = [alternative_smt_server] @@ -1737,7 +1780,10 @@ def test_get_smt_alternative_server( mock_add_hosts_entry.assert_called_once_with(alternative_smt_server) mock_set_as_current_smt.assert_called_once_with(alternative_smt_server) mock_set_as_current_smt.assert_called_once_with(alternative_smt_server) - mock_clean_hosts_file.assert_called_once_with('smt-foo.susecloud.net') + mock_clean_hosts_file.assert_called_once_with( + 'smt-foo.susecloud.net', + 'registry-foo.susecloud.net' + ) @patch('cloudregister.registerutils.__populate_srv_cache') @@ -1786,6 +1832,7 @@ def test_get_update_server_name_from_hosts(mock_get_available_smt_servers): SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="smt-foo.susecloud.net" + SMTregistryName="registry-foo.susecloud.net" region="antarctica-1"/>''') alternative_smt_server = SMT(etree.fromstring(smt_data_ipv46)) mock_get_available_smt_servers.return_value = [alternative_smt_server] @@ -1827,6 +1874,7 @@ def test_has_ipv6_access_no_ipv6_defined(): ''') smt_server = SMT(etree.fromstring(smt_data_ipv4)) assert utils.has_ipv6_access(smt_server) is False @@ -1841,6 +1889,7 @@ def test_has_ipv6_access_https(mock_https_only, mock_request, mock_get_config): SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="smt-foo.susecloud.net" + SMTregistryName="registry-foo.susecloud.net" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) response = Response() @@ -1869,6 +1918,7 @@ def test_has_ipv6_access_exception( SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="smt-foo.susecloud.net" + SMTregistryName="registry-foo.susecloud.net" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) mock_request.side_effect = Exception("Server's too far, cant be reached") @@ -1955,6 +2005,7 @@ def test_import_smtcert_12_no_write_cert(mock_smt_write_cert): SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="fantasy.example.com" + SMTregistryName="registry-fantasy.example.com" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) @@ -1974,6 +2025,7 @@ def test_import_smtcert_12_no_update_ca_chain( SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="fantasy.example.com" + SMTregistryName="registry-fantasy.example.com" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) @@ -1993,9 +2045,9 @@ def test_import_smtcert_12( SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="fantasy.example.com" + SMTregistryName="registry-fantasy.example.com" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) - assert utils.import_smtcert_12(smt_server) == 1 @@ -2010,17 +2062,17 @@ def test_import_smt_cert_fail(mock_import_smtcert_12, mockin_logging): @patch('cloudregister.registerutils.glob.glob') -@patch('cloudregister.registerutils.site.getsitepackages') +@patch('cloudregister.registerutils.site') @patch('cloudregister.registerutils.logging') @patch('cloudregister.registerutils.import_smtcert_12') def test_import_smt_cert_cert_middling( mock_import_smtcert_12, mockin_logging, - mockin_getsitepackages, + mockin_site, mockin_glob ): mock_import_smtcert_12.return_value = True - mockin_getsitepackages.return_value = ['foo'] + mockin_site.getsitepackages.return_value = ['foo'] mockin_glob.return_value = ['foo/certifi/foo.pem'] assert utils.import_smt_cert('foo') == 1 mockin_logging.warning.assert_called_once_with( @@ -2084,6 +2136,7 @@ def test_set_as_current_smt(mock_get_state_dir): SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="fantasy.example.com" + SMTregistryName="registry-fantasy.example.com" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) @@ -2174,6 +2227,7 @@ def test_switch_services_to_plugin_config_parse_error( SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="smt-foo.susecloud.net" + SMTregistryName="registry-foo.susecloud.net" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) mock_get_available_smt_servers.return_value = [smt_server] @@ -2204,6 +2258,7 @@ def test_switch_services_to_plugin_unlink_service( SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="smt-foo.susecloud.net" + SMTregistryName="registry-foo.susecloud.net" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) mock_get_available_smt_servers.return_value = [smt_server] @@ -2286,6 +2341,7 @@ def test_remove_registration_data( SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="smt-foo.susecloud.net" + SMTregistryName="registry-foo.susecloud.net" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) mock_get_smt_from_store.return_value = smt_server @@ -2335,6 +2391,7 @@ def test_remove_registration_data_request_not_OK( SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="smt-foo.susecloud.net" + SMTregistryName="registry-foo.susecloud.net" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) mock_get_smt_from_store.return_value = smt_server @@ -2392,6 +2449,7 @@ def test_remove_registration_data_request_exception( SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="smt-foo.susecloud.net" + SMTregistryName="registry-foo.susecloud.net" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) mock_get_smt_from_store.return_value = smt_server @@ -2426,10 +2484,14 @@ def test_replace_hosts_entry(mock_clean_hosts_file, mock_add_hosts_entry): SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="smt-foo.susecloud.net" + SMTregistryName="registry-foo.susecloud.net" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) utils.replace_hosts_entry(smt_server, 'new_smt') - mock_clean_hosts_file.assert_called_once_with('smt-foo.susecloud.net') + mock_clean_hosts_file.assert_called_once_with( + 'smt-foo.susecloud.net', + 'registry-foo.susecloud.net' + ) mock_add_hosts_entry.assert_called_once_with('new_smt') @@ -2461,6 +2523,7 @@ def test_store_smt_data(mock_os_fchmod, mock_pickle, mock_dump): SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="smt-foo.susecloud.net" + SMTregistryName="registry-foo.susecloud.net" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) with tempfile.TemporaryDirectory() as tmpdirname: @@ -2480,6 +2543,7 @@ def test_switch_smt_repos(mock_get_current_smt, mock_glob): SMTserverIP="111.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="ANOTHER_NAME" + SMTregistryName="ANOTHER_REGISTRY_NAME" region="antarctica-1"/>''') new_smt_server = SMT(etree.fromstring(new_smt_data_ipv46)) smt_data_ipv46 = dedent('''\ @@ -2487,6 +2551,7 @@ def test_switch_smt_repos(mock_get_current_smt, mock_glob): SMTserverIP="111.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="plugin:/susecloud" + SMTregistryName="registry-susecloud" region="antarctica-1"/>''') current_smt_server = SMT(etree.fromstring(smt_data_ipv46)) mock_get_current_smt.return_value = current_smt_server @@ -2523,6 +2588,7 @@ def test_switch_smt_service(mock_get_current_smt, mock_glob): SMTserverIP="111.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="ANOTHER_NAME" + SMTregistryName="ANOTHER_REGISTRY_NAME" region="antarctica-1"/>''') new_smt_server = SMT(etree.fromstring(new_smt_data_ipv46)) smt_data_ipv46 = dedent('''\ @@ -2530,6 +2596,7 @@ def test_switch_smt_service(mock_get_current_smt, mock_glob): SMTserverIP="111.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="plugin:/susecloud" + SMTregistryName="registry-susecloud" region="antarctica-1"/>''') current_smt_server = SMT(etree.fromstring(smt_data_ipv46)) mock_get_current_smt.return_value = current_smt_server @@ -2601,6 +2668,7 @@ def test_update_rmt_cert_no_cert_change( SMTserverIP="111.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="ANOTHER_NAME" + SMTregistryName="ANOTHER_REGISTRY_NAME" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) smt_xml = dedent('''\ @@ -2609,6 +2677,7 @@ def test_update_rmt_cert_no_cert_change( SMTserverIP="1.2.3.4" SMTserverIPv6="fc11::2" SMTserverName="foo.susecloud.net" + SMTregistryName="registry-foo.susecloud.net" /> ''') region_smt_data = etree.fromstring(smt_xml) @@ -2642,6 +2711,7 @@ def test_update_rmt_cert( SMTserverIP="111.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="ANOTHER_NAME" + SMTregistryName="ANOTHER_REGISTRY_NAME" region="antarctica-1"/>''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) smt_xml = dedent('''\ @@ -2650,6 +2720,7 @@ def test_update_rmt_cert( SMTserverIP="111.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="foo.susecloud.net" + SMTregistryName="registry-foo.susecloud.net" /> ''') region_smt_data = etree.fromstring(smt_xml) @@ -2881,6 +2952,7 @@ def test_populate_srv_cache( SMTserverIP="1.2.3.4" SMTserverIPv6="fc11::2" SMTserverName="foo.susecloud.net" + SMTregistryName="registry-foo.susecloud.net" /> ''') region_smt_data = etree.fromstring(smt_xml) @@ -2892,6 +2964,7 @@ def test_populate_srv_cache( SMTserverIP="1.2.3.4" SMTserverIPv6="fc11::2" SMTserverName="foo.susecloud.net" + SMTregistryName="registry-foo.susecloud.net" />''') smt_server = SMT(etree.fromstring(smt_data_ipv46)) mock_store_smt_data.assert_called_once_with( diff --git a/tests/test_smt.py b/tests/test_smt.py index 965a407..fa616b0 100644 --- a/tests/test_smt.py +++ b/tests/test_smt.py @@ -34,12 +34,14 @@ ''') smt_data_ipv6 = dedent('''\ ''') smt_data_ipv46 = dedent('''\ @@ -47,12 +49,14 @@ SMTserverIP="192.168.1.1" SMTserverIPv6="fc00::1" SMTserverName="fantasy.example.com" + SMTregistryName="registry-fantasy.example.com" region="antarctica-1"/>''') smt_data_no_region = dedent('''\ ''') + SMTserverName="fantasy.example.com" + SMTregistryName="registry-fantasy.example.com"/>''') # ---------------------------------------------------------------------------- diff --git a/usr/sbin/registercloudguest b/usr/sbin/registercloudguest index ee2e486..d2eb651 100755 --- a/usr/sbin/registercloudguest +++ b/usr/sbin/registercloudguest @@ -214,6 +214,12 @@ argparse.add_argument( dest='user_smt_fqdn', help=help_msg ) +help_msg='The target registry server FQDN. ' +argparse.add_argument( + '--smt-registry-fqdn', + dest='user_registry_fqdn', + help=help_msg +) help_msg='The target update server IP. ' help_msg+='Use in exceptional cases only' argparse.add_argument( @@ -347,7 +353,9 @@ if args.user_smt_ip: smt_xml += 'SMTserverIPv6="%s" ' % args.user_smt_ip elif isinstance(smt_ip, ipaddress.IPv4Address): smt_xml += 'SMTserverIP="%s" ' % args.user_smt_ip - smt_xml += 'SMTserverName="%s"' % args.user_smt_fqdn + smt_xml += 'SMTserverName="%s" ' % args.user_smt_fqdn + smt_xml += 'SMTserverName="%s" ' % args.user_smt_fqdn + smt_xml += 'SMTregistryName="%s"' % args.user_registry_fqdn smt_xml += '/>' region_smt_data = etree.fromstring(smt_xml) else: @@ -414,7 +422,10 @@ if registration_smt: registration_smt ) if not utils.has_rmt_in_hosts(registration_smt): - utils.clean_hosts_file(registration_smt.get_FQDN()) + utils.clean_hosts_file( + registration_smt.get_FQDN(), + registration_smt.get_registry_FQDN() + ) utils.add_hosts_entry(registration_smt) logging.info(msg) sys.exit(0) @@ -583,7 +594,10 @@ while not base_registered: ) ) utils.remove_registration_data() - utils.clean_hosts_file(registration_target.get_FQDN()) + utils.clean_hosts_file( + registration_target.get_FQDN(), + registration_target.get_registry_FQDN() + ) registration_target = smt_srv break else: