mirror of https://github.com/dexidp/dex.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
176 lines
9.3 KiB
176 lines
9.3 KiB
/* |
|
Copyright 2017 The Kubernetes Authors. |
|
Licensed under the Apache License, Version 2.0 (the "License"); |
|
you may not use this file except in compliance with the License. |
|
You may obtain a copy of the License at |
|
|
|
http://www.apache.org/licenses/LICENSE-2.0 |
|
|
|
Unless required by applicable law or agreed to in writing, software |
|
distributed under the License is distributed on an "AS IS" BASIS, |
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
See the License for the specific language governing permissions and |
|
limitations under the License. |
|
*/ |
|
|
|
package k8sapi |
|
|
|
// CustomResourceDefinitionSpec describes how a user wants their resource to appear |
|
type CustomResourceDefinitionSpec struct { |
|
// Group is the group this resource belongs in |
|
Group string `json:"group" protobuf:"bytes,1,opt,name=group"` |
|
// Version is the version this resource belongs in |
|
Version string `json:"version" protobuf:"bytes,2,opt,name=version"` |
|
// Names are the names used to describe this custom resource |
|
Names CustomResourceDefinitionNames `json:"names" protobuf:"bytes,3,opt,name=names"` |
|
|
|
// Scope indicates whether this resource is cluster or namespace scoped. Default is namespaced |
|
Scope ResourceScope `json:"scope" protobuf:"bytes,4,opt,name=scope,casttype=ResourceScope"` |
|
// versions is the list of all API versions of the defined custom resource. |
|
// Version names are used to compute the order in which served versions are listed in API discovery. |
|
// If the version string is "kube-like", it will sort above non "kube-like" version strings, which are ordered |
|
// lexicographically. "Kube-like" versions start with a "v", then are followed by a number (the major version), |
|
// then optionally the string "alpha" or "beta" and another number (the minor version). These are sorted first |
|
// by GA > beta > alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing |
|
// major version, then minor version. An example sorted list of versions: |
|
// v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10. |
|
Versions []CustomResourceDefinitionVersion `json:"versions" protobuf:"bytes,7,rep,name=versions"` |
|
} |
|
|
|
// CustomResourceDefinitionNames indicates the names to serve this CustomResourceDefinition |
|
type CustomResourceDefinitionNames struct { |
|
// Plural is the plural name of the resource to serve. It must match the name of the CustomResourceDefinition-registration |
|
// too: plural.group and it must be all lowercase. |
|
Plural string `json:"plural" protobuf:"bytes,1,opt,name=plural"` |
|
// Singular is the singular name of the resource. It must be all lowercase Defaults to lowercased <kind> |
|
Singular string `json:"singular,omitempty" protobuf:"bytes,2,opt,name=singular"` |
|
// ShortNames are short names for the resource. It must be all lowercase. |
|
ShortNames []string `json:"shortNames,omitempty" protobuf:"bytes,3,opt,name=shortNames"` |
|
// Kind is the serialized kind of the resource. It is normally CamelCase and singular. |
|
Kind string `json:"kind" protobuf:"bytes,4,opt,name=kind"` |
|
// ListKind is the serialized kind of the list for this resource. Defaults to <kind>List. |
|
ListKind string `json:"listKind,omitempty" protobuf:"bytes,5,opt,name=listKind"` |
|
} |
|
|
|
// ResourceScope is an enum defining the different scopes available to a custom resource |
|
type ResourceScope string |
|
|
|
const ( |
|
// ClusterScoped is the `cluster` scope for a custom resource. |
|
ClusterScoped ResourceScope = "Cluster" |
|
// NamespaceScoped is the `namespaced` scope for a custom resource. |
|
NamespaceScoped ResourceScope = "Namespaced" |
|
) |
|
|
|
// ConditionStatus reflects if a resource |
|
type ConditionStatus string |
|
|
|
// These are valid condition statuses. "ConditionTrue" means a resource is in the condition. |
|
// "ConditionFalse" means a resource is not in the condition. "ConditionUnknown" means kubernetes |
|
// can't decide if a resource is in the condition or not. In the future, we could add other |
|
// intermediate conditions, e.g. ConditionDegraded. |
|
const ( |
|
ConditionTrue ConditionStatus = "True" |
|
ConditionFalse ConditionStatus = "False" |
|
ConditionUnknown ConditionStatus = "Unknown" |
|
) |
|
|
|
// CustomResourceDefinitionConditionType is a valid value for CustomResourceDefinitionCondition.Type |
|
type CustomResourceDefinitionConditionType string |
|
|
|
const ( |
|
// Established means that the resource has become active. A resource is established when all names are |
|
// accepted without a conflict for the first time. A resource stays established until deleted, even during |
|
// a later NamesAccepted due to changed names. Note that not all names can be changed. |
|
Established CustomResourceDefinitionConditionType = "Established" |
|
// NamesAccepted means the names chosen for this CustomResourceDefinition do not conflict with others in |
|
// the group and are therefore accepted. |
|
NamesAccepted CustomResourceDefinitionConditionType = "NamesAccepted" |
|
// Terminating means that the CustomResourceDefinition has been deleted and is cleaning up. |
|
Terminating CustomResourceDefinitionConditionType = "Terminating" |
|
) |
|
|
|
// CustomResourceDefinitionCondition contains details for the current condition of this pod. |
|
type CustomResourceDefinitionCondition struct { |
|
// Type is the type of the condition. |
|
Type CustomResourceDefinitionConditionType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=CustomResourceDefinitionConditionType"` |
|
// Status is the status of the condition. |
|
// Can be True, False, Unknown. |
|
Status ConditionStatus `json:"status" protobuf:"bytes,2,opt,name=status,casttype=ConditionStatus"` |
|
// Last time the condition transitioned from one status to another. |
|
// +optional |
|
LastTransitionTime Time `json:"lastTransitionTime,omitempty" protobuf:"bytes,3,opt,name=lastTransitionTime"` |
|
// Unique, one-word, CamelCase reason for the condition's last transition. |
|
// +optional |
|
Reason string `json:"reason,omitempty" protobuf:"bytes,4,opt,name=reason"` |
|
// Human-readable message indicating details about last transition. |
|
// +optional |
|
Message string `json:"message,omitempty" protobuf:"bytes,5,opt,name=message"` |
|
} |
|
|
|
// CustomResourceDefinitionStatus indicates the state of the CustomResourceDefinition |
|
type CustomResourceDefinitionStatus struct { |
|
// Conditions indicate state for particular aspects of a CustomResourceDefinition |
|
Conditions []CustomResourceDefinitionCondition `json:"conditions" protobuf:"bytes,1,opt,name=conditions"` |
|
|
|
// AcceptedNames are the names that are actually being used to serve discovery |
|
// They may be different than the names in spec. |
|
AcceptedNames CustomResourceDefinitionNames `json:"acceptedNames" protobuf:"bytes,2,opt,name=acceptedNames"` |
|
} |
|
|
|
// CustomResourceCleanupFinalizer is the name of the finalizer which will delete instances of |
|
// a CustomResourceDefinition |
|
const CustomResourceCleanupFinalizer = "customresourcecleanup.apiextensions.k8s.io" |
|
|
|
// +genclient |
|
// +genclient:nonNamespaced |
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object |
|
|
|
// CustomResourceDefinition represents a resource that should be exposed on the API server. Its name MUST be in the format |
|
// <.spec.name>.<.spec.group>. |
|
type CustomResourceDefinition struct { |
|
TypeMeta `json:",inline"` |
|
ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` |
|
|
|
// Spec describes how the user wants the resources to appear |
|
Spec CustomResourceDefinitionSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` |
|
// Status indicates the actual state of the CustomResourceDefinition |
|
Status CustomResourceDefinitionStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` |
|
} |
|
|
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object |
|
|
|
// CustomResourceDefinitionList is a list of CustomResourceDefinition objects. |
|
type CustomResourceDefinitionList struct { |
|
TypeMeta `json:",inline"` |
|
ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` |
|
|
|
// Items individual CustomResourceDefinitions |
|
Items []CustomResourceDefinition `json:"items" protobuf:"bytes,2,rep,name=items"` |
|
} |
|
|
|
type CustomResourceDefinitionVersion struct { |
|
// name is the version name, e.g. “v1”, “v2beta1”, etc. |
|
// The custom resources are served under this version at `/apis/<group>/<version>/...` if `served` is true. |
|
Name string `json:"name" protobuf:"bytes,1,opt,name=name"` |
|
// served is a flag enabling/disabling this version from being served via REST APIs |
|
Served bool `json:"served" protobuf:"varint,2,opt,name=served"` |
|
// storage indicates this version should be used when persisting custom resources to storage. |
|
// There must be exactly one version with storage=true. |
|
Storage bool `json:"storage" protobuf:"varint,3,opt,name=storage"` |
|
// schema describes the schema used for validation, pruning, and defaulting of this version of the custom resource. |
|
// +optional |
|
Schema *CustomResourceValidation `json:"schema,omitempty" protobuf:"bytes,4,opt,name=schema"` |
|
} |
|
|
|
// CustomResourceValidation is a list of validation methods for CustomResources. |
|
type CustomResourceValidation struct { |
|
// OpenAPIV3Schema is the OpenAPI v3 schema to be validated against. |
|
OpenAPIV3Schema *JSONSchemaProps `json:"openAPIV3Schema,omitempty" protobuf:"bytes,1,opt,name=openAPIV3Schema"` |
|
} |
|
|
|
// JSONSchemaProps is a JSON-Schema following Specification Draft 4 (http://json-schema.org/). |
|
type JSONSchemaProps struct { |
|
Type string `json:"type,omitempty" protobuf:"bytes,5,opt,name=type"` |
|
XPreserveUnknownFields *bool `json:"x-kubernetes-preserve-unknown-fields,omitempty" protobuf:"bytes,38,opt,name=xKubernetesPreserveUnknownFields"` |
|
}
|
|
|