def fetch_manifest_by_digest(namespace_name, repo_name, manifest_ref): repository_ref = registry_model.lookup_repository(namespace_name, repo_name) if repository_ref is None: image_pulls.labels("v2_1", "manifest", 404).inc() raise NameUnknown() manifest = registry_model.lookup_manifest_by_digest( repository_ref, manifest_ref) if manifest is None: image_pulls.labels("v2_1", "manifest", 404).inc() raise ManifestUnknown() manifest_bytes, manifest_digest, manifest_media_type = _rewrite_schema_if_necessary( namespace_name, repo_name, "$digest", manifest) if manifest_digest is None: image_pulls.labels("v2_1", "manifest", 404).inc() raise ManifestUnknown() track_and_log("pull_repo", repository_ref, manifest_digest=manifest_ref) image_pulls.labels("v2_1", "manifest", 200).inc() return Response( manifest_bytes.as_unicode(), status=200, headers={ "Content-Type": manifest_media_type, "Docker-Content-Digest": manifest_digest, }, )
def get_repository_images(namespace_name, repo_name): repository_ref = registry_model.lookup_repository(namespace_name, repo_name, kind_filter="image") permission = ReadRepositoryPermission(namespace_name, repo_name) if permission.can() or (repository_ref and repository_ref.is_public): # We can't rely on permissions to tell us if a repo exists anymore if repository_ref is None: image_pulls.labels("v1", "tag", 404).inc() abort(404, message="Unknown repository", issue="unknown-repo") logger.debug("Building repository image response") resp = make_response(json.dumps([]), 200) resp.mimetype = "application/json" track_and_log("pull_repo", repository_ref, analytics_name="pull_repo_100x", analytics_sample=0.01) image_pulls.labels("v1", "tag", 200).inc() return resp image_pulls.labels("v1", "tag", 403).inc() abort(403)
def fetch_manifest_by_digest(namespace_name, repo_name, manifest_ref, registry_model): try: repository_ref = registry_model.lookup_repository( namespace_name, repo_name, raise_on_error=True, manifest_ref=manifest_ref ) except RepositoryDoesNotExist as e: image_pulls.labels("v2", "manifest", 404).inc() raise NameUnknown("repository not found") try: manifest = registry_model.lookup_manifest_by_digest( repository_ref, manifest_ref, raise_on_error=True ) except ManifestDoesNotExist as e: image_pulls.labels("v2", "manifest", 404).inc() raise ManifestUnknown(str(e)) track_and_log("pull_repo", repository_ref, manifest_digest=manifest_ref) image_pulls.labels("v2", "manifest", 200).inc() return Response( manifest.internal_manifest_bytes.as_unicode(), status=200, headers={ "Content-Type": manifest.media_type, "Docker-Content-Digest": manifest.digest, }, )
def wrapper(*args, **kwargs): rv = func(*args, **kwargs) image_pulls.labels(protocol, "tag", rv.status_code) return rv
def fetch_manifest_by_tagname(namespace_name, repo_name, manifest_ref): repository_ref = registry_model.lookup_repository(namespace_name, repo_name) if repository_ref is None: image_pulls.labels("v2", "tag", 404).inc() raise NameUnknown() tag = registry_model.get_repo_tag(repository_ref, manifest_ref) if tag is None: if registry_model.has_expired_tag(repository_ref, manifest_ref): logger.debug("Found expired tag %s for repository %s/%s", manifest_ref, namespace_name, repo_name) msg = ( "Tag %s was deleted or has expired. To pull, revive via time machine" % manifest_ref) image_pulls.labels("v2", "tag", 404).inc() raise TagExpired(msg) image_pulls.labels("v2", "tag", 404).inc() raise ManifestUnknown() manifest = registry_model.get_manifest_for_tag(tag) if manifest is None: # Something went wrong. image_pulls.labels("v2", "tag", 400).inc() raise ManifestInvalid() manifest_bytes, manifest_digest, manifest_media_type = _rewrite_schema_if_necessary( namespace_name, repo_name, manifest_ref, manifest) if manifest_bytes is None: image_pulls.labels("v2", "tag", 404).inc() raise ManifestUnknown() track_and_log( "pull_repo", repository_ref, analytics_name="pull_repo_100x", analytics_sample=0.01, tag=manifest_ref, ) image_pulls.labels("v2", "tag", 200).inc() return Response( manifest_bytes.as_unicode(), status=200, headers={ "Content-Type": manifest_media_type, "Docker-Content-Digest": manifest_digest, }, )