Skip to content
Snippets Groups Projects
Commit 53a428dc authored by Daniel Nemergut's avatar Daniel Nemergut
Browse files

Merge branch 'ws1405-casa_matrix_service_fix' into '2.8.4-DEVELOPMENT'

WS-1405 Fix matrix service's CAPO properties

See merge request !1677
parents 40bd5ab2 1336ce4a
No related branches found
No related tags found
2 merge requests!1706merge 2.8.4 to main,!1677WS-1405 Fix matrix service's CAPO properties
Pipeline #16093 failed
......@@ -91,15 +91,8 @@ class CasaMatrixService(CasaMatrixServiceIF):
def __init__(self, session: Session):
self.session = session
# Used for linking and looking up default CASA versions
self.casa_delivery_dir = CapoConfig().get("edu.nrao.archive.workflow.config.CasaVersions")
self.casa_settings = CapoConfig().settings("edu.nrao.archive.workflow.config.CasaVersions")
# Used for linking and looking up linked CASA versions
self.env_dir = str(CapoConfig().profile).replace('dsoc-', '')
self.archive_settings = CapoConfig().settings("edu.nrao.archive.archiveIface")
self.casa_root = self.archive_settings["casa_root"]
self.allow_dev_casa = True if self.archive_settings["allowDevCasaVersions"].lower() == "true" else False
# A valid version will cross-check installed versions in the casa_root against allowed versions in the database
self.installed_versions = []
......@@ -116,12 +109,13 @@ class CasaMatrixService(CasaMatrixServiceIF):
flat_versions = []
# casa_root is the directory that contains all installed versions of CASA for all OSes
casa_root = CapoConfig().get("edu.nrao.archive.archiveIface.casa_root")
try:
os.listdir(self.casa_root)
os.listdir(casa_root)
except FileNotFoundError:
raise Exception("Failed to locate CASA root")
if self.allow_dev_casa:
if CapoConfig().get("edu.nrao.archive.archiveIface.allowDevCasaVersions").lower() == "true":
prefix_match = RELEASE_CASA_REGEX
else:
prefix_match = DEV_CASA_REGEX
......@@ -129,12 +123,12 @@ class CasaMatrixService(CasaMatrixServiceIF):
# Start by building a list of version/path dictionaries, extracting the version name from the directory
# names in our CASA root. The assumption here is that all these CASA installs are also pipeline installs.
# The sorting here will place the newest OS version at the front.
os_dirs = natural_sort(os.listdir(self.casa_root), reverse=True)
os_dirs = natural_sort(os.listdir(casa_root), reverse=True)
all_versions = {}
for os_dir in os_dirs:
# casa_root / RHEL*
os_dir = os.path.join(self.casa_root, os_dir)
os_dir = os.path.join(casa_root, os_dir)
if os.path.isdir(os_dir):
# casa_root / RHEL* / env
os_env_dir = os.path.join(os_dir, self.env_dir)
......@@ -159,7 +153,7 @@ class CasaMatrixService(CasaMatrixServiceIF):
flat_versions.append(v)
if not flat_versions:
logger.critical(f"Did not find any links to installed CASA versions in {self.casa_root}")
logger.critical(f"Did not find any links to installed CASA versions in {casa_root}")
# Return the version list sorted with newer versions first
return sorted(flat_versions, key=lambda v: v["version"], reverse=True)
......@@ -259,7 +253,7 @@ class CasaMatrixService(CasaMatrixServiceIF):
# If the requested version is invalid, put the default as first in the list
# If the default is invalid, the newest version will be first in the list
if versions[0]["version"] != version:
if versions and versions[0]["version"] != version:
default = self.get_default_version(capability, telescope)
if default:
for v in versions:
......@@ -294,7 +288,8 @@ class CasaMatrixService(CasaMatrixServiceIF):
key = keys[0]
# The CAPO setting is a full path to a CASA installation (this assumes it is installed)
path = self.casa_settings[key]
casa_settings = CapoConfig().settings("edu.nrao.archive.workflow.config.CasaVersions")
path = casa_settings[key]
return casa_version_from_path(path)
......@@ -403,21 +398,26 @@ class CasaMatrixService(CasaMatrixServiceIF):
# For logging
found_versions = {}
# The directory that contains all installed versions of CASA for all OSes
casa_root = CapoConfig().get("edu.nrao.archive.archiveIface.casa_root")
# The directory where we're generating links to casa_root
casa_delivery_dir = CapoConfig().get("edu.nrao.archive.workflow.config.CasaVersions")
# We're going to add symlinks to a new dir and then replace the old one (in case something goes awry)
temp_dir_name = self.env_dir + "-new"
# Start with the RHEL* directories in the CASA delivery area
src_os_dirs = sorted([x for x in os.listdir(self.casa_delivery_dir) if "RHEL" in x], reverse=True)
src_os_dirs = sorted([x for x in os.listdir(casa_delivery_dir) if "RHEL" in x], reverse=True)
for src_os_dir in src_os_dirs:
found_versions[src_os_dir] = []
# casa_root / RHEL* / env
dest_os_dir = os.path.join(self.casa_root, src_os_dir, temp_dir_name)
dest_os_dir = os.path.join(casa_root, src_os_dir, temp_dir_name)
if not dry_run and not os.path.exists(dest_os_dir):
os.mkdir(dest_os_dir)
# casa_delivery_dir / RHEL* / release
src_release_dir = os.path.join(self.casa_delivery_dir, src_os_dir, "release")
src_release_dir = os.path.join(casa_delivery_dir, src_os_dir, "release")
if os.path.isdir(src_release_dir):
for src_casa_dir in os.listdir(src_release_dir):
......@@ -434,7 +434,7 @@ class CasaMatrixService(CasaMatrixServiceIF):
if not dry_run:
# Move all new symlinks into the old directory, overwriting any that existed by the same name
# This does not delete any pre-existing links in order to preserve the 'default' link
final_dest = os.path.join(self.casa_root, src_os_dir, self.env_dir)
final_dest = os.path.join(casa_root, src_os_dir, self.env_dir)
logger.info(f"Replacing CASA versions in {final_dest}")
if not os.path.exists(final_dest):
os.makedirs(final_dest)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment