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)
