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 _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
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
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
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