summaryrefslogtreecommitdiffstats
path: root/apex/common/parsers.py
diff options
context:
space:
mode:
authorTim Rozet <trozet@redhat.com>2017-06-25 21:25:36 -0400
committerTim Rozet <trozet@redhat.com>2017-08-23 08:59:54 -0400
commitf4d388ea508ba00771e43a219ac64e0d430b73bd (patch)
tree4f61a89664474154c3d6f7adecfbb0396617199c /apex/common/parsers.py
parent807fad268c90649f2901c5f5c4cdeb788a0308e0 (diff)
Migrates Apex to Python
Removes all bash libraries and converts almost all of the code to a mixture of Python and Ansible. utils.sh and clean.sh still exist. clean.sh will be migrated fully to clean.py in another patch. The Apex Python package is now built into the opnfv-apex-common RPM. To install locally do 'pip3 install .'. To deploy: opnfv-deploy -d <file> -n <file> --image-dir /root/apex/.build -v --debug Non-python files (THT yaml, settings files, ansible playbooks) are all installed into /usr/share/opnfv-apex/. The RPM will copy settings files into /etc/opnfv-apex/. JIRA: APEX-317 Change-Id: I3232f0329bcd13bce5a28da6a8c9c84d0b048024 Signed-off-by: Tim Rozet <trozet@redhat.com>
Diffstat (limited to 'apex/common/parsers.py')
-rw-r--r--apex/common/parsers.py73
1 files changed, 73 insertions, 0 deletions
diff --git a/apex/common/parsers.py b/apex/common/parsers.py
new file mode 100644
index 0000000..8744c86
--- /dev/null
+++ b/apex/common/parsers.py
@@ -0,0 +1,73 @@
+##############################################################################
+# Copyright (c) 2017 Tim Rozet (trozet@redhat.com) and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+import json
+import logging
+import pprint
+import os
+import re
+
+from apex.common.exceptions import ApexDeployException
+
+"""Parser functions for overcloud/openstack output"""
+
+
+def parse_nova_output(in_file):
+ """
+ Parses nova list output into a dictionary format for node name and ip
+ :param in_file: json format from openstack server list
+ :return: dictionary format for {"node name": "node ip"}
+ """
+ if not os.path.isfile(in_file):
+ raise FileNotFoundError(in_file)
+ node_dict = dict()
+ with open(in_file, 'r') as fh:
+ nova_list = json.load(fh)
+
+ for server in nova_list:
+ ip_match = re.search('([0-9]+\.){3}[0-9]+', server['Networks'])
+ if ip_match is None:
+ logging.error("Unable to find IP in nova output "
+ "{}".format(pprint.pformat(server, indent=4)))
+ raise ApexDeployException("Unable to parse IP from nova output")
+ else:
+ node_dict[server['Name']] = ip_match.group(0)
+
+ if not node_dict:
+ raise ApexDeployException("No overcloud nodes found in: {}".format(
+ in_file))
+ return node_dict
+
+
+def parse_overcloudrc(in_file):
+ """
+ Parses overcloudrc into a dictionary format for key and value
+ :param in_file:
+ :return: dictionary format for {"variable": "value"}
+ """
+ logging.debug("Parsing overcloudrc file {}".format(in_file))
+ if not os.path.isfile(in_file):
+ raise FileNotFoundError(in_file)
+ creds = {}
+ with open(in_file, 'r') as fh:
+ lines = fh.readlines()
+ kv_pattern = re.compile('^export\s+([^\s]+)=([^\s]+)$')
+ for line in lines:
+ if 'export' not in line:
+ continue
+ else:
+ res = re.search(kv_pattern, line.strip())
+ if res:
+ creds[res.group(1)] = res.group(2)
+ logging.debug("os cred found: {}, {}".format(res.group(1),
+ res.group(2)))
+ else:
+ logging.debug("os cred not found in: {}".format(line))
+
+ return creds