Skip to content

Commit

Permalink
Add and clean up registry entry from /etc/hosts
Browse files Browse the repository at this point in the history
In order to support the registry, together with the entry
in /etc/hosts for the RMT server, a new registry entry needs
to be added when registering the instance and cleaned up when
de-registered
  • Loading branch information
jesusbv committed May 20, 2024
1 parent 9471db2 commit f565dcc
Show file tree
Hide file tree
Showing 5 changed files with 141 additions and 34 deletions.
21 changes: 15 additions & 6 deletions lib/cloudregister/registerutils.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -86,23 +88,30 @@ 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
with open(HOSTSFILE_PATH, 'rb') as hosts_file:
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)

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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():
Expand Down Expand Up @@ -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)


Expand Down
7 changes: 7 additions & 0 deletions lib/cloudregister/smt.py
Original file line number Diff line number Diff line change
Expand Up @@ -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')
Expand All @@ -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()
):
Expand Down Expand Up @@ -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"""
Expand Down

0 comments on commit f565dcc

Please sign in to comment.