def load_playbook(playbook_name): execution_db = ExecutionDatabase.instance playbook = JsonPlaybookLoader.load_playbook( os.path.join(walkoff.config.Config.WORKFLOWS_PATH, playbook_name + '.playbook')) execution_db.session.add(playbook) execution_db.session.commit() return playbook
def test_load_workflow_file_bad_permissions(self): test_permissions = {'a': 42} filepath = os.path.join(test_data_path, 'test.json') with open(filepath, 'w') as file_out: file_out.write(json.dumps(test_permissions)) os.chmod(filepath, 0o444) self.assertIsNone(Loader.load_workflow(filepath, 'something'))
def load_playbook(playbook_name): execution_db = ExecutionDatabase.instance playbook = JsonPlaybookLoader.load_playbook( os.path.join(walkoff.config.Config.WORKFLOWS_PATH, playbook_name + '.playbook')) execution_db.session.add(playbook) execution_db.session.commit() return playbook
def test_load_playbook(self): workflows = [Workflow('something'), Workflow('something2')] playbook = Playbook('test', workflows=workflows) filepath = os.path.join(test_data_path, 'test.json') with open(filepath, 'w') as file_out: file_out.write(json.dumps(playbook.read())) loaded = Loader.load_playbook(filepath) self.assertIsInstance(loaded, Playbook) self.assertEqual(loaded.name, 'test')
def import_workflows(app): playbook_name = [playbook.id for playbook in app.running_context.execution_db.session.query(Playbook).all()] if os.path.exists(walkoff.config.Config.WORKFLOWS_PATH): logger.info('Importing any workflows not currently in database') for p in os.listdir(walkoff.config.Config.WORKFLOWS_PATH): full_path = os.path.join(walkoff.config.Config.WORKFLOWS_PATH, p) if os.path.isfile(full_path): playbook = JsonPlaybookLoader.load_playbook(full_path) if playbook.name not in playbook_name: app.running_context.execution_db.session.add(playbook) app.running_context.execution_db.session.commit()
def test_load_workflow_invalid_workflow_json(self): workflow_json = { "name": "test_workflow", "start": "start", "actions": [{"action": "repeatBackToMe", "app": "HelloWorld", "name": "start"}]} playbook_json = {'name': 'test_playbook', 'workflows': [workflow_json]} filepath = os.path.join(test_data_path, 'test.json') with open(filepath, 'w') as file_out: file_out.write(json.dumps(playbook_json)) self.assertIsNone(Loader.load_workflow(filepath, 'test_workflow'))
def test_load_playbook_invalid_app(self): workflow_json = { "name": "test_workflow", "start": "start", "actions": [{"action": "invalid", "app": "Invalid", "name": "start", "branches": []}]} playbook_json = {'name': 'test_playbook', 'workflows': [workflow_json]} filepath = os.path.join(test_data_path, 'test.json') with open(filepath, 'w') as file_out: file_out.write(json.dumps(playbook_json)) self.assertIsNone(Loader.load_playbook(filepath))
def load_workflow(playbook_name, workflow_name): playbook = JsonPlaybookLoader.load_playbook( os.path.join(test_workflows_path, playbook_name + '.playbook')) executiondb.execution_db.session.add(playbook) executiondb.execution_db.session.commit() workflow = None for wf in playbook.workflows: if wf.name == workflow_name: workflow = wf break return workflow
def test_load_playbooks_some_invalid_playbooks_in_directory(self): workflows = [Workflow('something'), Workflow('something2')] playbook = Playbook('test', workflows=workflows) filepath = os.path.join(test_data_path, 'test.playbook') with open(filepath, 'w') as file_out: file_out.write(json.dumps(playbook.read())) test_invalid_json = 'something not json' filepath = os.path.join(test_data_path, 'test2.playbook') with open(filepath, 'w') as file_out: file_out.write(test_invalid_json) loaded = Loader.load_playbooks(test_data_path) self.assertEqual(len(loaded), 1) self.assertEqual(loaded[0].name, 'test')
def load_workflow(playbook_name, workflow_name): execution_db = ExecutionDatabase.instance playbook = JsonPlaybookLoader.load_playbook( os.path.join(walkoff.config.Config.WORKFLOWS_PATH, playbook_name + '.playbook')) execution_db.session.add(playbook) execution_db.session.commit() workflow = None for wf in playbook.workflows: if wf.name == workflow_name: workflow = wf break return workflow
def import_workflows(app): playbook_name = [ playbook.id for playbook in app.running_context.execution_db.session.query(Playbook).all() ] if os.path.exists(walkoff.config.Config.WORKFLOWS_PATH): logger.info('Importing any workflows not currently in database') for p in os.listdir(walkoff.config.Config.WORKFLOWS_PATH): full_path = os.path.join(walkoff.config.Config.WORKFLOWS_PATH, p) if os.path.isfile(full_path): playbook = JsonPlaybookLoader.load_playbook(full_path) if playbook.name not in playbook_name: app.running_context.execution_db.session.add(playbook) app.running_context.execution_db.session.commit()
def test_load_multiple_workflows(self): workflows = [Workflow('something'), Workflow('something2')] playbook = Playbook('test', workflows=workflows) filepath = os.path.join(test_data_path, 'test.playbook') with open(filepath, 'w') as file_out: file_out.write(json.dumps(playbook.read())) workflows = [Workflow('something'), Workflow('something2')] playbook = Playbook('test2', workflows=workflows) filepath = os.path.join(test_data_path, 'test2.playbook') with open(filepath, 'w') as file_out: file_out.write(json.dumps(playbook.read())) loaded = Loader.load_playbooks(test_data_path) self.assertEqual(len(loaded), 2) self.assertSetEqual({playbook.name for playbook in loaded}, {'test', 'test2'})
def load_workflow(playbook_name, workflow_name): execution_db = ExecutionDatabase.instance playbook = JsonPlaybookLoader.load_playbook( os.path.join(walkoff.config.Config.WORKFLOWS_PATH, playbook_name + '.playbook')) execution_db.session.add(playbook) execution_db.session.commit() workflow = None for wf in playbook.workflows: if wf.name == workflow_name: workflow = wf break return workflow
def load_playbook(playbook_name): playbook = JsonPlaybookLoader.load_playbook( os.path.join(test_workflows_path, playbook_name + '.playbook')) executiondb.execution_db.session.add(playbook) executiondb.execution_db.session.commit() return playbook
def test_load_workflow_with_workflow_not_in_playbook(self): playbook = Playbook('test') filepath = os.path.join(test_data_path, 'test.json') with open(filepath, 'w') as file_out: file_out.write(json.dumps(playbook.read())) self.assertIsNone(Loader.load_workflow(filepath, 'something'))
def test_load_workflow_name_not_in_playbook_json(self): test_invalid_json = {'a': 42} filepath = os.path.join(test_data_path, 'test.json') with open(filepath, 'w') as file_out: file_out.write(json.dumps(test_invalid_json)) self.assertIsNone(Loader.load_workflow(filepath, 'something'))
def test_load_workflow_invalid_json_format(self): test_invalid_json = 'something not json' filepath = os.path.join(test_data_path, 'test.json') with open(filepath, 'w') as file_out: file_out.write(test_invalid_json) self.assertIsNone(Loader.load_workflow(filepath, 'something'))
def test_load_playbook_file_dne(self): self.assertIsNone(Loader.load_playbook('/some/invalid/workflow.invalid'))
def test_load_workflow_file_dne(self): self.assertIsNone(Loader.load_workflow('/some/invalid/workflow.invalid', 'something'))
def test_load_playbooks_none_in_directory(self): self.assertListEqual(Loader.load_playbooks(test_data_path), [])