def get_failing_jobs_html(dlrn_hashes, release_name): failing_jobs_html = "" # If any of the jobs is still in progress in_progress = False try: dlrn = get_dlrn_instance_for_release(release_name) if dlrn: params = dlrnapi_client.Params2() params.commit_hash = dlrn_hashes['commit_hash'] params.distro_hash = dlrn_hashes['distro_hash'] params.success = str(False) failing_jobs = dlrn.api_repo_status_get(params) for i, failing_job in enumerate(failing_jobs): if failing_job.in_progress: in_progress = True failing_job_ln = "<a href='{}' target='_blank' >{}</a>".format( failing_job.url, failing_job.job_id) if i > 0: failing_job_ln += "<br>" failing_jobs_html += failing_job_ln except Exception as e: print(e) pass return (in_progress, failing_jobs_html)
def get_failing_jobs_html(dlrn_hashes, release_name): failing_jobs_html = "" # If any of the jobs is still in progress in_progress = False try: dlrn = get_dlrn_instance_for_release(release_name) if dlrn: params = dlrnapi_client.Params2() params.commit_hash = dlrn_hashes['commit_hash'] params.distro_hash = dlrn_hashes['distro_hash'] params.success = str(False) failing_jobs = dlrn.api_repo_status_get(params) if len(failing_jobs) > 0: for i, failing_job in enumerate(failing_jobs): if failing_job.in_progress: in_progress = True failing_job_ln = html_link.format(failing_job.url, failing_job.job_id) if i > 0: failing_job_ln += "<br>" failing_jobs_html += failing_job_ln else: failing_jobs_html = ("<font color='red'>WARNING</font> " "expected perodic jobs have not run") except Exception as e: print(e) pass return (in_progress, failing_jobs_html)
def __init__(self, config): """ like all the the other inits around this code, the init will gather relevant information for this class and put them into local shortcuts :param config: The global promoter config or the reduced dlrnclient config """ self.config = config # TODO(gcerami): fix credentials gathering dlrnapi_client.configuration.password = self.config.dlrnauth_password dlrnapi_client.configuration.username = self.config.dlrnauth_username api_client = dlrnapi_client.ApiClient(host=self.config.api_url) self.api_instance = dlrnapi_client.DefaultApi(api_client=api_client) self.last_promotions = {} # Variable to detect changes on the hash while we are running a # promotion self.named_hashes_map = {} # This way of preparing parameters and configuration is copied # directly from dlrnapi CLI and ansible module self.hashes_params = dlrnapi_client.PromotionQuery() self.jobs_params = dlrnapi_client.Params2() self.jobs_params_aggregate = dlrnapi_client.Params3() self.report_params = dlrnapi_client.Params3() self.promote_params = dlrnapi_client.Promotion() self.log.debug("Promoter DLRN client: API URL: {}, user: {}" "".format(api_client.host, self.config.dlrnauth_username))
def test_api_repo_status_get(self): """Test case for api_repo_status_get """ default_api = DefaultApi(api_client=self.api_client) params = dlrnapi_client.Params2() path, method = default_api.api_repo_status_get(params) self.assertEqual(path, '/api/repo_status') self.assertEqual(method, 'GET')
def check_trigger_condition(dlrn, promotion_name, wait_job_name, launch_job_name): """ Check if launch job has to run looking for the wait job at the latest DLRN promotion, the wait job has to be at success state. This just look at latest promotion and also don't retrigger if the launch_job state is not success. This uses to calls to the dlrnapi_client.DefaultApi: - api_promotions_get to get the newest 'Promotion' - api_repo_status_get to get the jobs from the 'Promotion' Parameters ---------- dlrn : dlrnapi_client.DefaultApi The dlrn api impl to look for promotions and repo status promotion_name: str The promotion name to use, tripleo-ci-testing for example wait_job_name: str Name of the job that have to finish with success state to for the trigger condition to be True launch_job_name: str Name of the job that we want to trigger. Returns ------- bool It will be True if the launch_job_name has to be triggered false otherwise """ logger = logging.getLogger("dlrn-trigger") params = dlrnapi_client.PromotionQuery() params.promote_name = promotion_name api_response = dlrn.api_promotions_get(params) last_promotion = api_response[0] logger.debug("Selected promotion: {}".format(last_promotion)) params = dlrnapi_client.Params2() params.distro_hash = last_promotion.distro_hash params.commit_hash = last_promotion.commit_hash api_response = dlrn.api_repo_status_get(params) logger.debug("CI status from promotion: {}".format(api_response)) wait_job = None launch_job = None # Select the first ocurrence of wait and launch job for status in api_response: if wait_job is None and status.job_id == wait_job_name: wait_job = status elif launch_job is None and status.job_id == launch_job_name: launch_job = status logger.info("Selected wait job build: {}".format(wait_job)) logger.info("Selected launch job build: {}".format(launch_job)) # Trigger if job is not already trigger and wait job is fine return launch_job is None and wait_job is not None and wait_job.success
def repo_status(api_instance, options): params = dlrnapi_client.Params2() # Params2 | The JSON params to post params.commit_hash = options.commit_hash params.distro_hash = options.distro_hash if options.success: params.success = str(options.success) try: api_response = api_instance.api_repo_status_get(params) return api_response except ApiException as e: raise e
def fetch_jobs(dlrn, hash_values): '''Fetch the successfully finished jobs for a specific DLRN hash''' logger = logging.getLogger('promoter') params = dlrnapi_client.Params2() params.commit_hash = hash_values['commit_hash'] params.distro_hash = hash_values['distro_hash'] params.success = str(True) try: api_response = dlrn.api_repo_status_get(params) except ApiException: logger.error('Exception when calling api_repo_status_get: %s', ApiException) raise logger.debug('Successful jobs for %s:', hash_values) for result in api_response: logger.debug('%s at %s, logs at %s', result.job_id, datetime.fromtimestamp(result.timestamp).isoformat(), result.url) return [details.job_id for details in api_response]