예제 #1
0
def test_make_name_from_git(repo, branch, limit, separator, expected, hash_size=5):
    bc_name = make_name_from_git(repo, branch, limit + len(separator) + hash_size, separator, hash_size=hash_size)

    assert expected == bc_name[:-(hash_size + len(separator))]

    # Is this a valid name for OpenShift to use?
    valid = re.compile(BC_NAME_REGEX)
    assert valid.match(bc_name)
예제 #2
0
def test_make_name_from_git(repo, branch, limit, separator, expected, hash_size=5):
    bc_name = make_name_from_git(repo, branch, limit + len(separator) + hash_size, separator,
                                 hash_size=hash_size)

    assert expected == bc_name[:-(hash_size + len(separator))]

    # Is this a valid name for OpenShift to use?
    valid = re.compile(BC_NAME_REGEX)
    assert valid.match(bc_name)
예제 #3
0
def test_make_name_from_git_all_from_file():

    all_sha = set()
    with open(SHA_INPUT_FILE) as f:
        lines = f.read().splitlines()

    for line in lines:
        repo, branch = line.split()
        bc_name = make_name_from_git(repo, branch, 30, '-')
        all_sha.add(bc_name)

        # Is this a valid name for OpenShift to use?
        valid = re.compile(BC_NAME_REGEX)
        assert valid.match(bc_name)

    assert len(lines) == len(all_sha)
예제 #4
0
def test_make_name_from_git_all_from_file():

    all_sha = set()
    with open(SHA_INPUT_FILE) as f:
        lines = f.read().splitlines()

    for line in lines:
        repo, branch = line.split()
        bc_name = make_name_from_git(repo, branch, 30, '-')
        all_sha.add(bc_name)

        # Is this a valid name for OpenShift to use?
        valid = re.compile(BC_NAME_REGEX)
        assert valid.match(bc_name)

    assert len(lines) == len(all_sha)
예제 #5
0
def test_make_name_from_git(repo,
                            branch,
                            limit,
                            separator,
                            expected,
                            hash_size=5):
    flexmock(
        osbs.utils).should_receive('generate_random_postfix').and_return('')
    bc_name = make_name_from_git(repo,
                                 branch,
                                 limit + len(separator) + hash_size,
                                 separator,
                                 hash_size=hash_size)

    assert expected == bc_name[:-(hash_size + len(separator))]

    # Is this a valid name for OpenShift to use?
    valid = re.compile(BC_NAME_REGEX)
    assert valid.match(bc_name)
예제 #6
0
    def make_params(cls,
                    additional_tags=None,
                    base_image=None,
                    build_conf=None,
                    compose_ids=None,
                    dependency_replacements=None,
                    filesystem_koji_task_id=None,
                    flatpak=None,
                    git_branch=None,
                    git_commit_depth=None,
                    git_ref=None,
                    git_uri=None,
                    include_koji_repo=None,
                    isolated=None,
                    koji_parent_build=None,
                    koji_upload_dir=None,
                    name_label=None,
                    operator_bundle_replacement_pullspecs=None,
                    operator_csv_modifications_url=None,
                    operator_manifests_extract_platform=None,
                    parent_images_digests=None,
                    platform=None,
                    platforms=None,
                    release=None,
                    remote_sources=None,
                    repo_info=None,
                    tags_from_yaml=None,
                    yum_repourls=None,
                    **kwargs):
        """
        Create a BuildUserParams instance.

        Like the parent method, most params are simply used as values for the corresponding
        BuildParam, this time with two notable exceptions: `build_conf` and `repo_info`.
        Compared to the parent method, this one pulls even more param values from `build_conf`
        and may also pull some values from `repo_info` (see below).

        these parameters are accepted:
        :param build_conf: BuildConfiguration, optional build configuration
        :param compose_ids: list of int, ODCS composes to use instead of generating new ones
        :param dependency_replacements: list of str, dependencies to be replaced by cachito, as
        pkg_manager:name:version[:new_name]
        :param filesystem_koji_task_id: int, Koji Task that created the base filesystem
        :param flatpak: if we should build a Flatpak OCI Image
        :param git_branch: str, branch name of the branch to be pulled
        :param git_ref: str, commit ID of the branch to be pulled
        :param git_uri: str, uri of the git repository for the source
        :param include_koji_repo: include the repo from the target build tag, even if other
                                                   repourls are provided.
        :param isolated: bool, build as an isolated build
        :param koji_parent_build: str,
        :param koji_upload_dir: str, koji directory where the completed image will be uploaded
        :param name_label: str, label of the parent image
        :param user: str, name of the user requesting the build
        :param operator_bundle_replacement_pullspecs: dict, mapping of original pullspecs to
                                                      replacement pullspecs for operator manifest
                                                      bundle builds
        :param operator_csv_modifications_url: str, URL to JSON file describing operator CSV changes
        :param operator_manifests_extract_platform: str, indicates which platform should upload
                                                    operator manifests to koji
        :param parent_images_digests: dict, mapping image digests to names and platforms
        :param platforms: list of str, platforms to build on
        :param platform: str, platform
        :param reactor_config_map: str, name of the config map containing the reactor environment
        :param release: str,
        :param remote_sources: list of dicts, each dict contains info about particular
        remote source with the following keys:
            build_args: dict, extra args for `builder.build_args`, if any
            configs: list of str, configuration files to be injected into
            the exploded remote sources dir
            request_id: int, cachito request id; used to request the
            Image Content Manifest
            url: str, URL from which to download a source archive
            name: str, name of remote source
        :param repo_info: RepoInfo, git repo data for the build
        :param scratch: bool, build as a scratch build
        :param signing_intent: bool, True to sign the resulting image
        :param yum_repourls: list of str, uris of the yum repos to pull from

        Please keep the paramater list alphabetized for easier tracking of changes

        the following parameters are pulled from the BuildConfiguration (ie, build_conf)

        the following parameters can be pulled from the RepoInfo (ie, repo_info)
        :param git_branch: str, branch name of the branch to be pulled
        :param git_ref: str, commit ID of the branch to be pulled
        :param git_uri: str, uri of the git repository for the source
        """
        if repo_info:
            additional_tags = repo_info.additional_tags.tags
            git_branch = repo_info.git_branch
            git_commit_depth = repo_info.git_commit_depth
            git_ref = repo_info.git_ref
            git_uri = repo_info.git_uri
            tags_from_yaml = repo_info.additional_tags.from_container_yaml
        elif not git_uri:
            raise OsbsValidationException(
                'no repo_info passed to BuildUserParams')

        # For flatpaks, we can set this later from the reactor config
        if not base_image and not flatpak:
            raise OsbsValidationException("base_image must be provided")

        if not name_label:
            raise OsbsValidationException("name_label must be provided")

        if kwargs.get('signing_intent') and compose_ids:
            raise OsbsValidationException(
                'Please only define signing_intent -OR- compose_ids, not both')
        if not (compose_ids is None or isinstance(compose_ids, list)):
            raise OsbsValidationException("compose_ids must be a list")
        if not (dependency_replacements is None
                or isinstance(dependency_replacements, list)):
            raise OsbsValidationException(
                "dependency_replacements must be a list")
        if not (yum_repourls is None or isinstance(yum_repourls, list)):
            raise OsbsValidationException("yum_repourls must be a list")

        kwargs.update({
            "base_image": base_image,
            "build_conf": build_conf,
            "compose_ids": compose_ids or [],
            "dependency_replacements": dependency_replacements or [],
            "filesystem_koji_task_id": filesystem_koji_task_id,
            "flatpak": flatpak,
            "include_koji_repo": include_koji_repo,
            "isolated": isolated,
            "koji_parent_build": koji_parent_build,
            "koji_upload_dir": koji_upload_dir,
            "operator_bundle_replacement_pullspecs":
            operator_bundle_replacement_pullspecs,
            "operator_csv_modifications_url": operator_csv_modifications_url,
            "operator_manifests_extract_platform":
            operator_manifests_extract_platform,
            "parent_images_digests": parent_images_digests,
            "platform": platform,
            "platforms": platforms,
            "release": release,
            "remote_sources": remote_sources,
            "yum_repourls": yum_repourls or [],
            # Potentially pulled from repo_info
            "additional_tags": additional_tags or set(),
            "git_branch": git_branch,
            "git_commit_depth": git_commit_depth,
            "git_ref": git_ref,
            "git_uri": git_uri,
            "name": make_name_from_git(git_uri, git_branch),
            "tags_from_yaml": tags_from_yaml,
        })

        params = cls._make_params_super(**kwargs)

        if (params.scratch, params.isolated).count(True) > 1:
            raise OsbsValidationException(
                'Build variations are mutually exclusive. '
                'Must set either scratch, isolated, or none. ')

        return params
예제 #7
0
파일: spec.py 프로젝트: yahzaa/osbs-client
    def set_params(
            self,
            git_uri=None,
            git_ref=None,
            registry_uri=None,  # compatibility name for registry_uris
            registry_uris=None,
            registry_secrets=None,
            user=None,
            component=None,
            openshift_uri=None,
            source_registry_uri=None,
            yum_repourls=None,
            use_auth=None,
            builder_openshift_url=None,
            build_image=None,
            build_imagestream=None,
            proxy=None,
            sources_command=None,
            architecture=None,
            vendor=None,
            build_host=None,
            authoritative_registry=None,
            distribution_scope=None,
            koji_target=None,
            kojiroot=None,
            kojihub=None,
            koji_certs_secret=None,
            koji_use_kerberos=None,
            koji_kerberos_keytab=None,
            koji_kerberos_principal=None,
            koji_task_id=None,
            flatpak=False,
            module=None,
            module_compose_id=None,
            flatpak_base_image=None,
            odcs_url=None,
            odcs_insecure=False,
            odcs_openidc_secret=None,
            odcs_ssl_secret=None,
            pdc_url=None,
            pdc_insecure=False,
            filesystem_koji_task_id=None,
            source_secret=None,  # compatibility name for pulp_secret
            pulp_secret=None,
            pulp_registry=None,
            smtp_host=None,
            smtp_from=None,
            smtp_email_domain=None,
            smtp_additional_addresses=None,
            smtp_error_addresses=None,
            smtp_to_submitter=None,
            smtp_to_pkgowner=None,
            git_branch=None,
            base_image=None,
            name_label=None,
            builder_build_json_dir=None,
            registry_api_versions=None,
            platforms=None,
            platform=None,
            build_type=None,
            release=None,
            reactor_config_secret=None,
            client_config_secret=None,
            token_secrets=None,
            arrangement_version=None,
            info_url_format=None,
            artifacts_allowed_domains=None,
            equal_labels=None,
            koji_upload_dir=None,
            yum_proxy=None,
            koji_parent_build=None,
            group_manifests=None,
            prefer_schema1_digest=None,
            signing_intent=None,
            compose_ids=None,
            **kwargs):
        self.git_uri.value = git_uri
        self.git_ref.value = git_ref
        self.user.value = user
        self.component.value = component
        self.proxy.value = proxy

        # registry_uri is the compatibility name for registry_uris
        if registry_uri is not None:
            assert registry_uris is None
            registry_uris = [registry_uri]

        self.registry_uris.value = registry_uris or []
        self.registry_secrets.value = registry_secrets or []
        self.source_registry_uri.value = source_registry_uri
        self.openshift_uri.value = openshift_uri
        self.builder_openshift_url.value = builder_openshift_url
        if not (yum_repourls is None or isinstance(yum_repourls, list)):
            raise OsbsValidationException("yum_repourls must be a list")
        self.yum_repourls.value = yum_repourls or []
        self.use_auth.value = use_auth

        if build_imagestream and build_image:
            raise OsbsValidationException(
                'Please only define build_image -OR- build_imagestream, not both'
            )
        self.build_image.value = build_image or DEFAULT_BUILD_IMAGE
        self.build_imagestream.value = build_imagestream

        self.sources_command.value = sources_command
        self.architecture.value = architecture
        self.vendor.value = vendor
        self.build_host.value = build_host
        self.authoritative_registry.value = authoritative_registry
        self.distribution_scope.value = distribution_scope
        self.registry_api_versions.value = registry_api_versions
        self.koji_target.value = koji_target
        self.kojiroot.value = kojiroot
        self.kojihub.value = kojihub
        self.koji_certs_secret.value = koji_certs_secret
        self.koji_use_kerberos.value = koji_use_kerberos
        self.koji_kerberos_principal.value = koji_kerberos_principal
        self.koji_kerberos_keytab.value = koji_kerberos_keytab
        self.koji_task_id.value = koji_task_id
        self.flatpak.value = flatpak
        self.module.value = module
        self.module_compose_id.value = module_compose_id
        self.flatpak_base_image.value = flatpak_base_image
        self.odcs_url.value = odcs_url
        self.odcs_insecure.value = odcs_insecure
        self.odcs_openidc_secret.value = odcs_openidc_secret
        self.odcs_ssl_secret.value = odcs_ssl_secret
        self.pdc_url.value = pdc_url
        self.pdc_insecure.value = pdc_insecure
        self.pulp_secret.value = pulp_secret or source_secret
        self.pulp_registry.value = pulp_registry
        self.smtp_host.value = smtp_host
        self.smtp_from.value = smtp_from
        self.smtp_additional_addresses.value = smtp_additional_addresses
        self.smtp_error_addresses.value = smtp_error_addresses
        self.smtp_email_domain.value = smtp_email_domain
        self.smtp_to_submitter.value = smtp_to_submitter
        self.smtp_to_pkgowner.value = smtp_to_pkgowner
        self.git_branch.value = git_branch
        self.name.value = make_name_from_git(self.git_uri.value,
                                             self.git_branch.value)
        self.group_manifests.value = group_manifests or False
        self.prefer_schema1_digest.value = prefer_schema1_digest
        self.builder_build_json_dir.value = builder_build_json_dir

        if not flatpak:
            if not base_image:
                raise OsbsValidationException("base_image must be provided")
            self.trigger_imagestreamtag.value = get_imagestreamtag_from_image(
                base_image)

            if not name_label:
                raise OsbsValidationException("name_label must be provided")
            self.imagestream_name.value = name_label.replace('/', '-')
            # The ImageStream should take tags from the source registry
            # or, if no source registry is set, the first listed registry
            imagestream_reg = self.source_registry_uri.value
            if not imagestream_reg:
                try:
                    imagestream_reg = self.registry_uris.value[0]
                except IndexError:
                    logger.info(
                        "no registries specified, cannot determine imagestream url"
                    )
                    imagestream_reg = None

            if imagestream_reg:
                self.imagestream_url.value = os.path.join(
                    imagestream_reg.docker_uri, name_label)
                logger.debug("setting 'imagestream_url' to '%s'",
                             self.imagestream_url.value)
                insecure = imagestream_reg.uri.startswith('http://')
                self.imagestream_insecure_registry.value = insecure
                logger.debug("setting 'imagestream_insecure_registry' to %r",
                             insecure)

        self.platforms.value = platforms
        self.platform.value = platform
        self.build_type.value = build_type
        self.release.value = release
        self.reactor_config_secret.value = reactor_config_secret
        self.client_config_secret.value = client_config_secret
        self.token_secrets.value = token_secrets or {}
        self.arrangement_version.value = arrangement_version
        self.info_url_format.value = info_url_format
        self.artifacts_allowed_domains.value = artifacts_allowed_domains
        self.equal_labels.value = equal_labels
        self.filesystem_koji_task_id.value = filesystem_koji_task_id
        self.koji_upload_dir.value = koji_upload_dir
        self.yum_proxy.value = yum_proxy
        self.koji_parent_build.value = koji_parent_build

        if (signing_intent or compose_ids) and not self.odcs_enabled():
            raise OsbsValidationException(
                'signing_intent and compose_ids are allowed only when ODCS is enabled'
            )

        if signing_intent and compose_ids:
            raise OsbsValidationException(
                'Please only define signing_intent -OR- compose_ids, not both')

        if compose_ids and yum_repourls:
            raise OsbsValidationException(
                'Please only define yum_repourls -OR- compose_ids, not both')

        try:
            compose_ids and iter(compose_ids)
        except TypeError:
            raise OsbsValidationException("compose_ids must be a list")

        self.signing_intent.value = signing_intent
        self.compose_ids.value = compose_ids or []
        self._populate_image_tag()
예제 #8
0
def test_make_name_from_git_collide():
    bc1 = make_name_from_git("very_log_repo name_first",
                             "also_long_branch_name", 30, '-')
    bc2 = make_name_from_git("very_log_repo name_second",
                             "also_long_branch_name", 30, '-')
    assert bc1 != bc2
예제 #9
0
def test_make_name_from_git(repo, branch, limit, separator, expected):
    assert make_name_from_git(repo, branch, limit, separator) == expected
예제 #10
0
    def set_params(self,
                   git_uri=None,
                   git_ref=None,
                   git_branch=None,
                   base_image=None,
                   name_label=None,
                   user=None,
                   component=None,
                   release=None,
                   build_image=None,
                   build_imagestream=None,
                   build_from=None,
                   platforms=None,
                   platform=None,
                   build_type=None,
                   koji_target=None,
                   koji_task_id=None,
                   filesystem_koji_task_id=None,
                   koji_parent_build=None,
                   koji_upload_dir=None,
                   flatpak=None,
                   reactor_config_map=None,
                   reactor_config_override=None,
                   yum_repourls=None,
                   signing_intent=None,
                   compose_ids=None,
                   isolated=None,
                   scratch=None,
                   parent_images_digests=None,
                   tags_from_yaml=None,
                   additional_tags=None,
                   git_commit_depth=None,
                   worker_deadline=None,
                   orchestrator_deadline=None,
                   operator_manifests_extract_platform=None,
                   triggered_after_koji_task=None,
                   **kwargs):
        self.git_uri.value = git_uri
        self.git_ref.value = git_ref
        self.git_branch.value = git_branch
        self.git_commit_depth.value = git_commit_depth
        self.tags_from_yaml.value = tags_from_yaml
        self.additional_tags.value = additional_tags or set()

        self.user.value = user
        self.component.value = component
        self.release.value = release
        self.build_type.value = build_type
        self.base_image.value = base_image

        self.name.value = make_name_from_git(self.git_uri.value,
                                             self.git_branch.value)
        self.reactor_config_map.value = reactor_config_map
        self.reactor_config_override.value = reactor_config_override

        unique_build_args = (build_imagestream, build_image, build_from)
        if sum(bool(a) for a in unique_build_args) != 1:
            raise OsbsValidationException(
                'Please only define one of build_from, build_image, build_imagestream'
            )
        self.build_image.value = build_image
        self.build_imagestream.value = build_imagestream
        if self.build_image.value or self.build_imagestream.value:
            logger.warning(
                "build_image or build_imagestream is defined, they are deprecated,"
                "use build_from instead")

        if build_from:
            source_type, source_value = build_from.split(':', 1)
            if source_type not in ('image', 'imagestream'):
                raise OsbsValidationException(
                    'first part in build_from, may be only image or imagestream'
                )
            if source_type == 'image':
                self.build_image.value = source_value
            else:
                self.build_imagestream.value = source_value

        self.parent_images_digests.value = parent_images_digests
        self.operator_manifests_extract_platform.value = operator_manifests_extract_platform
        self.platforms.value = platforms
        self.platform.value = platform
        self.koji_target.value = koji_target
        self.koji_task_id.value = koji_task_id
        self.filesystem_koji_task_id.value = filesystem_koji_task_id
        self.koji_parent_build.value = koji_parent_build
        self.koji_upload_dir.value = koji_upload_dir
        self.flatpak.value = flatpak
        self.isolated.value = isolated
        self.scratch.value = scratch
        self.triggered_after_koji_task.value = triggered_after_koji_task

        if not flatpak:
            if not base_image:
                raise OsbsValidationException("base_image must be provided")
            self.trigger_imagestreamtag.value = get_imagestreamtag_from_image(
                base_image)

            if not name_label:
                raise OsbsValidationException("name_label must be provided")
            self.imagestream_name.value = name_label.replace('/', '-')

        if signing_intent and compose_ids:
            raise OsbsValidationException(
                'Please only define signing_intent -OR- compose_ids, not both')
        if not (compose_ids is None or isinstance(compose_ids, list)):
            raise OsbsValidationException("compose_ids must be a list")
        if not (yum_repourls is None or isinstance(yum_repourls, list)):
            raise OsbsValidationException("yum_repourls must be a list")
        self.yum_repourls.value = yum_repourls or []
        self.signing_intent.value = signing_intent
        self.compose_ids.value = compose_ids or []

        try:
            self.orchestrator_deadline.value = int(orchestrator_deadline)
        except (ValueError, TypeError):
            self.orchestrator_deadline.value = ORCHESTRATOR_MAX_RUNTIME
        try:
            self.worker_deadline.value = int(worker_deadline)
        except (ValueError, TypeError):
            self.worker_deadline.value = WORKER_MAX_RUNTIME

        self._populate_image_tag()
예제 #11
0
    def set_params(self, git_uri=None, git_ref=None,
                   registry_uri=None,  # compatibility name for registry_uris
                   registry_uris=None, registry_secrets=None,
                   user=None,
                   component=None, openshift_uri=None, source_registry_uri=None,
                   yum_repourls=None, use_auth=None, builder_openshift_url=None,
                   build_image=None, build_imagestream=None, proxy=None,
                   sources_command=None, architecture=None, vendor=None,
                   build_host=None, authoritative_registry=None, distribution_scope=None,
                   koji_target=None, kojiroot=None, kojihub=None, koji_certs_secret=None,
                   koji_task_id=None,
                   source_secret=None,  # compatibility name for pulp_secret
                   pulp_secret=None, pulp_registry=None, pdc_secret=None, pdc_url=None,
                   smtp_uri=None, nfs_server_path=None,
                   nfs_dest_dir=None, git_branch=None, base_image=None,
                   name_label=None, git_push_url=None, git_push_username=None,
                   builder_build_json_dir=None, registry_api_versions=None,
                   unique_tag_only=None,
                   **kwargs):
        self.git_uri.value = git_uri
        self.git_ref.value = git_ref
        self.user.value = user
        self.component.value = component
        self.proxy.value = proxy

        # registry_uri is the compatibility name for registry_uris
        if registry_uri is not None:
            assert registry_uris is None
            registry_uris = [registry_uri]

        self.registry_uris.value = registry_uris or []
        self.registry_secrets.value = registry_secrets or []
        self.source_registry_uri.value = source_registry_uri
        self.openshift_uri.value = openshift_uri
        self.builder_openshift_url.value = builder_openshift_url
        if not (yum_repourls is None or isinstance(yum_repourls, list)):
            raise OsbsValidationException("yum_repourls must be a list")
        self.yum_repourls.value = yum_repourls or []
        self.use_auth.value = use_auth
        self.build_image.value = build_image or DEFAULT_BUILD_IMAGE
        self.build_imagestream.value = build_imagestream

        self.sources_command.value = sources_command
        self.architecture.value = architecture
        self.vendor.value = vendor
        self.build_host.value = build_host
        self.authoritative_registry.value = authoritative_registry
        self.distribution_scope.value = distribution_scope
        self.registry_api_versions.value = registry_api_versions
        self.koji_target.value = koji_target
        self.kojiroot.value = kojiroot
        self.kojihub.value = kojihub
        self.koji_certs_secret.value = koji_certs_secret
        self.koji_task_id.value = koji_task_id
        self.pulp_secret.value = pulp_secret or source_secret
        self.pulp_registry.value = pulp_registry
        self.pdc_secret.value = pdc_secret
        self.pdc_url.value = pdc_url
        self.smtp_uri.value = smtp_uri
        self.nfs_server_path.value = nfs_server_path
        self.nfs_dest_dir.value = nfs_dest_dir
        self.git_push_url.value = git_push_url
        self.git_push_username.value = git_push_username
        self.git_branch.value = git_branch
        self.name.value = make_name_from_git(self.git_uri.value, self.git_branch.value)
        if not base_image:
            raise OsbsValidationException("base_image must be provided")
        self.trigger_imagestreamtag.value = get_imagestreamtag_from_image(base_image)
        self.builder_build_json_dir.value = builder_build_json_dir
        if not name_label:
            raise OsbsValidationException("name_label must be provided")
        self.imagestream_name.value = name_label.replace('/', '-')
        # The ImageStream should take tags from the source registry
        # or, if no source registry is set, the first listed registry
        imagestream_reg = self.source_registry_uri.value
        if not imagestream_reg:
            try:
                imagestream_reg = self.registry_uris.value[0]
            except IndexError:
                logger.info("no registries specified, cannot determine imagestream url")
                imagestream_reg = None

        if imagestream_reg:
            self.imagestream_url.value = os.path.join(imagestream_reg.docker_uri,
                                                      name_label)
            logger.debug("setting 'imagestream_url' to '%s'",
                         self.imagestream_url.value)
            insecure = imagestream_reg.uri.startswith('http://')
            self.imagestream_insecure_registry.value = insecure
            logger.debug("setting 'imagestream_insecure_registry' to %r", insecure)

        timestamp = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
        self.image_tag.value = "%s/%s:%s-%s" % (
            self.user.value,
            self.component.value,
            self.koji_target.value or 'none',
            timestamp
        )

        self.unique_tag_only.value = unique_tag_only
예제 #12
0
def test_make_name_from_git_collide():
    bc1 = make_name_from_git("very_log_repo name_first", "also_long_branch_name", 30, '-')
    bc2 = make_name_from_git("very_log_repo name_second", "also_long_branch_name", 30, '-')
    assert bc1 != bc2
예제 #13
0
파일: spec.py 프로젝트: nhr/osbs-client
    def set_params(self, git_uri=None, git_ref=None,
                   registry_uri=None,  # compatibility name for registry_uris
                   registry_uris=None, registry_secrets=None,
                   user=None,
                   component=None, openshift_uri=None, source_registry_uri=None,
                   yum_repourls=None, use_auth=None, builder_openshift_url=None,
                   build_image=None, build_imagestream=None, proxy=None,
                   sources_command=None, architecture=None, vendor=None,
                   build_host=None, authoritative_registry=None, distribution_scope=None,
                   koji_target=None, kojiroot=None, kojihub=None, koji_certs_secret=None,
                   koji_use_kerberos=None, koji_kerberos_keytab=None,
                   koji_kerberos_principal=None, koji_task_id=None,
                   source_secret=None,  # compatibility name for pulp_secret
                   pulp_secret=None, pulp_registry=None,
                   smtp_host=None, smtp_from=None, smtp_email_domain=None,
                   smtp_additional_addresses=None, smtp_error_addresses=None,
                   smtp_to_submitter=None, smtp_to_pkgowner=None,
                   nfs_server_path=None, nfs_dest_dir=None,
                   git_branch=None, base_image=None,
                   name_label=None,
                   builder_build_json_dir=None, registry_api_versions=None,
                   platform=None, platforms=None, release=None,
                   reactor_config_secret=None, client_config_secret=None,
                   token_secrets=None, arrangement_version=None,
                   info_url_format=None, artifacts_allowed_domains=None,
                   **kwargs):
        self.git_uri.value = git_uri
        self.git_ref.value = git_ref
        self.user.value = user
        self.component.value = component
        self.proxy.value = proxy

        # registry_uri is the compatibility name for registry_uris
        if registry_uri is not None:
            assert registry_uris is None
            registry_uris = [registry_uri]

        self.registry_uris.value = registry_uris or []
        self.registry_secrets.value = registry_secrets or []
        self.source_registry_uri.value = source_registry_uri
        self.openshift_uri.value = openshift_uri
        self.builder_openshift_url.value = builder_openshift_url
        if not (yum_repourls is None or isinstance(yum_repourls, list)):
            raise OsbsValidationException("yum_repourls must be a list")
        self.yum_repourls.value = yum_repourls or []
        self.use_auth.value = use_auth

        if build_imagestream and build_image:
            raise OsbsValidationException(
                'Please only define build_image -OR- build_imagestream, not both')
        self.build_image.value = build_image or DEFAULT_BUILD_IMAGE
        self.build_imagestream.value = build_imagestream

        self.sources_command.value = sources_command
        self.architecture.value = architecture
        self.vendor.value = vendor
        self.build_host.value = build_host
        self.authoritative_registry.value = authoritative_registry
        self.distribution_scope.value = distribution_scope
        self.registry_api_versions.value = registry_api_versions
        self.koji_target.value = koji_target
        self.kojiroot.value = kojiroot
        self.kojihub.value = kojihub
        self.koji_certs_secret.value = koji_certs_secret
        self.koji_use_kerberos.value = koji_use_kerberos
        self.koji_kerberos_principal.value = koji_kerberos_principal
        self.koji_kerberos_keytab.value = koji_kerberos_keytab
        self.koji_task_id.value = koji_task_id
        self.pulp_secret.value = pulp_secret or source_secret
        self.pulp_registry.value = pulp_registry
        self.smtp_host.value = smtp_host
        self.smtp_from.value = smtp_from
        self.smtp_additional_addresses.value = smtp_additional_addresses
        self.smtp_error_addresses.value = smtp_error_addresses
        self.smtp_email_domain.value = smtp_email_domain
        self.smtp_to_submitter.value = smtp_to_submitter
        self.smtp_to_pkgowner.value = smtp_to_pkgowner
        self.nfs_server_path.value = nfs_server_path
        self.nfs_dest_dir.value = nfs_dest_dir
        self.git_branch.value = git_branch
        self.name.value = make_name_from_git(self.git_uri.value, self.git_branch.value)
        if not base_image:
            raise OsbsValidationException("base_image must be provided")
        self.trigger_imagestreamtag.value = get_imagestreamtag_from_image(base_image)
        self.builder_build_json_dir.value = builder_build_json_dir
        if not name_label:
            raise OsbsValidationException("name_label must be provided")
        self.imagestream_name.value = name_label.replace('/', '-')
        # The ImageStream should take tags from the source registry
        # or, if no source registry is set, the first listed registry
        imagestream_reg = self.source_registry_uri.value
        if not imagestream_reg:
            try:
                imagestream_reg = self.registry_uris.value[0]
            except IndexError:
                logger.info("no registries specified, cannot determine imagestream url")
                imagestream_reg = None

        if imagestream_reg:
            self.imagestream_url.value = os.path.join(imagestream_reg.docker_uri,
                                                      name_label)
            logger.debug("setting 'imagestream_url' to '%s'",
                         self.imagestream_url.value)
            insecure = imagestream_reg.uri.startswith('http://')
            self.imagestream_insecure_registry.value = insecure
            logger.debug("setting 'imagestream_insecure_registry' to %r", insecure)

        timestamp = utcnow().strftime('%Y%m%d%H%M%S')
        self.image_tag.value = "%s/%s:%s-%s-%s" % (
            self.user.value,
            self.component.value,
            self.koji_target.value or 'none',
            random.randrange(10**(RAND_DIGITS - 1), 10**RAND_DIGITS),
            timestamp
        )

        self.platform.value = platform
        self.platforms.value = platforms
        self.release.value = release
        self.reactor_config_secret.value = reactor_config_secret
        self.client_config_secret.value = client_config_secret
        self.token_secrets.value = token_secrets or {}
        self.arrangement_version.value = arrangement_version
        self.info_url_format.value = info_url_format
        self.artifacts_allowed_domains.value = artifacts_allowed_domains
예제 #14
0
    def test_create_binary_container_pipeline_run(self, koji_task_id, isolated,
                                                  scratch, release):
        rcm = 'rcm'
        rcm_scratch = 'rcm_scratch'
        with NamedTemporaryFile(mode="wt") as fp:
            fp.write("""
    [default_binary]
    openshift_url = /
    namespace = {namespace}
    use_auth = false
    pipeline_run_path = {pipeline_run_path}
    reactor_config_map = {rcm}
    reactor_config_map_scratch = {rcm_scratch}
    """.format(namespace=TEST_OCP_NAMESPACE,
               pipeline_run_path=TEST_PIPELINE_RUN_TEMPLATE,
               rcm=rcm,
               rcm_scratch=rcm_scratch))
            fp.flush()
            dummy_config = Configuration(fp.name,
                                         conf_section='default_binary')
            osbs = OSBS(dummy_config)

        random_postfix = 'sha-timestamp'
        (flexmock(utils).should_receive('generate_random_postfix').and_return(
            random_postfix))

        name = utils.make_name_from_git(TEST_GIT_URI, TEST_GIT_BRANCH)
        pipeline_run_name = utils.make_name_from_git(TEST_GIT_URI,
                                                     TEST_GIT_BRANCH)
        if isolated:
            pipeline_run_name = f'isolated-{random_postfix}'
        if scratch:
            pipeline_run_name = f'scratch-{random_postfix}'

        (flexmock(utils).should_receive('get_repo_info').with_args(
            TEST_GIT_URI, TEST_GIT_REF, git_branch=TEST_GIT_BRANCH,
            depth=None).and_return(self.mock_repo_info()))

        rand = '67890'
        timestr = '20170731111111'
        (flexmock(sys.modules['osbs.build.user_params']).should_receive(
            'utcnow').once().and_return(
                datetime.datetime.strptime(timestr, '%Y%m%d%H%M%S')))

        (flexmock(random).should_receive('randrange').with_args(
            10**(len(rand) - 1), 10**len(rand)).and_return(int(rand)))

        image_tag = f'{TEST_USER}/{TEST_COMPONENT}:{TEST_TARGET}-{rand}-{timestr}'

        self.mock_start_pipeline()
        signing_intent = 'signing_intent'
        pipeline_run = osbs.create_binary_container_pipeline_run(
            target=TEST_TARGET,
            signing_intent=signing_intent,
            koji_task_id=koji_task_id,
            isolated=isolated,
            scratch=scratch,
            release=release,
            **REQUIRED_BUILD_ARGS)
        assert isinstance(pipeline_run, PipelineRun)

        assert pipeline_run.input_data['metadata']['name'] == pipeline_run_name

        for ws in pipeline_run.input_data['spec']['workspaces']:
            if ws['name'] == PRUN_TEMPLATE_REACTOR_CONFIG_WS:
                if scratch:
                    assert ws['configmap']['name'] == rcm_scratch
                else:
                    assert ws['configmap']['name'] == rcm

            if ws['name'] in [
                    PRUN_TEMPLATE_BUILD_DIR_WS, PRUN_TEMPLATE_CONTEXT_DIR_WS
            ]:
                assert ws['volumeClaimTemplate']['metadata'][
                    'namespace'] == TEST_OCP_NAMESPACE

        for param in pipeline_run.input_data['spec']['params']:
            if param['name'] == PRUN_TEMPLATE_USER_PARAMS:
                assert param['value'] != {}

                up = json.loads(param['value'])

                expect_up = {}
                if scratch:
                    expect_up['reactor_config_map'] = rcm_scratch
                    expect_up['scratch'] = True
                else:
                    expect_up['reactor_config_map'] = rcm
                expect_up['base_image'] = MockDfParser.baseimage
                expect_up['component'] = TEST_COMPONENT
                expect_up['git_branch'] = TEST_GIT_BRANCH
                expect_up['git_ref'] = TEST_GIT_REF
                expect_up['git_uri'] = TEST_GIT_URI
                expect_up['kind'] = BuildUserParams.KIND
                if koji_task_id:
                    expect_up['koji_task_id'] = koji_task_id
                expect_up['name'] = name
                expect_up['koji_target'] = TEST_TARGET
                expect_up['user'] = TEST_USER
                expect_up['signing_intent'] = signing_intent
                if isolated:
                    expect_up['isolated'] = True
                if release:
                    expect_up['release'] = release
                expect_up['image_tag'] = image_tag

                assert up == expect_up
예제 #15
0
파일: spec.py 프로젝트: lcarva/osbs-client
    def set_params(self, git_uri=None, git_ref=None,
                   registry_uri=None,  # compatibility name for registry_uris
                   registry_uris=None, registry_secrets=None,
                   user=None,
                   component=None, openshift_uri=None, source_registry_uri=None,
                   yum_repourls=None, use_auth=None, builder_openshift_url=None,
                   build_image=None, build_imagestream=None, proxy=None,
                   sources_command=None, architecture=None, vendor=None,
                   build_host=None, authoritative_registry=None, distribution_scope=None,
                   koji_target=None, kojiroot=None, kojihub=None, koji_certs_secret=None,
                   koji_task_id=None,
                   source_secret=None,  # compatibility name for pulp_secret
                   pulp_secret=None, pulp_registry=None, pdc_secret=None, pdc_url=None,
                   smtp_uri=None, nfs_server_path=None,
                   nfs_dest_dir=None, git_branch=None, base_image=None,
                   name_label=None, git_push_url=None, git_push_username=None,
                   builder_build_json_dir=None, registry_api_versions=None, labels=None,
                   **kwargs):
        self.git_uri.value = git_uri
        self.git_ref.value = git_ref
        self.user.value = user
        self.component.value = component
        self.proxy.value = proxy

        # registry_uri is the compatibility name for registry_uris
        if registry_uri is not None:
            assert registry_uris is None
            registry_uris = [registry_uri]

        self.registry_uris.value = registry_uris or []
        self.registry_secrets.value = registry_secrets or []
        self.source_registry_uri.value = source_registry_uri
        self.openshift_uri.value = openshift_uri
        self.builder_openshift_url.value = builder_openshift_url
        if not (yum_repourls is None or isinstance(yum_repourls, list)):
            raise OsbsValidationException("yum_repourls must be a list")
        self.yum_repourls.value = yum_repourls or []
        self.use_auth.value = use_auth
        self.build_image.value = build_image or DEFAULT_BUILD_IMAGE
        self.build_imagestream.value = build_imagestream

        self.sources_command.value = sources_command
        self.architecture.value = architecture
        self.vendor.value = vendor
        self.build_host.value = build_host
        self.authoritative_registry.value = authoritative_registry
        self.distribution_scope.value = distribution_scope
        self.registry_api_versions.value = registry_api_versions
        self.koji_target.value = koji_target
        self.kojiroot.value = kojiroot
        self.kojihub.value = kojihub
        self.koji_certs_secret.value = koji_certs_secret
        self.koji_task_id.value = koji_task_id
        self.pulp_secret.value = pulp_secret or source_secret
        self.pulp_registry.value = pulp_registry
        self.pdc_secret.value = pdc_secret
        self.pdc_url.value = pdc_url
        self.smtp_uri.value = smtp_uri
        self.nfs_server_path.value = nfs_server_path
        self.nfs_dest_dir.value = nfs_dest_dir
        self.git_push_url.value = git_push_url
        self.git_push_username.value = git_push_username
        self.git_branch.value = git_branch
        self.name.value = make_name_from_git(self.git_uri.value, self.git_branch.value)
        if not base_image:
            raise OsbsValidationException("base_image must be provided")
        self.trigger_imagestreamtag.value = get_imagestreamtag_from_image(base_image)
        self.builder_build_json_dir.value = builder_build_json_dir
        self.labels.value = labels
        if not name_label:
            raise OsbsValidationException("name_label must be provided")
        self.imagestream_name.value = name_label.replace('/', '-')
        # The ImageStream should take tags from the source registry
        # or, if no source registry is set, the first listed registry
        imagestream_reg = self.source_registry_uri.value
        if not imagestream_reg:
            try:
                imagestream_reg = self.registry_uris.value[0]
            except IndexError:
                logger.info("no registries specified, cannot determine imagestream url")
                imagestream_reg = None

        if imagestream_reg:
            self.imagestream_url.value = os.path.join(imagestream_reg.docker_uri,
                                                      name_label)
            logger.debug("setting 'imagestream_url' to '%s'",
                         self.imagestream_url.value)
            insecure = imagestream_reg.uri.startswith('http://')
            self.imagestream_insecure_registry.value = insecure
            logger.debug("setting 'imagestream_insecure_registry' to %r", insecure)

        timestamp = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
        self.image_tag.value = "%s/%s:%s-%s" % (
            self.user.value,
            self.component.value,
            self.koji_target.value or 'none',
            timestamp
        )
예제 #16
0
    def set_params(self,
                   git_uri=None,
                   git_ref=None,
                   git_branch=None,
                   base_image=None,
                   name_label=None,
                   user=None,
                   component=None,
                   release=None,
                   build_image=None,
                   build_imagestream=None,
                   build_from=None,
                   platforms=None,
                   platform=None,
                   build_type=None,
                   koji_target=None,
                   koji_task_id=None,
                   filesystem_koji_task_id=None,
                   koji_parent_build=None,
                   koji_upload_dir=None,
                   flatpak=None,
                   flatpak_base_image=None,
                   reactor_config_map=None,
                   reactor_config_override=None,
                   yum_repourls=None,
                   signing_intent=None,
                   compose_ids=None,
                   isolated=None,
                   scratch=None,
                   **kwargs):
        self.git_uri.value = git_uri
        self.git_ref.value = git_ref
        self.git_branch.value = git_branch
        self.user.value = user
        self.component.value = component
        self.release.value = release
        self.build_type.value = build_type
        self.base_image.value = base_image

        self.name.value = make_name_from_git(self.git_uri.value,
                                             self.git_branch.value)
        self.reactor_config_map.value = reactor_config_map
        self.reactor_config_override.value = reactor_config_override

        unique_build_args = (build_imagestream, build_image, build_from)
        if sum(bool(a) for a in unique_build_args) != 1:
            raise OsbsValidationException(
                'Please only define one of build_from, build_image, build_imagestream'
            )
        self.build_image.value = build_image
        self.build_imagestream.value = build_imagestream
        if self.build_image.value or self.build_imagestream.value:
            logger.warning(
                "build_image or build_imagestream is defined, they are deprecated,"
                "use build_from instead")

        if build_from:
            source_type, source_value = build_from.split(':', 1)
            if source_type not in ('image', 'imagestream'):
                raise OsbsValidationException(
                    'first part in build_from, may be only image or imagestream'
                )
            if source_type == 'image':
                self.build_image.value = source_value
            else:
                self.build_imagestream.value = source_value

        self.platforms.value = platforms
        self.platform.value = platform
        self.koji_target.value = koji_target
        self.koji_task_id.value = koji_task_id
        self.filesystem_koji_task_id.value = filesystem_koji_task_id
        self.koji_parent_build.value = koji_parent_build
        self.koji_upload_dir.value = koji_upload_dir
        self.flatpak.value = flatpak
        self.flatpak_base_image.value = flatpak_base_image
        self.isolated.value = isolated
        self.scratch.value = scratch

        if flatpak:
            if not flatpak_base_image:
                raise OsbsValidationException(
                    "faltpak_base_image must be provided")
        else:
            if not base_image:
                raise OsbsValidationException("base_image must be provided")
            self.trigger_imagestreamtag.value = get_imagestreamtag_from_image(
                base_image)

            if not name_label:
                raise OsbsValidationException("name_label must be provided")
            self.imagestream_name.value = name_label.replace('/', '-')

        if signing_intent and compose_ids:
            raise OsbsValidationException(
                'Please only define signing_intent -OR- compose_ids, not both')
        if compose_ids and yum_repourls:
            raise OsbsValidationException(
                'Please only define yum_repourls -OR- compose_ids, not both')
        if not (compose_ids is None or isinstance(compose_ids, list)):
            raise OsbsValidationException("compose_ids must be a list")
        if not (yum_repourls is None or isinstance(yum_repourls, list)):
            raise OsbsValidationException("yum_repourls must be a list")
        self.yum_repourls.value = yum_repourls or []
        self.signing_intent.value = signing_intent
        self.compose_ids.value = compose_ids or []

        self._populate_image_tag()
예제 #17
0
    def set_params(self,
                   additional_tags=None,
                   base_image=None,
                   build_conf=None,
                   build_type=None,
                   compose_ids=None,
                   dependency_replacements=None,
                   filesystem_koji_task_id=None,
                   flatpak=None,
                   git_branch=None,
                   git_commit_depth=None,
                   git_ref=None,
                   git_uri=None,
                   include_koji_repo=None,
                   is_auto=None,
                   isolated=None,
                   koji_parent_build=None,
                   koji_upload_dir=None,
                   name_label=None,
                   operator_bundle_replacement_pullspecs=None,
                   operator_manifests_extract_platform=None,
                   auto_build_node_selector=None,
                   explicit_build_node_selector=None,
                   isolated_build_node_selector=None,
                   platform_node_selector=None,
                   scratch_build_node_selector=None,
                   parent_images_digests=None,
                   platform=None,
                   platforms=None,
                   release=None,
                   remote_source_url=None,
                   remote_source_build_args=None,
                   repo_info=None,
                   skip_build=None,
                   tags_from_yaml=None,
                   triggered_after_koji_task=None,
                   yum_repourls=None,
                   **kwargs):
        """
        set parameters in the user parameters. Others are set in the super functions

        these parameters are accepted:
        :param build_conf: BuildConfiguration, optional build configuration
        :param build_type: str, orchestrator or worker
        :param compose_ids: list of int, ODCS composes to use instead of generating new ones
        :param dependency_replacements: list of str, dependencies to be replaced by cachito, as
        pkg_manager:name:version[:new_name]
        :param filesystem_koji_task_id: int, Koji Task that created the base filesystem
        :param flatpak: if we should build a Flatpak OCI Image
        :param git_branch: str, branch name of the branch to be pulled
        :param git_ref: str, commit ID of the branch to be pulled
        :param git_uri: str, uri of the git repository for the source
        :param include_koji_repo: include the repo from the target build tag, even if other
                                                   repourls are provided.
        :param is_auto: bool, build as a automatic build
        :param isolated: bool, build as an isolated build
        :param koji_parent_build: str,
        :param koji_upload_dir: str, koji directory where the completed image will be uploaded
        :param name_label: str, label of the parent image
        :param user: str, name of the user requesting the build
        :param operator_bundle_replacement_pullspecs: dict, mapping of original pullspecs to
                                                      replacement pullspecs for operator manifest
                                                      bundle builds
        :param operator_manifests_extract_platform: str, indicates which platform should upload
                                                    operator manifests to koji
        :param parent_images_digests: dict, mapping image digests to names and platforms
        :param platforms: list of str, platforms to build on
        :param platform: str, platform
        :param reactor_config_map: str, name of the config map containing the reactor environment
        :param reactor_config_override: dict, data structure for reactor config to be injected as
        an environment variable into a worker build;
        when used, reactor_config_map is ignored.
        :param release: str,

        :param repo_info: RepoInfo, git repo data for the build
        :param scratch: bool, build as a scratch build
        :param signing_intent: bool, True to sign the resulting image
        :param skip_build: bool, if we should skip build and just set buildconfig for autorebuilds
        :param triggered_after_koji_task: int, koji task ID from which was autorebuild triggered
        :param yum_repourls: list of str, uris of the yum repos to pull from

        Please keep the paramater list alphabetized for easier tracking of changes

        the following parameters are pulled from the BuildConfiguration (ie, build_conf)
        :param auto_build_node_selector: dict, a nodeselector for auto builds
        :param explicit_build_node_selector: dict, a nodeselector for explicit builds
        :param isolated_build_node_selector: dict, a nodeselector for isolated builds
        :param platform_node_selector: dict, a nodeselector for a user_paramsific platform
        :param scratch_build_node_selector: dict, a nodeselector for scratch builds

        the following parameters can be pulled from the RepoInfo (ie, repo_info)
        :param git_branch: str, branch name of the branch to be pulled
        :param git_ref: str, commit ID of the branch to be pulled
        :param git_uri: str, uri of the git repository for the source
        """
        super(BuildUserParams, self).set_params(build_conf=build_conf,
                                                platform=platform,
                                                **kwargs)
        if repo_info:
            additional_tags = repo_info.additional_tags.tags
            git_branch = repo_info.git_branch
            git_commit_depth = repo_info.git_commit_depth
            git_ref = repo_info.git_ref
            git_uri = repo_info.git_uri
            tags_from_yaml = repo_info.additional_tags.from_container_yaml
            self.repo_info = repo_info
        elif not git_uri:
            raise OsbsValidationException(
                'no repo_info passed to BuildUserParams')

        auto_build_node_selector = build_conf.get_auto_build_node_selector()
        explicit_build_node_selector = build_conf.get_explicit_build_node_selector(
        )
        isolated_build_node_selector = build_conf.get_isolated_build_node_selector(
        )
        platform_node_selector = build_conf.get_platform_node_selector(
            platform)
        scratch_build_node_selector = build_conf.get_scratch_build_node_selector(
        )

        self.additional_tags.value = additional_tags or set()
        self.git_branch.value = git_branch
        self.git_commit_depth.value = git_commit_depth
        self.git_ref.value = git_ref
        self.git_uri.value = git_uri

        self.remote_source_url.value = remote_source_url
        self.remote_source_build_args.value = remote_source_build_args
        self.release.value = release
        self.build_type.value = build_type

        self.name.value = make_name_from_git(self.git_uri.value,
                                             self.git_branch.value)

        self.filesystem_koji_task_id.value = filesystem_koji_task_id
        self.is_auto.value = is_auto
        self.isolated.value = isolated
        self.flatpak.value = flatpak
        self.include_koji_repo.value = include_koji_repo
        self.koji_parent_build.value = koji_parent_build
        self.koji_upload_dir.value = koji_upload_dir
        self.parent_images_digests.value = parent_images_digests
        self.platforms.value = platforms
        self.operator_manifests_extract_platform.value = operator_manifests_extract_platform
        self.operator_bundle_replacement_pullspecs.value = operator_bundle_replacement_pullspecs
        self.skip_build.value = skip_build
        self.tags_from_yaml.value = tags_from_yaml
        self.triggered_after_koji_task.value = triggered_after_koji_task

        if not base_image:
            # For flatpaks, we can set this later from the reactor config
            if not flatpak:
                raise OsbsValidationException("base_image must be provided")
        else:
            self.set_base_image(base_image)

        if not name_label:
            raise OsbsValidationException("name_label must be provided")
        self.imagestream_name.value = name_label.replace('/', '-')

        if kwargs.get('signing_intent') and compose_ids:
            raise OsbsValidationException(
                'Please only define signing_intent -OR- compose_ids, not both')
        if not (compose_ids is None or isinstance(compose_ids, list)):
            raise OsbsValidationException("compose_ids must be a list")
        if not (dependency_replacements is None
                or isinstance(dependency_replacements, list)):
            raise OsbsValidationException(
                "dependency_replacements must be a list")
        if not (yum_repourls is None or isinstance(yum_repourls, list)):
            raise OsbsValidationException("yum_repourls must be a list")
        self.compose_ids.value = compose_ids or []
        self.dependency_replacements.value = dependency_replacements or []
        self.yum_repourls.value = yum_repourls or []

        if (self.scratch.value, self.is_auto.value,
                self.isolated.value).count(True) > 1:
            raise OsbsValidationException(
                'Build variations are mutually exclusive. '
                'Must set either scratch, is_auto, isolated, or none. ')
        self.auto_build_node_selector = auto_build_node_selector or {}
        self.explicit_build_node_selector = explicit_build_node_selector or {}
        self.isolated_build_node_selector = isolated_build_node_selector or {}
        self.platform_node_selector = platform_node_selector or {}
        self.scratch_build_node_selector = scratch_build_node_selector or {}
예제 #18
0
    def set_params(self,
                   git_uri=None,
                   git_ref=None,
                   git_branch=None,
                   base_image=None,
                   name_label=None,
                   release=None,
                   platforms=None,
                   build_type=None,
                   filesystem_koji_task_id=None,
                   koji_parent_build=None,
                   koji_upload_dir=None,
                   flatpak=None,
                   yum_repourls=None,
                   compose_ids=None,
                   isolated=None,
                   parent_images_digests=None,
                   tags_from_yaml=None,
                   additional_tags=None,
                   git_commit_depth=None,
                   operator_manifests_extract_platform=None,
                   triggered_after_koji_task=None,
                   **kwargs):
        super(BuildUserParams, self).set_params(**kwargs)
        self.git_uri.value = git_uri
        self.git_ref.value = git_ref
        self.git_branch.value = git_branch
        self.git_commit_depth.value = git_commit_depth
        self.tags_from_yaml.value = tags_from_yaml
        self.additional_tags.value = additional_tags or set()

        self.release.value = release
        self.build_type.value = build_type
        self.base_image.value = base_image

        self.name.value = make_name_from_git(self.git_uri.value,
                                             self.git_branch.value)

        self.parent_images_digests.value = parent_images_digests
        self.operator_manifests_extract_platform.value = operator_manifests_extract_platform
        self.platforms.value = platforms
        self.filesystem_koji_task_id.value = filesystem_koji_task_id
        self.koji_parent_build.value = koji_parent_build
        self.koji_upload_dir.value = koji_upload_dir
        self.flatpak.value = flatpak
        self.isolated.value = isolated
        self.triggered_after_koji_task.value = triggered_after_koji_task

        if not flatpak:
            if not base_image:
                raise OsbsValidationException("base_image must be provided")
            self.trigger_imagestreamtag.value = get_imagestreamtag_from_image(
                base_image)

            if not name_label:
                raise OsbsValidationException("name_label must be provided")
            self.imagestream_name.value = name_label.replace('/', '-')

        if kwargs.get('signing_intent') and compose_ids:
            raise OsbsValidationException(
                'Please only define signing_intent -OR- compose_ids, not both')
        if not (compose_ids is None or isinstance(compose_ids, list)):
            raise OsbsValidationException("compose_ids must be a list")
        if not (yum_repourls is None or isinstance(yum_repourls, list)):
            raise OsbsValidationException("yum_repourls must be a list")
        self.yum_repourls.value = yum_repourls or []
        self.compose_ids.value = compose_ids or []
예제 #19
0
파일: spec.py 프로젝트: KOgames/osbs-client
    def set_params(self, sources_command=None, architecture=None, vendor=None,
                   build_host=None, authoritative_registry=None, distribution_scope=None,
                   koji_target=None, kojiroot=None, kojihub=None, koji_certs_secret=None,
                   koji_task_id=None,
                   source_secret=None,  # compatibility name for pulp_secret
                   pulp_secret=None, pulp_registry=None, pdc_secret=None, pdc_url=None,
                   smtp_uri=None, nfs_server_path=None,
                   nfs_dest_dir=None, git_branch=None, base_image=None,
                   name_label=None, git_push_url=None, git_push_username=None,
                   builder_build_json_dir=None,
                   registry_api_versions=None, **kwargs):
        super(ProdSpec, self).set_params(**kwargs)
        self.sources_command.value = sources_command
        self.architecture.value = architecture
        self.vendor.value = vendor
        self.build_host.value = build_host
        self.authoritative_registry.value = authoritative_registry
        self.distribution_scope.value = distribution_scope
        self.registry_api_versions.value = registry_api_versions
        self.koji_target.value = koji_target
        self.kojiroot.value = kojiroot
        self.kojihub.value = kojihub
        self.koji_certs_secret.value = koji_certs_secret
        self.koji_task_id.value = koji_task_id
        self.pulp_secret.value = pulp_secret or source_secret
        self.pulp_registry.value = pulp_registry
        self.pdc_secret.value = pdc_secret
        self.pdc_url.value = pdc_url
        self.smtp_uri.value = smtp_uri
        self.nfs_server_path.value = nfs_server_path
        self.nfs_dest_dir.value = nfs_dest_dir
        self.git_push_url.value = git_push_url
        self.git_push_username.value = git_push_username
        self.git_branch.value = git_branch
        self.name.value = make_name_from_git(self.git_uri.value, self.git_branch.value)
        self.trigger_imagestreamtag.value = get_imagestreamtag_from_image(base_image)
        self.builder_build_json_dir.value = builder_build_json_dir
        self.imagestream_name.value = name_label.replace('/', '-')
        # The ImageStream should take tags from the source registry
        # or, if no source registry is set, the first listed registry
        imagestream_reg = self.source_registry_uri.value
        if not imagestream_reg:
            try:
                imagestream_reg = self.registry_uris.value[0]
            except IndexError:
                raise OsbsValidationException("No registries specified")

        self.imagestream_url.value = os.path.join(imagestream_reg.docker_uri,
                                                  name_label)
        logger.debug("setting 'imagestream_url' to '%s'",
                     self.imagestream_url.value)
        insecure = imagestream_reg.uri.startswith('http://')
        self.imagestream_insecure_registry.value = insecure
        logger.debug("setting 'imagestream_insecure_registry' to %r", insecure)
        timestamp = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
        self.image_tag.value = "%s/%s:%s-%s" % (
            self.user.value,
            self.component.value,
            self.koji_target.value or 'none',
            timestamp
        )