From c61a6f1e178b97dca06a56b4fad3fd00404c16ae Mon Sep 17 00:00:00 2001 From: Zheng Qibin Date: Fri, 20 Jul 2018 02:18:16 +0800 Subject: conductor module in server part of testing-scheduler. JIRA: BOTTLENECK-232 encapusulate the invoking methods to conductor server in a module. Change-Id: I718c6eed5e75ac01f267688b5694ec35db175b48 Signed-off-by: Zheng Qibin --- .../server/conductorclient/__init__.py | 8 +++ .../server/conductorclient/mock_tasks.json | 13 ++++ .../server/conductorclient/mock_workflow.json | 24 ++++++++ .../server/conductorclient/run_new_workflow.py | 71 ++++++++++++++++++++++ 4 files changed, 116 insertions(+) create mode 100644 testing-scheduler/server/conductorclient/__init__.py create mode 100644 testing-scheduler/server/conductorclient/mock_tasks.json create mode 100644 testing-scheduler/server/conductorclient/mock_workflow.json create mode 100644 testing-scheduler/server/conductorclient/run_new_workflow.py (limited to 'testing-scheduler') diff --git a/testing-scheduler/server/conductorclient/__init__.py b/testing-scheduler/server/conductorclient/__init__.py new file mode 100644 index 00000000..bb02be17 --- /dev/null +++ b/testing-scheduler/server/conductorclient/__init__.py @@ -0,0 +1,8 @@ +############################################################################## +# Copyright (c) 2018 Huawei Technologies Co.,Ltd. and others +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## diff --git a/testing-scheduler/server/conductorclient/mock_tasks.json b/testing-scheduler/server/conductorclient/mock_tasks.json new file mode 100644 index 00000000..4fea48bf --- /dev/null +++ b/testing-scheduler/server/conductorclient/mock_tasks.json @@ -0,0 +1,13 @@ +{ + "task_group_1":[ + { + "name": "http_yardstick_test", + "retryCount": 3, + "timeOutSeconds": 1200, + "timeOutPolicy": "TIME_OUT_WF", + "retryLogic": "FIXED", + "retryDelaySeconds": 600, + "responseTimeOutSeconds": 3600 + } + ] +} \ No newline at end of file diff --git a/testing-scheduler/server/conductorclient/mock_workflow.json b/testing-scheduler/server/conductorclient/mock_workflow.json new file mode 100644 index 00000000..8f6251c0 --- /dev/null +++ b/testing-scheduler/server/conductorclient/mock_workflow.json @@ -0,0 +1,24 @@ +{ + "name": "workflow_demo_05", + "description": "run a workflow of yardstick test service", + "version": 1, + "tasks": [ + { + "name": "http_yardstick_test", + "taskReferenceName": "ping_test", + "inputParameters": { + "http_request": { + "uri": "http://192.168.199.105:8080/greet", + "method": "GET" + } + }, + "type": "HTTP" + } + ], + "outputParameters": { + "header": "${ping_test.output.response.headers}", + "response": "${ping_test.output.response.body}", + "status": "${ping_test.output.response.statusCode}" + }, + "schemaVersion": 2 +} \ No newline at end of file diff --git a/testing-scheduler/server/conductorclient/run_new_workflow.py b/testing-scheduler/server/conductorclient/run_new_workflow.py new file mode 100644 index 00000000..0acb96a0 --- /dev/null +++ b/testing-scheduler/server/conductorclient/run_new_workflow.py @@ -0,0 +1,71 @@ +############################################################################## +# Copyright (c) 2018 Huawei Technologies Co.,Ltd. and others +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +from conductor import conductor +import json + + +class WorkflowMgr(object): + def __init__(self, serverAddr): + self._serverAddr = serverAddr + '/api' + self._metaDataClient = conductor.MetadataClient(self._serverAddr) + self._workflowClient = conductor.WorkflowClient(self._serverAddr) + self._tasksDefined = False + self._workflowDefined = False + self._workflowName = "" + + def setTaskDef(self, taskJson): + jsonObj = json.loads(taskJson) + print "define tasks:\n", taskJson + for (k, v) in jsonObj.items(): + self._metaDataClient.registerTaskDefs(v) + self._tasksDefined = True + + def setWorkflowDef(self, workflowJson): + jsonObj = json.loads(workflowJson) + print "define workflow:\n", workflowJson + try: + self._metaDataClient.createWorkflowDef(jsonObj) + except Exception as e: + print e + self._workflowName = jsonObj['name'] + self._workflowDefined = True + + def startWorkflow(self, param={}): + workflowId = '' + if not self._tasksDefined: + print "error: please define the task at first\n" + elif not self._workflowDefined: + print "error: please define the workflow at first\n" + else: + workflowId = self._workflowClient.startWorkflow( + self._workflowName, param) + return workflowId + + def setTaskDefFromFile(self, taskFilePath): + with open(taskFilePath, 'r') as f: + self.setTaskDef(f.read()) + + def setWorkflowFromFile(self, workflowFilePath): + with open(workflowFilePath, 'r') as f: + self.setWorkflowDef(f.read()) + + +# test demo +def main(): + serverAddr = "http://192.168.199.131:8080" + wfMgr = WorkflowMgr(serverAddr) + wfMgr.setTaskDefFromFile('mock_tasks.json') + wfMgr.setWorkflowFromFile('mock_workflow.json') + inputParam = {'input': 'fake'} + wfMgr.startWorkflow(inputParam) + + +if __name__ == "__main__": + main() -- cgit 1.2.3-korg