Example #1
0
    def test_execute_job_no_vendor(self):
        play_info_juniper_qfx = PlaybookInfoType(
            playbook_uri='job_manager_test.yaml',
            vendor='Juniper',
            device_family='QFX')
        play_info_vendor_agnostic = PlaybookInfoType(
            playbook_uri='job_manager_test2.yaml')
        playbooks_list = PlaybookInfoListType(
            playbook_info=[play_info_juniper_qfx, play_info_vendor_agnostic])
        job_template = JobTemplate(job_template_type='workflow',
                                   job_template_multi_device_job=True,
                                   job_template_playbooks=playbooks_list,
                                   name='Test_template_no_vendor')
        job_template_uuid = self._vnc_lib.job_template_create(job_template)

        # mock the play book executor call
        # check if the playbook is getting executed after job_manager
        # validation
        self.mock_play_book_execution()

        TestJobManagerUtils.mock_sandesh_check()

        job_input_json, log_utils = self.get_details(job_template_uuid)

        wm = WFManager(log_utils.get_config_logger(), self._vnc_lib,
                       job_input_json, log_utils, self.fake_zk_client)

        wm.start_job()
        self.assertEqual(wm.result_handler.job_result_status,
                         JobStatus.SUCCESS)
Example #2
0
    def test_execute_job_with_vendor_only(self):
        play_info = PlaybookInfoType(playbook_uri='job_manager_test.yaml',
                                     vendor='Juniper')
        play_info1 = PlaybookInfoType(
            playbook_uri='job_manager_test_multiple.yml', vendor='Juniper')

        playbooks_list = PlaybookInfoListType(
            playbook_info=[play_info, play_info1])
        job_template = JobTemplate(job_template_type='workflow',
                                   job_template_multi_device_job=True,
                                   job_template_playbooks=playbooks_list,
                                   name='Test_template_multidevice')
        job_template_uuid = self._vnc_lib.job_template_create(job_template)

        # mock the play book executor call
        self.mock_play_book_execution()
        TestJobManagerUtils.mock_sandesh_check()

        job_input_json, log_utils = self.get_details(job_template_uuid)
        wm = WFManager(log_utils.get_config_logger(), self._vnc_lib,
                       job_input_json, log_utils, self.fake_zk_client)

        wm.start_job()
        self.assertEqual(wm.result_handler.job_result_status,
                         JobStatus.SUCCESS)
    def test_job_template_create(self):
        exe_info_list = ExecutableInfoListType()
        exe_info_list.set_executable_info([
            ExecutableInfoType(executable_path='/tmp/fake',
                               executable_args='a b c',
                               job_completion_weightage=10)
        ])
        playbook_info_list = PlaybookInfoListType()
        playbook_info_list.set_playbook_info([
            PlaybookInfoType(playbook_uri='/tmp/fake/uri/playbook.yaml',
                             multi_device_playbook=False,
                             job_completion_weightage=5)
        ])
        prop_map = {
            'name': 'jt-{}'.format(self.id()),
            'parent_obj': self.gsc,
            'parent_type': 'global-system-config',
            'display_name': 'job template test',
            'job_template_executables': exe_info_list,
            'job_template_output_schema': 'some_string',
            'job_template_output_ui_schema': 'some_string',
            'job_template_concurrency_level': 'fabric',
            'job_template_description': 'test template',
            'job_template_type': 'workflow',
            'job_template_input_ui_schema': 'some_string',
            'job_template_synchronous_job': False,
            'job_template_input_schema': 'some_string',
            'job_template_playbooks': playbook_info_list,
            'annotations': {}
        }

        obj = self.set_properties(JobTemplate(), prop_map)
        self.assertSchemaObjCreateOrUpdate(obj)
    def test_execute_job_generic_exception_multi_device(self):
        # create job template
        job_template = JobTemplate(job_template_type='device',
                                   job_template_job_runtime='ansible',
                                   job_template_multi_device_job=True,
                                   job_template_playbooks=TestJobManagerUtils.
                                   playbooks_list,
                                   name='multi_device_template_gen_exc')
        job_template_uuid = self._vnc_lib.job_template_create(job_template)

        TestJobManagerUtils.mock_sandesh_check()

        job_input_json, log_utils = TestJobManagerUtils.get_min_details(
                                                        job_template_uuid)

        jm = JobManager(log_utils.get_config_logger(),
                        self._vnc_lib, job_input_json, log_utils)

        exc_msg = repr(TypeError(
                           "'NoneType' object has no attribute '__getitem__'"))
        sys_exit_msg = self.assertRaises(SystemExit, jm.start_job)
        self.assertEqual(sys_exit_msg.code,
                         MsgBundle.getMessage(
                                       MsgBundle.EXC_JOB_ERR_HDR) +
                         exc_msg + " ")
    def test_execute_job_run_pb_gen_exc(self):
        # create job template
        job_template = JobTemplate(
            job_template_type='device',
            job_template_job_runtime='ansible',
            job_template_multi_device_job=False,
            job_template_playbooks=TestJobManagerUtils.playbooks_list,
            name='run_pb_gen_exc')
        job_template_uuid = self._vnc_lib.job_template_create(job_template)

        TestJobManagerUtils.mock_sandesh_check()

        job_input_json, log_utils = TestJobManagerUtils.get_min_details(
            job_template_uuid)

        jmgr = JobManager(log_utils.get_config_logger(), self._vnc_lib,
                          job_input_json, log_utils)

        exc = Exception('some gen exc')

        # mock the call to raise exception
        flexmock(json).should_receive('dumps')\
            .and_raise(exc)
        sys_exit_msg = self.assertRaises(SystemExit, jmgr.start_job)

        self.assertEqual(
            sys_exit_msg.code,
            MsgBundle.getMessage(MsgBundle.JOB_SUMMARY_MESSAGE_HDR) +
            MsgBundle.getMessage(
                MsgBundle.JOB_SINGLE_DEVICE_FAILED_MESSAGE_HDR) +
            MsgBundle.getMessage(
                MsgBundle.RUN_PLAYBOOK_ERROR,
                playbook_uri=TestJobManagerUtils.play_info.playbook_uri,
                exc_msg=repr(exc)))
Example #6
0
    def test_execute_job_success_multiple_templates(self):
        # create job template
        play_info = PlaybookInfoType(playbook_uri='job_manager_test.yml',
                                     vendor='Juniper',
                                     device_family='MX')
        play_info1 = PlaybookInfoType(
            playbook_uri='job_manager_test_multiple.yml',
            vendor='Juniper',
            device_family='QFX')
        playbooks_list = PlaybookInfoListType(
            playbook_info=[play_info, play_info1])
        job_template = JobTemplate(job_template_type='workflow',
                                   job_template_multi_device_job=False,
                                   job_template_playbooks=playbooks_list,
                                   name='Test_template1')
        job_template_uuid = self._vnc_lib.job_template_create(job_template)

        # mocking creation of a process
        self.mock_play_book_execution()
        # mocking Sandesh
        TestJobManagerUtils.mock_sandesh_check()
        # getting details required for job manager execution
        job_input_json, log_utils = TestJobManagerUtils.get_min_details(
            job_template_uuid)

        wm = WFManager(log_utils.get_config_logger(), self._vnc_lib,
                       job_input_json, log_utils, self.fake_zk_client)
        wm.start_job()
        self.assertEqual(wm.result_handler.job_result_status,
                         JobStatus.SUCCESS)
    def test_execute_job_no_device_json(self):
        # create job template
        job_template = JobTemplate(
            job_template_type='device',
            job_template_job_runtime='ansible',
            job_template_multi_device_job=True,
            job_template_playbooks=TestJobManagerUtils.playbooks_list,
            name='multi_device_no_json')
        job_template_uuid = self._vnc_lib.job_template_create(job_template)

        device_id = "aad74e24-a00b-4eb3-8412-f8b9412925c3"

        TestJobManagerUtils.mock_sandesh_check()

        job_input_json, log_utils = TestJobManagerUtils.get_min_details(
            job_template_uuid)
        job_input_json.update({
            "params": {
                "device_list": [device_id]
            },
        })

        jmgr = JobManager(log_utils.get_config_logger(), self._vnc_lib,
                          job_input_json, log_utils)
        sys_exit_msg = self.assertRaises(SystemExit, jmgr.start_job)
        self.assertEqual(
            sys_exit_msg.code,
            MsgBundle.getMessage(MsgBundle.JOB_SUMMARY_MESSAGE_HDR) +
            MsgBundle.getMessage(
                MsgBundle.JOB_MULTI_DEVICE_FAILED_MESSAGE_HDR) + device_id +
            ",\n" + MsgBundle.getMessage(MsgBundle.PLAYBOOK_RESULTS_MESSAGE) +
            device_id + ":" +
            MsgBundle.getMessage(MsgBundle.DEVICE_JSON_NOT_FOUND) + " \n")
Example #8
0
    def test_execute_job_multiple_device_families(self):
        play_info_mx = PlaybookInfoType(playbook_uri='job_manager_test.yaml',
                                        vendor='Juniper',
                                        device_family='MX')
        play_info_qfx = PlaybookInfoType(playbook_uri='job_manager_test.yaml',
                                         vendor='Juniper',
                                         device_family='QFX')

        playbooks_list = PlaybookInfoListType(
            playbook_info=[play_info_qfx, play_info_mx])
        job_template = JobTemplate(job_template_type='device',
                                   job_template_job_runtime='ansible',
                                   job_template_multi_device_job=True,
                                   job_template_playbooks=playbooks_list,
                                   name='Test_template_multidevfamilies')
        job_template_uuid = self._vnc_lib.job_template_create(job_template)

        # mock the play book executor call
        self.mock_play_book_execution()

        TestJobManagerUtils.mock_sandesh_check()

        job_input_json, log_utils = self.get_details(job_template_uuid)

        wm = WFManager(log_utils.get_config_logger(), self._vnc_lib,
                       job_input_json, log_utils)

        wm.start_job()
        self.assertEqual(wm.result_handler.job_result_status,
                         JobStatus.SUCCESS)
    def test_execute_job_generic_exception(self):
        # create job template
        job_template = JobTemplate(job_template_type='device',
                                   job_template_job_runtime='ansible',
                                   job_template_multi_device_job=False,
                                   job_template_playbooks=TestJobManagerUtils.
                                   playbooks_list,
                                   name='single_device_template_gen_exc')
        job_template_uuid = self._vnc_lib.job_template_create(job_template)

        TestJobManagerUtils.mock_sandesh_check()

        job_input_json, log_utils = TestJobManagerUtils.get_min_details(
            job_template_uuid)

        wm = WFManager(log_utils.get_config_logger(),
                          self._vnc_lib, job_input_json, log_utils)

        # mock the job_handler to raise a general exception
        mock_job_handler = flexmock()
        flexmock(JobHandler).new_instances(mock_job_handler)

        exc = Exception("Mock "
                        "Generic Exception")

        flexmock(mock_job_handler).should_receive('handle_job') \
            .and_raise(exc)

        exc_msg = repr(exc)

        sys_exit_msg = self.assertRaises(SystemExit, wm.start_job)
        self.assertEqual(sys_exit_msg.code,
                         MsgBundle.getMessage(
                             MsgBundle.EXC_JOB_ERR_HDR) +
                         exc_msg + " ")
    def test_execute_job_no_pb_file_on_path(self):
        # create job template
        play_info = PlaybookInfoType(playbook_uri='job_manager_test.yaml')
        playbooks_list = PlaybookInfoListType(playbook_info=[play_info])
        job_template = JobTemplate(job_template_type='device',
                                   job_template_job_runtime='ansible',
                                   job_template_multi_device_job=False,
                                   job_template_playbooks=TestJobManagerUtils.
                                   playbooks_list,
                                   name='single_device_template')
        job_template_uuid = self._vnc_lib.job_template_create(job_template)

        playbook_info = {"uri": "job_manager_test.yaml"}

        TestJobManagerUtils.mock_sandesh_check()

        job_input_json, log_utils = TestJobManagerUtils.get_min_details(
            job_template_uuid)

        wm = WFManager(log_utils.get_config_logger(),
                          self._vnc_lib, job_input_json, log_utils)

        # mock the call to invoke the playbook process
        flexmock(os.path).should_receive('exists').and_return(False)

        sys_exit_msg = self.assertRaises(SystemExit, wm.start_job)
        self.assertEqual(sys_exit_msg.code, MsgBundle.
                         getMessage(MsgBundle.
                                    JOB_SUMMARY_MESSAGE_HDR) +
                         MsgBundle.
                         getMessage(MsgBundle.
                                    JOB_SINGLE_DEVICE_FAILED_MESSAGE_HDR) +
                         MsgBundle.
                         getMessage(MsgBundle.PLAYBOOK_NOT_FOUND,
                                    playbook_uri=playbook_info['uri']))
    def test_execute_job_run_pb_process_rc1(self):
        # create job template
        job_template = JobTemplate(job_template_type='device',
                                   job_template_job_runtime='ansible',
                                   job_template_multi_device_job=False,
                                   job_template_playbooks=TestJobManagerUtils.
                                   playbooks_list,
                                   name='run_pb_prc_rc_1')
        job_template_uuid = self._vnc_lib.job_template_create(job_template)

        TestJobManagerUtils.mock_sandesh_check()

        job_input_json, log_utils = TestJobManagerUtils.get_min_details(
            job_template_uuid)

        wm = WFManager(log_utils.get_config_logger(),
                       self._vnc_lib, job_input_json, log_utils)
        loop_var = 0

        def mock_readline():
            global loop_var

            loop_var += 1
            if loop_var == 1:
                with open("tests/test.txt", 'r') as f:
                    line = f.readline()
                    return line
            if loop_var == 2:
                fake_process.should_receive("poll").and_return(123)
                loop_var = 0
                return ""

        stdout = flexmock(readline=mock_readline)
        flexmock(json).should_receive("loads")
        flexmock(os.path).should_receive('exists').and_return(True)
        # mock the call to raise exception

        fake_resp = flexmock(status_code=123)
        fake_request = flexmock(requests).should_receive(
            'post').and_return(fake_resp)

        fake_process = flexmock(returncode=1, stdout=stdout)
        fake_process.should_receive('wait')
        fake_process.should_receive('poll').and_return(123)
        # flexmock(subprocess).should_receive('TimeoutExpired')
        flexmock(subprocess32).should_receive('Popen').and_return(
            fake_process)
        sys_exit_msg = self.assertRaises(SystemExit, wm.start_job)

        self.assertEqual(sys_exit_msg.code,
                         MsgBundle.getMessage(
                             MsgBundle.JOB_SUMMARY_MESSAGE_HDR) +
                         MsgBundle.getMessage(
                             MsgBundle.JOB_SINGLE_DEVICE_FAILED_MESSAGE_HDR) +
                         MsgBundle.getMessage(
                             MsgBundle.PLAYBOOK_EXIT_WITH_ERROR,
                             playbook_uri=TestJobManagerUtils.
                             play_info.playbook_uri)
                         )
    def test_execute_job_multiple_vendors(self):
        play_info_juniper_mx = PlaybookInfoType(
                                     playbook_uri='job_manager_test.yaml',
                                     vendor='Juniper', device_family='MX')
        play_info_juniper_qfx = PlaybookInfoType(
                                     playbook_uri='job_manager_test.yaml',
                                     vendor='Juniper', device_family='QFX')
        play_info_arista_df = PlaybookInfoType(
                                     playbook_uri='job_manager_test.yaml',
                                     vendor='Arista', device_family='df')
        playbooks_list = PlaybookInfoListType(
            playbook_info=[play_info_arista_df,
                           play_info_juniper_qfx,
                           play_info_juniper_mx])
        job_template = JobTemplate(job_template_type='device',
                                   job_template_job_runtime='ansible',
                                   job_template_multi_device_job=True,
                                   job_template_playbooks=playbooks_list,
                                   name='Test_template_multivendors')
        job_template_uuid = self._vnc_lib.job_template_create(job_template)

        # mock the play book executor call
        self.mock_play_book_execution()
        self.mock_sandesh_check()
        execution_id = uuid.uuid4()

        # Hardcoding a sample auth token since its a madatory value passed
        # by the api server while invoking the job manager. Here since we
        # are directly invoking the job manager, we are passing a dummy
        # auth token for testing. This value is not used internally since
        # the calls that use the auth token are mocked
        sample_auth_token = "6e7d7f87faa54fac96a2a28ec752336a"

        job_input_json = {"job_template_id": job_template_uuid,
                          "input": {"playbook_data": "some playbook data"},
                          "job_execution_id": str(execution_id),
                          "auth_token": sample_auth_token,
                          "params": {"device_list":
                                     ["aad74e24-a00b-4eb3-8412-f8b9412925c3"]},
                          "device_json": {
                              "aad74e24-a00b-4eb3-8412-f8b9412925c3":
                                  {'device_vendor': 'Juniper',
                                   'device_family': 'MX'
                                   }
                              },
                          "args": {"collectors": ['127.0.0.1:8086']}}
        args = {"collectors": ['127.0.0.1:8086']}
        log_utils = JobLogUtils(sandesh_instance_id=str(execution_id),
                                config_args=json.dumps(args))
        jm = JobManager(log_utils.get_config_logger(), self._vnc_lib,
                        job_input_json, log_utils)
        jm.start_job()
        self.assertEqual(jm.result_handler.job_result_status,
                         JobStatus.SUCCESS)
 def mockJobTemplate(self, fqname):
     try:
         templates = mock_job_templates_list['job-templates']
         for jt in templates:
             if fqname == jt['job-template']['fq_name'][-1]:
                 job_template_obj = JobTemplate().from_dict(
                     **jt['job-template'])
                 return job_template_obj
     except RefsExistError:
         logger.info("Job template {} already exists".format(fqname))
     except Exception as ex:
         logger.error(
             "ERROR creating job template {}: {}".format(fqname, ex))
         return None
    def test_execute_job_generic_exception_handle_device_job(self):
        # create job template
        job_template = JobTemplate(job_template_type='device',
                                   job_template_job_runtime='ansible',
                                   job_template_multi_device_job=True,
                                   job_template_playbooks=TestJobManagerUtils.
                                   playbooks_list,
                                   name='handle_dev_job_gen_exc')
        job_template_uuid = self._vnc_lib.job_template_create(job_template)

        exc_msg = 'Job Device Handler Generic Exception'

        TestJobManagerUtils.mock_sandesh_check()

        job_input_json, log_utils = TestJobManagerUtils.get_min_details(
            job_template_uuid)
        job_input_json["params"] = {"device_list":
                                        [
                                            "aad74e24-a00b-4eb3-8412-f8b9412925c3"]}

        wm = WFManager(log_utils.get_config_logger(),
                          self._vnc_lib, job_input_json, log_utils)

        # mock the job_handler to raise a general exception
        mock_job_handler = flexmock()
        flexmock(JobHandler).new_instances(mock_job_handler)

        flexmock(mock_job_handler).should_receive('handle_job')
        flexmock(mock_job_handler).should_receive('get_playbook_info') \
            .and_raise(
            Exception("Job Device Handler "
                      "Generic Exception"))

        mock_result_handler = flexmock(job_result_status=JobStatus.FAILURE,
                                       job_summary_message=exc_msg)
        flexmock(JobResultHandler).new_instances(mock_result_handler)
        flexmock(mock_result_handler).should_receive(
            'create_job_summary_message').and_return(exc_msg)
        flexmock(mock_result_handler).should_receive(
            'create_job_summary_log')
        flexmock(mock_result_handler).should_receive('get_device_data')
        flexmock(mock_result_handler).should_receive('update_job_status') \
            .with_args(JobStatus.FAILURE, exc_msg)

        sys_exit_msg = self.assertRaises(SystemExit, wm.start_job)
        self.assertEqual(sys_exit_msg.code, exc_msg)
    def test_execute_job_no_credentials(self):
        # create job template
        job_template = JobTemplate(job_template_type='device',
                                   job_template_job_runtime='ansible',
                                   job_template_multi_device_job=True,
                                   job_template_playbooks=TestJobManagerUtils.
                                   playbooks_list,
                                   name='multi_device_no_credentials')
        job_template_uuid = self._vnc_lib.job_template_create(job_template)

        device_id = "aad74e24-a00b-4eb3-8412-f8b9412925c3"

        TestJobManagerUtils.mock_sandesh_check()

        job_input_json, log_utils = TestJobManagerUtils.get_min_details(
            job_template_uuid)
        job_input_json.update({"params": {"device_list": [device_id]},
                               "device_json": {
                                   device_id:
                                       {"device_family": "MX",
                                        "device_vendor": "Juniper",
                                        "device_product":
                                            "Some random product",
                                        "device_fqname": [
                                            "default-global-system-config",
                                            "random_fqname"]}}})

        wm = WFManager(log_utils.get_config_logger(),
                       self._vnc_lib, job_input_json, log_utils)

        sys_exit_msg = self.assertRaises(SystemExit, wm.start_job)
        self.assertEqual(
            sys_exit_msg.code,
            MsgBundle.getMessage(MsgBundle.JOB_SUMMARY_MESSAGE_HDR) +
            MsgBundle.getMessage(MsgBundle.
                                 JOB_MULTI_DEVICE_FAILED_MESSAGE_HDR) +
            device_id +
            ",\n" +
            MsgBundle.getMessage(MsgBundle.PLAYBOOK_RESULTS_MESSAGE) +
            device_id +
            ":" +
            MsgBundle.getMessage(
                MsgBundle.NO_CREDENTIALS_FOUND,
                device_id=device_id) +
            " \n")
Example #16
0
    def test_execute_job_with_recovery(self):
        # Create a job template
        play_info_1 = PlaybookInfoType(
            playbook_uri='job_manager_test_error.yml',
            vendor='Juniper',
            device_family='MX',
            sequence_no=0)
        play_info_2 = PlaybookInfoType(
            playbook_uri='job_manager_test_recovery.yml',
            vendor='Juniper',
            device_family='QFX',
            sequence_no=1,
            recovery_playbook=True)

        playbooks_list = PlaybookInfoListType([play_info_1, play_info_2])

        job_template = JobTemplate(job_template_type='workflow',
                                   job_template_multi_device_job=False,
                                   job_template_playbooks=playbooks_list,
                                   name='Test_template_with_recovery')

        job_template_uuid = self._vnc_lib.job_template_create(job_template)

        # Mock creation of a process
        self.mock_play_book_execution(rc=42)

        # Mock sandesh
        TestJobManagerUtils.mock_sandesh_check()

        # getting details required for job manager execution
        job_input_json, log_utils = TestJobManagerUtils.get_min_details(
            job_template_uuid)

        wm = WFManager(log_utils.get_config_logger(), self._vnc_lib,
                       job_input_json, log_utils, self.fake_zk_client)
        wm.start_job()

        self.assertEqual(wm.result_handler.job_result_status,
                         JobStatus.FAILURE)

        expected_job_result_message = "Finished cleaning up after the error"
        self.assertTrue(wm.result_handler.job_result_message,
                        expected_job_result_message)
    def test_execute_job_explicit_mismatch(self):
        # create job template
        job_template = JobTemplate(
            job_template_type='device',
            job_template_job_runtime='ansible',
            job_template_multi_device_job=True,
            job_template_playbooks=TestJobManagerUtils.playbooks_list,
            name='multi_device_explicit_mismatch')
        job_template_uuid = self._vnc_lib.job_template_create(job_template)

        TestJobManagerUtils.mock_sandesh_check()

        device_id = "aad74e24-a00b-4eb3-8412-f8b9412925c3"
        job_input_json, log_utils = TestJobManagerUtils.get_min_details(
            job_template_uuid)
        job_input_json.update({
            "params": {
                "device_list": [device_id]
            },
            "device_json": {
                device_id: {
                    "device_family": "MX",
                    "device_vendor": "Arista",
                    "device_username": "******",
                    "device_password": "******"
                }
            }
        })

        jmgr = JobManager(log_utils.get_config_logger(), self._vnc_lib,
                          job_input_json, log_utils)

        sys_exit_msg = self.assertRaises(SystemExit, jmgr.start_job)
        self.assertEqual(
            sys_exit_msg.code,
            MsgBundle.getMessage(MsgBundle.JOB_SUMMARY_MESSAGE_HDR) +
            MsgBundle.getMessage(
                MsgBundle.JOB_MULTI_DEVICE_FAILED_MESSAGE_HDR) + device_id +
            ",\n" + MsgBundle.getMessage(MsgBundle.PLAYBOOK_RESULTS_MESSAGE) +
            device_id + ":" +
            MsgBundle.getMessage(MsgBundle.PLAYBOOK_INFO_DEVICE_MISMATCH,
                                 device_vendor="Arista",
                                 device_family="MX") + " \n")
    def test_execute_job_success(self):
        # create job template
        play_info = PlaybookInfoType(playbook_uri='job_manager_test.yaml',
                                     vendor='Juniper',
                                     device_family='MX')
        playbooks_list = PlaybookInfoListType(playbook_info=[play_info])
        job_template = JobTemplate(job_template_type='device',
                                   job_template_job_runtime='ansible',
                                   job_template_multi_device_job=False,
                                   job_template_playbooks=playbooks_list,
                                   name='Test_template')
        job_template_uuid = self._vnc_lib.job_template_create(job_template)

        self.mock_play_book_execution()
        TestJobManagerUtils.mock_sandesh_check()
        job_input_json, log_utils = TestJobManagerUtils.get_min_details(
            job_template_uuid)
        jm = JobManager(log_utils.get_config_logger(), self._vnc_lib,
                        job_input_json, log_utils)
        jm.start_job()
        self.assertEqual(jm.result_handler.job_result_status,
                         JobStatus.SUCCESS)
    def test_execute_job_run_pb_process_gen_exc(self):
        # create job template
        job_template = JobTemplate(job_template_type='device',
                                   job_template_job_runtime='ansible',
                                   job_template_multi_device_job=False,
                                   job_template_playbooks=TestJobManagerUtils.
                                   playbooks_list,
                                   name='run_pb_prc_gen_exc')
        job_template_uuid = self._vnc_lib.job_template_create(job_template)

        TestJobManagerUtils.mock_sandesh_check()

        job_input_json, log_utils = TestJobManagerUtils.get_min_details(
                                                        job_template_uuid)

        jm = JobManager(log_utils.get_config_logger(),
                        self._vnc_lib, job_input_json, log_utils)

        flexmock(os.path).should_receive('exists').and_return(True)
        # mock the call to raise exception

        fake_process = flexmock(returncode=None)
        fake_process.should_receive('wait')
        # flexmock(subprocess).should_receive('TimeoutExpired')

        e = Exception('mock gen exception in run_playbook_process')
        flexmock(subprocess32).should_receive('Popen').and_raise(e)

        sys_exit_msg = self.assertRaises(SystemExit, jm.start_job)

        self.assertEqual(
            sys_exit_msg.code,
            MsgBundle.getMessage(MsgBundle.JOB_SUMMARY_MESSAGE_HDR) +
            MsgBundle.getMessage(MsgBundle.
                                 JOB_SINGLE_DEVICE_FAILED_MESSAGE_HDR) +
            MsgBundle.getMessage(MsgBundle.RUN_PLAYBOOK_PROCESS_ERROR,
                                 playbook_uri=TestJobManagerUtils.play_info.
                                 playbook_uri,
                                 exc_msg=repr(e)))
Example #20
0
    def test_execute_job_multiple_vendors_multiple_playbooks(self):
        play_info_juniper_mx = PlaybookInfoType(
            playbook_uri='job_manager_test.yaml',
            vendor='Juniper',
            device_family='MX',
            sequence_no=0)
        play_info_juniper_qfx = PlaybookInfoType(
            playbook_uri='job_manager_test.yaml',
            vendor='Juniper',
            device_family='QFX',
            sequence_no=1)
        play_info_arista_df = PlaybookInfoType(
            playbook_uri='job_manager_test2.yaml',
            vendor='Arista',
            device_family='df',
            sequence_no=2)
        playbooks_list = PlaybookInfoListType(playbook_info=[
            play_info_arista_df, play_info_juniper_qfx, play_info_juniper_mx
        ])
        job_template = JobTemplate(job_template_type='workflow',
                                   job_template_multi_device_job=True,
                                   job_template_playbooks=playbooks_list,
                                   name='Test_template_multivendors')
        job_template_uuid = self._vnc_lib.job_template_create(job_template)

        # mock the play book executor call
        self.mock_play_book_execution()

        TestJobManagerUtils.mock_sandesh_check()
        job_input_json, log_utils = self.get_details(job_template_uuid)

        wm = WFManager(log_utils.get_config_logger(), self._vnc_lib,
                       job_input_json, log_utils, self.fake_zk_client)

        wm.start_job()
        self.assertEqual(wm.result_handler.job_result_status,
                         JobStatus.SUCCESS)