Fix ansible-server for supporting playbook of PNF 53/86753/1
authorEnbo Wang <wangenbo@huawei.com>
Wed, 1 May 2019 23:34:34 +0000 (23:34 +0000)
committerEnbo Wang <wangenbo@huawei.com>
Wed, 1 May 2019 23:35:52 +0000 (23:35 +0000)
Change-Id: Id6a4c2e81c6e782e496970e080c033e2f9a77296
Issue-ID: APPC-1577
Signed-off-by: Enbo Wang <wangenbo@huawei.com>
ansible-server/src/main/ansible-server/AnsibleModule.py
ansible-server/src/main/ansible-server/BuildPlaybookParams.py
ansible-server/src/main/ansible-server/RestServer.py

index d0af0cf..71d0c05 100755 (executable)
@@ -33,15 +33,13 @@ import cherrypy
 from cherrypy.lib.httputil import parse_query_string
 from cherrypy.lib import auth_basic
 
 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 = ''
 
     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])  + '\''
         for key in envparameters:
             if str_parameters == '':
                 str_parameters = '"'  + str(key) + '=\'' + str(envparameters[key])  + '\''
@@ -51,22 +49,20 @@ def ansibleSysCall (inventory_path, playbook_path, nodelist, mandatory,
         str_parameters += '"'
 
     if len(str_parameters) > 0:
         str_parameters += '"'
 
     if len(str_parameters) > 0:
-        cmd = 'export HOME=/home/ansible; 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:
               ' ansible-playbook -v --timeout ' + str(timeout) + ' --extra-vars ' + str_parameters + ' -i ' + \
               inventory_path + ' ' + playbook_path + ' | tee log.file'
     else:
-        cmd = 'export HOME=/home/ansible; 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 )
 
     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()
     #PAP
     #p.wait()
-    (stdout_value, err) = p.communicate()
+    stdout_value, err = p.communicate()
 
     stdout_value_cleanup = ''
     for line in stdout_value:
 
     stdout_value_cleanup = ''
     for line in stdout_value:
@@ -78,15 +74,11 @@ def ansibleSysCall (inventory_path, playbook_path, nodelist, mandatory,
     returncode = p.returncode
 
     if returncode == 137:
     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)
         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:
     else:
-
         for line in stdout_value: # p.stdout.readlines():
             print line # line,
             if ParseFlag and len(line.strip())>0:
         for line in stdout_value: # p.stdout.readlines():
             print line # line,
             if ParseFlag and len(line.strip())>0:
index 1593592..e3a0b4b 100644 (file)
@@ -1,3 +1,27 @@
+'''
+/*-
+* ============LICENSE_START=======================================================
+* ONAP : APPC
+* ================================================================================
+* Copyright (C) 2017-2019 AT&T Intellectual Property.  All rights reserved.
+* ================================================================================
+* Copyright (C) 2017 Amdocs
+* =============================================================================
+* 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
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+* 
+* ============LICENSE_END=========================================================
+*/
+'''
 
 from os import listdir
 from os.path import isfile, join
 
 from os import listdir
 from os.path import isfile, join
@@ -10,11 +34,12 @@ import cherrypy
 
 def buildInventorySysCall(ansible_path, ansible_inv, node_list, playbook_dir, target_inv, hostgrouplist, hostnamelist):
     if not node_list:
 
 def buildInventorySysCall(ansible_path, ansible_inv, node_list, playbook_dir, target_inv, hostgrouplist, hostnamelist):
     if not node_list:
-        LocalNodeList = "host"
-        LocalCredentials = "localhost    ansible_connection=local"
+        local_node_list = "host"
+        local_credentials = "localhost    ansible_connection=local"
+
         f = open(playbook_dir + "/" + target_inv, "w")
         f = open(playbook_dir + "/" + target_inv, "w")
-        f.write("[" + LocalNodeList + "]\n")
-        f.write(LocalCredentials)
+        f.write("[" + local_node_list + "]\n")
+        f.write(local_credentials)
         f.close()
     else:
         # Get credentials from file
         f.close()
     else:
         # Get credentials from file
@@ -37,14 +62,14 @@ def buildInventorySysCall(ansible_path, ansible_inv, node_list, playbook_dir, ta
         f.close()
 
         for node in node_list:
         f.close()
 
         for node in node_list:
-            Fail = True
+            fail_flag = True
             if "[" + node + "]" in data_inventory_orig:
             if "[" + node + "]" in data_inventory_orig:
-                if not "[" + node + "]" in data_inventory_target:
+                if "[" + node + "]" not in data_inventory_target:
                     cherrypy.log("RESET", "[" + node + "]")
                     data_inventory_target["[" + node + "]"] = []
                 else:
                     cherrypy.log("OK", "[" + node + "]")
                     cherrypy.log("RESET", "[" + node + "]")
                     data_inventory_target["[" + node + "]"] = []
                 else:
                     cherrypy.log("OK", "[" + node + "]")
-                Fail = False
+                fail_flag = False
                 for cred in data_inventory_orig["[" + node + "]"]:
                     data_inventory_target["[" + node + "]"].append(cred)
             else:
                 for cred in data_inventory_orig["[" + node + "]"]:
                     data_inventory_target["[" + node + "]"].append(cred)
             else:
@@ -55,9 +80,9 @@ def buildInventorySysCall(ansible_path, ansible_inv, node_list, playbook_dir, ta
                         for cred in data_inventory_orig[key]:
                             if node + " " in cred:
                                 data_inventory_target[key].append(cred)
                         for cred in data_inventory_orig[key]:
                             if node + " " in cred:
                                 data_inventory_target[key].append(cred)
-                                Fail = False
+                                fail_flag = False
 
 
-            if Fail:
+            if fail_flag:
                 data_inventory_target["[" + node + "]"] = \
                     [node + " ansible_connection=ssh ansible_ssh_user=na ansible_ssh_private_key_file=na"]
 
                 data_inventory_target["[" + node + "]"] = \
                     [node + " ansible_connection=ssh ansible_ssh_user=na ansible_ssh_private_key_file=na"]
 
index f24eae0..2b4da33 100755 (executable)
@@ -1,4 +1,4 @@
-"""
+'''
 /*-
 * ============LICENSE_START=======================================================
 * ONAP : APPC
 /*-
 * ============LICENSE_START=======================================================
 * ONAP : APPC
@@ -21,7 +21,7 @@
 * 
 * ============LICENSE_END=========================================================
 */
 * 
 * ============LICENSE_END=========================================================
 */
-"""
+'''
 
 import time, datetime, json, os, sys, subprocess
 import uuid
 
 import time, datetime, json, os, sys, subprocess
 import uuid
@@ -559,7 +559,7 @@ def process_vnf_playbook(input_json, Id, EnvParameters, time_now):
     cherrypy.log("HostFile: " + HostFile)
 
     # if NodeList and InventoryNames need to build host file
     cherrypy.log("HostFile: " + HostFile)
 
     # if NodeList and InventoryNames need to build host file
-    if HaveInventoryNames & HaveNodeList:
+    if HaveInventoryNames and HaveNodeList:
         cherrypy.log("Build host file from NodeList")
         ret = buildHostsSysCall(input_json, PlaybookDir, inventory_names)
         if ret < 0:
         cherrypy.log("Build host file from NodeList")
         ret = buildHostsSysCall(input_json, PlaybookDir, inventory_names)
         if ret < 0:
@@ -785,9 +785,10 @@ def handle_get_method(input_data):
                 if TestRecord[input_data['Id']]['Output'] == {} and getresults_block:
                     cherrypy.log("*** Request blocked " + input_data['Id'])
 
                 if TestRecord[input_data['Id']]['Output'] == {} and getresults_block:
                     cherrypy.log("*** Request blocked " + input_data['Id'])
 
-                    while TestRecord[input_data['Id']]['Output'] == {} \
-                            or 'StatusMessage' in TestRecord[input_data['Id']]['Result']:
-                        time.sleep(5)
+                    # while TestRecord[input_data['Id']]['Output'] == {} \
+                    #         or 'StatusMessage' in TestRecord[input_data['Id']]['Result']:
+                    while ActiveProcess[input_data['Id']].is_alive():
+                        time.sleep(3)
 
                     cherrypy.log("*** Request released " + input_data['Id'])
 
 
                     cherrypy.log("*** Request released " + input_data['Id'])