aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoropensource-tnbt <sridhar.rao@spirent.com>2020-08-01 22:12:02 +0530
committeropensource-tnbt <sridhar.rao@spirent.com>2020-08-03 14:53:00 +0530
commit42af6fa2ef682d28d12952831aa0c74fd647daad (patch)
tree27f73a3410005b77be7b92352efe32fc1f05a662
parentd5a010aa2e40cafabf012b096f508b144f9d3d8b (diff)
SDV: Reorganize subprojects
This patch reorganizes the subprojects. Pylint Fixes. Additional Configurations Signed-off-by: Sridhar K. N. Rao <sridhar.rao@spirent.com> Change-Id: I021f33f035d7b2dcfded230ca40337afdac183e8
-rw-r--r--.gitignore56
-rw-r--r--sdv/NwLinksValid/nwlinksvalidator.py6
-rwxr-xr-xsdv/ResourceModelValid/__init__.py17
-rw-r--r--sdv/ResourceModelValid/resmodvalidator.py34
-rwxr-xr-xsdv/SoftwarePostSecurityValid/__init__.py19
-rw-r--r--sdv/SoftwarePostSecurityValid/swpostsecurityvalidator.py (renamed from sdv/SoftwarePostValid/swpostvalidator.py)14
-rwxr-xr-xsdv/SoftwarePostStateValid/__init__.py (renamed from sdv/SoftwarePostValid/__init__.py)2
-rw-r--r--sdv/SoftwarePostStateValid/swpoststatevalidator.py36
-rwxr-xr-xsdv/SoftwarePreConfigValid/__init__.py19
-rw-r--r--sdv/SoftwarePreConfigValid/swpreconfigvalidator.py34
-rwxr-xr-xsdv/SoftwarePreUrlsValid/__init__.py (renamed from sdv/SoftwarePreValid/__init__.py)2
-rw-r--r--sdv/SoftwarePreUrlsValid/airship.py (renamed from sdv/SoftwarePreValid/airship.py)118
-rw-r--r--sdv/SoftwarePreUrlsValid/swpreurlsvalidator.py (renamed from sdv/SoftwarePreValid/swprevalidator.py)14
-rw-r--r--sdv/conf/00_common.conf7
-rw-r--r--sdv/conf/01_swpreurlsvalid.conf24
-rw-r--r--sdv/conf/01_swprevalid.conf33
-rw-r--r--sdv/conf/02_swpostvalid.conf4
-rw-r--r--sdv/conf/02_swpreconfigvalid.conf20
-rw-r--r--sdv/conf/03_nwlinksvalid.conf1
-rw-r--r--sdv/conf/03_swpoststatevalid.conf26
-rw-r--r--sdv/conf/04_swpostsecurityvalid.conf16
-rw-r--r--sdv/conf/05_nwlinksvalid.conf15
-rw-r--r--sdv/conf/06_resmodvalid.conf15
-rw-r--r--sdv/core/component_factory.py33
-rw-r--r--sdv/core/loader/loader.py157
-rwxr-xr-xsdv/valid185
26 files changed, 655 insertions, 252 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..05a1aa0
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,56 @@
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*.confc
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+env/
+build/
+develop-eggs/
+dist/
+eggs/
+lib64/
+parts/
+sdist/
+var/
+*.egg-info/
+.installed.cfg
+*.egg
+
+# PyInstaller
+# Usually these files are written by a python script from a template
+# before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.coverage
+.cache
+nosetests.xml
+coverage.xml
+
+# Translations
+*.mo
+*.pot
+
+# Log files:
+*.log
+
+# Sphinx documentation
+
+# PyBuilder
+target/
+
+# SublimeText
+*.sublime-project
+*.sublime-workspace
diff --git a/sdv/NwLinksValid/nwlinksvalidator.py b/sdv/NwLinksValid/nwlinksvalidator.py
index 5e06590..314567b 100644
--- a/sdv/NwLinksValid/nwlinksvalidator.py
+++ b/sdv/NwLinksValid/nwlinksvalidator.py
@@ -29,10 +29,6 @@ class INwLinksValidator():
""" Default Validation values """
return True
- def validate_compute_node_links(self):
+ def validate(self):
""" Validating Compute Node Links"""
raise NotImplementedError('Please call an implementation.')
-
- def validate_control_node_links(self):
- """ Validating Controller Node Links"""
- raise NotImplementedError('Please call an implementation.')
diff --git a/sdv/ResourceModelValid/__init__.py b/sdv/ResourceModelValid/__init__.py
new file mode 100755
index 0000000..b3aebfd
--- /dev/null
+++ b/sdv/ResourceModelValid/__init__.py
@@ -0,0 +1,17 @@
+# 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
new file mode 100644
index 0000000..bc2ab9e
--- /dev/null
+++ b/sdv/ResourceModelValid/resmodvalidator.py
@@ -0,0 +1,34 @@
+# 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
new file mode 100755
index 0000000..2d85d6c
--- /dev/null
+++ b/sdv/SoftwarePostSecurityValid/__init__.py
@@ -0,0 +1,19 @@
+# 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/SoftwarePostValid/swpostvalidator.py b/sdv/SoftwarePostSecurityValid/swpostsecurityvalidator.py
index 4776123..0f40261 100644
--- a/sdv/SoftwarePostValid/swpostvalidator.py
+++ b/sdv/SoftwarePostSecurityValid/swpostsecurityvalidator.py
@@ -18,25 +18,19 @@ Implementors, please inherit from this class.
"""
-class ISwPostValidator():
+class ISwPostSecurityValidator():
""" Model for a Sw Validator """
def __init__(self):
""" Initialization of the Interface """
- self._default_swpost_validation = None
+ self._default_security_validation = None
@property
- def validation_swpost_defaults(self):
+ def validation_security_defaults(self):
""" Default Validation values """
return True
- def validate_configuration_mandatory(self):
+ def validate(self):
"""
Validating Mandatory Configuration
"""
raise NotImplementedError('Please call an implementation.')
-
- def validate_configuration_optional(self):
- """
- Validating Optional Configuration
- """
- raise NotImplementedError('Please call an implementation.')
diff --git a/sdv/SoftwarePostValid/__init__.py b/sdv/SoftwarePostStateValid/__init__.py
index 0a964b6..5349f90 100755
--- a/sdv/SoftwarePostValid/__init__.py
+++ b/sdv/SoftwarePostStateValid/__init__.py
@@ -16,4 +16,4 @@
"""
# flake8: noqa
-from SoftwarePostValid.swpostvalidator import *
+from SoftwarePostStateValid.swpoststatevalidator import *
diff --git a/sdv/SoftwarePostStateValid/swpoststatevalidator.py b/sdv/SoftwarePostStateValid/swpoststatevalidator.py
new file mode 100644
index 0000000..0c01034
--- /dev/null
+++ b/sdv/SoftwarePostStateValid/swpoststatevalidator.py
@@ -0,0 +1,36 @@
+# 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
new file mode 100755
index 0000000..7eb24f9
--- /dev/null
+++ b/sdv/SoftwarePreConfigValid/__init__.py
@@ -0,0 +1,19 @@
+# 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
new file mode 100644
index 0000000..a423354
--- /dev/null
+++ b/sdv/SoftwarePreConfigValid/swpreconfigvalidator.py
@@ -0,0 +1,34 @@
+# 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/SoftwarePreValid/__init__.py b/sdv/SoftwarePreUrlsValid/__init__.py
index 8307b66..c1f68ac 100755
--- a/sdv/SoftwarePreValid/__init__.py
+++ b/sdv/SoftwarePreUrlsValid/__init__.py
@@ -16,4 +16,4 @@
"""
# flake8: noqa
-from SoftwarePreValid.swprevalidator import *
+from SoftwarePreUrlsValid.swpreurlsvalidator import *
diff --git a/sdv/SoftwarePreValid/airship.py b/sdv/SoftwarePreUrlsValid/airship.py
index bd93aa2..324eaf1 100644
--- a/sdv/SoftwarePreValid/airship.py
+++ b/sdv/SoftwarePreUrlsValid/airship.py
@@ -21,9 +21,8 @@ import shutil
from pathlib import Path
import git
import urllib3
-import yaml
from conf import settings
-from SoftwarePreValid import swprevalidator
+from SoftwarePreUrlsValid import swpreurlsvalidator
def check_link(link):
@@ -55,7 +54,7 @@ def check_link(link):
return True
-class Airship(swprevalidator.ISwPreValidator):
+class Airship(swpreurlsvalidator.ISwPreUrlsValidator):
"""
Ariship Sw Validation
"""
@@ -101,7 +100,7 @@ class Airship(swprevalidator.ISwPreValidator):
return True
return False
- def validate_hyperlinks(self):
+ def validate(self):
"""
Hyperlink Validation
"""
@@ -154,114 +153,3 @@ class Airship(swprevalidator.ISwPreValidator):
if link.strip() not in self.locations:
print(link)
self.locations.append(link.strip())
-
- # pylint: disable=too-many-nested-blocks, too-many-boolean-expressions
- def validate_configuration_mandatory(self):
- """
- Configuration checking of mandatory parameters
- """
- if not self.manifest_exists_locally():
- self.clone_repo()
- # We will perform validation one-by-one:
- # The Operating System Flavor
- os_done = False
- os_filename = os.path.join(self.tmdirpath,
- 'global',
- 'software',
- 'charts',
- 'ucp',
- 'drydock',
- 'maas.yaml')
- with open(os_filename, 'r') as osref:
- osfiles = yaml.load_all(osref, Loader=yaml.FullLoader)
- for osf in osfiles:
- if ('data' in osf and
- 'values' in osf['data'] and
- 'conf' in osf['data']['values'] and
- 'maas' in osf['data']['values']['conf'] and
- 'images' in osf['data']['values']['conf']['maas'] and
- ('default_os' in
- osf['data']['values']['conf']['maas']['images'])):
- if (settings.getValue('OPERATING_SYSTEM') in
- osf['data']['values']['conf']['maas']['images'][
- 'default_os']):
- print('Operating System is VALID')
- os_done = True
- if not os_done:
- print("Operating System is INVALID")
-
- filesdir = os.path.join(self.dirpath,
- 'site',
- self.site_name,
- 'profiles',
- 'host')
- hostprofile = None
- os_ver_done = False
- if os.path.isdir(filesdir):
- for filename in os.listdir(filesdir):
- filename = os.path.join(filesdir, filename)
- with open(filename, 'r') as fileref:
- hostprofile = yaml.load(fileref, Loader=yaml.FullLoader)
- if 'data' in hostprofile:
- if 'platform' in hostprofile['data']:
- if 'image' in hostprofile['data']['platform']:
- if (hostprofile['data']['platform']['image'] in
- settings.getValue('OS_VERSION_NAME')):
- print('Operating System Version is VALID')
- os_ver_done = True
- break
- if not os_ver_done:
- print("Operating System Version is INVALID")
- # Virtualization - Hugepages and CPU Isolation
- hugepages_size_done = False
- hugepages_count_done = False
- filesdir = os.path.join(self.dirpath,
- 'type',
- 'cntt',
- 'profiles',
- 'hardware')
- if os.path.isdir(filesdir):
- for filename in os.listdir(filesdir):
- filename = os.path.join(filesdir, filename)
- with open(filename, 'r') as fileref:
- hwprofile = yaml.load(fileref, Loader=yaml.FullLoader)
- if ('data' in hwprofile and
- 'hugepages' in hwprofile['data'] and
- 'dpdk' in hwprofile['data']['hugepages']):
- if ('size' in hwprofile['data']['hugepages']['dpdk'] and
- (settings.getValue('HUGEPAGES_SIZE') in
- hwprofile['data']['hugepages']['dpdk']['size'])):
- print('Hugepages Size is VALID')
- else:
- print('Hugepages Size is INVALID')
- hugepages_size_done = True
- if ('count' in hwprofile['data']['hugepages']['dpdk'] and
- (settings.getValue('HUGEPAGES_COUNT') ==
- hwprofile['data']['hugepages']['dpdk']['count'])):
- print('Hugepages COUNT is VALID')
- else:
- print('Hugepages COUNT is INVALID')
- hugepages_count_done = True
- if hugepages_size_done and hugepages_count_done:
- break
-
- # Virtual Switch - Switch and Configuration
- # Openstack-Version
- filename = os.path.join(self.tmdirpath,
- 'global',
- 'software',
- 'config',
- 'versions.yaml')
- if os.path.exists(filename):
- if settings.getValue('OPENSTACK_VERSION') in open(filename).read():
- print('Openstack Version is valid')
- else:
- print('Openstack version if INVALID')
- # Openstack Services
- # Bootstrap
-
- def validate_configuration_optional(self):
- """
- Validate Optional COnfigurations
- """
- return False
diff --git a/sdv/SoftwarePreValid/swprevalidator.py b/sdv/SoftwarePreUrlsValid/swpreurlsvalidator.py
index bef141b..31604ee 100644
--- a/sdv/SoftwarePreValid/swprevalidator.py
+++ b/sdv/SoftwarePreUrlsValid/swpreurlsvalidator.py
@@ -18,25 +18,17 @@ Implementors, please inherit from this class.
"""
-class ISwPreValidator():
+class ISwPreUrlsValidator():
""" Model for a Sw Validator """
def __init__(self):
""" Initialization of the Interface """
self._default_swpre_validation = None
@property
- def validation_swpre_defaults(self):
+ def validation_swpreurls_defaults(self):
""" Default Validation values """
return True
- def validate_hyperlinks(self):
+ def validate(self):
""" Validate Hyperlinks"""
raise NotImplementedError('Please call an implementation.')
-
- def validate_configuration_mandatory(self):
- """ Validate Mandatory Configurations """
- raise NotImplementedError('Please call an implementation.')
-
- def validate_configuration_optional(self):
- """ Validate Optional Configurations """
- raise NotImplementedError('Please call an implementation.')
diff --git a/sdv/conf/00_common.conf b/sdv/conf/00_common.conf
index 5326ecb..f5e8a23 100644
--- a/sdv/conf/00_common.conf
+++ b/sdv/conf/00_common.conf
@@ -8,9 +8,12 @@ LOG_FILE_DEFAULT = 'valid-overall.log'
ROOT_DIR = os.path.normpath(os.path.join(
os.path.dirname(os.path.realpath(__file__)), '../'))
-SW_PRE_VALID_DIR = os.path.join(ROOT_DIR, 'SoftwarePreValid')
-SW_POST_VALID_DIR = os.path.join(ROOT_DIR, 'SoftwarePostValid')
+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'
diff --git a/sdv/conf/01_swpreurlsvalid.conf b/sdv/conf/01_swpreurlsvalid.conf
new file mode 100644
index 0000000..ddce229
--- /dev/null
+++ b/sdv/conf/01_swpreurlsvalid.conf
@@ -0,0 +1,24 @@
+# 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/01_swprevalid.conf b/sdv/conf/01_swprevalid.conf
deleted file mode 100644
index 46043ce..0000000
--- a/sdv/conf/01_swprevalid.conf
+++ /dev/null
@@ -1,33 +0,0 @@
-
-# Modify this value to any Installer projects that have
-# manifests (templates and configuration files)
-SW_PRE_VALIDATOR = 'Airship'
-
-# Mandatory Requirements [ Configuration Check ]
-OPENSTACK_VERSION = 'ocata'
-OPERATING_SYSTEM = 'centos'
-OS_VERSION_NAME = 'xenial'
-HUGEPAGES_SIZE = '1G'
-HUGEPAGES_COUNT = 32
-OPENSTACK_CUSTOM_SERVICE_LIST = ['barbican', 'sahara']
-VIRTUAL_SWITCH_COMPUTE = 'ovs'
-VIRTUAL_SWITCH_VERSION = '2.9.2'
-BOOTSTRAP_PROTOCOL = 'pxe'
-CPU_ISOLATION = '2-19,22-39'
-
-# 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'
-
-
-# Optional Requirements [Could be Installer Specific ]
-OVS_DPDK_ARGUMENTS = 'test'
-OVERCLOUD_LOGGING_CLIENT = 'fluentd'
-OVERCLOUD_MONITORING_CLIENT = 'collectd'
-LMA_SERVER_MONITORING = 'prometheus'
-LMA_SERVER_LOGGING = 'efk'
-OPENSTACK_CONTAINER_ORCHESTRATION = 'kubernetes'
-AIRSHIP_MANIFEST_VERSION = 1.7
diff --git a/sdv/conf/02_swpostvalid.conf b/sdv/conf/02_swpostvalid.conf
deleted file mode 100644
index 1ed9279..0000000
--- a/sdv/conf/02_swpostvalid.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-
-# Modify this value to any Installer projects that have
-# manifests (templates and configuration files)
-SW_POST_VALIDATOR = 'Airship'
diff --git a/sdv/conf/02_swpreconfigvalid.conf b/sdv/conf/02_swpreconfigvalid.conf
new file mode 100644
index 0000000..bbadfcc
--- /dev/null
+++ b/sdv/conf/02_swpreconfigvalid.conf
@@ -0,0 +1,20 @@
+# 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_nwlinksvalid.conf b/sdv/conf/03_nwlinksvalid.conf
deleted file mode 100644
index 6e83066..0000000
--- a/sdv/conf/03_nwlinksvalid.conf
+++ /dev/null
@@ -1 +0,0 @@
-NW_LINKS_VALIDATOR = 'lldpd'
diff --git a/sdv/conf/03_swpoststatevalid.conf b/sdv/conf/03_swpoststatevalid.conf
new file mode 100644
index 0000000..c98ed98
--- /dev/null
+++ b/sdv/conf/03_swpoststatevalid.conf
@@ -0,0 +1,26 @@
+# 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
new file mode 100644
index 0000000..5482612
--- /dev/null
+++ b/sdv/conf/04_swpostsecurityvalid.conf
@@ -0,0 +1,16 @@
+# 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
new file mode 100644
index 0000000..755e623
--- /dev/null
+++ b/sdv/conf/05_nwlinksvalid.conf
@@ -0,0 +1,15 @@
+# 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
new file mode 100644
index 0000000..9a1a110
--- /dev/null
+++ b/sdv/conf/06_resmodvalid.conf
@@ -0,0 +1,15 @@
+# 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/core/component_factory.py b/sdv/core/component_factory.py
index 396aa28..813c6f2 100644
--- a/sdv/core/component_factory.py
+++ b/sdv/core/component_factory.py
@@ -17,16 +17,31 @@ Create Components.
"""
-def create_swprevalidator(swprevalidator_class):
- """ Create Pre-Validators"""
- return swprevalidator_class()
+def create_swpreurlsvalidator(swpreurlsvalidator_class):
+ """ Create Pre-Links Validators"""
+ return swpreurlsvalidator_class()
-def create_swpostvalidator(swpostvalidator_class):
- """ Create Post-Validators"""
- return swpostvalidator_class()
+def create_swpoststatevalidator(swpoststatevalidator_class):
+ """ Create Post-State Validators"""
+ return swpoststatevalidator_class()
-def create_linkvalidator(linkprevalidator_class):
- """ Create Link-Validators"""
- return linkprevalidator_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/loader.py b/sdv/core/loader/loader.py
index c9f8e96..8840f26 100644
--- a/sdv/core/loader/loader.py
+++ b/sdv/core/loader/loader.py
@@ -19,9 +19,12 @@ Implementors, please inherit from this class.
from conf import settings
from core.loader.loader_servant import LoaderServant
-from SoftwarePreValid.swprevalidator import ISwPreValidator
-from SoftwarePostValid.swpostvalidator import ISwPostValidator
+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
@@ -37,70 +40,134 @@ class Loader():
created. It is up to creator to maintain object life cycle if this
behavior is unwanted.
"""
- self._swprevalidator_loader = LoaderServant(
- settings.getValue('SW_PRE_VALID_DIR'),
- settings.getValue('SW_PRE_VALIDATOR'),
- ISwPreValidator)
- self._swpostvalidator_loader = LoaderServant(
- settings.getValue('SW_POST_VALID_DIR'),
- settings.getValue('SW_POST_VALIDATOR'),
- ISwPostValidator)
+ 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_swprevalidator(self):
+ def get_swpreurlsvalidator(self):
""" Returns a new instance configured Software Validator
- :return: ISwPreValidator implementation if available, None otherwise
+ :return: ISwPreUrlsValidator implementation if available, None otherwise
"""
- return self._swprevalidator_loader.get_class()()
+ return self._swpreurlsvalidator_loader.get_class()()
- def get_swprevalidator_class(self):
+ def get_swpreurlsvalidator_class(self):
"""Returns type of currently configured Software Validator.
- :return: Type of ISwPreValidator implementation if available.
+ :return: Type of ISwPreUrlsValidator implementation if available.
None otherwise.
"""
- return self._swprevalidator_loader.get_class()
+ return self._swpreurlsvalidator_loader.get_class()
- def get_swprevalidators(self):
+ def get_swpreurlsvalidators(self):
"""
Get Prevalidators
"""
- return self._swprevalidator_loader.get_classes()
+ return self._swpreurlsvalidator_loader.get_classes()
- def get_swprevalidators_printable(self):
+ def get_swpreurlsvalidators_printable(self):
"""
Get Prevalidators for printing
"""
- return self._swprevalidator_loader.get_classes_printable()
+ return self._swpreurlsvalidator_loader.get_classes_printable()
- def get_swpostvalidator(self):
+ def get_swpreconfigvalidator(self):
""" Returns a new instance configured Software Validator
- :return: ISwPostValidator implementation if available, None otherwise
+ :return: ISwPreConfigValidator implementation if available, None otherwise
"""
- return self._swpostvalidator_loader.get_class()()
+ return self._swpreconfigvalidator_loader.get_class()()
- def get_swpostvalidator_class(self):
+ def get_swpreconfigvalidator_class(self):
"""Returns type of currently configured Software Validator.
- :return: Type of ISwPostValidator implementation if available.
+ :return: Type of ISwPreConfigValidator implementation if available.
None otherwise.
"""
- return self._swpostvalidator_loader.get_class()
+ return self._swpreconfigvalidator_loader.get_class()
- def get_swpostvalidators(self):
+ 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._swpostvalidator_loader.get_classes()
+ return self._swpostsecurityvalidator_loader.get_classes()
- def get_swpostvalidators_printable(self):
+ def get_swpostsecurityvalidators_printable(self):
"""
Get Postvalidators for printing
"""
- return self._swpostvalidator_loader.get_classes_printable()
+ return self._swpostsecurityvalidator_loader.get_classes_printable()
def get_nwlinksvalidator(self):
""" Returns a new instance configured Nw-Links Validator
@@ -116,14 +183,40 @@ class Loader():
"""
return self._nwlinksvalidator_loader.get_class()
- def get_nwlinkvalidators(self):
+ def get_nwlinksvalidators(self):
"""
Get Linkvalidators
"""
return self._nwlinksvalidator_loader.get_classes()
- def get_nwlinkvalidators_printable(self):
+ 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/valid b/sdv/valid
index 1a9a252..e06afdd 100755
--- a/sdv/valid
+++ b/sdv/valid
@@ -42,21 +42,46 @@ 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-swpredepv', action='store_true',
- help='list all Software pre-dep validations and exit')
- parser.add_argument('--list-swpostdepv', action='store_true',
- help='list all Software post-dep validations and exit')
- parser.add_argument('--list-nwlinksv', action='store_true',
- help='list all Link validations and exit')
- parser.add_argument('exact_validation_name', nargs='*', help='Exact names of\
- validations to run. E.g "valid nwlinks"\
- runs only nwlink-validations.\
- To run all omit positional arguments')
+ 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
@@ -89,24 +114,72 @@ def handle_list_options(args):
:param args: A dictionary with all CLI arguments
"""
- if args['list_swpredepv']:
- print(Loader().get_swprevalidators_printable())
+ if args['list_vurls']:
+ print(Loader().get_swpreurlsvalidators_printable())
sys.exit(0)
- if args['list_swpostdepv']:
- print(Loader().get_swpostvalidators_printable())
+ if args['list_vconfig']:
+ print(Loader().get_swpreconfigvalidators_printable())
sys.exit(0)
- if args['list_nwlinksv']:
- print(Loader().get_nwlinkvalidators_printable())
+ 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 <Enter>.
+ 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')
@@ -129,18 +202,74 @@ def main():
configure_logging(settings.getValue('VERBOSITY'))
loader = Loader()
- swprevalidators = loader.get_swprevalidators()
- if settings.getValue('SW_PRE_VALIDATOR') not in swprevalidators:
- _LOGGER.error('There are no swvalidators matching \'%s\' found in'
- ' \'%s\'. Exiting...', settings.getValue('SW_PRE_VALIDATOR'),
- settings.getValue('SW_PRE_VALID_DIR'))
- sys.exit(1)
- swv_pre_ctrl = component_factory.create_swprevalidator(
- loader.get_swprevalidator_class())
- # First validate hyperlinks
- swv_pre_ctrl.validate_hyperlinks()
- # Next validate mandatory configuration
- swv_pre_ctrl.validate_configuration_mandatory()
+ 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__":