From bfd37762bdf91a7f89d4ebc259454ddb2f5e7b3d Mon Sep 17 00:00:00 2001 From: "Sridhar K. N. Rao" Date: Mon, 20 Sep 2021 12:45:42 +0530 Subject: Cleanup-Update: Remove unused code and update PDF This patch removes unused code and update the pdf. Signed-off-by: Sridhar K. N. Rao Change-Id: I9785c4301869f7b93ccad074cf0ad6ffc77724a0 --- sdv/NwLinksValid/__init__.py | 17 - sdv/NwLinksValid/nwlinksvalidator.py | 34 -- sdv/ResourceModelValid/__init__.py | 17 - sdv/ResourceModelValid/resmodvalidator.py | 34 -- sdv/SoftwarePostSecurityValid/__init__.py | 19 - .../swpostsecurityvalidator.py | 36 -- sdv/SoftwarePostStateValid/__init__.py | 19 - sdv/SoftwarePostStateValid/swpoststatevalidator.py | 36 -- sdv/SoftwarePreConfigValid/__init__.py | 19 - sdv/SoftwarePreConfigValid/swpreconfigvalidator.py | 34 -- sdv/SoftwarePreUrlsValid/__init__.py | 19 - sdv/SoftwarePreUrlsValid/airship.py | 155 ------- sdv/SoftwarePreUrlsValid/swpreurlsvalidator.py | 34 -- sdv/__init__.py | 0 sdv/conf/00_common.conf | 21 - sdv/conf/01_swpreurlsvalid.conf | 24 -- sdv/conf/02_swpreconfigvalid.conf | 20 - sdv/conf/03_swpoststatevalid.conf | 26 -- sdv/conf/04_swpostsecurityvalid.conf | 16 - sdv/conf/05_nwlinksvalid.conf | 15 - sdv/conf/06_resmodvalid.conf | 15 - sdv/conf/__init__.py | 265 ------------ sdv/core/__init__.py | 19 - sdv/core/component_factory.py | 47 -- sdv/core/loader/__init__.py | 18 - sdv/core/loader/loader.py | 222 ---------- sdv/core/loader/loader_servant.py | 183 -------- sdv/pdf/template/cloud_common.json | 477 +++++++++++++++++++++ sdv/pdf/template/cloud_extrapolate.json | 29 ++ sdv/pdf/template/cloud_kubernetes.json | 78 ++++ sdv/pdf/template/cloud_openstack.json | 111 +++++ sdv/valid | 276 ------------ 32 files changed, 695 insertions(+), 1640 deletions(-) delete mode 100755 sdv/NwLinksValid/__init__.py delete mode 100644 sdv/NwLinksValid/nwlinksvalidator.py delete mode 100755 sdv/ResourceModelValid/__init__.py delete mode 100644 sdv/ResourceModelValid/resmodvalidator.py delete mode 100755 sdv/SoftwarePostSecurityValid/__init__.py delete mode 100644 sdv/SoftwarePostSecurityValid/swpostsecurityvalidator.py delete mode 100755 sdv/SoftwarePostStateValid/__init__.py delete mode 100644 sdv/SoftwarePostStateValid/swpoststatevalidator.py delete mode 100755 sdv/SoftwarePreConfigValid/__init__.py delete mode 100644 sdv/SoftwarePreConfigValid/swpreconfigvalidator.py delete mode 100755 sdv/SoftwarePreUrlsValid/__init__.py delete mode 100644 sdv/SoftwarePreUrlsValid/airship.py delete mode 100644 sdv/SoftwarePreUrlsValid/swpreurlsvalidator.py delete mode 100644 sdv/__init__.py delete mode 100644 sdv/conf/00_common.conf delete mode 100644 sdv/conf/01_swpreurlsvalid.conf delete mode 100644 sdv/conf/02_swpreconfigvalid.conf delete mode 100644 sdv/conf/03_swpoststatevalid.conf delete mode 100644 sdv/conf/04_swpostsecurityvalid.conf delete mode 100644 sdv/conf/05_nwlinksvalid.conf delete mode 100644 sdv/conf/06_resmodvalid.conf delete mode 100644 sdv/conf/__init__.py delete mode 100644 sdv/core/__init__.py delete mode 100644 sdv/core/component_factory.py delete mode 100644 sdv/core/loader/__init__.py delete mode 100644 sdv/core/loader/loader.py delete mode 100644 sdv/core/loader/loader_servant.py create mode 100755 sdv/pdf/template/cloud_common.json create mode 100755 sdv/pdf/template/cloud_extrapolate.json create mode 100755 sdv/pdf/template/cloud_kubernetes.json create mode 100755 sdv/pdf/template/cloud_openstack.json delete mode 100755 sdv/valid diff --git a/sdv/NwLinksValid/__init__.py b/sdv/NwLinksValid/__init__.py deleted file mode 100755 index 99456db..0000000 --- a/sdv/NwLinksValid/__init__.py +++ /dev/null @@ -1,17 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Nework-Links Validator interface and helpers. -""" - -# flake8: noqa -from NwLinksValid.nwlinksvalidator import * diff --git a/sdv/NwLinksValid/nwlinksvalidator.py b/sdv/NwLinksValid/nwlinksvalidator.py deleted file mode 100644 index 314567b..0000000 --- a/sdv/NwLinksValid/nwlinksvalidator.py +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright 2020 Spirent Communications. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -Abstract class for N/W Lnks Prevalidations. -Implementors, please inherit from this class. -""" - - -class INwLinksValidator(): - """ Model for a Links Validator """ - def __init__(self): - """ Initialization of the Interface """ - self._default_nwlinks_validation = None - - @property - def validation_nwlinks_defaults(self): - """ Default Validation values """ - return True - - def validate(self): - """ Validating Compute Node Links""" - raise NotImplementedError('Please call an implementation.') diff --git a/sdv/ResourceModelValid/__init__.py b/sdv/ResourceModelValid/__init__.py deleted file mode 100755 index b3aebfd..0000000 --- a/sdv/ResourceModelValid/__init__.py +++ /dev/null @@ -1,17 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Nework-Links Validator interface and helpers. -""" - -# flake8: noqa -from ResourceModelValid.resmodvalidator import * diff --git a/sdv/ResourceModelValid/resmodvalidator.py b/sdv/ResourceModelValid/resmodvalidator.py deleted file mode 100644 index bc2ab9e..0000000 --- a/sdv/ResourceModelValid/resmodvalidator.py +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright 2020 Spirent Communications. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -Abstract class for N/W Lnks Prevalidations. -Implementors, please inherit from this class. -""" - - -class IResModValidator(): - """ Model for a Links Validator """ - def __init__(self): - """ Initialization of the Interface """ - self._default_resmod_validation = None - - @property - def validation_resmod_defaults(self): - """ Default Validation values """ - return True - - def validate(self): - """ Validating Resource Modelling""" - raise NotImplementedError('Please call an implementation.') diff --git a/sdv/SoftwarePostSecurityValid/__init__.py b/sdv/SoftwarePostSecurityValid/__init__.py deleted file mode 100755 index 2d85d6c..0000000 --- a/sdv/SoftwarePostSecurityValid/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2015 Intel Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Sw Validator interface and helpers. -""" - -# flake8: noqa -from SoftwarePostSecurityValid.swpostsecurityvalidator import * diff --git a/sdv/SoftwarePostSecurityValid/swpostsecurityvalidator.py b/sdv/SoftwarePostSecurityValid/swpostsecurityvalidator.py deleted file mode 100644 index 0f40261..0000000 --- a/sdv/SoftwarePostSecurityValid/swpostsecurityvalidator.py +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright 2020 Spirent Communications. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -Abstract class for Software Postvalidations. -Implementors, please inherit from this class. -""" - - -class ISwPostSecurityValidator(): - """ Model for a Sw Validator """ - def __init__(self): - """ Initialization of the Interface """ - self._default_security_validation = None - - @property - def validation_security_defaults(self): - """ Default Validation values """ - return True - - def validate(self): - """ - Validating Mandatory Configuration - """ - raise NotImplementedError('Please call an implementation.') diff --git a/sdv/SoftwarePostStateValid/__init__.py b/sdv/SoftwarePostStateValid/__init__.py deleted file mode 100755 index 5349f90..0000000 --- a/sdv/SoftwarePostStateValid/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2015 Intel Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Sw Validator interface and helpers. -""" - -# flake8: noqa -from SoftwarePostStateValid.swpoststatevalidator import * diff --git a/sdv/SoftwarePostStateValid/swpoststatevalidator.py b/sdv/SoftwarePostStateValid/swpoststatevalidator.py deleted file mode 100644 index 0c01034..0000000 --- a/sdv/SoftwarePostStateValid/swpoststatevalidator.py +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright 2020 Spirent Communications. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -Abstract class for Software Postvalidations. -Implementors, please inherit from this class. -""" - - -class ISwPostStateValidator(): - """ Model for a Sw Validator """ - def __init__(self): - """ Initialization of the Interface """ - self._default_swpoststate_validation = None - - @property - def validation_swpoststate_defaults(self): - """ Default Validation values """ - return True - - def validate(self): - """ - Validating State - """ - raise NotImplementedError('Please call an implementation.') diff --git a/sdv/SoftwarePreConfigValid/__init__.py b/sdv/SoftwarePreConfigValid/__init__.py deleted file mode 100755 index 7eb24f9..0000000 --- a/sdv/SoftwarePreConfigValid/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2020 Spirent Communications. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Sw Validator interface and helpers. -""" - -# flake8: noqa -from SoftwarePreConfigValid.swpreconfigvalidator import * diff --git a/sdv/SoftwarePreConfigValid/swpreconfigvalidator.py b/sdv/SoftwarePreConfigValid/swpreconfigvalidator.py deleted file mode 100644 index a423354..0000000 --- a/sdv/SoftwarePreConfigValid/swpreconfigvalidator.py +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright 2020 Spirent Communications. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -Abstract class for Software Prevalidations. -Implementors, please inherit from this class. -""" - - -class ISwPreConfigValidator(): - """ Model for a Sw Validator """ - def __init__(self): - """ Initialization of the Interface """ - self._default_swpreconfig_validation = None - - @property - def validation_swpreconfig_defaults(self): - """ Default Validation values """ - return True - - def validate(self): - """ Validate Mandatory Configurations """ - raise NotImplementedError('Please call an implementation.') diff --git a/sdv/SoftwarePreUrlsValid/__init__.py b/sdv/SoftwarePreUrlsValid/__init__.py deleted file mode 100755 index c1f68ac..0000000 --- a/sdv/SoftwarePreUrlsValid/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2020 Spirent Communications. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Sw Validator interface and helpers. -""" - -# flake8: noqa -from SoftwarePreUrlsValid.swpreurlsvalidator import * diff --git a/sdv/SoftwarePreUrlsValid/airship.py b/sdv/SoftwarePreUrlsValid/airship.py deleted file mode 100644 index 324eaf1..0000000 --- a/sdv/SoftwarePreUrlsValid/airship.py +++ /dev/null @@ -1,155 +0,0 @@ -# Copyright 2020 Spirent Communications. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -Airship implementation of Software Predeployment Validation -""" - -import os -import shutil -from pathlib import Path -import git -import urllib3 -from conf import settings -from SoftwarePreUrlsValid import swpreurlsvalidator - - -def check_link(link): - """ - Function the check the availability of Hyperlinks - """ - timeout = urllib3.util.Timeout(connect=5.0, read=7.0) - http = urllib3.PoolManager(timeout=timeout) - try: - http.request('HEAD', link) - except urllib3.exceptions.LocationValueError as err: - print(err.args) - return False - except urllib3.exceptions.MaxRetryError as err: - print(err.args) - return False - except urllib3.exceptions.RequestError as err: - print(err.args) - return False - except urllib3.exceptions.ConnectTimeoutError as err: - print(err.args) - return False - except urllib3.exceptions.PoolError as err: - print(err.args) - return False - except urllib3.exceptions.HTTPError as err: - print(err.args) - return False - return True - - -class Airship(swpreurlsvalidator.ISwPreUrlsValidator): - """ - Ariship Sw Validation - """ - def __init__(self): - """ Airship class constructor """ - super().__init__() - self.url = settings.getValue('AIRSHIP_MANIFEST_URL') - self.branch = settings.getValue('AIRSHIP_MANIFEST_BRANCH') - self.dl_path = settings.getValue('AIRSHIP_MANIFEST_DOWNLOAD_PATH') - self.site_name = settings.getValue('AIRSHIP_MANIFEST_SITE_NAME') - self.manifest = None - self.dirpath = Path(self.dl_path, 'airship') - self.tmdirpath = Path(self.dl_path, 'treasuremap') - self.locations = [] - - def clone_repo(self): - """ - Cloning the repos - """ - git.Repo.clone_from(self.url, - self.dirpath, - branch=self.branch) - git.Repo.clone_from('https://github.com/airshipit/treasuremap', - self.tmdirpath, - branch=settings.getValue( - 'AIRSHIP_TREASUREMAP_VERSION')) - - def cleanup_manifest(self): - """ - Remove existing manifests - """ - # Next Remove any manifest files, if it exists - if self.dirpath.exists() and self.dirpath.is_dir(): - shutil.rmtree(self.dirpath) - if self.tmdirpath.exists() and self.tmdirpath.is_dir(): - shutil.rmtree(self.tmdirpath) - - def manifest_exists_locally(self): - """ - Check if manifests exists locally - """ - if self.dirpath.exists() and self.dirpath.is_dir(): - return True - return False - - def validate(self): - """ - Hyperlink Validation - """ - self.cleanup_manifest() - # Next, clone the repo to the provided path. - self.clone_repo() - - if self.dirpath.exists() and self.dirpath.is_dir(): - # Get the file(s) where links are defined. - self.find_locations( - os.path.join(self.dirpath, 'type', - 'cntt', 'software', - 'config', 'versions.yaml')) - for location in self.locations: - if check_link(location): - print("The Link: %s is VALID" % (location)) - else: - print("The Link: %s is INVALID" % (location)) - - # pylint: disable=consider-using-enumerate - def find_locations(self, yamlfile): - """ - Find all the hyperlinks in the manifests - """ - with open(yamlfile, 'r') as filep: - lines = filep.readlines() - for index in range(len(lines)): - line = lines[index].strip() - if line.startswith('location:'): - link = line.split(":", 1)[1] - if "opendev" in link: - if ((len(lines) > index+1) and - (lines[index+1].strip().startswith( - 'reference:'))): - ref = lines[index+1].split(":", 1)[1] - link = link + '/commit/' + ref.strip() - if link.strip() not in self.locations: - print(link) - self.locations.append(link.strip()) - if 'docker.' in line: - link = line.split(":", 1)[1] - link = link.replace('"', '') - parts = link.split('/') - if len(parts) == 3: - link = ('https://index.' + - parts[0].strip() + - '/v1/repositories/' + - parts[1] + '/' + parts[2].split(':')[0] + - '/tags/' + parts[2].split(':')[-1]) - if link.strip() not in self.locations: - print(link) - self.locations.append(link.strip()) diff --git a/sdv/SoftwarePreUrlsValid/swpreurlsvalidator.py b/sdv/SoftwarePreUrlsValid/swpreurlsvalidator.py deleted file mode 100644 index 31604ee..0000000 --- a/sdv/SoftwarePreUrlsValid/swpreurlsvalidator.py +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright 2020 Spirent Communications. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -Abstract class for Software Prevalidations. -Implementors, please inherit from this class. -""" - - -class ISwPreUrlsValidator(): - """ Model for a Sw Validator """ - def __init__(self): - """ Initialization of the Interface """ - self._default_swpre_validation = None - - @property - def validation_swpreurls_defaults(self): - """ Default Validation values """ - return True - - def validate(self): - """ Validate Hyperlinks""" - raise NotImplementedError('Please call an implementation.') diff --git a/sdv/__init__.py b/sdv/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/sdv/conf/00_common.conf b/sdv/conf/00_common.conf deleted file mode 100644 index f5e8a23..0000000 --- a/sdv/conf/00_common.conf +++ /dev/null @@ -1,21 +0,0 @@ -import os - -# default log output directory for all logs -LOG_DIR = '/tmp' - -# default log for all "small" executables -LOG_FILE_DEFAULT = 'valid-overall.log' - -ROOT_DIR = os.path.normpath(os.path.join( - os.path.dirname(os.path.realpath(__file__)), '../')) -SW_PRE_URLS_VALID_DIR = os.path.join(ROOT_DIR, 'SoftwarePreUrlsValid') -SW_PRE_CONFIG_VALID_DIR = os.path.join(ROOT_DIR, 'SoftwarePreConfigValid') -SW_POST_STATE_VALID_DIR = os.path.join(ROOT_DIR, 'SoftwarePostStateValid') -SW_POST_SECURITY_VALID_DIR = os.path.join(ROOT_DIR, 'SoftwarePostSecurityValid') -NW_LINKS_VALID_DIR = os.path.join(ROOT_DIR, 'NwLinksValid') -RES_MOD_VALID_DIR = os.path.join(ROOT_DIR, 'ResourceModelValid') - -# 'debug', 'info', 'warning', 'error', 'critical' -VERBOSITY = 'warning' - -EXCLUDE_MODULES = [''] diff --git a/sdv/conf/01_swpreurlsvalid.conf b/sdv/conf/01_swpreurlsvalid.conf deleted file mode 100644 index ddce229..0000000 --- a/sdv/conf/01_swpreurlsvalid.conf +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright 2020 Spirent Communications. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Modify this value to any Installer projects that have -# manifests (templates and configuration files) -SW_PRE_URLS_VALIDATOR = 'Airship' - -# Airship Specific configurations. -AIRSHIP_MANIFEST_URL = 'https://gerrit.opnfv.org/gerrit/airship' -AIRSHIP_MANIFEST_BRANCH = 'master' -AIRSHIP_MANIFEST_DOWNLOAD_PATH = '/tmp' -AIRSHIP_MANIFEST_SITE_NAME = 'intel-pod10' -AIRSHIP_TREASUREMAP_VERSION = 'v1.7' diff --git a/sdv/conf/02_swpreconfigvalid.conf b/sdv/conf/02_swpreconfigvalid.conf deleted file mode 100644 index bbadfcc..0000000 --- a/sdv/conf/02_swpreconfigvalid.conf +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright 2020 Spirent Communications. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -SW_PRE_CONFIG_VALIDATOR = 'ConfVal' -MANIFEST_URL = "" -MANIFEST_DIR = "" -PDF_FILE_URL = "" -PDF_FILE_PATH = "" -INSTALLER = "Airship" diff --git a/sdv/conf/03_swpoststatevalid.conf b/sdv/conf/03_swpoststatevalid.conf deleted file mode 100644 index c98ed98..0000000 --- a/sdv/conf/03_swpoststatevalid.conf +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright 2020 Spirent Communications. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -SW_POST_STATE_VALIDATOR = 'Airship' - -# For the K8S based deployment Type -CLUSTER_INFO_FILE_PATH = "" -CLUSTER_ACCESS_FILE_PATH = "" - -# For Containers-without K8S and VMs based Deployment. -OVERCLOUD_INFO_FILE_PATH = "" -OVERCLOUD_ACCESS_FILE_PATH = "" - -# Any validation specific information is added in this file. -VALIDATION_CONFIG_FILE_PATH = "" diff --git a/sdv/conf/04_swpostsecurityvalid.conf b/sdv/conf/04_swpostsecurityvalid.conf deleted file mode 100644 index 5482612..0000000 --- a/sdv/conf/04_swpostsecurityvalid.conf +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright 2020 Spirent Communications. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -SW_POST_SECURITY_VALIDATOR = 'Airship' diff --git a/sdv/conf/05_nwlinksvalid.conf b/sdv/conf/05_nwlinksvalid.conf deleted file mode 100644 index 755e623..0000000 --- a/sdv/conf/05_nwlinksvalid.conf +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright 2020 Spirent Communications. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -NW_LINKS_VALIDATOR = 'lldpd' diff --git a/sdv/conf/06_resmodvalid.conf b/sdv/conf/06_resmodvalid.conf deleted file mode 100644 index 9a1a110..0000000 --- a/sdv/conf/06_resmodvalid.conf +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright 2020 Spirent Communications. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -RES_MOD_VALIDATOR = 'custom' diff --git a/sdv/conf/__init__.py b/sdv/conf/__init__.py deleted file mode 100644 index ef97aa7..0000000 --- a/sdv/conf/__init__.py +++ /dev/null @@ -1,265 +0,0 @@ -# Copyright 2015-2017 Intel Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Settings and configuration handlers. - -Settings will be loaded from several .conf files -and any user provided settings file. -""" - -# pylint: disable=invalid-name - -import copy -import os -import re -import logging -import pprint - -_LOGGER = logging.getLogger(__name__) - -# regex to parse configuration macros from 04_vnf.conf -# it will select all patterns starting with # sign -# and returns macro parameters and step -# examples of valid macros: -# #VMINDEX -# #MAC(AA:BB:CC:DD:EE:FF) or #MAC(AA:BB:CC:DD:EE:FF,2) -# #IP(192.168.1.2) or #IP(192.168.1.2,2) -# #EVAL(2*#VMINDEX) -_PARSE_PATTERN = r'(#[A-Z]+)(\(([^(),]+)(,([0-9]+))?\))?' - - -class Settings(object): - """Holding class for settings. - """ - def __init__(self): - pass - - def _eval_param(self, param): - # pylint: disable=invalid-name - """ Helper function for expansion of references to 'valid' parameters - """ - if isinstance(param, str): - # evaluate every #PARAM reference inside parameter itself - macros = re.findall( - r'#PARAM\((([\w\-]+)(\[[\w\[\]\-\'\"]+\])*)\)', - param) - if macros: - for macro in macros: - # pylint: disable=eval-used - try: - tmp_val = str( - eval("self.getValue('{}'){}".format(macro[1], - macro[2]))) - param = param.replace('#PARAM({})'.format(macro[0]), - tmp_val) - # silently ignore that option required by - # PARAM macro can't be evaluated; - # It is possible, that referred parameter - # will be constructed during runtime - # and re-read later. - except IndexError: - pass - except AttributeError: - pass - return param - elif isinstance(param, (list, tuple)): - tmp_list = [] - for item in param: - tmp_list.append(self._eval_param(item)) - return tmp_list - elif isinstance(param, dict): - tmp_dict = {} - for (key, value) in param.items(): - tmp_dict[key] = self._eval_param(value) - return tmp_dict - else: - return param - - def getValue(self, attr): - """Return a settings item value - """ - if attr in self.__dict__: - if attr == 'TEST_PARAMS': - return getattr(self, attr) - else: - master_value = getattr(self, attr) - return self._eval_param(master_value) - else: - raise AttributeError("%r object has no attribute %r" % - (self.__class__, attr)) - - def __setattr__(self, name, value): - """Set a value - """ - # skip non-settings. this should exclude built-ins amongst others - if not name.isupper(): - return - - # we can assume all uppercase keys are valid settings - super(Settings, self).__setattr__(name, value) - - def setValue(self, name, value): - """Set a value - """ - if name is not None and value is not None: - super(Settings, self).__setattr__(name, value) - - def load_from_file(self, path): - """Update ``settings`` with values found in module at ``path``. - """ - import imp - - custom_settings = imp.load_source('custom_settings', path) - - for key in dir(custom_settings): - if getattr(custom_settings, key) is not None: - setattr(self, key, getattr(custom_settings, key)) - - def load_from_dir(self, dir_path): - """Update ``settings`` with contents of the .conf files at ``path``. - - Each file must be named Nfilename.conf, where N is a single or - multi-digit decimal number. The files are loaded in ascending order of - N - so if a configuration item exists in more that one file the setting - in the file with the largest value of N takes precedence. - - :param dir_path: The full path to the dir from which to load the .conf - files. - - :returns: None - """ - regex = re.compile( - "^(?P[0-9]+)(?P[a-z]?)_.*.conf$") - - def get_prefix(filename): - """ - Provide a suitable function for sort's key arg - """ - match_object = regex.search(os.path.basename(filename)) - return [int(match_object.group('digit_part')), - match_object.group('alfa_part')] - - # get full file path to all files & dirs in dir_path - file_paths = os.listdir(dir_path) - file_paths = [os.path.join(dir_path, x) for x in file_paths] - - # filter to get only those that are a files, with a leading - # digit and end in '.conf' - file_paths = [x for x in file_paths if os.path.isfile(x) and - regex.search(os.path.basename(x))] - - # sort ascending on the leading digits and afla (e.g. 03_, 05a_) - file_paths.sort(key=get_prefix) - - # load settings from each file in turn - for filepath in file_paths: - self.load_from_file(filepath) - - def load_from_dict(self, conf): - """ - Update ``settings`` with values found in ``conf``. - - Unlike the other loaders, this is case insensitive. - """ - for key in conf: - if conf[key] is not None: - if isinstance(conf[key], dict): - # recursively update dict items, e.g. TEST_PARAMS - setattr(self, key.upper(), - merge_spec(getattr(self, key.upper()), conf[key])) - else: - setattr(self, key.upper(), conf[key]) - - def restore_from_dict(self, conf): - """ - Restore ``settings`` with values found in ``conf``. - - Method will drop all configuration options and restore their - values from conf dictionary - """ - self.__dict__.clear() - tmp_conf = copy.deepcopy(conf) - for key in tmp_conf: - self.setValue(key, tmp_conf[key]) - - def load_from_env(self): - """ - Update ``settings`` with values found in the environment. - """ - for key in os.environ: - setattr(self, key, os.environ[key]) - - def __str__(self): - """Provide settings as a human-readable string. - - This can be useful for debug. - - Returns: - A human-readable string. - """ - tmp_dict = {} - for key in self.__dict__: - tmp_dict[key] = self.getValue(key) - - return pprint.pformat(tmp_dict) - - # - # validation methods used by step driven testcases - # - def validate_getValue(self, result, attr): - """Verifies, that correct value was returned - """ - # getValue must be called to expand macros and apply - # values from TEST_PARAM option - assert result == self.getValue(attr) - return True - - def validate_setValue(self, _dummy_result, name, value): - """Verifies, that value was correctly set - """ - assert value == self.__dict__[name] - return True - - -settings = Settings() - - -def merge_spec(orig, new): - """Merges ``new`` dict with ``orig`` dict, and returns orig. - - This takes into account nested dictionaries. Example: - - >>> old = {'foo': 1, 'bar': {'foo': 2, 'bar': 3}} - >>> new = {'foo': 6, 'bar': {'foo': 7}} - >>> merge_spec(old, new) - {'foo': 6, 'bar': {'foo': 7, 'bar': 3}} - - You'll notice that ``bar.bar`` is not removed. This is the desired result. - """ - for key in orig: - if key not in new: - continue - - # Not allowing derived dictionary types for now - # pylint: disable=unidiomatic-typecheck - if type(orig[key]) == dict: - orig[key] = merge_spec(orig[key], new[key]) - else: - orig[key] = new[key] - - for key in new: - if key not in orig: - orig[key] = new[key] - - return orig diff --git a/sdv/core/__init__.py b/sdv/core/__init__.py deleted file mode 100644 index 2441d38..0000000 --- a/sdv/core/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2015 Intel Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Core structural interfaces and their implementations -""" - -# flake8: noqa -import core.component_factory diff --git a/sdv/core/component_factory.py b/sdv/core/component_factory.py deleted file mode 100644 index 813c6f2..0000000 --- a/sdv/core/component_factory.py +++ /dev/null @@ -1,47 +0,0 @@ -# Copyright 2020 Spirent Communications. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -Create Components. -""" - - -def create_swpreurlsvalidator(swpreurlsvalidator_class): - """ Create Pre-Links Validators""" - return swpreurlsvalidator_class() - - -def create_swpoststatevalidator(swpoststatevalidator_class): - """ Create Post-State Validators""" - return swpoststatevalidator_class() - - -def create_nwlinksvalidator(nwlinksvalidator_class): - """ Create NW Link-Validators""" - return nwlinksvalidator_class() - - -def create_swpreconfigvalidator(swpreconfigvalidator_class): - """ Create Pre-Config Validators""" - return swpreconfigvalidator_class() - - -def create_swpostsecurityvalidator(swpostsecurityvalidator_class): - """ Create Post-Security Validators""" - return swpostsecurityvalidator_class() - - -def create_resmodvalidator(resmodvalidator_class): - """ Create Resource-Model Validators""" - return resmodvalidator_class() diff --git a/sdv/core/loader/__init__.py b/sdv/core/loader/__init__.py deleted file mode 100644 index e86c48e..0000000 --- a/sdv/core/loader/__init__.py +++ /dev/null @@ -1,18 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -Core: Loader Component. -""" - -# flake8: noqa -from .loader import Loader diff --git a/sdv/core/loader/loader.py b/sdv/core/loader/loader.py deleted file mode 100644 index 8840f26..0000000 --- a/sdv/core/loader/loader.py +++ /dev/null @@ -1,222 +0,0 @@ -# Copyright 2020 Intel Corporation, Spirent Communications. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -Abstract class for Software Prevalidations. -Implementors, please inherit from this class. -""" - -from conf import settings -from core.loader.loader_servant import LoaderServant -from SoftwarePreUrlsValid.swpreurlsvalidator import ISwPreUrlsValidator -from SoftwarePreConfigValid.swpreconfigvalidator import ISwPreConfigValidator -from SoftwarePostStateValid.swpoststatevalidator import ISwPostStateValidator -from SoftwarePostSecurityValid.swpostsecurityvalidator import ISwPostSecurityValidator -from NwLinksValid.nwlinksvalidator import INwLinksValidator -from ResourceModelValid.resmodvalidator import IResModValidator - - -# pylint: disable=too-many-public-methods -class Loader(): - """Loader class - main object context holder. - """ - _swvalidator_loader = None - - def __init__(self): - """Loader ctor - initialization method. - - All data is read from configuration each time Loader instance is - created. It is up to creator to maintain object life cycle if this - behavior is unwanted. - """ - self._swpreurlsvalidator_loader = LoaderServant( - settings.getValue('SW_PRE_URLS_VALID_DIR'), - settings.getValue('SW_PRE_URLS_VALIDATOR'), - ISwPreUrlsValidator) - self._swpreconfigvalidator_loader = LoaderServant( - settings.getValue('SW_PRE_CONFIG_VALID_DIR'), - settings.getValue('SW_PRE_CONFIG_VALIDATOR'), - ISwPreConfigValidator) - self._swpoststatevalidator_loader = LoaderServant( - settings.getValue('SW_POST_STATE_VALID_DIR'), - settings.getValue('SW_POST_STATE_VALIDATOR'), - ISwPostStateValidator) - self._swpostsecurityvalidator_loader = LoaderServant( - settings.getValue('SW_POST_SECURITY_VALID_DIR'), - settings.getValue('SW_POST_SECURITY_VALIDATOR'), - ISwPostSecurityValidator) - self._nwlinksvalidator_loader = LoaderServant( - settings.getValue('NW_LINKS_VALID_DIR'), - settings.getValue('NW_LINKS_VALIDATOR'), - INwLinksValidator) - self._resmodvalidator_loader = LoaderServant( - settings.getValue('RES_MOD_VALID_DIR'), - settings.getValue('RES_MOD_VALIDATOR'), - IResModValidator) - - def get_swpreurlsvalidator(self): - """ Returns a new instance configured Software Validator - :return: ISwPreUrlsValidator implementation if available, None otherwise - """ - return self._swpreurlsvalidator_loader.get_class()() - - def get_swpreurlsvalidator_class(self): - """Returns type of currently configured Software Validator. - - :return: Type of ISwPreUrlsValidator implementation if available. - None otherwise. - """ - return self._swpreurlsvalidator_loader.get_class() - - def get_swpreurlsvalidators(self): - """ - Get Prevalidators - """ - return self._swpreurlsvalidator_loader.get_classes() - - def get_swpreurlsvalidators_printable(self): - """ - Get Prevalidators for printing - """ - return self._swpreurlsvalidator_loader.get_classes_printable() - - def get_swpreconfigvalidator(self): - """ Returns a new instance configured Software Validator - :return: ISwPreConfigValidator implementation if available, None otherwise - """ - return self._swpreconfigvalidator_loader.get_class()() - - def get_swpreconfigvalidator_class(self): - """Returns type of currently configured Software Validator. - - :return: Type of ISwPreConfigValidator implementation if available. - None otherwise. - """ - return self._swpreconfigvalidator_loader.get_class() - - def get_swpreconfigvalidators(self): - """ - Get Prevalidators - """ - return self._swpreconfigvalidator_loader.get_classes() - - def get_swpreconfigvalidators_printable(self): - """ - Get Prevalidators for printing - """ - return self._swpreconfigvalidator_loader.get_classes_printable() - - def get_swpoststatevalidator(self): - """ Returns a new instance configured Software Validator - :return: ISwPostStateValidator implementation if available, None otherwise - """ - return self._swpoststatevalidator_loader.get_class()() - - def get_swpoststatevalidator_class(self): - """Returns type of currently configured Software Validator. - - :return: Type of ISwPostStateValidator implementation if available. - None otherwise. - """ - return self._swpoststatevalidator_loader.get_class() - - def get_swpoststatevalidators(self): - """ - Get Postvalidators - """ - return self._swpoststatevalidator_loader.get_classes() - - def get_swpoststatevalidators_printable(self): - """ - Get Postvalidators for printing - """ - return self._swpoststatevalidator_loader.get_classes_printable() - - def get_swpostsecurityvalidator(self): - """ Returns a new instance configured Software Validator - :return: ISwPostSecurityValidator implementation if available, None otherwise - """ - return self._swpostsecurityvalidator_loader.get_class()() - - def get_swpostsecurityvalidator_class(self): - """Returns type of currently configured Software Validator. - - :return: Type of ISwPostSecurityValidator implementation if available. - None otherwise. - """ - return self._swpostsecurityvalidator_loader.get_class() - - def get_swpostsecurityvalidators(self): - """ - Get Postvalidators - """ - return self._swpostsecurityvalidator_loader.get_classes() - - def get_swpostsecurityvalidators_printable(self): - """ - Get Postvalidators for printing - """ - return self._swpostsecurityvalidator_loader.get_classes_printable() - - def get_nwlinksvalidator(self): - """ Returns a new instance configured Nw-Links Validator - :return: INwLinksValidator implementation if available, None otherwise - """ - return self._nwlinksvalidator_loader.get_class()() - - def get_nwlinksvalidator_class(self): - """Returns type of currently configured Nw-Links Validator. - - :return: Type of NwLinksValidator implementation if available. - None otherwise. - """ - return self._nwlinksvalidator_loader.get_class() - - def get_nwlinksvalidators(self): - """ - Get Linkvalidators - """ - return self._nwlinksvalidator_loader.get_classes() - - def get_nwlinksvalidators_printable(self): - """ - Get Linkvalidators for printing - """ - return self._nwlinksvalidator_loader.get_classes_printable() - - def get_resmodvalidator(self): - """ Returns a new instance configured Nw-Links Validator - :return: IResModValidator implementation if available, None otherwise - """ - return self._resmodvalidator_loader.get_class()() - - def get_resmodvalidator_class(self): - """Returns type of currently configured Nw-Links Validator. - - :return: Type of ResModValidator implementation if available. - None otherwise. - """ - return self._resmodvalidator_loader.get_class() - - def get_resmodvalidators(self): - """ - Get ResoureModelValidators - """ - return self._resmodvalidator_loader.get_classes() - - def get_resmodvalidators_printable(self): - """ - Get ResoureModelValidators for printing - """ - return self._resmodvalidator_loader.get_classes_printable() diff --git a/sdv/core/loader/loader_servant.py b/sdv/core/loader/loader_servant.py deleted file mode 100644 index 4e55c67..0000000 --- a/sdv/core/loader/loader_servant.py +++ /dev/null @@ -1,183 +0,0 @@ -# Copyright 2020 Intel Corporation, Spirent Communications. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -Loader Support Module. -""" - -import os -from os import sys -import imp -import fnmatch -import logging -from conf import settings - - -class LoaderServant(): - """Class implements basic dynamic import operations. - """ - _class_name = None - _path = None - _interface = None - - def __init__(self, path, class_name, interface): - """LoaderServant constructor - - Intializes all data needed for import operations. - - Attributes: - path: path to directory which contains implementations derived from - interface. - class_name: Class name which will be returned in get_class - method, if such definition exists in directory - represented by path, - interface: interface type. Every object which doesn't - implement this particular interface will be - filtered out. - """ - self._class_name = class_name - self._path = path - self._interface = interface - - def get_class(self): - """Returns class type based on parameters passed in __init__. - - :return: Type of the found class. - None if class hasn't been found - """ - - return self.load_module(path=self._path, - interface=self._interface, - class_name=self._class_name) - - def get_classes(self): - """Returns all classes in path derived from interface - - :return: Dictionary with following data: - - key: String representing class name, - - value: Class type. - """ - return self.load_modules(path=self._path, - interface=self._interface) - - def get_classes_printable(self): - """Returns all classes derived from _interface found in path - - :return: String - list of classes in printable format. - """ - - out = self.load_modules(path=self._path, - interface=self._interface) - results = [] - - # sort modules to produce the same output everytime - for (name, mod) in sorted(out.items()): - desc = (mod.__doc__ or 'No description').strip().split('\n')[0] - results.append((name, desc)) - - header = 'Classes derived from: ' + self._interface.__name__ - output = [header + '\n' + '=' * len(header) + '\n'] - - for (name, desc) in results: - output.append('* %-18s%s' % ('%s:' % name, desc)) - - output.append('') - - output.append('') - - return '\n'.join(output) - - @staticmethod - def load_module(path, interface, class_name): - """Imports everything from given path and returns class type - - This is based on following conditions: - - Class is derived from interface, - - Class type name matches class_name. - - :return: Type of the found class. - None if class hasn't been found - """ - - results = LoaderServant.load_modules( - path=path, interface=interface) - - if class_name in results: - logging.info( - "Class found: %s.", class_name) - return results.get(class_name) - - return None - - @staticmethod - def load_modules(path, interface): - """Returns dictionary of class name/class type found in path - - This is based on following conditions: - - classes found under path are derived from interface. - - class is not interface itself. - - :return: Dictionary with following data: - - key: String representing class name, - - value: Class type. - """ - result = {} - - for _, mod in LoaderServant._load_all_modules(path): - # find all classes derived from given interface, but suppress - # interface itself and any abstract class starting with iface name - gens = dict((k, v) for (k, v) in list(mod.__dict__.items()) - if isinstance(v, type) and - issubclass(v, interface) and - not k.startswith(interface.__name__)) - if gens: - for (genname, gen) in list(gens.items()): - result[genname] = gen - return result - - @staticmethod - def _load_all_modules(path): - """Load all modules from ``path`` directory. - - This is based on the design used by OFTest: - https://github.com/floodlight/oftest/blob/master/oft - - :param path: Path to a folder of modules. - - :return: List of modules in a folder. - """ - mods = [] - - for root, _, filenames in os.walk(path): - # Iterate over each python file - for filename in fnmatch.filter(filenames, '[!.]*.py'): - modname = os.path.splitext(os.path.basename(filename))[0] - - # skip module load if it is excluded by configuration - if modname in settings.getValue('EXCLUDE_MODULES'): - continue - - try: - if modname in sys.modules: - mod = sys.modules[modname] - else: - mod = imp.load_module( - modname, *imp.find_module(modname, [root])) - except ImportError: - logging.error('Could not import file %s', filename) - raise - - mods.append((modname, mod)) - - return mods diff --git a/sdv/pdf/template/cloud_common.json b/sdv/pdf/template/cloud_common.json new file mode 100755 index 0000000..7457308 --- /dev/null +++ b/sdv/pdf/template/cloud_common.json @@ -0,0 +1,477 @@ +{ + "_comment_head": "Maintainer - Sridhar Rao ", + "_comment_head1": "User should Configure all profiles. Add new, if reqd.", + "_comment_head2": "User should Configure the roles", + "_comment_head3": "All infos should be filled by the user", + "_comment_head4": "The servers data will be automatically generated", + "_comment_info1": "All Infos", + "management_info": { + "owner": "", + "area_name": "", + "area_center_name": "", + "room_id": "", + "city": "", + "timezone": "", + "resource_pool_id": "", + "resource_pool_name": "", + "resource_pool_type": "" + }, + "user_info": [ + { + "_comment_users1": " Access Type: PIM, VIM, etc.", + "_comment_users2": " Endpoint: Server, Switch, VIM, etc.", + "access_type": "", + "endpoint": "", + "auth_type": "", + "username": "", + "password": "", + "pub_key": "", + "passphrase": "", + "tls_ca_cert": "", + "tls_cert": "", + "tls_key": "", + "email": "" + } + ], + "ntp_info": { + "primary_ip": "", + "primary_zone": "", + "secondary_ip": "", + "secondary_zone": "" + }, + "syslog_info": { + "server_ip": "", + "transport": "" + }, + "dns_info": [ + { + "name": "", + "domain": "", + "servers": [ + { + "ip": "" + } + ] + } + ], + "proxy_info": { + "address": "", + "port": "", + "user": "", + "password": "" + }, + "ldap_info": { + "base_url": "", + "url": "", + "auth_path": "", + "common_name": "", + "subdomain": "", + "domain": "" + }, + "_comment_deployment": " Type can be OOK or NOOK, block storage method is rbd or iscsi", + "deployment_info": { + "high_availability": "", + "introspection": "", + "deployment_type": "", + "installer_used": "", + "workload_vnf": "", + "workload_cnf": "", + "sdn_controller": "", + "sdn_controller_version": "", + "sdn_controller_nbapps": "", + "vnfm": "", + "vnfm_version": "", + "data_plane_used": "", + "ironic_deploy_interface": "", + "ip_type": "", + "external_storage_cluster": "", + "blk_str_connect_method": "" + }, + "jumphost_info": { + "ip": "", + "name": "" + }, + "rack_info": [ + { + "rack_id": "", + "rack_details": { + "rack_name": "", + "rack_description": "", + "rack_az": "", + "rack_room": "", + "rack_raw": "", + "rack_number": "" + } + } + ], + "storage_cluster_info": { + "name": "", + "cluster_type": "", + "vendor": "", + "version": "", + "cluster_id": "", + "auth_type": "", + "username": "", + "password": "", + "certificate_location": "", + "client_key": "", + "mon_host_ips": [ + { + "ip": "" + } + ], + "public_cidr": "", + "cluster_cidr": "", + "nodes": [ + { + "name": "", + "id": "" + } + ], + "pools": [ + { + "key": "", + "value": "" + } + ], + "max_quota_capacity": "", + "az_name": "", + "backup_policy": "", + "networks": [ + { + "name": "" + } + ] + }, + "_comment_info2": "End of Information - Except Software-INFO", + "bios_profiles": [ + { + "profile_name": "", + "bios_info": { + "bios_version": "", + "bios_mode": "", + "bootstrap_proto": "", + "hyperthreading_enabled": "", + "_comment": "C4_C6_MLC-STR_MLC-SPA_DCU_DCA_RAS_TURBO", + "bios_setting": "" + } + } + ], + "bmc_profiles": [ + { + "profile_name": "", + "bmc_info": { + "version": "" + } + } + ], + "processor_profiles": [ + { + "profile_name": "", + "profile_info": { + "manufacturer": "", + "generation": "", + "speed": "", + "model": "", + "architecture": "", + "cpu_cflags": "", + "cache_size": "", + "numas": [ + { + "node_id": "", + "cpu_set": "" + } + ] + } + } + ], + "disks_profiles": [ + { + "profile_name": "", + "profile_info": [ + { + "alias": "", + "vendor": "", + "address": "", + "size": "", + "model": "", + "dev_type": "", + "rotation": "", + "bus": "", + "logical_name": "" + } + ] + } + ], + "nic_profiles": [ + { + "profile_name": "", + "profile_info": [ + { + "alias": "", + "name": "", + "address": "", + "dev_type": "", + "bus": "", + "sriov_capable": "", + "numa_id": "" + } + ] + } + ], + "hardware_profiles": [ + { + "profile_name": "", + "profile_id": "", + "profile_info": { + "manufacturer": "", + "sku": "", + "model": "", + "generation": "", + "bios_profile": "", + "bmc_profile": "", + "processor_profile": "", + "memory": "", + "disks_profile": "", + "nics_profile": "" + } + } + ], + "switch_profiles": [ + { + "profile_name": "", + "profile_id": "", + "profile_info": { + "manufacturer": "", + "sku": "", + "model": "", + "generation": "", + "bios_profile": "", + "bmc_profile": "", + "nics_profile": "" + } + } + ], + "_comment_hw": " Hardware Information is complete", + "storage_profile": [ + { + "name": "", + "bootdrive": "", + "bd_partitions": [ + { + "name": "", + "size": "", + "bootable": "", + "filesystem": { + "mountpoint": "", + "fstype": "", + "mount_options": "" + } + } + ], + "data_devices": [ + { + "name": "", + "partitions": [ + { + "name": "ceph", + "size": "available", + "filesystem": { + "mountpoint": "/var/lib/ceph", + "fstype": "ext4", + "mount_options": "defaults" + } + } + ] + } + ], + "journal_devices": [ + { + "name": "" + } + ] + } + ], + "_comment_nw1": "Network Info, Please include IPMI & Physnets info too", + "networks": [ + { + "name": "", + "vips": [ + { + "name": "", + "ip": "" + } + ], + "tunnel_type": "", + "tunnel_id": "", + "tunnel_id_range": "", + "mtu": "", + "routedomain": "", + "cidr": "", + "dns": "", + "routes": [ + { + "subnet": "", + "gateway": "", + "metric": "", + "routedomain": "" + } + ], + "allocation_pools": [ + { + "type": "", + "start": "", + "end": "" + } + ], + "v6_cidr": "", + "v6_allocation_pools": [ + { + "type": "", + "start": "", + "end": "" + } + ] + } + ], + "_comment_nw_2": "These are specific to Infrastructure manager", + "physical_networks": [ + { + "name": "external", + "cidr": "", + "type": "flat" + } + ], + "_comment_nw3": " type: trunk (airship), bond, interface, bridge", + "network_link": [ + { + "name": "", + "type": "", + "bonding_mode": "", + "mtu": "", + "linkspeed": "auto", + "trunking_mode": "", + "trunking_default_nw": "", + "metadata": [ + { + "key": "", + "value": "" + } + ], + "members": [ + { + "name": "", + "type": "" + } + ], + "vid": "", + "vf_count": "" + } + ], + "_comment_nw4": "The link_name could be i/f, bond, bridges", + "_comment_nw5": "These profiles are mapped to roles", + "link_nw_mapping_profiles": [ + { + "profile_name": "", + "profile_data": [ + { + "link_name": "", + "link_type": "", + "networks": [ + { + "name": "" + } + ], + "use_dhcp": "" + } + ] + } + ], + "platform_profiles": [ + { + "profile_name": "", + "os": "", + "rt_kvm": "", + "kernel_version": "", + "kernel_parameters": "", + "isolated_cpus": "", + "vnf_cores": "", + "os_reserved_cores": " ", + "hugepage_count": "", + "hugepages": [ + { + "hugepage_count": "", + "hugepage_size": "" + } + ], + "iommu": "", + "vswitch_daemon_cores": " ", + "vswitch_type": "", + "vswitch_uio_driver": "", + "vswitch_mem_channels": "", + "vswitch_socket_memory": "", + "vswitch_pmd_cores": "", + "vswitch_dpdk_lcores": "", + "vswitch_dpdk_rxqs": "", + "vswitch_options": "" + } + ], + "switch_topology": [ + { + "top_id": "", + "top_name": "", + "vertices": [ + { + "vertex_id": "", + "node1_id": "", + "node1_port": "", + "node2_id": "", + "node2_port": "", + "vertex_type": "" + } + ] + } + ], + "_comment_role1": "User has to configure this - What profile to use for a role", + "_comment_role2": "Based on this server_info will be autogenerated for all servers", + "roles": [ + { + "name": "", + "hostname_prefix": "", + "hostname_suffix": "", + "hostname_number_start": "", + "count": "", + "hardware_profile": "", + "interface_mapping": "", + "storage_mapping": "", + "platform_profile": "", + "sw_set_name": "", + "metadata": [ + { + "on_count_condition": "", + "count": "", + "key": "", + "value": "" + } + ] + } + ] + "host_aggregates": [ + { + "aggregate_name": "", + "properties": [ + { + "key": "", + "value": "" + } + ], + "servers": [ + { + "identifier": "", + "ilo_ip": "", + "hostname": "" + } + ] + } + ] +} \ No newline at end of file diff --git a/sdv/pdf/template/cloud_extrapolate.json b/sdv/pdf/template/cloud_extrapolate.json new file mode 100755 index 0000000..d2cc6f7 --- /dev/null +++ b/sdv/pdf/template/cloud_extrapolate.json @@ -0,0 +1,29 @@ +{ + "_comment_head": "Maintainer - Sridhar Rao ", + "_comment_ex1": "C:City, A:Area, R:Room, N:Unique Number", + "_comment_ex2": "All are 2 characters. City-Capitals, Area-Small", + "extrapolation_info": { + "ilo_password": "CID-AID-RID-NID", + "ilo_user": "owner", + "ip_increment": "" + }, + "_comment_servers1": "This will be auto generated", + "_comment_servers2": "This describes the entire cloud.", + "servers": [ + { + "role_name": "", + "device_name": "", + "az_name": " ", + "ha_name": " ", + "rack": "", + "ilo_info": { + "ip": "", + "user": "", + "password": "" + }, + "service_info": { + "service_ip": "" + } + } + ] +} \ No newline at end of file diff --git a/sdv/pdf/template/cloud_kubernetes.json b/sdv/pdf/template/cloud_kubernetes.json new file mode 100755 index 0000000..269782a --- /dev/null +++ b/sdv/pdf/template/cloud_kubernetes.json @@ -0,0 +1,78 @@ +{ + "_comment_head": "Maintainer - Sridhar Rao ", + "vim_info": { + "vim_name": " ", + "vim_id": " ", + "vendor": " ", + "version": " ", + "installer": "", + "deployment_style": "", + "container_orchestrator": "", + "storage_type": "" + }, + "vim_functional": { + "kubevirt_support":"", + "ingress_approaches": "", + "egress_approaches": "", + "prev_mod_containers": "", + "hostdir_as_vols": "", + "host_ns_use": "", + "net_raw_admin_cap": "", + "_comment_cpu_manager": "Type could be none or static", + "cpu_manager_policy": { + "type": "", + "kube_reserved": "", + "system_reserved": "", + "reserved_cpus": "", + "full_pcpus_only": "" + }, + "_comment_topo_manager": "Type could be none, best-effort, restricted single-numa-node", + "topo_manager_policy": { + "scope": "", + "type": "" + }, + "use_of_service_mesh": "", + "k8s_api_access_from_pod": "", + "liveliness_probe": "", + "readiness_probe": "", + "cnis_supported": "", + "device_plugins_supported":"", + "scheduler_filters": "", + "cpu_allocation_ratio": "", + "legacy_helm_support":"" + }, + "jumphost_info": { + "ip": "", + "name": "" + }, + "_comment_sw1": "Software Begins", + "kubernetes_sw_profiles": [ + { + "profile_name": "", + "sw_list": [ + { + "name": "", + "version": "" + } + ] + } + ], + "infra_sw_profiles": [ + { + "profile_name": "", + "sw_list": [ + { + "name": "", + "version": "" + } + ] + } + ], + "software_set": [ + { + "set_name": "", + "infrasw_profile": "", + "kubernetes_profile": "" + } + ] +} diff --git a/sdv/pdf/template/cloud_openstack.json b/sdv/pdf/template/cloud_openstack.json new file mode 100755 index 0000000..30b297d --- /dev/null +++ b/sdv/pdf/template/cloud_openstack.json @@ -0,0 +1,111 @@ +{ + "_comment_head": "Maintainer - Sridhar Rao ", + "vim_info": { + "vim_name": " ", + "vim_id": " ", + "vendor": " ", + "version": " ", + "installer": "", + "deployment_style": "", + "container_orchestrator": "", + "storage_type": "" + }, + "vim_functional": { + "scheduler_filters": "", + "cpu_allocation_ratio": "" + }, + "jumphost_info": { + "ip": "", + "name": "" + }, + "undercloud_ook": { + "dns": { + "cluster_domain": "", + "service_ip": "" + }, + "etcd": { + "service_ip": "", + "container_port": "", + "haproxy_port": "" + }, + "masters": [ + { + "hostname": "" + } + ], + "networking": { + "type": "", + "interface_used": "", + "api_service_ip": "", + "etcd_service_ip": "", + "pod_cidr": "", + "service_cidr": "", + "apiserver_port": "", + "haproxy_port": "", + "servicenode_port_range": "" + }, + "kvps": [ + { + "key": "", + "value": "" + } + ] + }, + "undercloud_ooo": { + "host_name": "", + "local_ip": "", + "public_host": "", + "admin_host": "", + "local_interface": "", + "inspection_interface": "", + "networking": { + "ctrlplane_cidr": "", + "ctrlplane_ip_start": "", + "ctrlplane_ip_end": "", + "inspection_range": "", + "gateway": "" + } + }, + "_comment_sw1": "Software Begins", + "undercloud_sw_profiles": [ + { + "profile_name": "", + "sw_list": [ + { + "name": "", + "version": "" + } + ] + } + ], + "openstack_sw_profiles": [ + { + "profile_name": "", + "sw_list": [ + { + "name": "", + "version": "" + } + ] + } + ], + "infra_sw_profiles": [ + { + "profile_name": "", + "sw_list": [ + { + "name": "", + "version": "" + } + ] + } + ], + "software_set": [ + { + "set_name": "", + "undercloud_profile": "", + "infrasw_profile": "", + "openstack_profile": "" + } + ] +} \ No newline at end of file diff --git a/sdv/valid b/sdv/valid deleted file mode 100755 index e06afdd..0000000 --- a/sdv/valid +++ /dev/null @@ -1,276 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright 2020 Spirent Communications -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""VALID main script. -""" - -import logging -import os -import sys -import argparse -import time -import datetime -from conf import settings -import core.component_factory as component_factory -from core.loader import Loader - -VERBOSITY_LEVELS = { - 'debug': logging.DEBUG, - 'info': logging.INFO, - 'warning': logging.WARNING, - 'error': logging.ERROR, - 'critical': logging.CRITICAL -} - -_CURR_DIR = os.path.dirname(os.path.realpath(__file__)) -_LOGGER = logging.getLogger() - -def parse_arguments(): - """ - Parse command line arguments. - """ - class _SplitValidationTypesAction(argparse.Action): - """ - Parse and split '--test-params' arguments. - - This expects either a single list validation types - e.g: --validation-type 'configuration, state' - """ - def __call__(self, parser, namespace, values, option_string=None): - values = values.strip() - input_list = values.split(',') - print(input_list) - parameter_list = [] - for vtype in input_list: - vtype = vtype.strip() - if vtype: - vtype = vtype.lower() - parameter_list.append(str(vtype)) - # results = {'_PARAMS_LIST':parameter_list} - setattr(namespace, self.dest, parameter_list) - - parser = argparse.ArgumentParser(prog=__file__, formatter_class= - argparse.ArgumentDefaultsHelpFormatter) - parser.add_argument('--version', action='version', version='%(prog)s 0.1') - parser.add_argument('--list-validations', action='store_true', - help='list all validations') - parser.add_argument('--list-vurls', action='store_true', - help='list all Software pre-dep Hyperlinks validations and exit') - parser.add_argument('--list-vconfig', action='store_true', - help='list all Software pre-dep Configuration validations and exit') - parser.add_argument('--list-vstate', action='store_true', - help='list all Software post-dep State validations and exit') - parser.add_argument('--list-vsecurity', action='store_true', - help='list all Software post-dep Security validations and exit') - parser.add_argument('--list-vnwlinks', action='store_true', - help='list all Network-Links validations and exit') - parser.add_argument('--list-vresmod', action='store_true', - help='list all Resource-Model validations and exit') - parser.add_argument('--validation', action=_SplitValidationTypesAction, - help='The type of Validation to perform - resmod, nwlinks,\ - urls, configuration, state, security') - args = vars(parser.parse_args()) - - return args - - -def configure_logging(level): - """Configure logging. - """ - name, ext = os.path.splitext(settings.getValue('LOG_FILE_DEFAULT')) - rename_default = "{name}_{uid}{ex}".format(name=name, - uid=settings.getValue( - 'LOG_TIMESTAMP'), - ex=ext) - log_file_default = os.path.join( - settings.getValue('RESULTS_PATH'), rename_default) - _LOGGER.setLevel(logging.DEBUG) - stream_logger = logging.StreamHandler(sys.stdout) - stream_logger.setLevel(VERBOSITY_LEVELS[level]) - stream_logger.setFormatter(logging.Formatter( - '[%(levelname)-5s] %(asctime)s : (%(name)s) - %(message)s')) - _LOGGER.addHandler(stream_logger) - file_logger = logging.FileHandler(filename=log_file_default) - file_logger.setLevel(logging.DEBUG) - file_logger.setFormatter(logging.Formatter( - '%(asctime)s : %(message)s')) - _LOGGER.addHandler(file_logger) - -def handle_list_options(args): - """ Process --list cli arguments if needed - - :param args: A dictionary with all CLI arguments - """ - if args['list_vurls']: - print(Loader().get_swpreurlsvalidators_printable()) - sys.exit(0) - - if args['list_vconfig']: - print(Loader().get_swpreconfigvalidators_printable()) - sys.exit(0) - - if args['list_vstate']: - print(Loader().get_swpoststatevalidators_printable()) - sys.exit(0) - - if args['list_vsecurity']: - print(Loader().get_swpostsecurityvalidators_printable()) - sys.exit(0) - - if args['list_vnwlinks']: - print(Loader().get_nwlinksvalidators_printable()) - sys.exit(0) - - -# Sflo: questions/3041986/apt-command-line-interface-like-yes-no-input -def sanity_check(question, default="yes"): - """Ask a yes/no question via raw_input() and return their answer. - - "question" is a string that is presented to the user. - "default" is the presumed answer if the user just hits . - It must be "yes" (the default), "no" or None (meaning - an answer is required of the user). - - The "answer" return value is True for "yes" or False for "no". - """ - valid = {"yes": True, "y": True, "ye": True, - "no": False, "n": False} - if default is None: - prompt = " [y/n] " - elif default == "yes": - prompt = " [Y/n] " - elif default == "no": - prompt = " [y/N] " - else: - raise ValueError("invalid default answer: '%s'" % default) - - while True: - sys.stdout.write(question + prompt) - choice = input().lower() - if default is not None and choice == '': - return valid[default] - elif choice in valid: - return valid[choice] - else: - sys.stdout.write("Please respond with 'yes' or 'no' " - "(or 'y' or 'n').\n") - - -def main(): - """Main function. - """ - args = parse_arguments() - - if not sanity_check("Have you configured the testcases ?"): - print("Please configure testcases and rerun") - sys.exit(1) - - print(args) - - # define the timestamp to be used by logs and results - date = datetime.datetime.fromtimestamp(time.time()) - timestamp = date.strftime('%Y-%m-%d_%H-%M-%S') - settings.setValue('LOG_TIMESTAMP', timestamp) - - - # configure settings - settings.load_from_dir(os.path.join(_CURR_DIR, 'conf')) - - # if required, handle list-* operations - handle_list_options(args) - - results_dir = "results_" + timestamp - results_path = os.path.join(settings.getValue('LOG_DIR'), results_dir) - settings.setValue('RESULTS_PATH', results_path) - # create results directory - if not os.path.exists(results_path): - os.makedirs(results_path) - - configure_logging(settings.getValue('VERBOSITY')) - - loader = Loader() - validations = settings.getValue('VALIDATIONS') - - # Get the Validation Types. - if args['validation']: - validations = args.validation_type - - validator_objs = [] - for validation in validations: - if 'urls' in validation: - validators = loader.get_swpreurlsvalidators() - if settings.getValue('SW_PRE_URLS_VALIDATOR') not in validators: - _LOGGER.error('There are no urls validators matching \'%s\' found in' - ' \'%s\'. Exiting...', settings.getValue('SW_PRE_URLS_VALIDATOR'), - settings.getValue('SW_PRE_URLS_VALID_DIR')) - sys.exit(1) - validator_ctrl = component_factory.create_swpreurlsvalidator( - loader.get_swpreurlsvalidator_class()) - validator_objs.append(validator_ctrl) - if 'configuration' in validation: - validators = loader.get_swpreconfigvalidators() - if settings.getValue('SW_PRE_CONFIG_VALIDATOR') not in validators: - _LOGGER.error('There are no configvalidators matching \'%s\' found in' - ' \'%s\'. Exiting...', settings.getValue('SW_PRE_CONFIG_VALIDATOR'), - settings.getValue('SW_PRE_CONFIG_VALID_DIR')) - sys.exit(1) - validator_ctrl = component_factory.create_swpreconfigvalidator( - loader.get_swpreconfigvalidator_class()) - validator_objs.append(validator_ctrl) - if 'state' in validation: - validators = loader.get_swpoststatevalidators() - if settings.getValue('SW_POST_STATE_VALIDATOR') not in validators: - _LOGGER.error('There are no statevalidators matching \'%s\' found in' - ' \'%s\'. Exiting...', settings.getValue('SW_POST_STATE_VALIDATOR'), - settings.getValue('SW_POST_STATE_VALID_DIR')) - sys.exit(1) - validator_ctrl = component_factory.create_swpoststatevalidator( - loader.get_swpoststatevalidator_class()) - validator_objs.append(validator_ctrl) - if 'security' in validation: - validators = loader.get_swpostsecurityvalidators() - if settings.getValue('SW_POST_SECURITY_VALIDATOR') not in validators: - _LOGGER.error('There are no securityvalidators matching \'%s\' found in' - ' \'%s\'. Exiting...', settings.getValue('SW_POST_SECURITY_VALIDATOR'), - settings.getValue('SW_POST_SECURITY_VALID_DIR')) - sys.exit(1) - validator_ctrl = component_factory.create_swpostsecurityvalidator( - loader.get_swpostsecurityvalidator_class()) - validator_objs.append(validator_ctrl) - if 'nwlinks' in validation: - validators = loader.get_nwlinksvalidators() - if settings.getValue('NW_LINKS_VALIDATOR') not in validators: - _LOGGER.error('There are no nwlinksvalidators matching \'%s\' found in' - ' \'%s\'. Exiting...', settings.getValue('NW_LINKS_VALIDATOR'), - settings.getValue('NW_LINKS_VALID_DIR')) - sys.exit(1) - validator_ctrl = component_factory.create_nwlinksvalidator( - loader.get_nwlinksvalidator_class()) - validator_objs.append(validator_ctrl) - if 'resmod' in validation: - validators = loader.get_resmodvalidators() - if settings.getValue('RES_MOD_VALIDATOR') not in validators: - _LOGGER.error('There are no resmodvalidators matching \'%s\' found in' - ' \'%s\'. Exiting...', settings.getValue('RES_MOD_VALIDATOR'), - settings.getValue('RES_MOD_VALID_DIR')) - sys.exit(1) - validator_ctrl = component_factory.create_resmodvalidator( - loader.get_resmodvalidator_class()) - validator_objs.append(validator_ctrl) - - -if __name__ == "__main__": - main() -- cgit 1.2.3-korg