def render_tag_from_config(self): """Configure tag_from_config plugin""" phase = 'postbuild_plugins' plugin = 'tag_from_config' if not self.has_tag_suffixes_placeholder(): return repo_info = utils.get_repo_info( self.user_params.git_uri.value, self.user_params.git_ref.value, git_branch=self.user_params.git_branch.value) unique_tag = self.user_params.image_tag.value.split(':')[-1] tag_suffixes = {'unique': [unique_tag], 'primary': []} if self.user_params.build_type.value == BUILD_TYPE_ORCHESTRATOR: if self.user_params.scratch.value: pass elif self.user_params.isolated.value: tag_suffixes['primary'].extend(['{version}-{release}']) elif repo_info.additional_tags.from_container_yaml: tag_suffixes['primary'].extend(['{version}-{release}']) tag_suffixes['primary'].extend(repo_info.additional_tags.tags) else: tag_suffixes['primary'].extend( ['latest', '{version}', '{version}-{release}']) tag_suffixes['primary'].extend(repo_info.additional_tags.tags) self.pt.set_plugin_arg(phase, plugin, 'tag_suffixes', tag_suffixes)
def test_get_repo_info(tmpdir): repo_path = tmpdir.mkdir("repo").strpath with open(os.path.join(repo_path, REPO_CONTAINER_CONFIG), 'w') as f: f.write(dedent("""\ compose: modules: - n:s:v """)) initialize_git_repo(repo_path, files=[REPO_CONTAINER_CONFIG]) info = get_repo_info(repo_path, 'HEAD') assert isinstance(info, RepoInfo) assert info.configuration.container == {'compose': {'modules': ['n:s:v']}}
def create_binary_container_pipeline_run( self, git_uri=_REQUIRED_PARAM, git_ref=_REQUIRED_PARAM, git_branch=_REQUIRED_PARAM, component=None, flatpak=None, git_commit_depth=None, isolated=None, koji_task_id=None, target=None, operator_csv_modifications_url=None, **kwargs): required_params = { "git_uri": git_uri, "git_ref": git_ref, "git_branch": git_branch } missing_params = [] for param_name, param_arg in required_params.items(): if param_arg is _REQUIRED_PARAM or not param_arg: missing_params.append(param_name) if missing_params: raise OsbsException('required parameter {} missing'.format( ", ".join(missing_params))) if operator_csv_modifications_url and not isolated: raise OsbsException( 'Only isolated build can update operator CSV metadata') repo_info = utils.get_repo_info(git_uri, git_ref, git_branch=git_branch, depth=git_commit_depth) self._checks_for_flatpak(flatpak, repo_info) req_labels = self._check_labels(repo_info) user_params = self.get_user_params( base_image=repo_info.base_image, component=component, flatpak=flatpak, isolated=isolated, koji_target=target, koji_task_id=koji_task_id, req_labels=req_labels, repo_info=repo_info, operator_csv_modifications_url=operator_csv_modifications_url, **kwargs) self._checks_for_isolated(user_params) pipeline_run_name, pipeline_run_data = self._get_binary_container_pipeline_data( user_params) user_params.pipeline_run_name = pipeline_run_name self._set_binary_container_pipeline_data(pipeline_run_name, pipeline_run_data, user_params) logger.info("creating binary container image pipeline run: %s", pipeline_run_name) pipeline_run = PipelineRun(self.os, pipeline_run_name, pipeline_run_data) try: logger.info("pipeline run created: %s", pipeline_run.start_pipeline_run()) except OsbsResponseException: logger.error("failed to create pipeline run %s", pipeline_run_name) raise return pipeline_run
def _do_create_prod_build(self, git_uri, git_ref, git_branch, user, component=None, target=None, architecture=None, yum_repourls=None, koji_task_id=None, scratch=None, platform=None, platforms=None, build_type=None, release=None, inner_template=None, outer_template=None, customize_conf=None, arrangement_version=None, filesystem_koji_task_id=None, koji_upload_dir=None, is_auto=False, koji_parent_build=None, isolated=None, flatpak=False, module=None, module_compose_id=None, signing_intent=None, compose_ids=None, **kwargs): if flatpak: if module is None: raise ValueError("Flatpak build missing required parameter 'module'") if isolated: # Flatpak builds from a particular stream autogenerate the release # as <module_version>.<n>; it doesn't make sense to make a fix # from specific one of these autogenerated version. What an isolated # fix for module requires will have to be determined from experience. raise ValueError("Flatpak build cannot be isolated") repo_info = utils.get_repo_info(git_uri, git_ref, git_branch=git_branch) build_request = self.get_build_request(inner_template=inner_template, outer_template=outer_template, customize_conf=customize_conf) if flatpak: req_labels, base_image = self._get_flatpak_labels(module) else: req_labels, base_image = self._check_labels(repo_info) if not git_branch: raise OsbsValidationException("required argument 'git_branch' can't be None") build_request.set_params( git_uri=git_uri, git_ref=git_ref, git_branch=git_branch, user=user, component=req_labels[utils.Labels.LABEL_TYPE_COMPONENT], build_image=self.build_conf.get_build_image(), build_imagestream=self.build_conf.get_build_imagestream(), base_image=base_image, name_label=req_labels[utils.Labels.LABEL_TYPE_NAME], registry_uris=self.build_conf.get_registry_uris(), registry_secrets=self.build_conf.get_registry_secrets(), source_registry_uri=self.build_conf.get_source_registry_uri(), registry_api_versions=self.build_conf.get_registry_api_versions(platform), openshift_uri=self.os_conf.get_openshift_base_uri(), builder_openshift_url=self.os_conf.get_builder_openshift_url(), kojiroot=self.build_conf.get_kojiroot(), kojihub=self.build_conf.get_kojihub(), sources_command=self.build_conf.get_sources_command(), koji_target=target, koji_certs_secret=self.build_conf.get_koji_certs_secret(), koji_task_id=koji_task_id, koji_use_kerberos=self.build_conf.get_koji_use_kerberos(), koji_kerberos_keytab=self.build_conf.get_koji_kerberos_keytab(), koji_kerberos_principal=self.build_conf.get_koji_kerberos_principal(), flatpak=flatpak, module=module, module_compose_id=module_compose_id, flatpak_base_image=self.build_conf.get_flatpak_base_image(), odcs_url=self.build_conf.get_odcs_url(), odcs_insecure=self.build_conf.get_odcs_insecure(), odcs_openidc_secret=self.build_conf.get_odcs_openidc_secret(), odcs_ssl_secret=self.build_conf.get_odcs_ssl_secret(), pdc_url=self.build_conf.get_pdc_url(), pdc_insecure=self.build_conf.get_pdc_insecure(), architecture=architecture, platforms=platforms, platform=platform, build_type=build_type, release=release, vendor=self.build_conf.get_vendor(), build_host=self.build_conf.get_build_host(), authoritative_registry=self.build_conf.get_authoritative_registry(), distribution_scope=self.build_conf.get_distribution_scope(), yum_repourls=yum_repourls, proxy=self.build_conf.get_proxy(), pulp_secret=self.build_conf.get_pulp_secret(), smtp_host=self.build_conf.get_smtp_host(), smtp_from=self.build_conf.get_smtp_from(), smtp_additional_addresses=self.build_conf.get_smtp_additional_addresses(), smtp_error_addresses=self.build_conf.get_smtp_error_addresses(), smtp_email_domain=self.build_conf.get_smtp_email_domain(), smtp_to_submitter=self.build_conf.get_smtp_to_submitter(), smtp_to_pkgowner=self.build_conf.get_smtp_to_pkgowner(), use_auth=self.build_conf.get_builder_use_auth(), pulp_registry=self.os_conf.get_pulp_registry(), builder_build_json_dir=self.build_conf.get_builder_build_json_store(), scratch=self.build_conf.get_scratch(scratch), reactor_config_secret=self.build_conf.get_reactor_config_secret(), client_config_secret=self.build_conf.get_client_config_secret(), token_secrets=self.build_conf.get_token_secrets(), arrangement_version=arrangement_version, info_url_format=self.build_conf.get_info_url_format(), artifacts_allowed_domains=self.build_conf.get_artifacts_allowed_domains(), equal_labels=self.build_conf.get_equal_labels(), platform_node_selector=self.build_conf.get_platform_node_selector(platform), scratch_build_node_selector=self.build_conf.get_scratch_build_node_selector(), explicit_build_node_selector=self.build_conf.get_explicit_build_node_selector(), isolated_build_node_selector=self.build_conf.get_isolated_build_node_selector(), auto_build_node_selector=self.build_conf.get_auto_build_node_selector(), is_auto=is_auto, filesystem_koji_task_id=filesystem_koji_task_id, koji_upload_dir=koji_upload_dir, platform_descriptors=self.build_conf.get_platform_descriptors(), koji_parent_build=koji_parent_build, group_manifests=self.os_conf.get_group_manifests(), isolated=isolated, prefer_schema1_digest=self.build_conf.get_prefer_schema1_digest(), signing_intent=signing_intent, compose_ids=compose_ids ) build_request.set_openshift_required_version(self.os_conf.get_openshift_required_version()) build_request.set_repo_info(repo_info) if build_request.scratch: response = self._create_scratch_build(build_request) elif build_request.isolated: response = self._create_isolated_build(build_request) else: response = self._create_build_config_and_build(build_request) logger.debug(response.json) return response
def dummy_api_function(): """A function that calls something it's not supposed to""" utils.get_repo_info(TEST_GIT_URI, TEST_GIT_REF)
def _do_create_prod_build(self, git_uri, git_ref, git_branch, user, component=None, target=None, architecture=None, yum_repourls=None, koji_task_id=None, scratch=None, platform=None, platforms=None, build_type=None, release=None, inner_template=None, outer_template=None, customize_conf=None, arrangement_version=None, filesystem_koji_task_id=None, koji_upload_dir=None, is_auto=False, koji_parent_build=None, **kwargs): repo_info = utils.get_repo_info(git_uri, git_ref, git_branch=git_branch) df_parser = repo_info.dockerfile_parser build_request = self.get_build_request(inner_template=inner_template, outer_template=outer_template, customize_conf=customize_conf) labels = utils.Labels(df_parser.labels) required_missing = False req_labels = {} # version label isn't used here, but is required label in Dockerfile # and is used and required for atomic reactor # if we don't catch error here, it will fail in atomic reactor later for label in [ utils.Labels.LABEL_TYPE_NAME, utils.Labels.LABEL_TYPE_COMPONENT, utils.Labels.LABEL_TYPE_VERSION ]: try: _, req_labels[label] = labels.get_name_and_value(label) except KeyError: required_missing = True logger.error("required label missing from Dockerfile : %s", labels.get_name(label)) if not git_branch: raise OsbsValidationException( "required argument 'git_branch' can't be None") if required_missing: raise OsbsValidationException( "required label missing from Dockerfile") build_request.set_params( git_uri=git_uri, git_ref=git_ref, git_branch=git_branch, user=user, component=req_labels[utils.Labels.LABEL_TYPE_COMPONENT], build_image=self.build_conf.get_build_image(), build_imagestream=self.build_conf.get_build_imagestream(), base_image=df_parser.baseimage, name_label=req_labels[utils.Labels.LABEL_TYPE_NAME], registry_uris=self.build_conf.get_registry_uris(), registry_secrets=self.build_conf.get_registry_secrets(), source_registry_uri=self.build_conf.get_source_registry_uri(), registry_api_versions=self.build_conf.get_registry_api_versions( platform), openshift_uri=self.os_conf.get_openshift_base_uri(), builder_openshift_url=self.os_conf.get_builder_openshift_url(), kojiroot=self.build_conf.get_kojiroot(), kojihub=self.build_conf.get_kojihub(), sources_command=self.build_conf.get_sources_command(), koji_target=target, koji_certs_secret=self.build_conf.get_koji_certs_secret(), koji_task_id=koji_task_id, koji_use_kerberos=self.build_conf.get_koji_use_kerberos(), koji_kerberos_keytab=self.build_conf.get_koji_kerberos_keytab(), koji_kerberos_principal=self.build_conf. get_koji_kerberos_principal(), architecture=architecture, platforms=platforms, platform=platform, build_type=build_type, release=release, vendor=self.build_conf.get_vendor(), build_host=self.build_conf.get_build_host(), authoritative_registry=self.build_conf.get_authoritative_registry( ), distribution_scope=self.build_conf.get_distribution_scope(), yum_repourls=yum_repourls, proxy=self.build_conf.get_proxy(), pulp_secret=self.build_conf.get_pulp_secret(), smtp_host=self.build_conf.get_smtp_host(), smtp_from=self.build_conf.get_smtp_from(), smtp_additional_addresses=self.build_conf. get_smtp_additional_addresses(), smtp_error_addresses=self.build_conf.get_smtp_error_addresses(), smtp_email_domain=self.build_conf.get_smtp_email_domain(), smtp_to_submitter=self.build_conf.get_smtp_to_submitter(), smtp_to_pkgowner=self.build_conf.get_smtp_to_pkgowner(), use_auth=self.build_conf.get_builder_use_auth(), pulp_registry=self.os_conf.get_pulp_registry(), nfs_server_path=self.os_conf.get_nfs_server_path(), nfs_dest_dir=self.build_conf.get_nfs_destination_dir(), builder_build_json_dir=self.build_conf. get_builder_build_json_store(), scratch=self.build_conf.get_scratch(scratch), reactor_config_secret=self.build_conf.get_reactor_config_secret(), client_config_secret=self.build_conf.get_client_config_secret(), token_secrets=self.build_conf.get_token_secrets(), arrangement_version=arrangement_version, info_url_format=self.build_conf.get_info_url_format(), artifacts_allowed_domains=self.build_conf. get_artifacts_allowed_domains(), equal_labels=self.build_conf.get_equal_labels(), platform_node_selector=self.build_conf.get_platform_node_selector( platform), scratch_build_node_selector=self.build_conf. get_scratch_build_node_selector(), explicit_build_node_selector=self.build_conf. get_explicit_build_node_selector(), auto_build_node_selector=self.build_conf. get_auto_build_node_selector(), is_auto=is_auto, filesystem_koji_task_id=filesystem_koji_task_id, koji_upload_dir=koji_upload_dir, platform_descriptors=self.build_conf.get_platform_descriptors(), koji_parent_build=koji_parent_build, ) build_request.set_openshift_required_version( self.os_conf.get_openshift_required_version()) build_request.set_repo_info(repo_info) if build_request.scratch: response = self._create_scratch_build(build_request) else: response = self._create_build_config_and_build(build_request) logger.debug(response.json) return response
def _do_create_prod_build(self, git_uri, git_ref, git_branch, user, component=None, target=None, architecture=None, yum_repourls=None, koji_task_id=None, scratch=None, platform=None, platforms=None, build_type=None, release=None, inner_template=None, outer_template=None, customize_conf=None, arrangement_version=None, filesystem_koji_task_id=None, koji_upload_dir=None, is_auto=False, koji_parent_build=None, isolated=None, **kwargs): repo_info = utils.get_repo_info(git_uri, git_ref, git_branch=git_branch) df_parser = repo_info.dockerfile_parser build_request = self.get_build_request(inner_template=inner_template, outer_template=outer_template, customize_conf=customize_conf) labels = utils.Labels(df_parser.labels) required_missing = False req_labels = {} # version label isn't used here, but is required label in Dockerfile # and is used and required for atomic reactor # if we don't catch error here, it will fail in atomic reactor later for label in [utils.Labels.LABEL_TYPE_NAME, utils.Labels.LABEL_TYPE_COMPONENT, utils.Labels.LABEL_TYPE_VERSION]: try: _, req_labels[label] = labels.get_name_and_value(label) except KeyError: required_missing = True logger.error("required label missing from Dockerfile : %s", labels.get_name(label)) if not git_branch: raise OsbsValidationException("required argument 'git_branch' can't be None") if required_missing: raise OsbsValidationException("required label missing from Dockerfile") build_request.set_params( git_uri=git_uri, git_ref=git_ref, git_branch=git_branch, user=user, component=req_labels[utils.Labels.LABEL_TYPE_COMPONENT], build_image=self.build_conf.get_build_image(), build_imagestream=self.build_conf.get_build_imagestream(), base_image=df_parser.baseimage, name_label=req_labels[utils.Labels.LABEL_TYPE_NAME], registry_uris=self.build_conf.get_registry_uris(), registry_secrets=self.build_conf.get_registry_secrets(), source_registry_uri=self.build_conf.get_source_registry_uri(), registry_api_versions=self.build_conf.get_registry_api_versions(platform), openshift_uri=self.os_conf.get_openshift_base_uri(), builder_openshift_url=self.os_conf.get_builder_openshift_url(), kojiroot=self.build_conf.get_kojiroot(), kojihub=self.build_conf.get_kojihub(), sources_command=self.build_conf.get_sources_command(), koji_target=target, koji_certs_secret=self.build_conf.get_koji_certs_secret(), koji_task_id=koji_task_id, koji_use_kerberos=self.build_conf.get_koji_use_kerberos(), koji_kerberos_keytab=self.build_conf.get_koji_kerberos_keytab(), koji_kerberos_principal=self.build_conf.get_koji_kerberos_principal(), architecture=architecture, platforms=platforms, platform=platform, build_type=build_type, release=release, vendor=self.build_conf.get_vendor(), build_host=self.build_conf.get_build_host(), authoritative_registry=self.build_conf.get_authoritative_registry(), distribution_scope=self.build_conf.get_distribution_scope(), yum_repourls=yum_repourls, proxy=self.build_conf.get_proxy(), pulp_secret=self.build_conf.get_pulp_secret(), smtp_host=self.build_conf.get_smtp_host(), smtp_from=self.build_conf.get_smtp_from(), smtp_additional_addresses=self.build_conf.get_smtp_additional_addresses(), smtp_error_addresses=self.build_conf.get_smtp_error_addresses(), smtp_email_domain=self.build_conf.get_smtp_email_domain(), smtp_to_submitter=self.build_conf.get_smtp_to_submitter(), smtp_to_pkgowner=self.build_conf.get_smtp_to_pkgowner(), use_auth=self.build_conf.get_builder_use_auth(), pulp_registry=self.os_conf.get_pulp_registry(), nfs_server_path=self.os_conf.get_nfs_server_path(), nfs_dest_dir=self.build_conf.get_nfs_destination_dir(), builder_build_json_dir=self.build_conf.get_builder_build_json_store(), scratch=self.build_conf.get_scratch(scratch), reactor_config_secret=self.build_conf.get_reactor_config_secret(), client_config_secret=self.build_conf.get_client_config_secret(), token_secrets=self.build_conf.get_token_secrets(), arrangement_version=arrangement_version, info_url_format=self.build_conf.get_info_url_format(), artifacts_allowed_domains=self.build_conf.get_artifacts_allowed_domains(), equal_labels=self.build_conf.get_equal_labels(), platform_node_selector=self.build_conf.get_platform_node_selector(platform), scratch_build_node_selector=self.build_conf.get_scratch_build_node_selector(), explicit_build_node_selector=self.build_conf.get_explicit_build_node_selector(), auto_build_node_selector=self.build_conf.get_auto_build_node_selector(), is_auto=is_auto, filesystem_koji_task_id=filesystem_koji_task_id, koji_upload_dir=koji_upload_dir, platform_descriptors=self.build_conf.get_platform_descriptors(), koji_parent_build=koji_parent_build, group_manifests=self.os_conf.get_group_manifests(), isolated=isolated, prefer_schema1_digest=self.build_conf.get_prefer_schema1_digest(), ) build_request.set_openshift_required_version(self.os_conf.get_openshift_required_version()) build_request.set_repo_info(repo_info) if build_request.scratch: response = self._create_scratch_build(build_request) elif build_request.isolated: response = self._create_isolated_build(build_request) else: response = self._create_build_config_and_build(build_request) logger.debug(response.json) return response