aboutsummaryrefslogtreecommitdiffstats
path: root/tools/os_deploy_tgen/utilities
diff options
context:
space:
mode:
Diffstat (limited to 'tools/os_deploy_tgen/utilities')
-rw-r--r--tools/os_deploy_tgen/utilities/__init__.py17
-rw-r--r--tools/os_deploy_tgen/utilities/utils.py183
2 files changed, 200 insertions, 0 deletions
diff --git a/tools/os_deploy_tgen/utilities/__init__.py b/tools/os_deploy_tgen/utilities/__init__.py
new file mode 100644
index 00000000..56f22a9e
--- /dev/null
+++ b/tools/os_deploy_tgen/utilities/__init__.py
@@ -0,0 +1,17 @@
+# 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.
+
+"""
+Utilities package
+"""
diff --git a/tools/os_deploy_tgen/utilities/utils.py b/tools/os_deploy_tgen/utilities/utils.py
new file mode 100644
index 00000000..5208fd2a
--- /dev/null
+++ b/tools/os_deploy_tgen/utilities/utils.py
@@ -0,0 +1,183 @@
+# Copyright 2020 Spirent Communications, Mirantis
+#
+# 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.
+
+"""
+Utilities for deploying Trafficgenerator on Openstack.
+This Code is based on Openstack Shaker.
+"""
+
+#import errno
+#import functools
+import logging
+import os
+import random
+import re
+import uuid
+#import collections
+import yaml
+from pykwalify import core as pykwalify_core
+from pykwalify import errors as pykwalify_errors
+
+from conf import settings as S
+
+LOG = logging.getLogger(__name__)
+
+def read_file(file_name, base_dir=''):
+ """
+ Read Files
+ """
+ full_path = os.path.normpath(os.path.join(base_dir, file_name))
+
+ if not os.path.exists(full_path):
+ full_path = os.path.normpath(os.path.join('tools',
+ 'os_deploy_tgen',
+ file_name))
+ if not os.path.exists(full_path):
+ full_path = os.path.normpath(os.path.join('tools',
+ 'os_deploy_tgen',
+ 'templates',
+ file_name))
+ if not os.path.exists(full_path):
+ msg = ('File %s not found by absolute nor by relative path' %
+ file_name)
+ LOG.error(msg)
+ raise IOError(msg)
+
+ fid = None
+ try:
+ fid = open(full_path)
+ return fid.read()
+ except IOError as exc:
+ LOG.error('Error reading file: %s', exc)
+ raise
+ finally:
+ if fid:
+ fid.close()
+
+
+def write_file(data, file_name, base_dir=''):
+ """
+ Write to file
+ """
+ full_path = os.path.normpath(os.path.join(base_dir, file_name))
+ fid = None
+ try:
+ fid = open(full_path, 'w')
+ return fid.write(data)
+ except IOError as err:
+ LOG.error('Error writing file: %s', err)
+ raise
+ finally:
+ if fid:
+ fid.close()
+
+
+def read_yaml_file(file_name):
+ """
+ Read Yaml File
+ """
+ raw = read_file(file_name)
+ return read_yaml(raw)
+
+
+def read_yaml(raw):
+ """
+ Read YAML
+ """
+ try:
+ parsed = yaml.safe_load(raw)
+ return parsed
+ except Exception as error:
+ LOG.error('Failed to parse input %(yaml)s in YAML format: %(err)s',
+ dict(yaml=raw, err=error))
+ raise
+
+
+def split_address(address):
+ """
+ Split addresses
+ """
+ try:
+ host, port = address.split(':')
+ except ValueError:
+ LOG.error('Invalid address: %s, "host:port" expected', address)
+ raise
+ return host, port
+
+
+def random_string(length=6):
+ """
+ Generate Random String
+ """
+ return ''.join(random.sample('adefikmoprstuz', length))
+
+
+def make_record_id():
+ """
+ Create record-ID
+ """
+ return str(uuid.uuid4())
+
+def strict(strc):
+ """
+ Strict Check
+ """
+ return re.sub(r'[^\w\d]+', '_', re.sub(r'\(.+\)', '', strc)).lower()
+
+
+def validate_yaml(data, schema):
+ """
+ Validate Yaml
+ """
+ cor = pykwalify_core.Core(source_data=data, schema_data=schema)
+ try:
+ cor.validate(raise_exception=True)
+ except pykwalify_errors.SchemaError as err:
+ raise Exception('File does not conform to schema') from err
+
+
+def pack_openstack_params():
+ """
+ Packe Openstack Parameters
+ """
+ if not S.hasValue('OS_AUTH_URL'):
+ raise Exception(
+ 'OpenStack authentication endpoint is missing')
+
+ params = dict(auth=dict(username=S.getValue('OS_USERNAME'),
+ password=S.getValue('OS_PASSWORD'),
+ auth_url=S.getValue('OS_AUTH_URL')),
+ os_region_name=S.getValue('OS_REGION_NAME'),
+ os_cacert=S.getValue('OS_CA_CERT'),
+ os_insecure=S.getValue('OS_INSECURE'))
+
+ if S.hasValue('OS_PROJECT_NAME'):
+ value = S.getValue('OS_PROJECT_NAME')
+ params['auth']['project_name'] = value
+ if S.hasValue('OS_PROJECT_DOMAIN_NAME'):
+ value = S.getValue('OS_PROJECT_DOMAIN_NAME')
+ params['auth']['project_domain_name'] = value
+ if S.hasValue('OS_USER_DOMAIN_NAME'):
+ value = S.getValue('OS_USER_DOMAIN_NAME')
+ params['auth']['user_domain_name'] = value
+ if S.hasValue('OS_INTERFACE'):
+ value = S.getValue('OS_INTERFACE')
+ params['os_interface'] = value
+ if S.hasValue('OS_API_VERSION'):
+ value = S.getValue('OS_API_VERSION')
+ params['identity_api_version'] = value
+ if S.hasValue('OS_PROFILE'):
+ value = S.getValue('OS_PROFILE')
+ params['os_profile'] = value
+ return params