Fix playbook execution for VNF
[ccsdk/distribution.git] / ansible-server / src / main / ansible-server / AnsibleModule.py
index 2da7912..3985ee2 100755 (executable)
@@ -6,7 +6,9 @@
 * Copyright (C) 2019 AT&T Intellectual Property.  All rights reserved.
 * ================================================================================
 * Copyright (C) 2019 Amdocs
-* =============================================================================
+* ================================================================================
+* Copyright (C) 2019 Orange
+* ================================================================================
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
@@ -19,7 +21,6 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
-* ECOMP is a trademark and service mark of AT&T Intellectual Property.
 * ============LICENSE_END=========================================================
 */
 '''
@@ -34,40 +35,36 @@ import cherrypy
 from cherrypy.lib.httputil import parse_query_string
 from cherrypy.lib import auth_basic
 
-def ansibleSysCall (inventory_path, playbook_path, nodelist, mandatory,
-                    envparameters, localparameters, timeout, playbookdir):
-
+def ansibleSysCall (inventory_path, playbook_path, nodelist, mandatory, envparameters, localparameters, timeout, playbookdir):
     cherrypy.log( "***> in AnsibleModule.ansibleSysCall")
     log = []
 
     str_parameters = ''
 
-    if not envparameters == '':
+    if envparameters:
         for key in envparameters:
             if str_parameters == '':
                 str_parameters = '"'  + str(key) + '=\'' + str(envparameters[key])  + '\''
             else:
-                #str_parameters += ' '  + str(key) + '=\'' + str(envparameters[key])  + '\''
-                str_parameters += ', '  + str(key) + '=\'' + str(envparameters[key])  + '\''
+                str_parameters += ' '  + str(key) + '=\'' + str(envparameters[key])  + '\''
+                str_parameters += ', '  + str(key) + '=\'' + str(envparameters[key])  + '\''
         str_parameters += '"'
 
     if len(str_parameters) > 0:
-        cmd = 'export HOME=/root; env; cd ' + playbookdir + ';' +'timeout -s KILL -t ' + str(timeout) + \
+        cmd = 'cd ' + playbookdir + ';' + 'timeout -s KILL -t ' + str(timeout) + \
               ' ansible-playbook -v --timeout ' + str(timeout) + ' --extra-vars ' + str_parameters + ' -i ' + \
               inventory_path + ' ' + playbook_path + ' | tee log.file'
     else:
-        cmd = 'export HOME=/root; env; cd ' + playbookdir + ';' +'timeout -s KILL -t ' + str(timeout) + \
-              ' ansible-playbook -v --timeout ' + str(timeout) + ' -i ' + inventory_path + ' ' + playbook_path +' | tee log.file'
+        cmd = 'cd ' + playbookdir + ';' + 'timeout -s KILL -t ' + str(timeout) + \
+              ' ansible-playbook -v --timeout ' + str(timeout) + ' -i ' + inventory_path + ' ' + playbook_path + ' | tee log.file'
 
     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)
     #PAP
     #p.wait()
-    (stdout_value, err) = p.communicate()
+    stdout_value, err = p.communicate()
 
     stdout_value_cleanup = ''
     for line in stdout_value:
@@ -79,15 +76,11 @@ def ansibleSysCall (inventory_path, playbook_path, nodelist, mandatory,
     returncode = p.returncode
 
     if returncode == 137:
-
         cherrypy.log("   ansible-playbook system call timed out")
         # ansible-playbook system call timed out
         for line in stdout_value: # p.stdout.readlines():
             log.append (line)
-
-
     else:
-
         for line in stdout_value: # p.stdout.readlines():
             print line # line,
             if ParseFlag and len(line.strip())>0:
@@ -95,7 +88,7 @@ def ansibleSysCall (inventory_path, playbook_path, nodelist, mandatory,
                 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()
+                failed_flag = line.split(':')[1].strip().split('=')[4].split('skipped')[0].strip()
                 retval[ip_address]=[ok_flag, changed_flag, unreachable_flag, failed_flag]
             if "PLAY RECAP" in line:
                 ParseFlag = True