Add dynamic-properties as python script arg 34/93134/4
authorAlexis de Talhouët <adetalhouet89@gmail.com>
Thu, 8 Aug 2019 22:15:55 +0000 (18:15 -0400)
committerDan Timoney <dtimoney@att.com>
Fri, 9 Aug 2019 19:49:12 +0000 (19:49 +0000)
For the remote python executor, we have the ability to provide
dynamic properties, that will end up marshall as Json. Through
the gRPC session, it will be transform to a Google Proto Struct.
Once in the remote python executor, we use utility method from
Proto to convert the Struct into a Json string, and we pass it
as the last argument of the script execution. That way, user can
access them in their script, simply by loading the content using
json.loads and then interact with the data through the python dict.

Change-Id: Ib3552c06734aed252ec28f47173bc8668afe085d
Issue-ID: CCSDK-1606
Signed-off-by: Alexis de Talhouët <adetalhouet89@gmail.com>
ms/command-executor/src/main/python/command_executor_handler.py

index 305c83e..972dad6 100644 (file)
 #
 from builtins import Exception, open, dict
 from subprocess import CalledProcessError, PIPE
+from google.protobuf.json_format import MessageToJson
 
 import logging
 import os
+import re
 import subprocess
-import sys
 import virtualenv
 import venv
 import utils
@@ -72,9 +73,8 @@ class CommandExecutorHandler():
         if "ansible-playbook" in request.command:
             cmd = cmd + "; " + request.command + " -e 'ansible_python_interpreter=" + self.venv_home + "/bin/python'"
         else:
-            cmd = cmd + "; " + request.command
+            cmd = cmd + "; " + request.command + " " + re.escape(MessageToJson(request.properties))
 
-        self.logger.info("Command: {}".format(cmd))
         try:
             with subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
                                   shell=True, bufsize=1, universal_newlines=True) as newProcess: