示例#1
0
    def update_by_response(self, response):
        deploy_goal = response.deployGoal
        self.op_code = response.opCode
        if not self.report:
            self.report = PingReport()

        self.report.envId = deploy_goal.envId
        self.report.deployId = deploy_goal.deployId
        self.report.deployStage = deploy_goal.deployStage
        self.report.deployAlias = deploy_goal.deployAlias
        self.report.envName = deploy_goal.envName
        self.report.status = AgentStatus.UNKNOWN
        self.report.stageName = deploy_goal.stageName

        self.first_deploy = deploy_goal.firstDeploy

        if deploy_goal.build:
            build = deploy_goal.build
            self.build_info = BuildInfo(commit=build.scmCommit,
                                        build_url=build.artifactUrl,
                                        build_id=build.buildId,
                                        build_name=build.buildName,
                                        build_repo=build.scmRepo,
                                        build_branch=build.scmBranch)
        if deploy_goal.scriptVariables:
            self.script_variables = deploy_goal.scriptVariables

        # advanced per deploy step configs
        if deploy_goal.config:
            self.runtime_config = dict(deploy_goal.config)
示例#2
0
    def test_delete_report(self):
        status = DeployStatus()
        ping_report = {}
        ping_report['deployId'] = '123'
        ping_report['envId'] = '234'
        ping_report['envName'] = 'abc'
        ping_report['stageName'] = 'beta'
        ping_report['deployStage'] = DeployStage.SERVING_BUILD
        ping_report['status'] = AgentStatus.SUCCEEDED
        status.report = PingReport(jsonValue=ping_report)

        envs = {'abc': status}
        client = mock.Mock()
        estatus = mock.Mock()
        estatus.load_envs = mock.Mock(return_value=envs)
        deploy_goal = {}
        deploy_goal['deployId'] = '123'
        deploy_goal['envId'] = '234'
        deploy_goal['envName'] = 'abc'
        deploy_goal['stageName'] = 'beta'
        ping_response = {'deployGoal': deploy_goal, 'opCode': OpCode.DELETE}

        responses = [
            PingResponse(jsonValue=ping_response),
            PingResponse(jsonValue=self.ping_noop_response)
        ]
        client.send_reports = mock.Mock(side_effect=responses)
        agent = DeployAgent(client=client, estatus=estatus, conf=self.config,
                            executor=self.executor, helper=self.helper)
        agent.serve_build()
        calls = [mock.call(envs), mock.call({})]
        client.send_reports.assert_has_calls(calls)
        self.assertIsNone(agent._curr_report)
        self.assertEqual(agent._envs, {})
示例#3
0
 def _new_report(self):
     report = PingReport()
     report.envName = self.env_name
     report.stageName = self.stage
     report.erroCode = 0
     report.envId  = self.env_id
     report.deployStage = None
     report.status = AgentStatus.SUCCEEDED
     return report
示例#4
0
    def test_load_dump_file(self):
        fn = tempfile.mkstemp()[1]
        env_status = EnvStatus(fn)
        status1 = DeployStatus()
        ping_report = {}
        ping_report['deployId'] = 'deploy1'
        ping_report['envId'] = 'envId1'
        ping_report['envName'] = 'env1'
        ping_report['stageName'] = 'beta'
        ping_report['deployStage'] = DeployStage.POST_RESTART
        ping_report['status'] = AgentStatus.AGENT_FAILED
        ping_report['errorCode'] = 1
        ping_report['errorMessage'] = 'Fail to open files'
        status1.report = PingReport(jsonValue=ping_report)
        status1.build_info = BuildInfo(commit='abc',
                                       build_url='http://google.com',
                                       build_id='234')

        status2 = DeployStatus()
        ping_report = {}
        ping_report['deployId'] = 'deploy2'
        ping_report['envId'] = 'envId2'
        ping_report['envName'] = 'env2'
        ping_report['stageName'] = 'prod'
        ping_report['deployStage'] = DeployStage.SERVING_BUILD
        ping_report['status'] = AgentStatus.SUCCEEDED
        status2.report = PingReport(jsonValue=ping_report)
        status2.build_info = BuildInfo(commit='bcd',
                                       build_url='http://pinterest.com',
                                       build_id='234')
        envs = {'env1': status1, 'env2': status2}
        env_status.dump_envs(envs)
        envs2 = env_status.load_envs()

        self.assertEqual(envs['env1'].report.status,
                         envs2['env1'].report.status)
        self.assertEqual(envs['env1'].report.errorMessage,
                         envs2['env1'].report.errorMessage)
        self.assertEqual(envs['env1'].build_info.build_commit,
                         envs2['env1'].build_info.build_commit)
        self.assertEqual(envs['env2'].report.deployStage,
                         envs2['env2'].report.deployStage)
        self.assertEqual(envs['env2'].build_info.build_url,
                         envs2['env2'].build_info.build_url)
        os.remove(fn)
示例#5
0
    def load_from_json(self, json_value):
        report = json_value.get('report')
        build_info = json_value.get('build_info')
        if report:
            self.report = PingReport(jsonValue=report)
        if build_info:
            self.build_info = BuildInfo(commit=build_info.get('build_commit'),
                                        build_url=build_info.get('build_url'),
                                        build_id=build_info.get('build_id'),
                                        build_name=build_info.get('build_name'),
                                        build_repo=build_info.get('build_repo'),
                                        build_branch=build_info.get('build_branch'))

        self.runtime_config = json_value.get('runtime_config')
        op_code = json_value.get('op_code', OpCode.NOOP)
        if isinstance(op_code, int):
            self.op_code = OperationCode._VALUES_TO_NAMES[op_code]
        else:
            self.op_code = op_code
示例#6
0
    def test_report_health(self):
        status = DeployStatus()
        ping_report = {}
        ping_report['deployId'] = '123'
        ping_report['envId'] = '234'
        ping_report['envName'] = 'abc'
        ping_report['stageName'] = 'beta'
        ping_report['deployStage'] = DeployStage.SERVING_BUILD
        ping_report['status'] = AgentStatus.SUCCEEDED
        status.report = PingReport(jsonValue=ping_report)

        envs = {'234': status}
        client = mock.Mock()
        estatus = mock.Mock()
        estatus.load_envs = mock.Mock(return_value=envs)
        client.send_reports = \
            mock.Mock(return_value=PingResponse(jsonValue=self.ping_noop_response))
        agent = DeployAgent(client=client, estatus=estatus, conf=self.config,
                            executor=self.executor, helper=self.helper)
        agent.serve_build()
        client.send_reports.assert_called_once_with(envs)
        self.assertEqual(agent._curr_report.report.envId, '234')
        self.assertEqual(agent._curr_report.report.deployStage, DeployStage.SERVING_BUILD)
        self.assertEqual(agent._curr_report.report.status, AgentStatus.SUCCEEDED)