summaryrefslogtreecommitdiffstats
path: root/ansible-server/src
diff options
context:
space:
mode:
authorEnbo Wang <wangenbo@huawei.com>2019-12-19 19:15:42 +0800
committerEnbo Wang <wangenbo@huawei.com>2019-12-19 20:14:17 +0800
commit2ad824206845d714efaab6de71ad9294db5509cc (patch)
treea7370a8964b0b006dbde16a829386431d5017fb6 /ansible-server/src
parentfc4bb348c8a8b4a5d5f77065b8ebbca16d6ce5b8 (diff)
Fix ansible-server for parsing ouput of executing Ansible playbooks
Fix the issues of parsing the return value of p.communicate() and output lines of executing Ansible playbooks. Change-Id: I7ab10d9d7438ca998d17a7dace2fcde27a4219e7 Issue-ID: CCSDK-2009 Signed-off-by: Enbo Wang <wangenbo@huawei.com>
Diffstat (limited to 'ansible-server/src')
-rwxr-xr-xansible-server/src/main/ansible-server/AnsibleModule.py28
1 files changed, 19 insertions, 9 deletions
diff --git a/ansible-server/src/main/ansible-server/AnsibleModule.py b/ansible-server/src/main/ansible-server/AnsibleModule.py
index 80e59e29..63cd805a 100755
--- a/ansible-server/src/main/ansible-server/AnsibleModule.py
+++ b/ansible-server/src/main/ansible-server/AnsibleModule.py
@@ -59,15 +59,16 @@ def ansibleSysCall (inventory_path, playbook_path, nodelist, mandatory, envparam
cherrypy.log("CMD: " + cmd)
cherrypy.log("PlayBook Start: " + playbookdir )
- p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+ p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
#PAP
#p.wait()
stdout_value, err = p.communicate()
+ stdout_value = stdout_value.splitlines()
- stdout_value_cleanup = ''
+ stdout_value_cleanup = []
for line in stdout_value:
- stdout_value_cleanup += line.replace(' ', ' ')
- stdout_value = stdout_value_cleanup.splitlines()
+ stdout_value_cleanup.append(line.replace(' ', ' '))
+ stdout_value = stdout_value_cleanup
ParseFlag = False
retval = {}
@@ -80,13 +81,22 @@ def ansibleSysCall (inventory_path, playbook_path, nodelist, mandatory, envparam
log.append (line)
else:
for line in stdout_value: # p.stdout.readlines():
- print(line) # line,
+ if line:
+ cherrypy.log("OUTPUT: %s" % line)
+
if ParseFlag and len(line.strip())>0:
ip_address = line.split(':')[0].strip()
- ok_flag = line.split(':')[1].strip().split('=')[1].split('changed')[0].strip()
- changed_flag = line.split(':')[1].strip().split('=')[2].split('unreachable')[0].strip()
- unreachable_flag = line.split(':')[1].strip().split('=')[3].split('failed')[0].strip()
- failed_flag = line.split(':')[1].strip().split('=')[4].strip()
+ exec_results = line.split(':')[1].strip()
+
+ result_items = [item for item in exec_results.split(' ') if item]
+ cherrypy.log("Execcution results of '%s': %s" % (ip_address, str(result_items)))
+ # ['ok=6', 'changed=5', 'unreachable=0', 'failed=0', 'skipped=3', 'rescued=0', 'ignored=0']
+
+ ok_flag = result_items[0].split('=')[1].strip()
+ changed_flag = result_items[1].split('=')[1].strip()
+ unreachable_flag = result_items[2].split('=')[1].strip()
+ failed_flag = result_items[3].split('=')[1].strip()
+
retval[ip_address]=[ok_flag, changed_flag, unreachable_flag, failed_flag]
if "PLAY RECAP" in line:
ParseFlag = True