Fix Keystone RC and parser
Change-Id: I0b4657bcbd46917e355916aa62cbd1578563ee67
diff --git a/src/com/mirantis/mk/openstack.groovy b/src/com/mirantis/mk/openstack.groovy
index 1d6bcca..6a0a9ce 100644
--- a/src/com/mirantis/mk/openstack.groovy
+++ b/src/com/mirantis/mk/openstack.groovy
@@ -54,24 +54,18 @@
* @param credentialsId Credentials to the OpenStack API
* @param project OpenStack project to connect to
*/
-@NonCPS
def createOpenstackEnv(url, credentialsId, project) {
def common = new com.mirantis.mk.common()
+ rcFile = "${env.WORKSPACE}/keystonerc"
creds = common.getPasswordCredentials(credentialsId)
- params = [
- "OS_USERNAME": creds.username,
- "OS_PASSWORD": creds.password.toString(),
- "OS_TENANT_NAME": project,
- "OS_AUTH_URL": url,
- "OS_AUTH_STRATEGY": "keystone"
- ]
- res = ""
- for ( e in params ) {
- res = "${res}export ${e.key}=${e.value}\n"
- }
- writeFile file: "${env.WORKSPACE}/keystonerc", text: res
- return "${env.WORKSPACE}/keystonerc"
- //return res.substring(1)
+ rc = """export OS_USERNAME=${creds.username}
+export OS_PASSWORD=${creds.password.toString()}
+export OS_TENANT_NAME=${project}
+export OS_AUTH_URL=${url}
+export OS_AUTH_STRATEGY=keystone
+"""
+ writeFile file: rcFile, text: rc
+ return rcFile
}
/**
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)