Fix Keystone RC and parser

Change-Id: I0b4657bcbd46917e355916aa62cbd1578563ee67
diff --git a/src/com/mirantis/mk/python.groovy b/src/com/mirantis/mk/python.groovy
index c832cb3..b8ea694 100644
--- a/src/com/mirantis/mk/python.groovy
+++ b/src/com/mirantis/mk/python.groovy
@@ -55,11 +55,132 @@
  * @param format     Format of the table
  */
 def parseTextTable(tableStr, type = 'item', format = 'rest') {
-    parserScript = "${env.WORKSPACE}/scripts/parse_text_table.py"
+    parserFile = "${env.WORKSPACE}/textTableParser.py"
+    parserScript = """import json
+import argparse
+from docutils.parsers.rst import tableparser
+from docutils import statemachine
+
+def parse_item_table(raw_data):
+    i = 1
+    pretty_raw_data = []
+    for datum in raw_data:
+        if datum != "":
+            if datum[3] != ' ' and i > 4:
+                pretty_raw_data.append(raw_data[0])
+            if i == 3:
+                pretty_raw_data.append(datum.replace('-', '='))
+            else:
+                pretty_raw_data.append(datum)
+            i += 1
+    parser = tableparser.GridTableParser()
+    block = statemachine.StringList(pretty_raw_data)
+    docutils_data = parser.parse(block)
+    final_data = {}
+    for line in docutils_data[2]:
+        key = ' '.join(line[0][3]).strip()
+        value = ' '.join(line[1][3]).strip()
+        if key != "":
+            try:
+                value = json.loads(value)
+            except:
+                pass
+            final_data[key] = value
+        i+=1
+    return final_data
+
+def parse_list_table(raw_data):
+    i = 1
+    pretty_raw_data = []
+    for datum in raw_data:
+        if datum != "":
+            if datum[3] != ' ' and i > 4:
+                pretty_raw_data.append(raw_data[0])
+            if i == 3:
+                pretty_raw_data.append(datum.replace('-', '='))
+            else:
+                pretty_raw_data.append(datum)
+            i += 1
+    parser = tableparser.GridTableParser()
+    block = statemachine.StringList(pretty_raw_data)
+    docutils_data = parser.parse(block)
+    final_data = []
+    keys = []
+    for line in docutils_data[1]:
+        for item in line:
+             keys.append(' '.join(item[3]).strip())
+    for line in docutils_data[2]:
+        final_line = {}
+        key = ' '.join(line[0][3]).strip()
+        value = ' '.join(line[1][3]).strip()
+        if key != "":
+            try:
+                value = json.loads(value)
+            except:
+                pass
+            final_data[key] = value
+        i+=1
+    return final_data
+
+def parse_list_table(raw_data):
+    i = 1
+    pretty_raw_data = []
+    for datum in raw_data:
+        if datum != "":
+            if datum[3] != ' ' and i > 4:
+                pretty_raw_data.append(raw_data[0])
+            if i == 3:
+                pretty_raw_data.append(datum.replace('-', '='))
+            else:
+                pretty_raw_data.append(datum)
+            i += 1
+    parser = tableparser.GridTableParser()
+    block = statemachine.StringList(pretty_raw_data)
+    docutils_data = parser.parse(block)
+    final_data = []
+    keys = []
+    for line in docutils_data[1]:
+        for item in line:
+             keys.append(' '.join(item[3]).strip())
+    for line in docutils_data[2]:
+        final_line = {}
+        i = 0
+        for item in line:
+            value = ' '.join(item[3]).strip()
+            try:
+                value = json.loads(value)
+            except:
+                pass
+            final_line[keys[i]] = value
+            i += 1
+        final_data.append(final_line)
+    return final_data
+
+def read_table_file(file):
+    table_file = open(file, 'r')
+    raw_data = table_file.read().split('\n')
+    table_file.close()
+    return raw_data
+
+parser = argparse.ArgumentParser()
+parser.add_argument('-f','--file', help='File with table data', required=True)
+parser.add_argument('-t','--type', help='Type of table (list/item)', required=True)
+args = vars(parser.parse_args())
+
+raw_data = read_table_file(args['file'])
+
+if args['type'] == 'list':
+  final_data = parse_list_table(raw_data)
+else:
+  final_data = parse_item_table(raw_data)
+
+print json.dumps(final_data)
+"""
+    writeFile file: parserFile, text: parserScript
     tableFile = "${env.WORKSPACE}/prettytable.txt"
     writeFile file: tableFile, text: tableStr
     rawData = sh (
-        script: "python ${parserScript} --file '${tableFile}' --type ${type}",
+        script: "python ${parserFile} --file '${tableFile}' --type ${type}",
         returnStdout: true
     ).trim()
     data = loadJson(rawData)