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

syntax = "proto2";

package github.com.openshift.api.template.v1;

import "k8s.io/api/core/v1/generated.proto";
import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto";
import "k8s.io/apimachinery/pkg/runtime/generated.proto";
import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto";

// Package-wide variables from generator "generated".
option go_package = "github.com/openshift/api/template/v1";

// BrokerTemplateInstance holds the service broker-related state associated with
// a TemplateInstance.  BrokerTemplateInstance is part of an experimental API.
//
// Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).
// +openshift:compatibility-gen:level=1
message BrokerTemplateInstance {
  // metadata is the standard object's metadata.
  // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
  optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;

  // spec describes the state of this BrokerTemplateInstance.
  optional BrokerTemplateInstanceSpec spec = 2;
}

// BrokerTemplateInstanceList is a list of BrokerTemplateInstance objects.
//
// Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).
// +openshift:compatibility-gen:level=1
message BrokerTemplateInstanceList {
  // metadata is the standard list's metadata.
  // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
  optional .k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;

  // items is a list of BrokerTemplateInstances
  repeated BrokerTemplateInstance items = 2;
}

// BrokerTemplateInstanceSpec describes the state of a BrokerTemplateInstance.
message BrokerTemplateInstanceSpec {
  // templateInstance is a reference to a TemplateInstance object residing
  // in a namespace.
  optional .k8s.io.api.core.v1.ObjectReference templateInstance = 1;

  // secret is a reference to a Secret object residing in a namespace,
  // containing the necessary template parameters.
  optional .k8s.io.api.core.v1.ObjectReference secret = 2;

  // bindingIDs is a list of 'binding_id's provided during successive bind
  // calls to the template service broker.
  repeated string bindingIDs = 3;
}

// ExtraValue masks the value so protobuf can generate
// +protobuf.nullable=true
// +protobuf.options.(gogoproto.goproto_stringer)=false
message ExtraValue {
  // items, if empty, will result in an empty slice

  repeated string items = 1;
}

// Parameter defines a name/value variable that is to be processed during
// the Template to Config transformation.
message Parameter {
  // name must be set and it can be referenced in Template
  // Items using ${PARAMETER_NAME}. Required.
  optional string name = 1;

  // Optional: The name that will show in UI instead of parameter 'Name'
  optional string displayName = 2;

  // description of a parameter. Optional.
  optional string description = 3;

  // value holds the Parameter data. If specified, the generator will be
  // ignored. The value replaces all occurrences of the Parameter ${Name}
  // expression during the Template to Config transformation. Optional.
  optional string value = 4;

  // generate specifies the generator to be used to generate random string
  // from an input value specified by From field. The result string is
  // stored into Value field. If empty, no generator is being used, leaving
  // the result Value untouched. Optional.
  //
  // The only supported generator is "expression", which accepts a "from"
  // value in the form of a simple regular expression containing the
  // range expression "[a-zA-Z0-9]", and the length expression "a{length}".
  //
  // Examples:
  //
  // from             | value
  // -----------------------------
  // "test[0-9]{1}x"  | "test7x"
  // "[0-1]{8}"       | "01001100"
  // "0x[A-F0-9]{4}"  | "0xB3AF"
  // "[a-zA-Z0-9]{8}" | "hW4yQU5i"
  optional string generate = 5;

  // from is an input value for the generator. Optional.
  optional string from = 6;

  // Optional: Indicates the parameter must have a value.  Defaults to false.
  optional bool required = 7;
}

// Template contains the inputs needed to produce a Config.
//
// Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).
// +openshift:compatibility-gen:level=1
message Template {
  // metadata is the standard object's metadata.
  // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
  optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;

  // message is an optional instructional message that will
  // be displayed when this template is instantiated.
  // This field should inform the user how to utilize the newly created resources.
  // Parameter substitution will be performed on the message before being
  // displayed so that generated credentials and other parameters can be
  // included in the output.
  optional string message = 2;

  // objects is an array of resources to include in this template.
  // If a namespace value is hardcoded in the object, it will be removed
  // during template instantiation, however if the namespace value
  // is, or contains, a ${PARAMETER_REFERENCE}, the resolved
  // value after parameter substitution will be respected and the object
  // will be created in that namespace.
  // +kubebuilder:pruning:PreserveUnknownFields
  repeated .k8s.io.apimachinery.pkg.runtime.RawExtension objects = 3;

  // parameters is an optional array of Parameters used during the
  // Template to Config transformation.
  repeated Parameter parameters = 4;

  // labels is a optional set of labels that are applied to every
  // object during the Template to Config transformation.
  map<string, string> labels = 5;
}

// TemplateInstance requests and records the instantiation of a Template.
// TemplateInstance is part of an experimental API.
//
// Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).
// +openshift:compatibility-gen:level=1
message TemplateInstance {
  // metadata is the standard object's metadata.
  // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
  optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;

  // spec describes the desired state of this TemplateInstance.
  optional TemplateInstanceSpec spec = 2;

  // status describes the current state of this TemplateInstance.
  // +optional
  optional TemplateInstanceStatus status = 3;
}

// TemplateInstanceCondition contains condition information for a
// TemplateInstance.
message TemplateInstanceCondition {
  // type of the condition, currently Ready or InstantiateFailure.
  optional string type = 1;

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

  // lastTransitionTime is the last time a condition status transitioned from
  // one state to another.
  optional .k8s.io.apimachinery.pkg.apis.meta.v1.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 of the last
  // transition, complementing reason.
  optional string message = 5;
}

// TemplateInstanceList is a list of TemplateInstance objects.
//
// Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).
// +openshift:compatibility-gen:level=1
message TemplateInstanceList {
  // metadata is the standard list's metadata.
  // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
  optional .k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;

  // items is a list of Templateinstances
  repeated TemplateInstance items = 2;
}

// TemplateInstanceObject references an object created by a TemplateInstance.
message TemplateInstanceObject {
  // ref is a reference to the created object.  When used under .spec, only
  // name and namespace are used; these can contain references to parameters
  // which will be substituted following the usual rules.
  optional .k8s.io.api.core.v1.ObjectReference ref = 1;
}

// TemplateInstanceRequester holds the identity of an agent requesting a
// template instantiation.
message TemplateInstanceRequester {
  // username uniquely identifies this user among all active users.
  optional string username = 1;

  // uid is a unique value that identifies this user across time; if this user is
  // deleted and another user by the same name is added, they will have
  // different UIDs.
  optional string uid = 2;

  // groups represent the groups this user is a part of.
  repeated string groups = 3;

  // extra holds additional information provided by the authenticator.
  map<string, ExtraValue> extra = 4;
}

// TemplateInstanceSpec describes the desired state of a TemplateInstance.
message TemplateInstanceSpec {
  // template is a full copy of the template for instantiation.
  optional Template template = 1;

  // secret is a reference to a Secret object containing the necessary
  // template parameters.
  optional .k8s.io.api.core.v1.LocalObjectReference secret = 2;

  // requester holds the identity of the agent requesting the template
  // instantiation.
  // +optional
  optional TemplateInstanceRequester requester = 3;
}

// TemplateInstanceStatus describes the current state of a TemplateInstance.
message TemplateInstanceStatus {
  // conditions represent the latest available observations of a
  // TemplateInstance's current state.
  // +optional
  repeated TemplateInstanceCondition conditions = 1;

  // objects references the objects created by the TemplateInstance.
  // +optional
  repeated TemplateInstanceObject objects = 2;
}

// TemplateList is a list of Template objects.
//
// Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).
// +openshift:compatibility-gen:level=1
message TemplateList {
  // metadata is the standard list's metadata.
  // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
  optional .k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;

  // items is a list of templates
  repeated Template items = 2;
}

