
// This file was autogenerated by go-to-protobuf. Do not edit it manually!

syntax = 'proto2';

package github.com.openshift.origin.pkg.image.api.v1;

import "k8s.io/kubernetes/pkg/api/unversioned/generated.proto";
import "k8s.io/kubernetes/pkg/api/v1/generated.proto";
import "k8s.io/kubernetes/pkg/runtime/generated.proto";
import "k8s.io/kubernetes/pkg/util/intstr/generated.proto";

// Package-wide variables from generator "generated".
option go_package = "v1";

// DockerImageReference points to a Docker image.
message DockerImageReference {
  // Registry is the registry that contains the Docker image
  optional string registry = 1;

  // Namespace is the namespace that contains the Docker image
  optional string namespace = 2;

  // Name is the name of the Docker image
  optional string name = 3;

  // Tag is which tag of the Docker image is being referenced
  optional string tag = 4;

  // ID is the identifier for the Docker image
  optional string iD = 5;
}

// Image is an immutable representation of a Docker image and metadata at a point in time.
message Image {
  // Standard object's metadata.
  optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1;

  // DockerImageReference is the string that can be used to pull this image.
  optional string dockerImageReference = 2;

  // DockerImageMetadata contains metadata about this image
  optional k8s.io.kubernetes.pkg.runtime.RawExtension dockerImageMetadata = 3;

  // DockerImageMetadataVersion conveys the version of the object, which if empty defaults to "1.0"
  optional string dockerImageMetadataVersion = 4;

  // DockerImageManifest is the raw JSON of the manifest
  optional string dockerImageManifest = 5;

  // DockerImageLayers represents the layers in the image. May not be set if the image does not define that data.
  repeated ImageLayer dockerImageLayers = 6;

  // Signatures holds all signatures of the image.
  repeated ImageSignature signatures = 7;

  // DockerImageSignatures provides the signatures as opaque blobs. This is a part of manifest schema v1.
  repeated bytes dockerImageSignatures = 8;

  // DockerImageManifestMediaType specifies the mediaType of manifest. This is a part of manifest schema v2.
  optional string dockerImageManifestMediaType = 9;

  // DockerImageConfig is a JSON blob that the runtime uses to set up the container. This is a part of manifest schema v2.
  optional string dockerImageConfig = 10;
}

// ImageImportSpec describes a request to import a specific image.
message ImageImportSpec {
  // From is the source of an image to import; only kind DockerImage is allowed
  optional k8s.io.kubernetes.pkg.api.v1.ObjectReference from = 1;

  // To is a tag in the current image stream to assign the imported image to, if name is not specified the default tag from from.name will be used
  optional k8s.io.kubernetes.pkg.api.v1.LocalObjectReference to = 2;

  // ImportPolicy is the policy controlling how the image is imported
  optional TagImportPolicy importPolicy = 3;

  // IncludeManifest determines if the manifest for each image is returned in the response
  optional bool includeManifest = 4;
}

// ImageImportStatus describes the result of an image import.
message ImageImportStatus {
  // Status is the status of the image import, including errors encountered while retrieving the image
  optional k8s.io.kubernetes.pkg.api.unversioned.Status status = 1;

  // Image is the metadata of that image, if the image was located
  optional Image image = 2;

  // Tag is the tag this image was located under, if any
  optional string tag = 3;
}

// ImageLayer represents a single layer of the image. Some images may have multiple layers. Some may have none.
message ImageLayer {
  // Name of the layer as defined by the underlying store.
  optional string name = 1;

  // Size of the layer in bytes as defined by the underlying store.
  optional int64 size = 2;

  // MediaType of the referenced object.
  optional string mediaType = 3;
}

// ImageList is a list of Image objects.
message ImageList {
  // Standard object's metadata.
  optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1;

  // Items is a list of images
  repeated Image items = 2;
}

// ImageSignature holds a signature of an image. It allows to verify image identity and possibly other claims
// as long as the signature is trusted. Based on this information it is possible to restrict runnable images
// to those matching cluster-wide policy.
// Mandatory fields should be parsed by clients doing image verification. The others are parsed from
// signature's content by the server. They serve just an informative purpose.
message ImageSignature {
  // Standard object's metadata.
  optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1;

  // Required: Describes a type of stored blob.
  optional string type = 2;

  // Required: An opaque binary string which is an image's signature.
  optional bytes content = 3;

  // Conditions represent the latest available observations of a signature's current state.
  repeated SignatureCondition conditions = 4;

  // A human readable string representing image's identity. It could be a product name and version, or an
  // image pull spec (e.g. "registry.access.redhat.com/rhel7/rhel:7.2").
  optional string imageIdentity = 5;

  // Contains claims from the signature.
  map<string, string> signedClaims = 6;

  // If specified, it is the time of signature's creation.
  optional k8s.io.kubernetes.pkg.api.unversioned.Time created = 7;

  // If specified, it holds information about an issuer of signing certificate or key (a person or entity
  // who signed the signing certificate or key).
  optional SignatureIssuer issuedBy = 8;

  // If specified, it holds information about a subject of signing certificate or key (a person or entity
  // who signed the image).
  optional SignatureSubject issuedTo = 9;
}

// ImageStream stores a mapping of tags to images, metadata overrides that are applied
// when images are tagged in a stream, and an optional reference to a Docker image
// repository on a registry.
message ImageStream {
  // Standard object's metadata.
  optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1;

  // Spec describes the desired state of this stream
  optional ImageStreamSpec spec = 2;

  // Status describes the current state of this stream
  optional ImageStreamStatus status = 3;
}

// ImageStreamImage represents an Image that is retrieved by image name from an ImageStream.
message ImageStreamImage {
  // Standard object's metadata.
  optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1;

  // Image associated with the ImageStream and image name.
  optional Image image = 2;
}

// The image stream import resource provides an easy way for a user to find and import Docker images
// from other Docker registries into the server. Individual images or an entire image repository may
// be imported, and users may choose to see the results of the import prior to tagging the resulting
// images into the specified image stream.
// 
// This API is intended for end-user tools that need to see the metadata of the image prior to import
// (for instance, to generate an application from it). Clients that know the desired image can continue
// to create spec.tags directly into their image streams.
message ImageStreamImport {
  // Standard object's metadata.
  optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1;

  // Spec is a description of the images that the user wishes to import
  optional ImageStreamImportSpec spec = 2;

  // Status is the the result of importing the image
  optional ImageStreamImportStatus status = 3;
}

// ImageStreamImportSpec defines what images should be imported.
message ImageStreamImportSpec {
  // Import indicates whether to perform an import - if so, the specified tags are set on the spec
  // and status of the image stream defined by the type meta.
  optional bool import = 1;

  // Repository is an optional import of an entire Docker image repository. A maximum limit on the
  // number of tags imported this way is imposed by the server.
  optional RepositoryImportSpec repository = 2;

  // Images are a list of individual images to import.
  repeated ImageImportSpec images = 3;
}

// ImageStreamImportStatus contains information about the status of an image stream import.
message ImageStreamImportStatus {
  // Import is the image stream that was successfully updated or created when 'to' was set.
  optional ImageStream import = 1;

  // Repository is set if spec.repository was set to the outcome of the import
  optional RepositoryImportStatus repository = 2;

  // Images is set with the result of importing spec.images
  repeated ImageImportStatus images = 3;
}

// ImageStreamList is a list of ImageStream objects.
message ImageStreamList {
  // Standard object's metadata.
  optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1;

  // Items is a list of imageStreams
  repeated ImageStream items = 2;
}

// ImageStreamMapping represents a mapping from a single tag to a Docker image as
// well as the reference to the Docker image stream the image came from.
message ImageStreamMapping {
  // Standard object's metadata.
  optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1;

  // Image is a Docker image.
  optional Image image = 2;

  // Tag is a string value this image can be located with inside the stream.
  optional string tag = 3;
}

// ImageStreamSpec represents options for ImageStreams.
message ImageStreamSpec {
  // DockerImageRepository is optional, if specified this stream is backed by a Docker repository on this server
  optional string dockerImageRepository = 1;

  // Tags map arbitrary string values to specific image locators
  repeated TagReference tags = 2;
}

// ImageStreamStatus contains information about the state of this image stream.
message ImageStreamStatus {
  // DockerImageRepository represents the effective location this stream may be accessed at.
  // May be empty until the server determines where the repository is located
  optional string dockerImageRepository = 1;

  // Tags are a historical record of images associated with each tag. The first entry in the
  // TagEvent array is the currently tagged image.
  repeated NamedTagEventList tags = 2;
}

// ImageStreamTag represents an Image that is retrieved by tag name from an ImageStream.
message ImageStreamTag {
  // Standard object's metadata.
  optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1;

  // Tag is the spec tag associated with this image stream tag, and it may be null
  // if only pushes have occurred to this image stream.
  optional TagReference tag = 2;

  // Generation is the current generation of the tagged image - if tag is provided
  // and this value is not equal to the tag generation, a user has requested an
  // import that has not completed, or Conditions will be filled out indicating any
  // error.
  optional int64 generation = 3;

  // Conditions is an array of conditions that apply to the image stream tag.
  repeated TagEventCondition conditions = 4;

  // Image associated with the ImageStream and tag.
  optional Image image = 5;
}

// ImageStreamTagList is a list of ImageStreamTag objects.
message ImageStreamTagList {
  // Standard object's metadata.
  optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1;

  // Items is the list of image stream tags
  repeated ImageStreamTag items = 2;
}

// NamedTagEventList relates a tag to its image history.
message NamedTagEventList {
  // Tag is the tag for which the history is recorded
  optional string tag = 1;

  // Standard object's metadata.
  repeated TagEvent items = 2;

  // Conditions is an array of conditions that apply to the tag event list.
  repeated TagEventCondition conditions = 3;
}

// RepositoryImportSpec describes a request to import images from a Docker image repository.
message RepositoryImportSpec {
  // From is the source for the image repository to import; only kind DockerImage and a name of a Docker image repository is allowed
  optional k8s.io.kubernetes.pkg.api.v1.ObjectReference from = 1;

  // ImportPolicy is the policy controlling how the image is imported
  optional TagImportPolicy importPolicy = 2;

  // IncludeManifest determines if the manifest for each image is returned in the response
  optional bool includeManifest = 3;
}

// RepositoryImportStatus describes the result of an image repository import
message RepositoryImportStatus {
  // Status reflects whether any failure occurred during import
  optional k8s.io.kubernetes.pkg.api.unversioned.Status status = 1;

  // Images is a list of images successfully retrieved by the import of the repository.
  repeated ImageImportStatus images = 2;

  // AdditionalTags are tags that exist in the repository but were not imported because
  // a maximum limit of automatic imports was applied.
  repeated string additionalTags = 3;
}

// SignatureCondition describes an image signature condition of particular kind at particular probe time.
message SignatureCondition {
  // Type of signature condition, Complete or Failed.
  optional string type = 1;

  // Status of the condition, one of True, False, Unknown.
  optional string status = 2;

  // Last time the condition was checked.
  optional k8s.io.kubernetes.pkg.api.unversioned.Time lastProbeTime = 3;

  // Last time the condition transit from one status to another.
  optional k8s.io.kubernetes.pkg.api.unversioned.Time lastTransitionTime = 4;

  // (brief) reason for the condition's last transition.
  optional string reason = 5;

  // Human readable message indicating details about last transition.
  optional string message = 6;
}

// SignatureGenericEntity holds a generic information about a person or entity who is an issuer or a subject
// of signing certificate or key.
message SignatureGenericEntity {
  // Organization name.
  optional string organization = 1;

  // Common name (e.g. openshift-signing-service).
  optional string commonName = 2;
}

// SignatureIssuer holds information about an issuer of signing certificate or key.
message SignatureIssuer {
  optional SignatureGenericEntity signatureGenericEntity = 1;
}

// SignatureSubject holds information about a person or entity who created the signature.
message SignatureSubject {
  optional SignatureGenericEntity signatureGenericEntity = 1;

  // If present, it is a human readable key id of public key belonging to the subject used to verify image
  // signature. It should contain at least 64 lowest bits of public key's fingerprint (e.g.
  // 0x685ebe62bf278440).
  optional string publicKeyID = 2;
}

// TagEvent is used by ImageStreamStatus to keep a historical record of images associated with a tag.
message TagEvent {
  // Created holds the time the TagEvent was created
  optional k8s.io.kubernetes.pkg.api.unversioned.Time created = 1;

  // DockerImageReference is the string that can be used to pull this image
  optional string dockerImageReference = 2;

  // Image is the image
  optional string image = 3;

  // Generation is the spec tag generation that resulted in this tag being updated
  optional int64 generation = 4;
}

// TagEventCondition contains condition information for a tag event.
message TagEventCondition {
  // Type of tag event condition, currently only ImportSuccess
  optional string type = 1;

  // Status of the condition, one of True, False, Unknown.
  optional string status = 2;

  // LastTransitionTIme is the time the condition transitioned from one status to another.
  optional k8s.io.kubernetes.pkg.api.unversioned.Time lastTransitionTime = 3;

  // Reason is a brief machine readable explanation for the condition's last transition.
  optional string reason = 4;

  // Message is a human readable description of the details about last transition, complementing reason.
  optional string message = 5;

  // Generation is the spec tag generation that this status corresponds to
  optional int64 generation = 6;
}

// TagImportPolicy controls how images related to this tag will be imported.
message TagImportPolicy {
  // Insecure is true if the server may bypass certificate verification or connect directly over HTTP during image import.
  optional bool insecure = 1;

  // Scheduled indicates to the server that this tag should be periodically checked to ensure it is up to date, and imported
  optional bool scheduled = 2;
}

// TagReference specifies optional annotations for images using this tag and an optional reference to an ImageStreamTag, ImageStreamImage, or DockerImage this tag should track.
message TagReference {
  // Name of the tag
  optional string name = 1;

  // Annotations associated with images using this tag
  map<string, string> annotations = 2;

  // From is a reference to an image stream tag or image stream this tag should track
  optional k8s.io.kubernetes.pkg.api.v1.ObjectReference from = 3;

  // Reference states if the tag will be imported. Default value is false, which means the tag will be imported.
  optional bool reference = 4;

  // Generation is the image stream generation that updated this tag - setting it to 0 is an indication that the generation must be updated.
  // Legacy clients will send this as nil, which means the client doesn't know or care.
  optional int64 generation = 5;

  // Import is information that controls how images may be imported by the server.
  optional TagImportPolicy importPolicy = 6;

  // ReferencePolicy defines how other components should consume the image
  optional TagReferencePolicy referencePolicy = 7;
}

// TagReferencePolicy describes how pull-specs for images in this image stream tag are generated when
// image change triggers in deployment configs or builds are resolved. This allows the image stream
// author to control how images are accessed.
message TagReferencePolicy {
  // Type determines how the image pull spec should be transformed when the image stream tag is used in
  // deployment config triggers or new builds. The default value is `Source`, indicating the original
  // location of the image should be used (if imported). The user may also specify `Local`, indicating
  // that the pull spec should point to the integrated Docker registry and leverage the registry's
  // ability to proxy the pull to an upstream registry. `Local` allows the credentials used to pull this
  // image to be managed from the image stream's namespace, so others on the platform can access a remote
  // image but have no access to the remote secret. It also allows the image layers to be mirrored into
  // the local registry which the images can still be pulled even if the upstream registry is unavailable.
  optional string type = 1;
}

