Example #1
0
    def test_state_checkers(self):
        build_response = BuildResponse({
            'status': {
                'phase': 'Complete'
            }
        })

        build_response.status = 'complete'
        assert build_response.is_finished()
        assert build_response.is_succeeded()
        assert not build_response.is_failed()
        assert not build_response.is_cancelled()
        assert not build_response.is_running()
        assert not build_response.is_pending()
        assert not build_response.is_in_progress()

        build_response.status = 'failed'
        assert build_response.is_failed()
        assert build_response.is_finished()
        assert not build_response.is_succeeded()
        assert not build_response.is_cancelled()
        assert not build_response.is_running()
        assert not build_response.is_pending()
        assert not build_response.is_in_progress()

        build_response.status = 'cancelled'
        assert build_response.is_cancelled()
        assert build_response.is_failed()
        assert build_response.is_finished()
        assert not build_response.is_succeeded()
        assert not build_response.is_running()
        assert not build_response.is_pending()
        assert not build_response.is_in_progress()

        build_response.status = 'running'
        assert build_response.is_running()
        assert build_response.is_in_progress()
        assert not build_response.is_cancelled()
        assert not build_response.is_failed()
        assert not build_response.is_finished()
        assert not build_response.is_succeeded()
        assert not build_response.is_pending()

        build_response.status = 'pending'
        assert build_response.is_pending()
        assert build_response.is_in_progress()
        assert not build_response.is_running()
        assert not build_response.is_cancelled()
        assert not build_response.is_failed()
        assert not build_response.is_finished()
        assert not build_response.is_succeeded()
    def test_state_checkers(self):
        build_response = BuildResponse({
            'status': {
                'phase': 'Complete'
            }
        })

        build_response.status = 'complete'
        assert build_response.is_finished()
        assert build_response.is_succeeded()
        assert not build_response.is_failed()
        assert not build_response.is_cancelled()
        assert not build_response.is_running()
        assert not build_response.is_pending()
        assert not build_response.is_in_progress()

        build_response.status = 'failed'
        assert build_response.is_failed()
        assert build_response.is_finished()
        assert not build_response.is_succeeded()
        assert not build_response.is_cancelled()
        assert not build_response.is_running()
        assert not build_response.is_pending()
        assert not build_response.is_in_progress()

        build_response.status = 'cancelled'
        assert build_response.is_cancelled()
        assert build_response.is_failed()
        assert build_response.is_finished()
        assert not build_response.is_succeeded()
        assert not build_response.is_running()
        assert not build_response.is_pending()
        assert not build_response.is_in_progress()

        build_response.status = 'running'
        assert build_response.is_running()
        assert build_response.is_in_progress()
        assert not build_response.is_cancelled()
        assert not build_response.is_failed()
        assert not build_response.is_finished()
        assert not build_response.is_succeeded()
        assert not build_response.is_pending()

        build_response.status = 'pending'
        assert build_response.is_pending()
        assert build_response.is_in_progress()
        assert not build_response.is_running()
        assert not build_response.is_cancelled()
        assert not build_response.is_failed()
        assert not build_response.is_finished()
        assert not build_response.is_succeeded()
Example #3
0
 def _get_running_builds_for_build_config(self, build_config_id):
     all_builds_for_bc = self.os.list_builds(build_config_id=build_config_id).json()['items']
     running = []
     for b in all_builds_for_bc:
         br = BuildResponse(b)
         if br.is_pending() or br.is_running():
             running.append(br)
     return running
Example #4
0
 def _get_running_builds_for_build_config(self, build_config_id):
     all_builds_for_bc = self.os.list_builds(build_config_id=build_config_id).json()['items']
     running = []
     for b in all_builds_for_bc:
         br = BuildResponse(b)
         if br.is_pending() or br.is_running():
             running.append(br)
     return running
Example #5
0
 def _get_running_builds_for_build_config(self, build_config_id, namespace=DEFAULT_NAMESPACE):
     all_builds_for_bc = self.os.list_builds(
         build_config_id=build_config_id,
         namespace=namespace).json()['items']
     running = []
     for b in all_builds_for_bc:
         br = BuildResponse(request=None, build_json=b)
         if br.is_pending() or br.is_running():
             running.append(br)
     return running
Example #6
0
    def logs(self, build_id, follow=False, build_json=None, wait_if_missing=False,
             namespace=DEFAULT_NAMESPACE):
        """
        provide logs from build

        :param build_id: str
        :param follow: bool, fetch logs as they come?
        :param build_json: dict, to save one get-build query
        :param wait_if_missing: bool, if build doesn't exist, wait
        :param namespace: str
        :return: None, str or iterator
        """
        # does build exist?
        try:
            build_json = build_json or self.get_build(build_id, namespace=namespace).json()
        except OsbsResponseException as ex:
            if ex.status_code == 404:
                if not wait_if_missing:
                    raise OsbsException("Build '%s' doesn't exist." % build_id)
            else:
                raise

        if follow or wait_if_missing:
            build_json = self.wait_for_build_to_get_scheduled(build_id, namespace=namespace)

        br = BuildResponse(None, build_json=build_json)

        # When build is in new or pending state, openshift responds with 500
        if br.is_pending():
            return

        # 0.5+
        buildlogs_url = self._build_url("buildLogs/%s/" % build_id,
                                        follow=(1 if follow else 0),
                                        namespace=namespace)
        response = self._get(buildlogs_url, stream=follow, headers={'Connection': 'close'})
        if response.status_code in (403, 404):
            # 0.4.3
            # FIXME: remove this once 0.5.? is deployed everywhere
            buildlogs_url = self._build_url("proxy/buildLogs/%s/" % build_id,
                                            follow=(1 if follow else 0),
                                            namespace=namespace)
            response.close_multi()
            response = self._get(buildlogs_url, stream=follow, headers={'Connection': 'close'})
        if follow:
            return response.iter_lines()
        return response.content
Example #7
0
    def logs(self,
             build_id,
             follow=False,
             build_json=None,
             wait_if_missing=False):
        """
        provide logs from build

        :param build_id: str
        :param follow: bool, fetch logs as they come?
        :param build_json: dict, to save one get-build query
        :param wait_if_missing: bool, if build doesn't exist, wait
        :return: None, str or iterator
        """
        # does build exist?
        try:
            build_json = build_json or self.get_build(build_id).json()
        except OsbsResponseException as ex:
            if ex.status_code == 404:
                if not wait_if_missing:
                    raise OsbsException("Build '%s' doesn't exist." % build_id)
            else:
                raise

        if follow or wait_if_missing:
            build_json = self.wait_for_build_to_get_scheduled(build_id)

        br = BuildResponse(build_json)

        # When build is in new or pending state, openshift responds with 500
        if br.is_pending():
            return

        buildlogs_url = self._build_url("builds/%s/log/" % build_id,
                                        follow=(1 if follow else 0))
        response = self._get(buildlogs_url,
                             stream=follow,
                             headers={'Connection': 'close'})
        check_response(response)

        if follow:
            return response.iter_lines()
        return response.content
Example #8
0
    def logs(self, build_id, follow=False, build_json=None, wait_if_missing=False):
        """
        provide logs from build

        :param build_id: str
        :param follow: bool, fetch logs as they come?
        :param build_json: dict, to save one get-build query
        :param wait_if_missing: bool, if build doesn't exist, wait
        :return: None, str or iterator
        """
        # does build exist?
        try:
            build_json = build_json or self.get_build(build_id).json()
        except OsbsResponseException as ex:
            if ex.status_code == 404:
                if not wait_if_missing:
                    raise OsbsException("Build '%s' doesn't exist." % build_id)
            else:
                raise

        if follow or wait_if_missing:
            build_json = self.wait_for_build_to_get_scheduled(build_id)

        br = BuildResponse(build_json)

        # When build is in new or pending state, openshift responds with 500
        if br.is_pending():
            return

        buildlogs_url = self._build_url("builds/%s/log/" % build_id,
                                        follow=(1 if follow else 0))
        response = self._get(buildlogs_url, stream=follow, headers={'Connection': 'close'})
        check_response(response)

        if follow:
            return response.iter_lines()
        return response.content