Пример #1
0
    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)
Пример #2
0
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']}}
Пример #3
0
    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
Пример #4
0
    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
Пример #5
0
 def dummy_api_function():
     """A function that calls something it's not supposed to"""
     utils.get_repo_info(TEST_GIT_URI, TEST_GIT_REF)
Пример #6
0
    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
Пример #7
0
    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