Source code for pubtools.pulplib._impl.model.repository.container
from .base import Repository, SyncOptions, repo_type
from ..attr import pulp_attrib
from ... import compat_attr as attr
[docs]@attr.s(kw_only=True, frozen=True)
class ContainerSyncOptions(SyncOptions):
"""Options controlling a container repository
:meth:`~pubtools.pulplib.Repository.sync`.
"""
upstream_name = pulp_attrib(default=None, type=str)
"""The name of the repository to import from the upstream repository.
For example, if syncing from repository `quay.io/fedora/fedora`, upstream_name should be set to `fedora/fedora`.
"""
tags = pulp_attrib(default=None, type=list)
"""List of tags to include on sync.
"""
[docs]@repo_type("docker-repo")
@attr.s(kw_only=True, frozen=True)
class ContainerImageRepository(Repository):
"""A :class:`~pubtools.pulplib.Repository` for container images."""
type = pulp_attrib(default="docker-repo", type=str, pulp_field="notes._repo-type")
registry_id = pulp_attrib(
default=attr.Factory(lambda self: self.id, takes_self=True), type=str
)
"""The ID of this repository in a container image registry.
For example:
- pulp repo id: redhat-rhel7-openscap
- registry id: rhel7/openscap
The registry id is used by clients of the published repo, i.e.
``docker pull registry.example.com/<registry_id>:latest``
"""
@classmethod
def _data_to_init_args(cls, data):
out = super(ContainerImageRepository, cls)._data_to_init_args(data)
for dist in data.get("distributors") or []:
if dist["distributor_type_id"] == "docker_distributor_web":
registry_id = dist["config"].get("repo-registry-id")
if registry_id:
out["registry_id"] = registry_id
break
return out