| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- // Copyright (c) Tailscale Inc & AUTHORS
- // SPDX-License-Identifier: BSD-3-Clause
- // Package kubeapi contains Kubernetes API types for internal consumption.
- // These types are split into a separate package for consumption of
- // non-Kubernetes shared libraries and binaries. Be mindful of not increasing
- // dependency size for those consumers when adding anything new here.
- package kubeapi
- import (
- "time"
- )
- // Note: The API types are copied from k8s.io/api{,machinery} to not introduce a
- // module dependency on the Kubernetes API as it pulls in many more dependencies.
- // TypeMeta describes an individual object in an API response or request with
- // strings representing the type of the object and its API schema version.
- // Structures that are versioned or persisted should inline TypeMeta.
- type TypeMeta struct {
- // Kind is a string value representing the REST resource this object represents.
- // Servers may infer this from the endpoint the client submits requests to.
- // Cannot be updated.
- // In CamelCase.
- // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- // +optional
- Kind string `json:"kind,omitempty"`
- // APIVersion defines the versioned schema of this representation of an object.
- // Servers should convert recognized schemas to the latest internal value, and
- // may reject unrecognized values.
- // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- // +optional
- APIVersion string `json:"apiVersion,omitempty"`
- }
- // ObjectMeta is metadata that all persisted resources must have, which
- // includes all objects users must create.
- type ObjectMeta struct {
- // Name must be unique within a namespace. Is required when creating resources, although
- // some resources may allow a client to request the generation of an appropriate name
- // automatically. Name is primarily intended for creation idempotence and configuration
- // definition.
- // Cannot be updated.
- // More info: http://kubernetes.io/docs/user-guide/identifiers#names
- // +optional
- Name string `json:"name"`
- // Namespace defines the space within which each name must be unique. An empty namespace is
- // equivalent to the "default" namespace, but "default" is the canonical representation.
- // Not all objects are required to be scoped to a namespace - the value of this field for
- // those objects will be empty.
- //
- // Must be a DNS_LABEL.
- // Cannot be updated.
- // More info: http://kubernetes.io/docs/user-guide/namespaces
- // +optional
- Namespace string `json:"namespace"`
- // UID is the unique in time and space value for this object. It is typically generated by
- // the server on successful creation of a resource and is not allowed to change on PUT
- // operations.
- //
- // Populated by the system.
- // Read-only.
- // More info: http://kubernetes.io/docs/user-guide/identifiers#uids
- // +optional
- UID string `json:"uid,omitempty"`
- // An opaque value that represents the internal version of this object that can
- // be used by clients to determine when objects have changed. May be used for optimistic
- // concurrency, change detection, and the watch operation on a resource or set of resources.
- // Clients must treat these values as opaque and passed unmodified back to the server.
- // They may only be valid for a particular resource or set of resources.
- //
- // Populated by the system.
- // Read-only.
- // Value must be treated as opaque by clients and .
- // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
- // +optional
- ResourceVersion string `json:"resourceVersion,omitempty"`
- // A sequence number representing a specific generation of the desired state.
- // Populated by the system. Read-only.
- // +optional
- Generation int64 `json:"generation,omitempty"`
- // CreationTimestamp is a timestamp representing the server time when this object was
- // created. It is not guaranteed to be set in happens-before order across separate operations.
- // Clients may not set this value. It is represented in RFC3339 form and is in UTC.
- //
- // Populated by the system.
- // Read-only.
- // Null for lists.
- // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
- // +optional
- CreationTimestamp time.Time `json:"creationTimestamp,omitempty"`
- // DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This
- // field is set by the server when a graceful deletion is requested by the user, and is not
- // directly settable by a client. The resource is expected to be deleted (no longer visible
- // from resource lists, and not reachable by name) after the time in this field, once the
- // finalizers list is empty. As long as the finalizers list contains items, deletion is blocked.
- // Once the deletionTimestamp is set, this value may not be unset or be set further into the
- // future, although it may be shortened or the resource may be deleted prior to this time.
- // For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react
- // by sending a graceful termination signal to the containers in the pod. After that 30 seconds,
- // the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup,
- // remove the pod from the API. In the presence of network partitions, this object may still
- // exist after this timestamp, until an administrator or automated process can determine the
- // resource is fully terminated.
- // If not set, graceful deletion of the object has not been requested.
- //
- // Populated by the system when a graceful deletion is requested.
- // Read-only.
- // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
- // +optional
- DeletionTimestamp *time.Time `json:"deletionTimestamp,omitempty"`
- // Number of seconds allowed for this object to gracefully terminate before
- // it will be removed from the system. Only set when deletionTimestamp is also set.
- // May only be shortened.
- // Read-only.
- // +optional
- DeletionGracePeriodSeconds *int64 `json:"deletionGracePeriodSeconds,omitempty"`
- // Map of string keys and values that can be used to organize and categorize
- // (scope and select) objects. May match selectors of replication controllers
- // and services.
- // More info: http://kubernetes.io/docs/user-guide/labels
- // +optional
- Labels map[string]string `json:"labels,omitempty"`
- // Annotations is an unstructured key value map stored with a resource that may be
- // set by external tools to store and retrieve arbitrary metadata. They are not
- // queryable and should be preserved when modifying objects.
- // More info: http://kubernetes.io/docs/user-guide/annotations
- // +optional
- Annotations map[string]string `json:"annotations,omitempty"`
- }
- // Secret holds secret data of a certain type. The total bytes of the values
- // in the Data field must be less than MaxSecretSize bytes.
- type Secret struct {
- TypeMeta `json:",inline"`
- ObjectMeta `json:"metadata"`
- // Data contains the secret data. Each key must consist of alphanumeric
- // characters, '-', '_' or '.'. The serialized form of the secret data is a
- // base64 encoded string, representing the arbitrary (possibly non-string)
- // data value here. Described in https://tools.ietf.org/html/rfc4648#section-4
- // +optional
- Data map[string][]byte `json:"data,omitempty"`
- }
- // SecretList is a list of Secret objects.
- type SecretList struct {
- TypeMeta `json:",inline"`
- ObjectMeta `json:"metadata"`
- Items []Secret `json:"items,omitempty"`
- }
- // Event contains a subset of fields from corev1.Event.
- // https://github.com/kubernetes/api/blob/6cc44b8953ae704d6d9ec2adf32e7ae19199ea9f/core/v1/types.go#L7034
- // It is copied here to avoid having to import kube libraries.
- type Event struct {
- TypeMeta `json:",inline"`
- ObjectMeta `json:"metadata"`
- Message string `json:"message,omitempty"`
- Reason string `json:"reason,omitempty"`
- Source EventSource `json:"source,omitempty"` // who is emitting this Event
- Type string `json:"type,omitempty"` // Normal or Warning
- // InvolvedObject is the subject of the Event. `kubectl describe` will, for most object types, display any
- // currently present cluster Events matching the object (but you probably want to set UID for this to work).
- InvolvedObject ObjectReference `json:"involvedObject"`
- Count int32 `json:"count,omitempty"` // how many times Event was observed
- FirstTimestamp time.Time `json:"firstTimestamp,omitempty"`
- LastTimestamp time.Time `json:"lastTimestamp,omitempty"`
- }
- // EventSource includes a subset of fields from corev1.EventSource.
- // https://github.com/kubernetes/api/blob/6cc44b8953ae704d6d9ec2adf32e7ae19199ea9f/core/v1/types.go#L7007
- // It is copied here to avoid having to import kube libraries.
- type EventSource struct {
- // Component is the name of the component that is emitting the Event.
- Component string `json:"component,omitempty"`
- }
- // ObjectReference contains a subset of fields from corev1.ObjectReference.
- // https://github.com/kubernetes/api/blob/6cc44b8953ae704d6d9ec2adf32e7ae19199ea9f/core/v1/types.go#L6902
- // It is copied here to avoid having to import kube libraries.
- type ObjectReference struct {
- // Kind of the referent.
- // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- // +optional
- Kind string `json:"kind,omitempty"`
- // Namespace of the referent.
- // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
- // +optional
- Namespace string `json:"namespace,omitempty"`
- // Name of the referent.
- // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
- // +optional
- Name string `json:"name,omitempty"`
- // UID of the referent.
- // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
- // +optional
- UID string `json:"uid,omitempty"`
- // API version of the referent.
- // +optional
- APIVersion string `json:"apiVersion,omitempty"`
- }
- // Status is a return value for calls that don't return other objects.
- type Status struct {
- TypeMeta `json:",inline"`
- // Status of the operation.
- // One of: "Success" or "Failure".
- // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
- // +optional
- Status string `json:"status,omitempty"`
- // A human-readable description of the status of this operation.
- // +optional
- Message string `json:"message,omitempty"`
- // A machine-readable description of why this operation is in the
- // "Failure" status. If this value is empty there
- // is no information available. A Reason clarifies an HTTP status
- // code but does not override it.
- // +optional
- Reason string `json:"reason,omitempty"`
- // Extended data associated with the reason. Each reason may define its
- // own extended details. This field is optional and the data returned
- // is not guaranteed to conform to any schema except that defined by
- // the reason type.
- // +optional
- Details *struct {
- Name string `json:"name,omitempty"`
- Kind string `json:"kind,omitempty"`
- } `json:"details,omitempty"`
- // Suggested HTTP return code for this status, 0 if not set.
- // +optional
- Code int `json:"code,omitempty"`
- }
- func (s Status) Error() string {
- return s.Message
- }
|