// Code generated by cue get go. DO NOT EDIT.

//cue:generate cue get go k8s.io/api/core/v1

package v1

import (
	"k8s.io/apimachinery/pkg/api/resource"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/apimachinery/pkg/types"
	"k8s.io/apimachinery/pkg/util/intstr"
)

// NamespaceDefault means the object is in the default namespace which is applied when not specified by clients
NamespaceDefault :: "default"

// NamespaceAll is the default argument to specify on a context when you want to list or filter resources across all namespaces
NamespaceAll :: ""

// NamespaceNodeLease is the namespace where we place node lease objects (used for node heartbeats)
NamespaceNodeLease :: "kube-node-lease"

// Volume represents a named volume in a pod that may be accessed by any container in the pod.
Volume :: {
	// Volume's name.
	// Must be a DNS_LABEL and unique within the pod.
	// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
	name: string @go(Name) @protobuf(1,bytes,opt)

	VolumeSource

}

// Represents the source of a volume to mount.
// Only one of its members may be specified.
VolumeSource :: {
	// HostPath represents a pre-existing file or directory on the host
	// machine that is directly exposed to the container. This is generally
	// used for system agents or other privileged things that are allowed
	// to see the host machine. Most containers will NOT need this.
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
	// ---
	// TODO(jonesdl) We need to restrict who can use host directory mounts and who can/can not
	// mount host directories as read/write.
	// +optional
	hostPath?: null | HostPathVolumeSource @go(HostPath,*HostPathVolumeSource) @protobuf(1,bytes,opt)

	// EmptyDir represents a temporary directory that shares a pod's lifetime.
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir
	// +optional
	emptyDir?: null | EmptyDirVolumeSource @go(EmptyDir,*EmptyDirVolumeSource) @protobuf(2,bytes,opt)

	// GCEPersistentDisk represents a GCE Disk resource that is attached to a
	// kubelet's host machine and then exposed to the pod.
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
	// +optional
	gcePersistentDisk?: null | GCEPersistentDiskVolumeSource @go(GCEPersistentDisk,*GCEPersistentDiskVolumeSource) @protobuf(3,bytes,opt)

	// AWSElasticBlockStore represents an AWS Disk resource that is attached to a
	// kubelet's host machine and then exposed to the pod.
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
	// +optional
	awsElasticBlockStore?: null | AWSElasticBlockStoreVolumeSource @go(AWSElasticBlockStore,*AWSElasticBlockStoreVolumeSource) @protobuf(4,bytes,opt)

	// GitRepo represents a git repository at a particular revision.
	// DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an
	// EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir
	// into the Pod's container.
	// +optional
	gitRepo?: null | GitRepoVolumeSource @go(GitRepo,*GitRepoVolumeSource) @protobuf(5,bytes,opt)

	// Secret represents a secret that should populate this volume.
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
	// +optional
	secret?: null | SecretVolumeSource @go(Secret,*SecretVolumeSource) @protobuf(6,bytes,opt)

	// NFS represents an NFS mount on the host that shares a pod's lifetime
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
	// +optional
	nfs?: null | NFSVolumeSource @go(NFS,*NFSVolumeSource) @protobuf(7,bytes,opt)

	// ISCSI represents an ISCSI Disk resource that is attached to a
	// kubelet's host machine and then exposed to the pod.
	// More info: https://examples.k8s.io/volumes/iscsi/README.md
	// +optional
	iscsi?: null | ISCSIVolumeSource @go(ISCSI,*ISCSIVolumeSource) @protobuf(8,bytes,opt)

	// Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime.
	// More info: https://examples.k8s.io/volumes/glusterfs/README.md
	// +optional
	glusterfs?: null | GlusterfsVolumeSource @go(Glusterfs,*GlusterfsVolumeSource) @protobuf(9,bytes,opt)

	// PersistentVolumeClaimVolumeSource represents a reference to a
	// PersistentVolumeClaim in the same namespace.
	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
	// +optional
	persistentVolumeClaim?: null | PersistentVolumeClaimVolumeSource @go(PersistentVolumeClaim,*PersistentVolumeClaimVolumeSource) @protobuf(10,bytes,opt)

	// RBD represents a Rados Block Device mount on the host that shares a pod's lifetime.
	// More info: https://examples.k8s.io/volumes/rbd/README.md
	// +optional
	rbd?: null | RBDVolumeSource @go(RBD,*RBDVolumeSource) @protobuf(11,bytes,opt)

	// FlexVolume represents a generic volume resource that is
	// provisioned/attached using an exec based plugin.
	// +optional
	flexVolume?: null | FlexVolumeSource @go(FlexVolume,*FlexVolumeSource) @protobuf(12,bytes,opt)

	// Cinder represents a cinder volume attached and mounted on kubelets host machine.
	// More info: https://examples.k8s.io/mysql-cinder-pd/README.md
	// +optional
	cinder?: null | CinderVolumeSource @go(Cinder,*CinderVolumeSource) @protobuf(13,bytes,opt)

	// CephFS represents a Ceph FS mount on the host that shares a pod's lifetime
	// +optional
	cephfs?: null | CephFSVolumeSource @go(CephFS,*CephFSVolumeSource) @protobuf(14,bytes,opt)

	// Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running
	// +optional
	flocker?: null | FlockerVolumeSource @go(Flocker,*FlockerVolumeSource) @protobuf(15,bytes,opt)

	// DownwardAPI represents downward API about the pod that should populate this volume
	// +optional
	downwardAPI?: null | DownwardAPIVolumeSource @go(DownwardAPI,*DownwardAPIVolumeSource) @protobuf(16,bytes,opt)

	// FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.
	// +optional
	fc?: null | FCVolumeSource @go(FC,*FCVolumeSource) @protobuf(17,bytes,opt)

	// AzureFile represents an Azure File Service mount on the host and bind mount to the pod.
	// +optional
	azureFile?: null | AzureFileVolumeSource @go(AzureFile,*AzureFileVolumeSource) @protobuf(18,bytes,opt)

	// ConfigMap represents a configMap that should populate this volume
	// +optional
	configMap?: null | ConfigMapVolumeSource @go(ConfigMap,*ConfigMapVolumeSource) @protobuf(19,bytes,opt)

	// VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine
	// +optional
	vsphereVolume?: null | VsphereVirtualDiskVolumeSource @go(VsphereVolume,*VsphereVirtualDiskVolumeSource) @protobuf(20,bytes,opt)

	// Quobyte represents a Quobyte mount on the host that shares a pod's lifetime
	// +optional
	quobyte?: null | QuobyteVolumeSource @go(Quobyte,*QuobyteVolumeSource) @protobuf(21,bytes,opt)

	// AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.
	// +optional
	azureDisk?: null | AzureDiskVolumeSource @go(AzureDisk,*AzureDiskVolumeSource) @protobuf(22,bytes,opt)

	// PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine
	photonPersistentDisk?: null | PhotonPersistentDiskVolumeSource @go(PhotonPersistentDisk,*PhotonPersistentDiskVolumeSource) @protobuf(23,bytes,opt)

	// Items for all in one resources secrets, configmaps, and downward API
	projected?: null | ProjectedVolumeSource @go(Projected,*ProjectedVolumeSource) @protobuf(26,bytes,opt)

	// PortworxVolume represents a portworx volume attached and mounted on kubelets host machine
	// +optional
	portworxVolume?: null | PortworxVolumeSource @go(PortworxVolume,*PortworxVolumeSource) @protobuf(24,bytes,opt)

	// ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.
	// +optional
	scaleIO?: null | ScaleIOVolumeSource @go(ScaleIO,*ScaleIOVolumeSource) @protobuf(25,bytes,opt)

	// StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes.
	// +optional
	storageos?: null | StorageOSVolumeSource @go(StorageOS,*StorageOSVolumeSource) @protobuf(27,bytes,opt)

	// CSI (Container Storage Interface) represents storage that is handled by an external CSI driver (Alpha feature).
	// +optional
	csi?: null | CSIVolumeSource @go(CSI,*CSIVolumeSource) @protobuf(28,bytes,opt)
}

// PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace.
// This volume finds the bound PV and mounts that volume for the pod. A
// PersistentVolumeClaimVolumeSource is, essentially, a wrapper around another
// type of volume that is owned by someone else (the system).
PersistentVolumeClaimVolumeSource :: {
	// ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume.
	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
	claimName: string @go(ClaimName) @protobuf(1,bytes,opt)

	// Will force the ReadOnly setting in VolumeMounts.
	// Default false.
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(2,varint,opt)
}

// PersistentVolumeSource is similar to VolumeSource but meant for the
// administrator who creates PVs. Exactly one of its members must be set.
PersistentVolumeSource :: {
	// GCEPersistentDisk represents a GCE Disk resource that is attached to a
	// kubelet's host machine and then exposed to the pod. Provisioned by an admin.
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
	// +optional
	gcePersistentDisk?: null | GCEPersistentDiskVolumeSource @go(GCEPersistentDisk,*GCEPersistentDiskVolumeSource) @protobuf(1,bytes,opt)

	// AWSElasticBlockStore represents an AWS Disk resource that is attached to a
	// kubelet's host machine and then exposed to the pod.
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
	// +optional
	awsElasticBlockStore?: null | AWSElasticBlockStoreVolumeSource @go(AWSElasticBlockStore,*AWSElasticBlockStoreVolumeSource) @protobuf(2,bytes,opt)

	// HostPath represents a directory on the host.
	// Provisioned by a developer or tester.
	// This is useful for single-node development and testing only!
	// On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster.
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
	// +optional
	hostPath?: null | HostPathVolumeSource @go(HostPath,*HostPathVolumeSource) @protobuf(3,bytes,opt)

	// Glusterfs represents a Glusterfs volume that is attached to a host and
	// exposed to the pod. Provisioned by an admin.
	// More info: https://examples.k8s.io/volumes/glusterfs/README.md
	// +optional
	glusterfs?: null | GlusterfsPersistentVolumeSource @go(Glusterfs,*GlusterfsPersistentVolumeSource) @protobuf(4,bytes,opt)

	// NFS represents an NFS mount on the host. Provisioned by an admin.
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
	// +optional
	nfs?: null | NFSVolumeSource @go(NFS,*NFSVolumeSource) @protobuf(5,bytes,opt)

	// RBD represents a Rados Block Device mount on the host that shares a pod's lifetime.
	// More info: https://examples.k8s.io/volumes/rbd/README.md
	// +optional
	rbd?: null | RBDPersistentVolumeSource @go(RBD,*RBDPersistentVolumeSource) @protobuf(6,bytes,opt)

	// ISCSI represents an ISCSI Disk resource that is attached to a
	// kubelet's host machine and then exposed to the pod. Provisioned by an admin.
	// +optional
	iscsi?: null | ISCSIPersistentVolumeSource @go(ISCSI,*ISCSIPersistentVolumeSource) @protobuf(7,bytes,opt)

	// Cinder represents a cinder volume attached and mounted on kubelets host machine.
	// More info: https://examples.k8s.io/mysql-cinder-pd/README.md
	// +optional
	cinder?: null | CinderPersistentVolumeSource @go(Cinder,*CinderPersistentVolumeSource) @protobuf(8,bytes,opt)

	// CephFS represents a Ceph FS mount on the host that shares a pod's lifetime
	// +optional
	cephfs?: null | CephFSPersistentVolumeSource @go(CephFS,*CephFSPersistentVolumeSource) @protobuf(9,bytes,opt)

	// FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.
	// +optional
	fc?: null | FCVolumeSource @go(FC,*FCVolumeSource) @protobuf(10,bytes,opt)

	// Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running
	// +optional
	flocker?: null | FlockerVolumeSource @go(Flocker,*FlockerVolumeSource) @protobuf(11,bytes,opt)

	// FlexVolume represents a generic volume resource that is
	// provisioned/attached using an exec based plugin.
	// +optional
	flexVolume?: null | FlexPersistentVolumeSource @go(FlexVolume,*FlexPersistentVolumeSource) @protobuf(12,bytes,opt)

	// AzureFile represents an Azure File Service mount on the host and bind mount to the pod.
	// +optional
	azureFile?: null | AzureFilePersistentVolumeSource @go(AzureFile,*AzureFilePersistentVolumeSource) @protobuf(13,bytes,opt)

	// VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine
	// +optional
	vsphereVolume?: null | VsphereVirtualDiskVolumeSource @go(VsphereVolume,*VsphereVirtualDiskVolumeSource) @protobuf(14,bytes,opt)

	// Quobyte represents a Quobyte mount on the host that shares a pod's lifetime
	// +optional
	quobyte?: null | QuobyteVolumeSource @go(Quobyte,*QuobyteVolumeSource) @protobuf(15,bytes,opt)

	// AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.
	// +optional
	azureDisk?: null | AzureDiskVolumeSource @go(AzureDisk,*AzureDiskVolumeSource) @protobuf(16,bytes,opt)

	// PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine
	photonPersistentDisk?: null | PhotonPersistentDiskVolumeSource @go(PhotonPersistentDisk,*PhotonPersistentDiskVolumeSource) @protobuf(17,bytes,opt)

	// PortworxVolume represents a portworx volume attached and mounted on kubelets host machine
	// +optional
	portworxVolume?: null | PortworxVolumeSource @go(PortworxVolume,*PortworxVolumeSource) @protobuf(18,bytes,opt)

	// ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.
	// +optional
	scaleIO?: null | ScaleIOPersistentVolumeSource @go(ScaleIO,*ScaleIOPersistentVolumeSource) @protobuf(19,bytes,opt)

	// Local represents directly-attached storage with node affinity
	// +optional
	local?: null | LocalVolumeSource @go(Local,*LocalVolumeSource) @protobuf(20,bytes,opt)

	// StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod
	// More info: https://examples.k8s.io/volumes/storageos/README.md
	// +optional
	storageos?: null | StorageOSPersistentVolumeSource @go(StorageOS,*StorageOSPersistentVolumeSource) @protobuf(21,bytes,opt)

	// CSI represents storage that is handled by an external CSI driver (Beta feature).
	// +optional
	csi?: null | CSIPersistentVolumeSource @go(CSI,*CSIPersistentVolumeSource) @protobuf(22,bytes,opt)
}

// BetaStorageClassAnnotation represents the beta/previous StorageClass annotation.
// It's currently still used and will be held for backwards compatibility
BetaStorageClassAnnotation :: "volume.beta.kubernetes.io/storage-class"

// MountOptionAnnotation defines mount option annotation used in PVs
MountOptionAnnotation :: "volume.beta.kubernetes.io/mount-options"

// PersistentVolume (PV) is a storage resource provisioned by an administrator.
// It is analogous to a node.
// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes
PersistentVolume :: {
	metav1.TypeMeta

	// Standard object's metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
	// +optional
	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)

	// Spec defines a specification of a persistent volume owned by the cluster.
	// Provisioned by an administrator.
	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes
	// +optional
	spec?: PersistentVolumeSpec @go(Spec) @protobuf(2,bytes,opt)

	// Status represents the current information/status for the persistent volume.
	// Populated by the system.
	// Read-only.
	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes
	// +optional
	status?: PersistentVolumeStatus @go(Status) @protobuf(3,bytes,opt)
}

// PersistentVolumeSpec is the specification of a persistent volume.
PersistentVolumeSpec :: {
	// A description of the persistent volume's resources and capacity.
	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity
	// +optional
	capacity?: ResourceList @go(Capacity) @protobuf(1,bytes,rep,casttype=ResourceList,castkey=ResourceName)

	PersistentVolumeSource

	// AccessModes contains all ways the volume can be mounted.
	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes
	// +optional
	accessModes?: [...PersistentVolumeAccessMode] @go(AccessModes,[]PersistentVolumeAccessMode) @protobuf(3,bytes,rep,casttype=PersistentVolumeAccessMode)

	// ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim.
	// Expected to be non-nil when bound.
	// claim.VolumeName is the authoritative bind between PV and PVC.
	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#binding
	// +optional
	claimRef?: null | ObjectReference @go(ClaimRef,*ObjectReference) @protobuf(4,bytes,opt)

	// What happens to a persistent volume when released from its claim.
	// Valid options are Retain (default for manually created PersistentVolumes), Delete (default
	// for dynamically provisioned PersistentVolumes), and Recycle (deprecated).
	// Recycle must be supported by the volume plugin underlying this PersistentVolume.
	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming
	// +optional
	persistentVolumeReclaimPolicy?: PersistentVolumeReclaimPolicy @go(PersistentVolumeReclaimPolicy) @protobuf(5,bytes,opt,casttype=PersistentVolumeReclaimPolicy)

	// Name of StorageClass to which this persistent volume belongs. Empty value
	// means that this volume does not belong to any StorageClass.
	// +optional
	storageClassName?: string @go(StorageClassName) @protobuf(6,bytes,opt)

	// A list of mount options, e.g. ["ro", "soft"]. Not validated - mount will
	// simply fail if one is invalid.
	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options
	// +optional
	mountOptions?: [...string] @go(MountOptions,[]string) @protobuf(7,bytes,opt)

	// volumeMode defines if a volume is intended to be used with a formatted filesystem
	// or to remain in raw block state. Value of Filesystem is implied when not included in spec.
	// This is a beta feature.
	// +optional
	volumeMode?: null | PersistentVolumeMode @go(VolumeMode,*PersistentVolumeMode) @protobuf(8,bytes,opt,casttype=PersistentVolumeMode)

	// NodeAffinity defines constraints that limit what nodes this volume can be accessed from.
	// This field influences the scheduling of pods that use this volume.
	// +optional
	nodeAffinity?: null | VolumeNodeAffinity @go(NodeAffinity,*VolumeNodeAffinity) @protobuf(9,bytes,opt)
}

// VolumeNodeAffinity defines constraints that limit what nodes this volume can be accessed from.
VolumeNodeAffinity :: {
	// Required specifies hard node constraints that must be met.
	required?: null | NodeSelector @go(Required,*NodeSelector) @protobuf(1,bytes,opt)
}

// PersistentVolumeReclaimPolicy describes a policy for end-of-life maintenance of persistent volumes.
PersistentVolumeReclaimPolicy :: string // enumPersistentVolumeReclaimPolicy

enumPersistentVolumeReclaimPolicy ::
	PersistentVolumeReclaimRecycle |
	PersistentVolumeReclaimDelete |
	PersistentVolumeReclaimRetain

// PersistentVolumeReclaimRecycle means the volume will be recycled back into the pool of unbound persistent volumes on release from its claim.
// The volume plugin must support Recycling.
PersistentVolumeReclaimRecycle :: PersistentVolumeReclaimPolicy & "Recycle"

// PersistentVolumeReclaimDelete means the volume will be deleted from Kubernetes on release from its claim.
// The volume plugin must support Deletion.
PersistentVolumeReclaimDelete :: PersistentVolumeReclaimPolicy & "Delete"

// PersistentVolumeReclaimRetain means the volume will be left in its current phase (Released) for manual reclamation by the administrator.
// The default policy is Retain.
PersistentVolumeReclaimRetain :: PersistentVolumeReclaimPolicy & "Retain"

// PersistentVolumeMode describes how a volume is intended to be consumed, either Block or Filesystem.
PersistentVolumeMode :: string // enumPersistentVolumeMode

enumPersistentVolumeMode ::
	PersistentVolumeBlock |
	PersistentVolumeFilesystem

// PersistentVolumeBlock means the volume will not be formatted with a filesystem and will remain a raw block device.
PersistentVolumeBlock :: PersistentVolumeMode & "Block"

// PersistentVolumeFilesystem means the volume will be or is formatted with a filesystem.
PersistentVolumeFilesystem :: PersistentVolumeMode & "Filesystem"

// PersistentVolumeStatus is the current status of a persistent volume.
PersistentVolumeStatus :: {
	// Phase indicates if a volume is available, bound to a claim, or released by a claim.
	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#phase
	// +optional
	phase?: PersistentVolumePhase @go(Phase) @protobuf(1,bytes,opt,casttype=PersistentVolumePhase)

	// A human-readable message indicating details about why the volume is in this state.
	// +optional
	message?: string @go(Message) @protobuf(2,bytes,opt)

	// Reason is a brief CamelCase string that describes any failure and is meant
	// for machine parsing and tidy display in the CLI.
	// +optional
	reason?: string @go(Reason) @protobuf(3,bytes,opt)
}

// PersistentVolumeList is a list of PersistentVolume items.
PersistentVolumeList :: {
	metav1.TypeMeta

	// Standard list metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
	// +optional
	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)

	// List of persistent volumes.
	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes
	items: [...PersistentVolume] @go(Items,[]PersistentVolume) @protobuf(2,bytes,rep)
}

// PersistentVolumeClaim is a user's request for and claim to a persistent volume
PersistentVolumeClaim :: {
	metav1.TypeMeta

	// Standard object's metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
	// +optional
	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)

	// Spec defines the desired characteristics of a volume requested by a pod author.
	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
	// +optional
	spec?: PersistentVolumeClaimSpec @go(Spec) @protobuf(2,bytes,opt)

	// Status represents the current information/status of a persistent volume claim.
	// Read-only.
	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
	// +optional
	status?: PersistentVolumeClaimStatus @go(Status) @protobuf(3,bytes,opt)
}

// PersistentVolumeClaimList is a list of PersistentVolumeClaim items.
PersistentVolumeClaimList :: {
	metav1.TypeMeta

	// Standard list metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
	// +optional
	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)

	// A list of persistent volume claims.
	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
	items: [...PersistentVolumeClaim] @go(Items,[]PersistentVolumeClaim) @protobuf(2,bytes,rep)
}

// PersistentVolumeClaimSpec describes the common attributes of storage devices
// and allows a Source for provider-specific attributes
PersistentVolumeClaimSpec :: {
	// AccessModes contains the desired access modes the volume should have.
	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
	// +optional
	accessModes?: [...PersistentVolumeAccessMode] @go(AccessModes,[]PersistentVolumeAccessMode) @protobuf(1,bytes,rep,casttype=PersistentVolumeAccessMode)

	// A label query over volumes to consider for binding.
	// +optional
	selector?: null | metav1.LabelSelector @go(Selector,*metav1.LabelSelector) @protobuf(4,bytes,opt)

	// Resources represents the minimum resources the volume should have.
	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
	// +optional
	resources?: ResourceRequirements @go(Resources) @protobuf(2,bytes,opt)

	// VolumeName is the binding reference to the PersistentVolume backing this claim.
	// +optional
	volumeName?: string @go(VolumeName) @protobuf(3,bytes,opt)

	// Name of the StorageClass required by the claim.
	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
	// +optional
	storageClassName?: null | string @go(StorageClassName,*string) @protobuf(5,bytes,opt)

	// volumeMode defines what type of volume is required by the claim.
	// Value of Filesystem is implied when not included in claim spec.
	// This is a beta feature.
	// +optional
	volumeMode?: null | PersistentVolumeMode @go(VolumeMode,*PersistentVolumeMode) @protobuf(6,bytes,opt,casttype=PersistentVolumeMode)

	// This field requires the VolumeSnapshotDataSource alpha feature gate to be
	// enabled and currently VolumeSnapshot is the only supported data source.
	// If the provisioner can support VolumeSnapshot data source, it will create
	// a new volume and data will be restored to the volume at the same time.
	// If the provisioner does not support VolumeSnapshot data source, volume will
	// not be created and the failure will be reported as an event.
	// In the future, we plan to support more data source types and the behavior
	// of the provisioner may change.
	// +optional
	dataSource?: null | TypedLocalObjectReference @go(DataSource,*TypedLocalObjectReference) @protobuf(7,bytes,opt)
}

// PersistentVolumeClaimConditionType is a valid value of PersistentVolumeClaimCondition.Type
PersistentVolumeClaimConditionType :: string // enumPersistentVolumeClaimConditionType

enumPersistentVolumeClaimConditionType ::
	PersistentVolumeClaimResizing |
	PersistentVolumeClaimFileSystemResizePending

// PersistentVolumeClaimResizing - a user trigger resize of pvc has been started
PersistentVolumeClaimResizing :: PersistentVolumeClaimConditionType & "Resizing"

// PersistentVolumeClaimFileSystemResizePending - controller resize is finished and a file system resize is pending on node
PersistentVolumeClaimFileSystemResizePending :: PersistentVolumeClaimConditionType & "FileSystemResizePending"

// PersistentVolumeClaimCondition contails details about state of pvc
PersistentVolumeClaimCondition :: {
	type:   PersistentVolumeClaimConditionType @go(Type) @protobuf(1,bytes,opt,casttype=PersistentVolumeClaimConditionType)
	status: ConditionStatus                    @go(Status) @protobuf(2,bytes,opt,casttype=ConditionStatus)

	// Last time we probed the condition.
	// +optional
	lastProbeTime?: metav1.Time @go(LastProbeTime) @protobuf(3,bytes,opt)

	// Last time the condition transitioned from one status to another.
	// +optional
	lastTransitionTime?: metav1.Time @go(LastTransitionTime) @protobuf(4,bytes,opt)

	// Unique, this should be a short, machine understandable string that gives the reason
	// for condition's last transition. If it reports "ResizeStarted" that means the underlying
	// persistent volume is being resized.
	// +optional
	reason?: string @go(Reason) @protobuf(5,bytes,opt)

	// Human-readable message indicating details about last transition.
	// +optional
	message?: string @go(Message) @protobuf(6,bytes,opt)
}

// PersistentVolumeClaimStatus is the current status of a persistent volume claim.
PersistentVolumeClaimStatus :: {
	// Phase represents the current phase of PersistentVolumeClaim.
	// +optional
	phase?: PersistentVolumeClaimPhase @go(Phase) @protobuf(1,bytes,opt,casttype=PersistentVolumeClaimPhase)

	// AccessModes contains the actual access modes the volume backing the PVC has.
	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
	// +optional
	accessModes?: [...PersistentVolumeAccessMode] @go(AccessModes,[]PersistentVolumeAccessMode) @protobuf(2,bytes,rep,casttype=PersistentVolumeAccessMode)

	// Represents the actual resources of the underlying volume.
	// +optional
	capacity?: ResourceList @go(Capacity) @protobuf(3,bytes,rep,casttype=ResourceList,castkey=ResourceName)

	// Current Condition of persistent volume claim. If underlying persistent volume is being
	// resized then the Condition will be set to 'ResizeStarted'.
	// +optional
	// +patchMergeKey=type
	// +patchStrategy=merge
	conditions?: [...PersistentVolumeClaimCondition] @go(Conditions,[]PersistentVolumeClaimCondition) @protobuf(4,bytes,rep)
}

PersistentVolumeAccessMode :: string // enumPersistentVolumeAccessMode

enumPersistentVolumeAccessMode ::
	ReadWriteOnce |
	ReadOnlyMany |
	ReadWriteMany

// can be mounted in read/write mode to exactly 1 host
ReadWriteOnce :: PersistentVolumeAccessMode & "ReadWriteOnce"

// can be mounted in read-only mode to many hosts
ReadOnlyMany :: PersistentVolumeAccessMode & "ReadOnlyMany"

// can be mounted in read/write mode to many hosts
ReadWriteMany :: PersistentVolumeAccessMode & "ReadWriteMany"

PersistentVolumePhase :: string // enumPersistentVolumePhase

enumPersistentVolumePhase ::
	VolumePending |
	VolumeAvailable |
	VolumeBound |
	VolumeReleased |
	VolumeFailed

// used for PersistentVolumes that are not available
VolumePending :: PersistentVolumePhase & "Pending"

// used for PersistentVolumes that are not yet bound
// Available volumes are held by the binder and matched to PersistentVolumeClaims
VolumeAvailable :: PersistentVolumePhase & "Available"

// used for PersistentVolumes that are bound
VolumeBound :: PersistentVolumePhase & "Bound"

// used for PersistentVolumes where the bound PersistentVolumeClaim was deleted
// released volumes must be recycled before becoming available again
// this phase is used by the persistent volume claim binder to signal to another process to reclaim the resource
VolumeReleased :: PersistentVolumePhase & "Released"

// used for PersistentVolumes that failed to be correctly recycled or deleted after being released from a claim
VolumeFailed :: PersistentVolumePhase & "Failed"

PersistentVolumeClaimPhase :: string // enumPersistentVolumeClaimPhase

enumPersistentVolumeClaimPhase ::
	ClaimPending |
	ClaimBound |
	ClaimLost

// used for PersistentVolumeClaims that are not yet bound
ClaimPending :: PersistentVolumeClaimPhase & "Pending"

// used for PersistentVolumeClaims that are bound
ClaimBound :: PersistentVolumeClaimPhase & "Bound"

// used for PersistentVolumeClaims that lost their underlying
// PersistentVolume. The claim was bound to a PersistentVolume and this
// volume does not exist any longer and all data on it was lost.
ClaimLost :: PersistentVolumeClaimPhase & "Lost"

HostPathType :: string // enumHostPathType

enumHostPathType ::
	HostPathUnset |
	HostPathDirectoryOrCreate |
	HostPathDirectory |
	HostPathFileOrCreate |
	HostPathFile |
	HostPathSocket |
	HostPathCharDev |
	HostPathBlockDev

// For backwards compatible, leave it empty if unset
HostPathUnset :: HostPathType & ""

// If nothing exists at the given path, an empty directory will be created there
// as needed with file mode 0755, having the same group and ownership with Kubelet.
HostPathDirectoryOrCreate :: HostPathType & "DirectoryOrCreate"

// A directory must exist at the given path
HostPathDirectory :: HostPathType & "Directory"

// If nothing exists at the given path, an empty file will be created there
// as needed with file mode 0644, having the same group and ownership with Kubelet.
HostPathFileOrCreate :: HostPathType & "FileOrCreate"

// A file must exist at the given path
HostPathFile :: HostPathType & "File"

// A UNIX socket must exist at the given path
HostPathSocket :: HostPathType & "Socket"

// A character device must exist at the given path
HostPathCharDev :: HostPathType & "CharDevice"

// A block device must exist at the given path
HostPathBlockDev :: HostPathType & "BlockDevice"

// Represents a host path mapped into a pod.
// Host path volumes do not support ownership management or SELinux relabeling.
HostPathVolumeSource :: {
	// Path of the directory on the host.
	// If the path is a symlink, it will follow the link to the real path.
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
	path: string @go(Path) @protobuf(1,bytes,opt)

	// Type for HostPath Volume
	// Defaults to ""
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
	// +optional
	type?: null | HostPathType @go(Type,*HostPathType) @protobuf(2,bytes,opt)
}

// Represents an empty directory for a pod.
// Empty directory volumes support ownership management and SELinux relabeling.
EmptyDirVolumeSource :: {
	// What type of storage medium should back this directory.
	// The default is "" which means to use the node's default medium.
	// Must be an empty string (default) or Memory.
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir
	// +optional
	medium?: StorageMedium @go(Medium) @protobuf(1,bytes,opt,casttype=StorageMedium)

	// Total amount of local storage required for this EmptyDir volume.
	// The size limit is also applicable for memory medium.
	// The maximum usage on memory medium EmptyDir would be the minimum value between
	// the SizeLimit specified here and the sum of memory limits of all containers in a pod.
	// The default is nil which means that the limit is undefined.
	// More info: http://kubernetes.io/docs/user-guide/volumes#emptydir
	// +optional
	sizeLimit?: null | resource.Quantity @go(SizeLimit,*resource.Quantity) @protobuf(2,bytes,opt)
}

// Represents a Glusterfs mount that lasts the lifetime of a pod.
// Glusterfs volumes do not support ownership management or SELinux relabeling.
GlusterfsVolumeSource :: {
	// EndpointsName is the endpoint name that details Glusterfs topology.
	// More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
	endpoints: string @go(EndpointsName) @protobuf(1,bytes,opt)

	// Path is the Glusterfs volume path.
	// More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
	path: string @go(Path) @protobuf(2,bytes,opt)

	// ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions.
	// Defaults to false.
	// More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(3,varint,opt)
}

// Represents a Glusterfs mount that lasts the lifetime of a pod.
// Glusterfs volumes do not support ownership management or SELinux relabeling.
GlusterfsPersistentVolumeSource :: {
	// EndpointsName is the endpoint name that details Glusterfs topology.
	// More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
	endpoints: string @go(EndpointsName) @protobuf(1,bytes,opt)

	// Path is the Glusterfs volume path.
	// More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
	path: string @go(Path) @protobuf(2,bytes,opt)

	// ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions.
	// Defaults to false.
	// More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(3,varint,opt)

	// EndpointsNamespace is the namespace that contains Glusterfs endpoint.
	// If this field is empty, the EndpointNamespace defaults to the same namespace as the bound PVC.
	// More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
	// +optional
	endpointsNamespace?: null | string @go(EndpointsNamespace,*string) @protobuf(4,bytes,opt)
}

// Represents a Rados Block Device mount that lasts the lifetime of a pod.
// RBD volumes support ownership management and SELinux relabeling.
RBDVolumeSource :: {
	// A collection of Ceph monitors.
	// More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
	monitors: [...string] @go(CephMonitors,[]string) @protobuf(1,bytes,rep)

	// The rados image name.
	// More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
	image: string @go(RBDImage) @protobuf(2,bytes,opt)

	// Filesystem type of the volume that you want to mount.
	// Tip: Ensure that the filesystem type is supported by the host operating system.
	// Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd
	// TODO: how do we prevent errors in the filesystem from compromising the machine
	// +optional
	fsType?: string @go(FSType) @protobuf(3,bytes,opt)

	// The rados pool name.
	// Default is rbd.
	// More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
	// +optional
	pool?: string @go(RBDPool) @protobuf(4,bytes,opt)

	// The rados user name.
	// Default is admin.
	// More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
	// +optional
	user?: string @go(RadosUser) @protobuf(5,bytes,opt)

	// Keyring is the path to key ring for RBDUser.
	// Default is /etc/ceph/keyring.
	// More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
	// +optional
	keyring?: string @go(Keyring) @protobuf(6,bytes,opt)

	// SecretRef is name of the authentication secret for RBDUser. If provided
	// overrides keyring.
	// Default is nil.
	// More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
	// +optional
	secretRef?: null | LocalObjectReference @go(SecretRef,*LocalObjectReference) @protobuf(7,bytes,opt)

	// ReadOnly here will force the ReadOnly setting in VolumeMounts.
	// Defaults to false.
	// More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(8,varint,opt)
}

// Represents a Rados Block Device mount that lasts the lifetime of a pod.
// RBD volumes support ownership management and SELinux relabeling.
RBDPersistentVolumeSource :: {
	// A collection of Ceph monitors.
	// More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
	monitors: [...string] @go(CephMonitors,[]string) @protobuf(1,bytes,rep)

	// The rados image name.
	// More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
	image: string @go(RBDImage) @protobuf(2,bytes,opt)

	// Filesystem type of the volume that you want to mount.
	// Tip: Ensure that the filesystem type is supported by the host operating system.
	// Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd
	// TODO: how do we prevent errors in the filesystem from compromising the machine
	// +optional
	fsType?: string @go(FSType) @protobuf(3,bytes,opt)

	// The rados pool name.
	// Default is rbd.
	// More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
	// +optional
	pool?: string @go(RBDPool) @protobuf(4,bytes,opt)

	// The rados user name.
	// Default is admin.
	// More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
	// +optional
	user?: string @go(RadosUser) @protobuf(5,bytes,opt)

	// Keyring is the path to key ring for RBDUser.
	// Default is /etc/ceph/keyring.
	// More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
	// +optional
	keyring?: string @go(Keyring) @protobuf(6,bytes,opt)

	// SecretRef is name of the authentication secret for RBDUser. If provided
	// overrides keyring.
	// Default is nil.
	// More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
	// +optional
	secretRef?: null | SecretReference @go(SecretRef,*SecretReference) @protobuf(7,bytes,opt)

	// ReadOnly here will force the ReadOnly setting in VolumeMounts.
	// Defaults to false.
	// More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(8,varint,opt)
}

// Represents a cinder volume resource in Openstack.
// A Cinder volume must exist before mounting to a container.
// The volume must also be in the same region as the kubelet.
// Cinder volumes support ownership management and SELinux relabeling.
CinderVolumeSource :: {
	// volume id used to identify the volume in cinder.
	// More info: https://examples.k8s.io/mysql-cinder-pd/README.md
	volumeID: string @go(VolumeID) @protobuf(1,bytes,opt)

	// Filesystem type to mount.
	// Must be a filesystem type supported by the host operating system.
	// Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
	// More info: https://examples.k8s.io/mysql-cinder-pd/README.md
	// +optional
	fsType?: string @go(FSType) @protobuf(2,bytes,opt)

	// Optional: Defaults to false (read/write). ReadOnly here will force
	// the ReadOnly setting in VolumeMounts.
	// More info: https://examples.k8s.io/mysql-cinder-pd/README.md
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(3,varint,opt)

	// Optional: points to a secret object containing parameters used to connect
	// to OpenStack.
	// +optional
	secretRef?: null | LocalObjectReference @go(SecretRef,*LocalObjectReference) @protobuf(4,bytes,opt)
}

// Represents a cinder volume resource in Openstack.
// A Cinder volume must exist before mounting to a container.
// The volume must also be in the same region as the kubelet.
// Cinder volumes support ownership management and SELinux relabeling.
CinderPersistentVolumeSource :: {
	// volume id used to identify the volume in cinder.
	// More info: https://examples.k8s.io/mysql-cinder-pd/README.md
	volumeID: string @go(VolumeID) @protobuf(1,bytes,opt)

	// Filesystem type to mount.
	// Must be a filesystem type supported by the host operating system.
	// Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
	// More info: https://examples.k8s.io/mysql-cinder-pd/README.md
	// +optional
	fsType?: string @go(FSType) @protobuf(2,bytes,opt)

	// Optional: Defaults to false (read/write). ReadOnly here will force
	// the ReadOnly setting in VolumeMounts.
	// More info: https://examples.k8s.io/mysql-cinder-pd/README.md
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(3,varint,opt)

	// Optional: points to a secret object containing parameters used to connect
	// to OpenStack.
	// +optional
	secretRef?: null | SecretReference @go(SecretRef,*SecretReference) @protobuf(4,bytes,opt)
}

// Represents a Ceph Filesystem mount that lasts the lifetime of a pod
// Cephfs volumes do not support ownership management or SELinux relabeling.
CephFSVolumeSource :: {
	// Required: Monitors is a collection of Ceph monitors
	// More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
	monitors: [...string] @go(Monitors,[]string) @protobuf(1,bytes,rep)

	// Optional: Used as the mounted root, rather than the full Ceph tree, default is /
	// +optional
	path?: string @go(Path) @protobuf(2,bytes,opt)

	// Optional: User is the rados user name, default is admin
	// More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
	// +optional
	user?: string @go(User) @protobuf(3,bytes,opt)

	// Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret
	// More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
	// +optional
	secretFile?: string @go(SecretFile) @protobuf(4,bytes,opt)

	// Optional: SecretRef is reference to the authentication secret for User, default is empty.
	// More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
	// +optional
	secretRef?: null | LocalObjectReference @go(SecretRef,*LocalObjectReference) @protobuf(5,bytes,opt)

	// Optional: Defaults to false (read/write). ReadOnly here will force
	// the ReadOnly setting in VolumeMounts.
	// More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(6,varint,opt)
}

// SecretReference represents a Secret Reference. It has enough information to retrieve secret
// in any namespace
SecretReference :: {
	// Name is unique within a namespace to reference a secret resource.
	// +optional
	name?: string @go(Name) @protobuf(1,bytes,opt)

	// Namespace defines the space within which the secret name must be unique.
	// +optional
	namespace?: string @go(Namespace) @protobuf(2,bytes,opt)
}

// Represents a Ceph Filesystem mount that lasts the lifetime of a pod
// Cephfs volumes do not support ownership management or SELinux relabeling.
CephFSPersistentVolumeSource :: {
	// Required: Monitors is a collection of Ceph monitors
	// More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
	monitors: [...string] @go(Monitors,[]string) @protobuf(1,bytes,rep)

	// Optional: Used as the mounted root, rather than the full Ceph tree, default is /
	// +optional
	path?: string @go(Path) @protobuf(2,bytes,opt)

	// Optional: User is the rados user name, default is admin
	// More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
	// +optional
	user?: string @go(User) @protobuf(3,bytes,opt)

	// Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret
	// More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
	// +optional
	secretFile?: string @go(SecretFile) @protobuf(4,bytes,opt)

	// Optional: SecretRef is reference to the authentication secret for User, default is empty.
	// More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
	// +optional
	secretRef?: null | SecretReference @go(SecretRef,*SecretReference) @protobuf(5,bytes,opt)

	// Optional: Defaults to false (read/write). ReadOnly here will force
	// the ReadOnly setting in VolumeMounts.
	// More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(6,varint,opt)
}

// Represents a Flocker volume mounted by the Flocker agent.
// One and only one of datasetName and datasetUUID should be set.
// Flocker volumes do not support ownership management or SELinux relabeling.
FlockerVolumeSource :: {
	// Name of the dataset stored as metadata -> name on the dataset for Flocker
	// should be considered as deprecated
	// +optional
	datasetName?: string @go(DatasetName) @protobuf(1,bytes,opt)

	// UUID of the dataset. This is unique identifier of a Flocker dataset
	// +optional
	datasetUUID?: string @go(DatasetUUID) @protobuf(2,bytes,opt)
}

// StorageMedium defines ways that storage can be allocated to a volume.
StorageMedium :: string // enumStorageMedium

enumStorageMedium ::
	StorageMediumDefault |
	StorageMediumMemory |
	StorageMediumHugePages

StorageMediumDefault ::   StorageMedium & ""
StorageMediumMemory ::    StorageMedium & "Memory"
StorageMediumHugePages :: StorageMedium & "HugePages"

// Protocol defines network protocols supported for things like container ports.
Protocol :: string // enumProtocol

enumProtocol ::
	ProtocolTCP |
	ProtocolUDP |
	ProtocolSCTP

// ProtocolTCP is the TCP protocol.
ProtocolTCP :: Protocol & "TCP"

// ProtocolUDP is the UDP protocol.
ProtocolUDP :: Protocol & "UDP"

// ProtocolSCTP is the SCTP protocol.
ProtocolSCTP :: Protocol & "SCTP"

// Represents a Persistent Disk resource in Google Compute Engine.
//
// A GCE PD must exist before mounting to a container. The disk must
// also be in the same GCE project and zone as the kubelet. A GCE PD
// can only be mounted as read/write once or read-only many times. GCE
// PDs support ownership management and SELinux relabeling.
GCEPersistentDiskVolumeSource :: {
	// Unique name of the PD resource in GCE. Used to identify the disk in GCE.
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
	pdName: string @go(PDName) @protobuf(1,bytes,opt)

	// Filesystem type of the volume that you want to mount.
	// Tip: Ensure that the filesystem type is supported by the host operating system.
	// Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
	// TODO: how do we prevent errors in the filesystem from compromising the machine
	// +optional
	fsType?: string @go(FSType) @protobuf(2,bytes,opt)

	// The partition in the volume that you want to mount.
	// If omitted, the default is to mount by volume name.
	// Examples: For volume /dev/sda1, you specify the partition as "1".
	// Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty).
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
	// +optional
	partition?: int32 @go(Partition) @protobuf(3,varint,opt)

	// ReadOnly here will force the ReadOnly setting in VolumeMounts.
	// Defaults to false.
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(4,varint,opt)
}

// Represents a Quobyte mount that lasts the lifetime of a pod.
// Quobyte volumes do not support ownership management or SELinux relabeling.
QuobyteVolumeSource :: {
	// Registry represents a single or multiple Quobyte Registry services
	// specified as a string as host:port pair (multiple entries are separated with commas)
	// which acts as the central registry for volumes
	registry: string @go(Registry) @protobuf(1,bytes,opt)

	// Volume is a string that references an already created Quobyte volume by name.
	volume: string @go(Volume) @protobuf(2,bytes,opt)

	// ReadOnly here will force the Quobyte volume to be mounted with read-only permissions.
	// Defaults to false.
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(3,varint,opt)

	// User to map volume access to
	// Defaults to serivceaccount user
	// +optional
	user?: string @go(User) @protobuf(4,bytes,opt)

	// Group to map volume access to
	// Default is no group
	// +optional
	group?: string @go(Group) @protobuf(5,bytes,opt)

	// Tenant owning the given Quobyte volume in the Backend
	// Used with dynamically provisioned Quobyte volumes, value is set by the plugin
	// +optional
	tenant?: string @go(Tenant) @protobuf(6,bytes,opt)
}

// FlexPersistentVolumeSource represents a generic persistent volume resource that is
// provisioned/attached using an exec based plugin.
FlexPersistentVolumeSource :: {
	// Driver is the name of the driver to use for this volume.
	driver: string @go(Driver) @protobuf(1,bytes,opt)

	// Filesystem type to mount.
	// Must be a filesystem type supported by the host operating system.
	// Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script.
	// +optional
	fsType?: string @go(FSType) @protobuf(2,bytes,opt)

	// Optional: SecretRef is reference to the secret object containing
	// sensitive information to pass to the plugin scripts. This may be
	// empty if no secret object is specified. If the secret object
	// contains more than one secret, all secrets are passed to the plugin
	// scripts.
	// +optional
	secretRef?: null | SecretReference @go(SecretRef,*SecretReference) @protobuf(3,bytes,opt)

	// Optional: Defaults to false (read/write). ReadOnly here will force
	// the ReadOnly setting in VolumeMounts.
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(4,varint,opt)

	// Optional: Extra command options if any.
	// +optional
	options?: {<_>: string} @go(Options,map[string]string) @protobuf(5,bytes,rep)
}

// FlexVolume represents a generic volume resource that is
// provisioned/attached using an exec based plugin.
FlexVolumeSource :: {
	// Driver is the name of the driver to use for this volume.
	driver: string @go(Driver) @protobuf(1,bytes,opt)

	// Filesystem type to mount.
	// Must be a filesystem type supported by the host operating system.
	// Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script.
	// +optional
	fsType?: string @go(FSType) @protobuf(2,bytes,opt)

	// Optional: SecretRef is reference to the secret object containing
	// sensitive information to pass to the plugin scripts. This may be
	// empty if no secret object is specified. If the secret object
	// contains more than one secret, all secrets are passed to the plugin
	// scripts.
	// +optional
	secretRef?: null | LocalObjectReference @go(SecretRef,*LocalObjectReference) @protobuf(3,bytes,opt)

	// Optional: Defaults to false (read/write). ReadOnly here will force
	// the ReadOnly setting in VolumeMounts.
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(4,varint,opt)

	// Optional: Extra command options if any.
	// +optional
	options?: {<_>: string} @go(Options,map[string]string) @protobuf(5,bytes,rep)
}

// Represents a Persistent Disk resource in AWS.
//
// An AWS EBS disk must exist before mounting to a container. The disk
// must also be in the same AWS zone as the kubelet. An AWS EBS disk
// can only be mounted as read/write once. AWS EBS volumes support
// ownership management and SELinux relabeling.
AWSElasticBlockStoreVolumeSource :: {
	// Unique ID of the persistent disk resource in AWS (Amazon EBS volume).
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
	volumeID: string @go(VolumeID) @protobuf(1,bytes,opt)

	// Filesystem type of the volume that you want to mount.
	// Tip: Ensure that the filesystem type is supported by the host operating system.
	// Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
	// TODO: how do we prevent errors in the filesystem from compromising the machine
	// +optional
	fsType?: string @go(FSType) @protobuf(2,bytes,opt)

	// The partition in the volume that you want to mount.
	// If omitted, the default is to mount by volume name.
	// Examples: For volume /dev/sda1, you specify the partition as "1".
	// Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty).
	// +optional
	partition?: int32 @go(Partition) @protobuf(3,varint,opt)

	// Specify "true" to force and set the ReadOnly property in VolumeMounts to "true".
	// If omitted, the default is "false".
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(4,varint,opt)
}

// Represents a volume that is populated with the contents of a git repository.
// Git repo volumes do not support ownership management.
// Git repo volumes support SELinux relabeling.
//
// DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an
// EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir
// into the Pod's container.
GitRepoVolumeSource :: {
	// Repository URL
	repository: string @go(Repository) @protobuf(1,bytes,opt)

	// Commit hash for the specified revision.
	// +optional
	revision?: string @go(Revision) @protobuf(2,bytes,opt)

	// Target directory name.
	// Must not contain or start with '..'.  If '.' is supplied, the volume directory will be the
	// git repository.  Otherwise, if specified, the volume will contain the git repository in
	// the subdirectory with the given name.
	// +optional
	directory?: string @go(Directory) @protobuf(3,bytes,opt)
}

// Adapts a Secret into a volume.
//
// The contents of the target Secret's Data field will be presented in a volume
// as files using the keys in the Data field as the file names.
// Secret volumes support ownership management and SELinux relabeling.
SecretVolumeSource :: {
	// Name of the secret in the pod's namespace to use.
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
	// +optional
	secretName?: string @go(SecretName) @protobuf(1,bytes,opt)

	// If unspecified, each key-value pair in the Data field of the referenced
	// Secret will be projected into the volume as a file whose name is the
	// key and content is the value. If specified, the listed keys will be
	// projected into the specified paths, and unlisted keys will not be
	// present. If a key is specified which is not present in the Secret,
	// the volume setup will error unless it is marked optional. Paths must be
	// relative and may not contain the '..' path or start with '..'.
	// +optional
	items?: [...KeyToPath] @go(Items,[]KeyToPath) @protobuf(2,bytes,rep)

	// Optional: mode bits to use on created files by default. Must be a
	// value between 0 and 0777. Defaults to 0644.
	// Directories within the path are not affected by this setting.
	// This might be in conflict with other options that affect the file
	// mode, like fsGroup, and the result can be other mode bits set.
	// +optional
	defaultMode?: null | int32 @go(DefaultMode,*int32) @protobuf(3,bytes,opt)

	// Specify whether the Secret or its keys must be defined
	// +optional
	optional?: null | bool @go(Optional,*bool) @protobuf(4,varint,opt)
}

SecretVolumeSourceDefaultMode :: int32 & 0o644

// Adapts a secret into a projected volume.
//
// The contents of the target Secret's Data field will be presented in a
// projected volume as files using the keys in the Data field as the file names.
// Note that this is identical to a secret volume source without the default
// mode.
SecretProjection :: {
	LocalObjectReference

	// If unspecified, each key-value pair in the Data field of the referenced
	// Secret will be projected into the volume as a file whose name is the
	// key and content is the value. If specified, the listed keys will be
	// projected into the specified paths, and unlisted keys will not be
	// present. If a key is specified which is not present in the Secret,
	// the volume setup will error unless it is marked optional. Paths must be
	// relative and may not contain the '..' path or start with '..'.
	// +optional
	items?: [...KeyToPath] @go(Items,[]KeyToPath) @protobuf(2,bytes,rep)

	// Specify whether the Secret or its key must be defined
	// +optional
	optional?: null | bool @go(Optional,*bool) @protobuf(4,varint,opt)
}

// Represents an NFS mount that lasts the lifetime of a pod.
// NFS volumes do not support ownership management or SELinux relabeling.
NFSVolumeSource :: {
	// Server is the hostname or IP address of the NFS server.
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
	server: string @go(Server) @protobuf(1,bytes,opt)

	// Path that is exported by the NFS server.
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
	path: string @go(Path) @protobuf(2,bytes,opt)

	// ReadOnly here will force
	// the NFS export to be mounted with read-only permissions.
	// Defaults to false.
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(3,varint,opt)
}

// Represents an ISCSI disk.
// ISCSI volumes can only be mounted as read/write once.
// ISCSI volumes support ownership management and SELinux relabeling.
ISCSIVolumeSource :: {
	// iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port
	// is other than default (typically TCP ports 860 and 3260).
	targetPortal: string @go(TargetPortal) @protobuf(1,bytes,opt)

	// Target iSCSI Qualified Name.
	iqn: string @go(IQN) @protobuf(2,bytes,opt)

	// iSCSI Target Lun number.
	lun: int32 @go(Lun) @protobuf(3,varint,opt)

	// iSCSI Interface Name that uses an iSCSI transport.
	// Defaults to 'default' (tcp).
	// +optional
	iscsiInterface?: string @go(ISCSIInterface) @protobuf(4,bytes,opt)

	// Filesystem type of the volume that you want to mount.
	// Tip: Ensure that the filesystem type is supported by the host operating system.
	// Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi
	// TODO: how do we prevent errors in the filesystem from compromising the machine
	// +optional
	fsType?: string @go(FSType) @protobuf(5,bytes,opt)

	// ReadOnly here will force the ReadOnly setting in VolumeMounts.
	// Defaults to false.
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(6,varint,opt)

	// iSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port
	// is other than default (typically TCP ports 860 and 3260).
	// +optional
	portals?: [...string] @go(Portals,[]string) @protobuf(7,bytes,opt)

	// whether support iSCSI Discovery CHAP authentication
	// +optional
	chapAuthDiscovery?: bool @go(DiscoveryCHAPAuth) @protobuf(8,varint,opt)

	// whether support iSCSI Session CHAP authentication
	// +optional
	chapAuthSession?: bool @go(SessionCHAPAuth) @protobuf(11,varint,opt)

	// CHAP Secret for iSCSI target and initiator authentication
	// +optional
	secretRef?: null | LocalObjectReference @go(SecretRef,*LocalObjectReference) @protobuf(10,bytes,opt)

	// Custom iSCSI Initiator Name.
	// If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface
	// <target portal>:<volume name> will be created for the connection.
	// +optional
	initiatorName?: null | string @go(InitiatorName,*string) @protobuf(12,bytes,opt)
}

// ISCSIPersistentVolumeSource represents an ISCSI disk.
// ISCSI volumes can only be mounted as read/write once.
// ISCSI volumes support ownership management and SELinux relabeling.
ISCSIPersistentVolumeSource :: {
	// iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port
	// is other than default (typically TCP ports 860 and 3260).
	targetPortal: string @go(TargetPortal) @protobuf(1,bytes,opt)

	// Target iSCSI Qualified Name.
	iqn: string @go(IQN) @protobuf(2,bytes,opt)

	// iSCSI Target Lun number.
	lun: int32 @go(Lun) @protobuf(3,varint,opt)

	// iSCSI Interface Name that uses an iSCSI transport.
	// Defaults to 'default' (tcp).
	// +optional
	iscsiInterface?: string @go(ISCSIInterface) @protobuf(4,bytes,opt)

	// Filesystem type of the volume that you want to mount.
	// Tip: Ensure that the filesystem type is supported by the host operating system.
	// Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
	// More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi
	// TODO: how do we prevent errors in the filesystem from compromising the machine
	// +optional
	fsType?: string @go(FSType) @protobuf(5,bytes,opt)

	// ReadOnly here will force the ReadOnly setting in VolumeMounts.
	// Defaults to false.
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(6,varint,opt)

	// iSCSI Target Portal List. The Portal is either an IP or ip_addr:port if the port
	// is other than default (typically TCP ports 860 and 3260).
	// +optional
	portals?: [...string] @go(Portals,[]string) @protobuf(7,bytes,opt)

	// whether support iSCSI Discovery CHAP authentication
	// +optional
	chapAuthDiscovery?: bool @go(DiscoveryCHAPAuth) @protobuf(8,varint,opt)

	// whether support iSCSI Session CHAP authentication
	// +optional
	chapAuthSession?: bool @go(SessionCHAPAuth) @protobuf(11,varint,opt)

	// CHAP Secret for iSCSI target and initiator authentication
	// +optional
	secretRef?: null | SecretReference @go(SecretRef,*SecretReference) @protobuf(10,bytes,opt)

	// Custom iSCSI Initiator Name.
	// If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface
	// <target portal>:<volume name> will be created for the connection.
	// +optional
	initiatorName?: null | string @go(InitiatorName,*string) @protobuf(12,bytes,opt)
}

// Represents a Fibre Channel volume.
// Fibre Channel volumes can only be mounted as read/write once.
// Fibre Channel volumes support ownership management and SELinux relabeling.
FCVolumeSource :: {
	// Optional: FC target worldwide names (WWNs)
	// +optional
	targetWWNs?: [...string] @go(TargetWWNs,[]string) @protobuf(1,bytes,rep)

	// Optional: FC target lun number
	// +optional
	lun?: null | int32 @go(Lun,*int32) @protobuf(2,varint,opt)

	// Filesystem type to mount.
	// Must be a filesystem type supported by the host operating system.
	// Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
	// TODO: how do we prevent errors in the filesystem from compromising the machine
	// +optional
	fsType?: string @go(FSType) @protobuf(3,bytes,opt)

	// Optional: Defaults to false (read/write). ReadOnly here will force
	// the ReadOnly setting in VolumeMounts.
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(4,varint,opt)

	// Optional: FC volume world wide identifiers (wwids)
	// Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.
	// +optional
	wwids?: [...string] @go(WWIDs,[]string) @protobuf(5,bytes,rep)
}

// AzureFile represents an Azure File Service mount on the host and bind mount to the pod.
AzureFileVolumeSource :: {
	// the name of secret that contains Azure Storage Account Name and Key
	secretName: string @go(SecretName) @protobuf(1,bytes,opt)

	// Share Name
	shareName: string @go(ShareName) @protobuf(2,bytes,opt)

	// Defaults to false (read/write). ReadOnly here will force
	// the ReadOnly setting in VolumeMounts.
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(3,varint,opt)
}

// AzureFile represents an Azure File Service mount on the host and bind mount to the pod.
AzureFilePersistentVolumeSource :: {
	// the name of secret that contains Azure Storage Account Name and Key
	secretName: string @go(SecretName) @protobuf(1,bytes,opt)

	// Share Name
	shareName: string @go(ShareName) @protobuf(2,bytes,opt)

	// Defaults to false (read/write). ReadOnly here will force
	// the ReadOnly setting in VolumeMounts.
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(3,varint,opt)

	// the namespace of the secret that contains Azure Storage Account Name and Key
	// default is the same as the Pod
	// +optional
	secretNamespace: null | string @go(SecretNamespace,*string) @protobuf(4,bytes,opt)
}

// Represents a vSphere volume resource.
VsphereVirtualDiskVolumeSource :: {
	// Path that identifies vSphere volume vmdk
	volumePath: string @go(VolumePath) @protobuf(1,bytes,opt)

	// Filesystem type to mount.
	// Must be a filesystem type supported by the host operating system.
	// Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
	// +optional
	fsType?: string @go(FSType) @protobuf(2,bytes,opt)

	// Storage Policy Based Management (SPBM) profile name.
	// +optional
	storagePolicyName?: string @go(StoragePolicyName) @protobuf(3,bytes,opt)

	// Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.
	// +optional
	storagePolicyID?: string @go(StoragePolicyID) @protobuf(4,bytes,opt)
}

// Represents a Photon Controller persistent disk resource.
PhotonPersistentDiskVolumeSource :: {
	// ID that identifies Photon Controller persistent disk
	pdID: string @go(PdID) @protobuf(1,bytes,opt)

	// Filesystem type to mount.
	// Must be a filesystem type supported by the host operating system.
	// Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
	fsType?: string @go(FSType) @protobuf(2,bytes,opt)
}

AzureDataDiskCachingMode :: string // enumAzureDataDiskCachingMode

enumAzureDataDiskCachingMode ::
	AzureDataDiskCachingNone |
	AzureDataDiskCachingReadOnly |
	AzureDataDiskCachingReadWrite

AzureDataDiskKind :: string // enumAzureDataDiskKind

enumAzureDataDiskKind ::
	AzureSharedBlobDisk |
	AzureDedicatedBlobDisk |
	AzureManagedDisk

AzureDataDiskCachingNone ::      AzureDataDiskCachingMode & "None"
AzureDataDiskCachingReadOnly ::  AzureDataDiskCachingMode & "ReadOnly"
AzureDataDiskCachingReadWrite :: AzureDataDiskCachingMode & "ReadWrite"
AzureSharedBlobDisk ::           AzureDataDiskKind & "Shared"
AzureDedicatedBlobDisk ::        AzureDataDiskKind & "Dedicated"
AzureManagedDisk ::              AzureDataDiskKind & "Managed"

// AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.
AzureDiskVolumeSource :: {
	// The Name of the data disk in the blob storage
	diskName: string @go(DiskName) @protobuf(1,bytes,opt)

	// The URI the data disk in the blob storage
	diskURI: string @go(DataDiskURI) @protobuf(2,bytes,opt)

	// Host Caching mode: None, Read Only, Read Write.
	// +optional
	cachingMode?: null | AzureDataDiskCachingMode @go(CachingMode,*AzureDataDiskCachingMode) @protobuf(3,bytes,opt,casttype=AzureDataDiskCachingMode)

	// Filesystem type to mount.
	// Must be a filesystem type supported by the host operating system.
	// Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
	// +optional
	fsType?: null | string @go(FSType,*string) @protobuf(4,bytes,opt)

	// Defaults to false (read/write). ReadOnly here will force
	// the ReadOnly setting in VolumeMounts.
	// +optional
	readOnly?: null | bool @go(ReadOnly,*bool) @protobuf(5,varint,opt)

	// Expected values Shared: multiple blob disks per storage account  Dedicated: single blob disk per storage account  Managed: azure managed data disk (only in managed availability set). defaults to shared
	kind?: null | AzureDataDiskKind @go(Kind,*AzureDataDiskKind) @protobuf(6,bytes,opt,casttype=AzureDataDiskKind)
}

// PortworxVolumeSource represents a Portworx volume resource.
PortworxVolumeSource :: {
	// VolumeID uniquely identifies a Portworx volume
	volumeID: string @go(VolumeID) @protobuf(1,bytes,opt)

	// FSType represents the filesystem type to mount
	// Must be a filesystem type supported by the host operating system.
	// Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified.
	fsType?: string @go(FSType) @protobuf(2,bytes,opt)

	// Defaults to false (read/write). ReadOnly here will force
	// the ReadOnly setting in VolumeMounts.
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(3,varint,opt)
}

// ScaleIOVolumeSource represents a persistent ScaleIO volume
ScaleIOVolumeSource :: {
	// The host address of the ScaleIO API Gateway.
	gateway: string @go(Gateway) @protobuf(1,bytes,opt)

	// The name of the storage system as configured in ScaleIO.
	system: string @go(System) @protobuf(2,bytes,opt)

	// SecretRef references to the secret for ScaleIO user and other
	// sensitive information. If this is not provided, Login operation will fail.
	secretRef: null | LocalObjectReference @go(SecretRef,*LocalObjectReference) @protobuf(3,bytes,opt)

	// Flag to enable/disable SSL communication with Gateway, default false
	// +optional
	sslEnabled?: bool @go(SSLEnabled) @protobuf(4,varint,opt)

	// The name of the ScaleIO Protection Domain for the configured storage.
	// +optional
	protectionDomain?: string @go(ProtectionDomain) @protobuf(5,bytes,opt)

	// The ScaleIO Storage Pool associated with the protection domain.
	// +optional
	storagePool?: string @go(StoragePool) @protobuf(6,bytes,opt)

	// Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned.
	// Default is ThinProvisioned.
	// +optional
	storageMode?: string @go(StorageMode) @protobuf(7,bytes,opt)

	// The name of a volume already created in the ScaleIO system
	// that is associated with this volume source.
	volumeName?: string @go(VolumeName) @protobuf(8,bytes,opt)

	// Filesystem type to mount.
	// Must be a filesystem type supported by the host operating system.
	// Ex. "ext4", "xfs", "ntfs".
	// Default is "xfs".
	// +optional
	fsType?: string @go(FSType) @protobuf(9,bytes,opt)

	// Defaults to false (read/write). ReadOnly here will force
	// the ReadOnly setting in VolumeMounts.
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(10,varint,opt)
}

// ScaleIOPersistentVolumeSource represents a persistent ScaleIO volume
ScaleIOPersistentVolumeSource :: {
	// The host address of the ScaleIO API Gateway.
	gateway: string @go(Gateway) @protobuf(1,bytes,opt)

	// The name of the storage system as configured in ScaleIO.
	system: string @go(System) @protobuf(2,bytes,opt)

	// SecretRef references to the secret for ScaleIO user and other
	// sensitive information. If this is not provided, Login operation will fail.
	secretRef: null | SecretReference @go(SecretRef,*SecretReference) @protobuf(3,bytes,opt)

	// Flag to enable/disable SSL communication with Gateway, default false
	// +optional
	sslEnabled?: bool @go(SSLEnabled) @protobuf(4,varint,opt)

	// The name of the ScaleIO Protection Domain for the configured storage.
	// +optional
	protectionDomain?: string @go(ProtectionDomain) @protobuf(5,bytes,opt)

	// The ScaleIO Storage Pool associated with the protection domain.
	// +optional
	storagePool?: string @go(StoragePool) @protobuf(6,bytes,opt)

	// Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned.
	// Default is ThinProvisioned.
	// +optional
	storageMode?: string @go(StorageMode) @protobuf(7,bytes,opt)

	// The name of a volume already created in the ScaleIO system
	// that is associated with this volume source.
	volumeName?: string @go(VolumeName) @protobuf(8,bytes,opt)

	// Filesystem type to mount.
	// Must be a filesystem type supported by the host operating system.
	// Ex. "ext4", "xfs", "ntfs".
	// Default is "xfs"
	// +optional
	fsType?: string @go(FSType) @protobuf(9,bytes,opt)

	// Defaults to false (read/write). ReadOnly here will force
	// the ReadOnly setting in VolumeMounts.
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(10,varint,opt)
}

// Represents a StorageOS persistent volume resource.
StorageOSVolumeSource :: {
	// VolumeName is the human-readable name of the StorageOS volume.  Volume
	// names are only unique within a namespace.
	volumeName?: string @go(VolumeName) @protobuf(1,bytes,opt)

	// VolumeNamespace specifies the scope of the volume within StorageOS.  If no
	// namespace is specified then the Pod's namespace will be used.  This allows the
	// Kubernetes name scoping to be mirrored within StorageOS for tighter integration.
	// Set VolumeName to any name to override the default behaviour.
	// Set to "default" if you are not using namespaces within StorageOS.
	// Namespaces that do not pre-exist within StorageOS will be created.
	// +optional
	volumeNamespace?: string @go(VolumeNamespace) @protobuf(2,bytes,opt)

	// Filesystem type to mount.
	// Must be a filesystem type supported by the host operating system.
	// Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
	// +optional
	fsType?: string @go(FSType) @protobuf(3,bytes,opt)

	// Defaults to false (read/write). ReadOnly here will force
	// the ReadOnly setting in VolumeMounts.
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(4,varint,opt)

	// SecretRef specifies the secret to use for obtaining the StorageOS API
	// credentials.  If not specified, default values will be attempted.
	// +optional
	secretRef?: null | LocalObjectReference @go(SecretRef,*LocalObjectReference) @protobuf(5,bytes,opt)
}

// Represents a StorageOS persistent volume resource.
StorageOSPersistentVolumeSource :: {
	// VolumeName is the human-readable name of the StorageOS volume.  Volume
	// names are only unique within a namespace.
	volumeName?: string @go(VolumeName) @protobuf(1,bytes,opt)

	// VolumeNamespace specifies the scope of the volume within StorageOS.  If no
	// namespace is specified then the Pod's namespace will be used.  This allows the
	// Kubernetes name scoping to be mirrored within StorageOS for tighter integration.
	// Set VolumeName to any name to override the default behaviour.
	// Set to "default" if you are not using namespaces within StorageOS.
	// Namespaces that do not pre-exist within StorageOS will be created.
	// +optional
	volumeNamespace?: string @go(VolumeNamespace) @protobuf(2,bytes,opt)

	// Filesystem type to mount.
	// Must be a filesystem type supported by the host operating system.
	// Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
	// +optional
	fsType?: string @go(FSType) @protobuf(3,bytes,opt)

	// Defaults to false (read/write). ReadOnly here will force
	// the ReadOnly setting in VolumeMounts.
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(4,varint,opt)

	// SecretRef specifies the secret to use for obtaining the StorageOS API
	// credentials.  If not specified, default values will be attempted.
	// +optional
	secretRef?: null | ObjectReference @go(SecretRef,*ObjectReference) @protobuf(5,bytes,opt)
}

// Adapts a ConfigMap into a volume.
//
// The contents of the target ConfigMap's Data field will be presented in a
// volume as files using the keys in the Data field as the file names, unless
// the items element is populated with specific mappings of keys to paths.
// ConfigMap volumes support ownership management and SELinux relabeling.
ConfigMapVolumeSource :: {
	LocalObjectReference

	// If unspecified, each key-value pair in the Data field of the referenced
	// ConfigMap will be projected into the volume as a file whose name is the
	// key and content is the value. If specified, the listed keys will be
	// projected into the specified paths, and unlisted keys will not be
	// present. If a key is specified which is not present in the ConfigMap,
	// the volume setup will error unless it is marked optional. Paths must be
	// relative and may not contain the '..' path or start with '..'.
	// +optional
	items?: [...KeyToPath] @go(Items,[]KeyToPath) @protobuf(2,bytes,rep)

	// Optional: mode bits to use on created files by default. Must be a
	// value between 0 and 0777. Defaults to 0644.
	// Directories within the path are not affected by this setting.
	// This might be in conflict with other options that affect the file
	// mode, like fsGroup, and the result can be other mode bits set.
	// +optional
	defaultMode?: null | int32 @go(DefaultMode,*int32) @protobuf(3,varint,opt)

	// Specify whether the ConfigMap or its keys must be defined
	// +optional
	optional?: null | bool @go(Optional,*bool) @protobuf(4,varint,opt)
}

ConfigMapVolumeSourceDefaultMode :: int32 & 0o644

// Adapts a ConfigMap into a projected volume.
//
// The contents of the target ConfigMap's Data field will be presented in a
// projected volume as files using the keys in the Data field as the file names,
// unless the items element is populated with specific mappings of keys to paths.
// Note that this is identical to a configmap volume source without the default
// mode.
ConfigMapProjection :: {
	LocalObjectReference

	// If unspecified, each key-value pair in the Data field of the referenced
	// ConfigMap will be projected into the volume as a file whose name is the
	// key and content is the value. If specified, the listed keys will be
	// projected into the specified paths, and unlisted keys will not be
	// present. If a key is specified which is not present in the ConfigMap,
	// the volume setup will error unless it is marked optional. Paths must be
	// relative and may not contain the '..' path or start with '..'.
	// +optional
	items?: [...KeyToPath] @go(Items,[]KeyToPath) @protobuf(2,bytes,rep)

	// Specify whether the ConfigMap or its keys must be defined
	// +optional
	optional?: null | bool @go(Optional,*bool) @protobuf(4,varint,opt)
}

// ServiceAccountTokenProjection represents a projected service account token
// volume. This projection can be used to insert a service account token into
// the pods runtime filesystem for use against APIs (Kubernetes API Server or
// otherwise).
ServiceAccountTokenProjection :: {
	// Audience is the intended audience of the token. A recipient of a token
	// must identify itself with an identifier specified in the audience of the
	// token, and otherwise should reject the token. The audience defaults to the
	// identifier of the apiserver.
	//+optional
	audience?: string @go(Audience) @protobuf(1,bytes,rep)

	// ExpirationSeconds is the requested duration of validity of the service
	// account token. As the token approaches expiration, the kubelet volume
	// plugin will proactively rotate the service account token. The kubelet will
	// start trying to rotate the token if the token is older than 80 percent of
	// its time to live or if the token is older than 24 hours.Defaults to 1 hour
	// and must be at least 10 minutes.
	//+optional
	expirationSeconds?: null | int64 @go(ExpirationSeconds,*int64) @protobuf(2,varint,opt)

	// Path is the path relative to the mount point of the file to project the
	// token into.
	path: string @go(Path) @protobuf(3,bytes,opt)
}

// Represents a projected volume source
ProjectedVolumeSource :: {
	// list of volume projections
	sources: [...VolumeProjection] @go(Sources,[]VolumeProjection) @protobuf(1,bytes,rep)

	// Mode bits to use on created files by default. Must be a value between
	// 0 and 0777.
	// Directories within the path are not affected by this setting.
	// This might be in conflict with other options that affect the file
	// mode, like fsGroup, and the result can be other mode bits set.
	// +optional
	defaultMode?: null | int32 @go(DefaultMode,*int32) @protobuf(2,varint,opt)
}

// Projection that may be projected along with other supported volume types
VolumeProjection :: {
	// information about the secret data to project
	// +optional
	secret?: null | SecretProjection @go(Secret,*SecretProjection) @protobuf(1,bytes,opt)

	// information about the downwardAPI data to project
	// +optional
	downwardAPI?: null | DownwardAPIProjection @go(DownwardAPI,*DownwardAPIProjection) @protobuf(2,bytes,opt)

	// information about the configMap data to project
	// +optional
	configMap?: null | ConfigMapProjection @go(ConfigMap,*ConfigMapProjection) @protobuf(3,bytes,opt)

	// information about the serviceAccountToken data to project
	// +optional
	serviceAccountToken?: null | ServiceAccountTokenProjection @go(ServiceAccountToken,*ServiceAccountTokenProjection) @protobuf(4,bytes,opt)
}

ProjectedVolumeSourceDefaultMode :: int32 & 0o644

// Maps a string key to a path within a volume.
KeyToPath :: {
	// The key to project.
	key: string @go(Key) @protobuf(1,bytes,opt)

	// The relative path of the file to map the key to.
	// May not be an absolute path.
	// May not contain the path element '..'.
	// May not start with the string '..'.
	path: string @go(Path) @protobuf(2,bytes,opt)

	// Optional: mode bits to use on this file, must be a value between 0
	// and 0777. If not specified, the volume defaultMode will be used.
	// This might be in conflict with other options that affect the file
	// mode, like fsGroup, and the result can be other mode bits set.
	// +optional
	mode?: null | int32 @go(Mode,*int32) @protobuf(3,varint,opt)
}

// Local represents directly-attached storage with node affinity (Beta feature)
LocalVolumeSource :: {
	// The full path to the volume on the node.
	// It can be either a directory or block device (disk, partition, ...).
	path: string @go(Path) @protobuf(1,bytes,opt)

	// Filesystem type to mount.
	// It applies only when the Path is a block device.
	// Must be a filesystem type supported by the host operating system.
	// Ex. "ext4", "xfs", "ntfs". The default value is to auto-select a fileystem if unspecified.
	// +optional
	fsType?: null | string @go(FSType,*string) @protobuf(2,bytes,opt)
}

// Represents storage that is managed by an external CSI volume driver (Beta feature)
CSIPersistentVolumeSource :: {
	// Driver is the name of the driver to use for this volume.
	// Required.
	driver: string @go(Driver) @protobuf(1,bytes,opt)

	// VolumeHandle is the unique volume name returned by the CSI volume
	// plugin’s CreateVolume to refer to the volume on all subsequent calls.
	// Required.
	volumeHandle: string @go(VolumeHandle) @protobuf(2,bytes,opt)

	// Optional: The value to pass to ControllerPublishVolumeRequest.
	// Defaults to false (read/write).
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(3,varint,opt)

	// Filesystem type to mount.
	// Must be a filesystem type supported by the host operating system.
	// Ex. "ext4", "xfs", "ntfs".
	// +optional
	fsType?: string @go(FSType) @protobuf(4,bytes,opt)

	// Attributes of the volume to publish.
	// +optional
	volumeAttributes?: {<_>: string} @go(VolumeAttributes,map[string]string) @protobuf(5,bytes,rep)

	// ControllerPublishSecretRef is a reference to the secret object containing
	// sensitive information to pass to the CSI driver to complete the CSI
	// ControllerPublishVolume and ControllerUnpublishVolume calls.
	// This field is optional, and may be empty if no secret is required. If the
	// secret object contains more than one secret, all secrets are passed.
	// +optional
	controllerPublishSecretRef?: null | SecretReference @go(ControllerPublishSecretRef,*SecretReference) @protobuf(6,bytes,opt)

	// NodeStageSecretRef is a reference to the secret object containing sensitive
	// information to pass to the CSI driver to complete the CSI NodeStageVolume
	// and NodeStageVolume and NodeUnstageVolume calls.
	// This field is optional, and may be empty if no secret is required. If the
	// secret object contains more than one secret, all secrets are passed.
	// +optional
	nodeStageSecretRef?: null | SecretReference @go(NodeStageSecretRef,*SecretReference) @protobuf(7,bytes,opt)

	// NodePublishSecretRef is a reference to the secret object containing
	// sensitive information to pass to the CSI driver to complete the CSI
	// NodePublishVolume and NodeUnpublishVolume calls.
	// This field is optional, and may be empty if no secret is required. If the
	// secret object contains more than one secret, all secrets are passed.
	// +optional
	nodePublishSecretRef?: null | SecretReference @go(NodePublishSecretRef,*SecretReference) @protobuf(8,bytes,opt)

	// ControllerExpandSecretRef is a reference to the secret object containing
	// sensitive information to pass to the CSI driver to complete the CSI
	// ControllerExpandVolume call.
	// This is an alpha field and requires enabling ExpandCSIVolumes feature gate.
	// This field is optional, and may be empty if no secret is required. If the
	// secret object contains more than one secret, all secrets are passed.
	// +optional
	controllerExpandSecretRef?: null | SecretReference @go(ControllerExpandSecretRef,*SecretReference) @protobuf(9,bytes,opt)
}

// Represents a source location of a volume to mount, managed by an external CSI driver
CSIVolumeSource :: {
	// Driver is the name of the CSI driver that handles this volume.
	// Consult with your admin for the correct name as registered in the cluster.
	driver: string @go(Driver) @protobuf(1,bytes,opt)

	// Specifies a read-only configuration for the volume.
	// Defaults to false (read/write).
	// +optional
	readOnly?: null | bool @go(ReadOnly,*bool) @protobuf(2,varint,opt)

	// Filesystem type to mount. Ex. "ext4", "xfs", "ntfs".
	// If not provided, the empty value is passed to the associated CSI driver
	// which will determine the default filesystem to apply.
	// +optional
	fsType?: null | string @go(FSType,*string) @protobuf(3,bytes,opt)

	// VolumeAttributes stores driver-specific properties that are passed to the CSI
	// driver. Consult your driver's documentation for supported values.
	// +optional
	volumeAttributes?: {<_>: string} @go(VolumeAttributes,map[string]string) @protobuf(4,bytes,rep)

	// NodePublishSecretRef is a reference to the secret object containing
	// sensitive information to pass to the CSI driver to complete the CSI
	// NodePublishVolume and NodeUnpublishVolume calls.
	// This field is optional, and  may be empty if no secret is required. If the
	// secret object contains more than one secret, all secret references are passed.
	// +optional
	nodePublishSecretRef?: null | LocalObjectReference @go(NodePublishSecretRef,*LocalObjectReference) @protobuf(5,bytes,opt)
}

// ContainerPort represents a network port in a single container.
ContainerPort :: {
	// If specified, this must be an IANA_SVC_NAME and unique within the pod. Each
	// named port in a pod must have a unique name. Name for the port that can be
	// referred to by services.
	// +optional
	name?: string @go(Name) @protobuf(1,bytes,opt)

	// Number of port to expose on the host.
	// If specified, this must be a valid port number, 0 < x < 65536.
	// If HostNetwork is specified, this must match ContainerPort.
	// Most containers do not need this.
	// +optional
	hostPort?: int32 @go(HostPort) @protobuf(2,varint,opt)

	// Number of port to expose on the pod's IP address.
	// This must be a valid port number, 0 < x < 65536.
	containerPort: int32 @go(ContainerPort) @protobuf(3,varint,opt)

	// Protocol for port. Must be UDP, TCP, or SCTP.
	// Defaults to "TCP".
	// +optional
	protocol?: Protocol @go(Protocol) @protobuf(4,bytes,opt,casttype=Protocol)

	// What host IP to bind the external port to.
	// +optional
	hostIP?: string @go(HostIP) @protobuf(5,bytes,opt)
}

// VolumeMount describes a mounting of a Volume within a container.
VolumeMount :: {
	// This must match the Name of a Volume.
	name: string @go(Name) @protobuf(1,bytes,opt)

	// Mounted read-only if true, read-write otherwise (false or unspecified).
	// Defaults to false.
	// +optional
	readOnly?: bool @go(ReadOnly) @protobuf(2,varint,opt)

	// Path within the container at which the volume should be mounted.  Must
	// not contain ':'.
	mountPath: string @go(MountPath) @protobuf(3,bytes,opt)

	// Path within the volume from which the container's volume should be mounted.
	// Defaults to "" (volume's root).
	// +optional
	subPath?: string @go(SubPath) @protobuf(4,bytes,opt)

	// mountPropagation determines how mounts are propagated from the host
	// to container and the other way around.
	// When not set, MountPropagationNone is used.
	// This field is beta in 1.10.
	// +optional
	mountPropagation?: null | MountPropagationMode @go(MountPropagation,*MountPropagationMode) @protobuf(5,bytes,opt,casttype=MountPropagationMode)

	// Expanded path within the volume from which the container's volume should be mounted.
	// Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment.
	// Defaults to "" (volume's root).
	// SubPathExpr and SubPath are mutually exclusive.
	// This field is beta in 1.15.
	// +optional
	subPathExpr?: string @go(SubPathExpr) @protobuf(6,bytes,opt)
}

// MountPropagationMode describes mount propagation.
MountPropagationMode :: string // enumMountPropagationMode

enumMountPropagationMode ::
	MountPropagationNone |
	MountPropagationHostToContainer |
	MountPropagationBidirectional

// MountPropagationNone means that the volume in a container will
// not receive new mounts from the host or other containers, and filesystems
// mounted inside the container won't be propagated to the host or other
// containers.
// Note that this mode corresponds to "private" in Linux terminology.
MountPropagationNone :: MountPropagationMode & "None"

// MountPropagationHostToContainer means that the volume in a container will
// receive new mounts from the host or other containers, but filesystems
// mounted inside the container won't be propagated to the host or other
// containers.
// Note that this mode is recursively applied to all mounts in the volume
// ("rslave" in Linux terminology).
MountPropagationHostToContainer :: MountPropagationMode & "HostToContainer"

// MountPropagationBidirectional means that the volume in a container will
// receive new mounts from the host or other containers, and its own mounts
// will be propagated from the container to the host or other containers.
// Note that this mode is recursively applied to all mounts in the volume
// ("rshared" in Linux terminology).
MountPropagationBidirectional :: MountPropagationMode & "Bidirectional"

// volumeDevice describes a mapping of a raw block device within a container.
VolumeDevice :: {
	// name must match the name of a persistentVolumeClaim in the pod
	name: string @go(Name) @protobuf(1,bytes,opt)

	// devicePath is the path inside of the container that the device will be mapped to.
	devicePath: string @go(DevicePath) @protobuf(2,bytes,opt)
}

// EnvVar represents an environment variable present in a Container.
EnvVar :: {
	// Name of the environment variable. Must be a C_IDENTIFIER.
	name: string @go(Name) @protobuf(1,bytes,opt)

	// Variable references $(VAR_NAME) are expanded
	// using the previous defined environment variables in the container and
	// any service environment variables. If a variable cannot be resolved,
	// the reference in the input string will be unchanged. The $(VAR_NAME)
	// syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped
	// references will never be expanded, regardless of whether the variable
	// exists or not.
	// Defaults to "".
	// +optional
	value?: string @go(Value) @protobuf(2,bytes,opt)

	// Source for the environment variable's value. Cannot be used if value is not empty.
	// +optional
	valueFrom?: null | EnvVarSource @go(ValueFrom,*EnvVarSource) @protobuf(3,bytes,opt)
}

// EnvVarSource represents a source for the value of an EnvVar.
EnvVarSource :: {
	// Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations,
	// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP.
	// +optional
	fieldRef?: null | ObjectFieldSelector @go(FieldRef,*ObjectFieldSelector) @protobuf(1,bytes,opt)

	// Selects a resource of the container: only resources limits and requests
	// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
	// +optional
	resourceFieldRef?: null | ResourceFieldSelector @go(ResourceFieldRef,*ResourceFieldSelector) @protobuf(2,bytes,opt)

	// Selects a key of a ConfigMap.
	// +optional
	configMapKeyRef?: null | ConfigMapKeySelector @go(ConfigMapKeyRef,*ConfigMapKeySelector) @protobuf(3,bytes,opt)

	// Selects a key of a secret in the pod's namespace
	// +optional
	secretKeyRef?: null | SecretKeySelector @go(SecretKeyRef,*SecretKeySelector) @protobuf(4,bytes,opt)
}

// ObjectFieldSelector selects an APIVersioned field of an object.
ObjectFieldSelector :: {
	// Version of the schema the FieldPath is written in terms of, defaults to "v1".
	// +optional
	apiVersion?: string @go(APIVersion) @protobuf(1,bytes,opt)

	// Path of the field to select in the specified API version.
	fieldPath: string @go(FieldPath) @protobuf(2,bytes,opt)
}

// ResourceFieldSelector represents container resources (cpu, memory) and their output format
ResourceFieldSelector :: {
	// Container name: required for volumes, optional for env vars
	// +optional
	containerName?: string @go(ContainerName) @protobuf(1,bytes,opt)

	// Required: resource to select
	resource: string @go(Resource) @protobuf(2,bytes,opt)

	// Specifies the output format of the exposed resources, defaults to "1"
	// +optional
	divisor?: resource.Quantity @go(Divisor) @protobuf(3,bytes,opt)
}

// Selects a key from a ConfigMap.
ConfigMapKeySelector :: {
	LocalObjectReference

	// The key to select.
	key: string @go(Key) @protobuf(2,bytes,opt)

	// Specify whether the ConfigMap or its key must be defined
	// +optional
	optional?: null | bool @go(Optional,*bool) @protobuf(3,varint,opt)
}

// SecretKeySelector selects a key of a Secret.
SecretKeySelector :: {
	LocalObjectReference

	// The key of the secret to select from.  Must be a valid secret key.
	key: string @go(Key) @protobuf(2,bytes,opt)

	// Specify whether the Secret or its key must be defined
	// +optional
	optional?: null | bool @go(Optional,*bool) @protobuf(3,varint,opt)
}

// EnvFromSource represents the source of a set of ConfigMaps
EnvFromSource :: {
	// An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER.
	// +optional
	prefix?: string @go(Prefix) @protobuf(1,bytes,opt)

	// The ConfigMap to select from
	// +optional
	configMapRef?: null | ConfigMapEnvSource @go(ConfigMapRef,*ConfigMapEnvSource) @protobuf(2,bytes,opt)

	// The Secret to select from
	// +optional
	secretRef?: null | SecretEnvSource @go(SecretRef,*SecretEnvSource) @protobuf(3,bytes,opt)
}

// ConfigMapEnvSource selects a ConfigMap to populate the environment
// variables with.
//
// The contents of the target ConfigMap's Data field will represent the
// key-value pairs as environment variables.
ConfigMapEnvSource :: {
	LocalObjectReference

	// Specify whether the ConfigMap must be defined
	// +optional
	optional?: null | bool @go(Optional,*bool) @protobuf(2,varint,opt)
}

// SecretEnvSource selects a Secret to populate the environment
// variables with.
//
// The contents of the target Secret's Data field will represent the
// key-value pairs as environment variables.
SecretEnvSource :: {
	LocalObjectReference

	// Specify whether the Secret must be defined
	// +optional
	optional?: null | bool @go(Optional,*bool) @protobuf(2,varint,opt)
}

// HTTPHeader describes a custom header to be used in HTTP probes
HTTPHeader :: {
	// The header field name
	name: string @go(Name) @protobuf(1,bytes,opt)

	// The header field value
	value: string @go(Value) @protobuf(2,bytes,opt)
}

// HTTPGetAction describes an action based on HTTP Get requests.
HTTPGetAction :: {
	// Path to access on the HTTP server.
	// +optional
	path?: string @go(Path) @protobuf(1,bytes,opt)

	// Name or number of the port to access on the container.
	// Number must be in the range 1 to 65535.
	// Name must be an IANA_SVC_NAME.
	port: intstr.IntOrString @go(Port) @protobuf(2,bytes,opt)

	// Host name to connect to, defaults to the pod IP. You probably want to set
	// "Host" in httpHeaders instead.
	// +optional
	host?: string @go(Host) @protobuf(3,bytes,opt)

	// Scheme to use for connecting to the host.
	// Defaults to HTTP.
	// +optional
	scheme?: URIScheme @go(Scheme) @protobuf(4,bytes,opt,casttype=URIScheme)

	// Custom headers to set in the request. HTTP allows repeated headers.
	// +optional
	httpHeaders?: [...HTTPHeader] @go(HTTPHeaders,[]HTTPHeader) @protobuf(5,bytes,rep)
}

// URIScheme identifies the scheme used for connection to a host for Get actions
URIScheme :: string // enumURIScheme

enumURIScheme ::
	URISchemeHTTP |
	URISchemeHTTPS

// URISchemeHTTP means that the scheme used will be http://
URISchemeHTTP :: URIScheme & "HTTP"

// URISchemeHTTPS means that the scheme used will be https://
URISchemeHTTPS :: URIScheme & "HTTPS"

// TCPSocketAction describes an action based on opening a socket
TCPSocketAction :: {
	// Number or name of the port to access on the container.
	// Number must be in the range 1 to 65535.
	// Name must be an IANA_SVC_NAME.
	port: intstr.IntOrString @go(Port) @protobuf(1,bytes,opt)

	// Optional: Host name to connect to, defaults to the pod IP.
	// +optional
	host?: string @go(Host) @protobuf(2,bytes,opt)
}

// ExecAction describes a "run in container" action.
ExecAction :: {
	// Command is the command line to execute inside the container, the working directory for the
	// command  is root ('/') in the container's filesystem. The command is simply exec'd, it is
	// not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use
	// a shell, you need to explicitly call out to that shell.
	// Exit status of 0 is treated as live/healthy and non-zero is unhealthy.
	// +optional
	command?: [...string] @go(Command,[]string) @protobuf(1,bytes,rep)
}

// Probe describes a health check to be performed against a container to determine whether it is
// alive or ready to receive traffic.
Probe :: {
	Handler

	// Number of seconds after the container has started before liveness probes are initiated.
	// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
	// +optional
	initialDelaySeconds?: int32 @go(InitialDelaySeconds) @protobuf(2,varint,opt)

	// Number of seconds after which the probe times out.
	// Defaults to 1 second. Minimum value is 1.
	// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
	// +optional
	timeoutSeconds?: int32 @go(TimeoutSeconds) @protobuf(3,varint,opt)

	// How often (in seconds) to perform the probe.
	// Default to 10 seconds. Minimum value is 1.
	// +optional
	periodSeconds?: int32 @go(PeriodSeconds) @protobuf(4,varint,opt)

	// Minimum consecutive successes for the probe to be considered successful after having failed.
	// Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.
	// +optional
	successThreshold?: int32 @go(SuccessThreshold) @protobuf(5,varint,opt)

	// Minimum consecutive failures for the probe to be considered failed after having succeeded.
	// Defaults to 3. Minimum value is 1.
	// +optional
	failureThreshold?: int32 @go(FailureThreshold) @protobuf(6,varint,opt)
}

// PullPolicy describes a policy for if/when to pull a container image
PullPolicy :: string // enumPullPolicy

enumPullPolicy ::
	PullAlways |
	PullNever |
	PullIfNotPresent

// PullAlways means that kubelet always attempts to pull the latest image. Container will fail If the pull fails.
PullAlways :: PullPolicy & "Always"

// PullNever means that kubelet never pulls an image, but only uses a local image. Container will fail if the image isn't present
PullNever :: PullPolicy & "Never"

// PullIfNotPresent means that kubelet pulls if the image isn't present on disk. Container will fail if the image isn't present and the pull fails.
PullIfNotPresent :: PullPolicy & "IfNotPresent"

// PreemptionPolicy describes a policy for if/when to preempt a pod.
PreemptionPolicy :: string // enumPreemptionPolicy

enumPreemptionPolicy ::
	PreemptLowerPriority |
	PreemptNever

// PreemptLowerPriority means that pod can preempt other pods with lower priority.
PreemptLowerPriority :: PreemptionPolicy & "PreemptLowerPriority"

// PreemptNever means that pod never preempts other pods with lower priority.
PreemptNever :: PreemptionPolicy & "Never"

// TerminationMessagePolicy describes how termination messages are retrieved from a container.
TerminationMessagePolicy :: string // enumTerminationMessagePolicy

enumTerminationMessagePolicy ::
	TerminationMessageReadFile |
	TerminationMessageFallbackToLogsOnError

// TerminationMessageReadFile is the default behavior and will set the container status message to
// the contents of the container's terminationMessagePath when the container exits.
TerminationMessageReadFile :: TerminationMessagePolicy & "File"

// TerminationMessageFallbackToLogsOnError will read the most recent contents of the container logs
// for the container status message when the container exits with an error and the
// terminationMessagePath has no contents.
TerminationMessageFallbackToLogsOnError :: TerminationMessagePolicy & "FallbackToLogsOnError"

// Capability represent POSIX capabilities type
Capability :: string

// Adds and removes POSIX capabilities from running containers.
Capabilities :: {
	// Added capabilities
	// +optional
	add?: [...Capability] @go(Add,[]Capability) @protobuf(1,bytes,rep,casttype=Capability)

	// Removed capabilities
	// +optional
	drop?: [...Capability] @go(Drop,[]Capability) @protobuf(2,bytes,rep,casttype=Capability)
}

// ResourceRequirements describes the compute resource requirements.
ResourceRequirements :: {
	// Limits describes the maximum amount of compute resources allowed.
	// More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
	// +optional
	limits?: ResourceList @go(Limits) @protobuf(1,bytes,rep,casttype=ResourceList,castkey=ResourceName)

	// Requests describes the minimum amount of compute resources required.
	// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
	// otherwise to an implementation-defined value.
	// More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
	// +optional
	requests?: ResourceList @go(Requests) @protobuf(2,bytes,rep,casttype=ResourceList,castkey=ResourceName)
}

// TerminationMessagePathDefault means the default path to capture the application termination message running in a container
TerminationMessagePathDefault :: "/dev/termination-log"

// A single application container that you want to run within a pod.
Container :: {
	// Name of the container specified as a DNS_LABEL.
	// Each container in a pod must have a unique name (DNS_LABEL).
	// Cannot be updated.
	name: string @go(Name) @protobuf(1,bytes,opt)

	// Docker image name.
	// More info: https://kubernetes.io/docs/concepts/containers/images
	// This field is optional to allow higher level config management to default or override
	// container images in workload controllers like Deployments and StatefulSets.
	// +optional
	image?: string @go(Image) @protobuf(2,bytes,opt)

	// Entrypoint array. Not executed within a shell.
	// The docker image's ENTRYPOINT is used if this is not provided.
	// Variable references $(VAR_NAME) are expanded using the container's environment. If a variable
	// cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax
	// can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded,
	// regardless of whether the variable exists or not.
	// Cannot be updated.
	// More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
	// +optional
	command?: [...string] @go(Command,[]string) @protobuf(3,bytes,rep)

	// Arguments to the entrypoint.
	// The docker image's CMD is used if this is not provided.
	// Variable references $(VAR_NAME) are expanded using the container's environment. If a variable
	// cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax
	// can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded,
	// regardless of whether the variable exists or not.
	// Cannot be updated.
	// More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
	// +optional
	args?: [...string] @go(Args,[]string) @protobuf(4,bytes,rep)

	// Container's working directory.
	// If not specified, the container runtime's default will be used, which
	// might be configured in the container image.
	// Cannot be updated.
	// +optional
	workingDir?: string @go(WorkingDir) @protobuf(5,bytes,opt)

	// List of ports to expose from the container. Exposing a port here gives
	// the system additional information about the network connections a
	// container uses, but is primarily informational. Not specifying a port here
	// DOES NOT prevent that port from being exposed. Any port which is
	// listening on the default "0.0.0.0" address inside a container will be
	// accessible from the network.
	// Cannot be updated.
	// +optional
	// +patchMergeKey=containerPort
	// +patchStrategy=merge
	// +listType=map
	// +listMapKey=containerPort
	// +listMapKey=protocol
	ports?: [...ContainerPort] @go(Ports,[]ContainerPort) @protobuf(6,bytes,rep)

	// List of sources to populate environment variables in the container.
	// The keys defined within a source must be a C_IDENTIFIER. All invalid keys
	// will be reported as an event when the container is starting. When a key exists in multiple
	// sources, the value associated with the last source will take precedence.
	// Values defined by an Env with a duplicate key will take precedence.
	// Cannot be updated.
	// +optional
	envFrom?: [...EnvFromSource] @go(EnvFrom,[]EnvFromSource) @protobuf(19,bytes,rep)

	// List of environment variables to set in the container.
	// Cannot be updated.
	// +optional
	// +patchMergeKey=name
	// +patchStrategy=merge
	env?: [...EnvVar] @go(Env,[]EnvVar) @protobuf(7,bytes,rep)

	// Compute Resources required by this container.
	// Cannot be updated.
	// More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
	// +optional
	resources?: ResourceRequirements @go(Resources) @protobuf(8,bytes,opt)

	// Pod volumes to mount into the container's filesystem.
	// Cannot be updated.
	// +optional
	// +patchMergeKey=mountPath
	// +patchStrategy=merge
	volumeMounts?: [...VolumeMount] @go(VolumeMounts,[]VolumeMount) @protobuf(9,bytes,rep)

	// volumeDevices is the list of block devices to be used by the container.
	// This is a beta feature.
	// +patchMergeKey=devicePath
	// +patchStrategy=merge
	// +optional
	volumeDevices?: [...VolumeDevice] @go(VolumeDevices,[]VolumeDevice) @protobuf(21,bytes,rep)

	// Periodic probe of container liveness.
	// Container will be restarted if the probe fails.
	// Cannot be updated.
	// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
	// +optional
	livenessProbe?: null | Probe @go(LivenessProbe,*Probe) @protobuf(10,bytes,opt)

	// Periodic probe of container service readiness.
	// Container will be removed from service endpoints if the probe fails.
	// Cannot be updated.
	// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
	// +optional
	readinessProbe?: null | Probe @go(ReadinessProbe,*Probe) @protobuf(11,bytes,opt)

	// StartupProbe indicates that the Pod has successfully initialized.
	// If specified, no other probes are executed until this completes successfully.
	// If this probe fails, the Pod will be restarted, just as if the livenessProbe failed.
	// This can be used to provide different probe parameters at the beginning of a Pod's lifecycle,
	// when it might take a long time to load data or warm a cache, than during steady-state operation.
	// This cannot be updated.
	// This is an alpha feature enabled by the StartupProbe feature flag.
	// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
	// +optional
	startupProbe?: null | Probe @go(StartupProbe,*Probe) @protobuf(22,bytes,opt)

	// Actions that the management system should take in response to container lifecycle events.
	// Cannot be updated.
	// +optional
	lifecycle?: null | Lifecycle @go(Lifecycle,*Lifecycle) @protobuf(12,bytes,opt)

	// Optional: Path at which the file to which the container's termination message
	// will be written is mounted into the container's filesystem.
	// Message written is intended to be brief final status, such as an assertion failure message.
	// Will be truncated by the node if greater than 4096 bytes. The total message length across
	// all containers will be limited to 12kb.
	// Defaults to /dev/termination-log.
	// Cannot be updated.
	// +optional
	terminationMessagePath?: string @go(TerminationMessagePath) @protobuf(13,bytes,opt)

	// Indicate how the termination message should be populated. File will use the contents of
	// terminationMessagePath to populate the container status message on both success and failure.
	// FallbackToLogsOnError will use the last chunk of container log output if the termination
	// message file is empty and the container exited with an error.
	// The log output is limited to 2048 bytes or 80 lines, whichever is smaller.
	// Defaults to File.
	// Cannot be updated.
	// +optional
	terminationMessagePolicy?: TerminationMessagePolicy @go(TerminationMessagePolicy) @protobuf(20,bytes,opt,casttype=TerminationMessagePolicy)

	// Image pull policy.
	// One of Always, Never, IfNotPresent.
	// Defaults to Always if :latest tag is specified, or IfNotPresent otherwise.
	// Cannot be updated.
	// More info: https://kubernetes.io/docs/concepts/containers/images#updating-images
	// +optional
	imagePullPolicy?: PullPolicy @go(ImagePullPolicy) @protobuf(14,bytes,opt,casttype=PullPolicy)

	// Security options the pod should run with.
	// More info: https://kubernetes.io/docs/concepts/policy/security-context/
	// More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
	// +optional
	securityContext?: null | SecurityContext @go(SecurityContext,*SecurityContext) @protobuf(15,bytes,opt)

	// Whether this container should allocate a buffer for stdin in the container runtime. If this
	// is not set, reads from stdin in the container will always result in EOF.
	// Default is false.
	// +optional
	stdin?: bool @go(Stdin) @protobuf(16,varint,opt)

	// Whether the container runtime should close the stdin channel after it has been opened by
	// a single attach. When stdin is true the stdin stream will remain open across multiple attach
	// sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the
	// first client attaches to stdin, and then remains open and accepts data until the client disconnects,
	// at which time stdin is closed and remains closed until the container is restarted. If this
	// flag is false, a container processes that reads from stdin will never receive an EOF.
	// Default is false
	// +optional
	stdinOnce?: bool @go(StdinOnce) @protobuf(17,varint,opt)

	// Whether this container should allocate a TTY for itself, also requires 'stdin' to be true.
	// Default is false.
	// +optional
	tty?: bool @go(TTY) @protobuf(18,varint,opt)
}

// Handler defines a specific action that should be taken
// TODO: pass structured data to these actions, and document that data here.
Handler :: {
	// One and only one of the following should be specified.
	// Exec specifies the action to take.
	// +optional
	exec?: null | ExecAction @go(Exec,*ExecAction) @protobuf(1,bytes,opt)

	// HTTPGet specifies the http request to perform.
	// +optional
	httpGet?: null | HTTPGetAction @go(HTTPGet,*HTTPGetAction) @protobuf(2,bytes,opt)

	// TCPSocket specifies an action involving a TCP port.
	// TCP hooks not yet supported
	// TODO: implement a realistic TCP lifecycle hook
	// +optional
	tcpSocket?: null | TCPSocketAction @go(TCPSocket,*TCPSocketAction) @protobuf(3,bytes,opt)
}

// Lifecycle describes actions that the management system should take in response to container lifecycle
// events. For the PostStart and PreStop lifecycle handlers, management of the container blocks
// until the action is complete, unless the container process fails, in which case the handler is aborted.
Lifecycle :: {
	// PostStart is called immediately after a container is created. If the handler fails,
	// the container is terminated and restarted according to its restart policy.
	// Other management of the container blocks until the hook completes.
	// More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks
	// +optional
	postStart?: null | Handler @go(PostStart,*Handler) @protobuf(1,bytes,opt)

	// PreStop is called immediately before a container is terminated due to an
	// API request or management event such as liveness/startup probe failure,
	// preemption, resource contention, etc. The handler is not called if the
	// container crashes or exits. The reason for termination is passed to the
	// handler. The Pod's termination grace period countdown begins before the
	// PreStop hooked is executed. Regardless of the outcome of the handler, the
	// container will eventually terminate within the Pod's termination grace
	// period. Other management of the container blocks until the hook completes
	// or until the termination grace period is reached.
	// More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks
	// +optional
	preStop?: null | Handler @go(PreStop,*Handler) @protobuf(2,bytes,opt)
}

ConditionStatus :: string // enumConditionStatus

enumConditionStatus ::
	ConditionTrue |
	ConditionFalse |
	ConditionUnknown

ConditionTrue ::    ConditionStatus & "True"
ConditionFalse ::   ConditionStatus & "False"
ConditionUnknown :: ConditionStatus & "Unknown"

// ContainerStateWaiting is a waiting state of a container.
ContainerStateWaiting :: {
	// (brief) reason the container is not yet running.
	// +optional
	reason?: string @go(Reason) @protobuf(1,bytes,opt)

	// Message regarding why the container is not yet running.
	// +optional
	message?: string @go(Message) @protobuf(2,bytes,opt)
}

// ContainerStateRunning is a running state of a container.
ContainerStateRunning :: {
	// Time at which the container was last (re-)started
	// +optional
	startedAt?: metav1.Time @go(StartedAt) @protobuf(1,bytes,opt)
}

// ContainerStateTerminated is a terminated state of a container.
ContainerStateTerminated :: {
	// Exit status from the last termination of the container
	exitCode: int32 @go(ExitCode) @protobuf(1,varint,opt)

	// Signal from the last termination of the container
	// +optional
	signal?: int32 @go(Signal) @protobuf(2,varint,opt)

	// (brief) reason from the last termination of the container
	// +optional
	reason?: string @go(Reason) @protobuf(3,bytes,opt)

	// Message regarding the last termination of the container
	// +optional
	message?: string @go(Message) @protobuf(4,bytes,opt)

	// Time at which previous execution of the container started
	// +optional
	startedAt?: metav1.Time @go(StartedAt) @protobuf(5,bytes,opt)

	// Time at which the container last terminated
	// +optional
	finishedAt?: metav1.Time @go(FinishedAt) @protobuf(6,bytes,opt)

	// Container's ID in the format 'docker://<container_id>'
	// +optional
	containerID?: string @go(ContainerID) @protobuf(7,bytes,opt)
}

// ContainerState holds a possible state of container.
// Only one of its members may be specified.
// If none of them is specified, the default one is ContainerStateWaiting.
ContainerState :: {
	// Details about a waiting container
	// +optional
	waiting?: null | ContainerStateWaiting @go(Waiting,*ContainerStateWaiting) @protobuf(1,bytes,opt)

	// Details about a running container
	// +optional
	running?: null | ContainerStateRunning @go(Running,*ContainerStateRunning) @protobuf(2,bytes,opt)

	// Details about a terminated container
	// +optional
	terminated?: null | ContainerStateTerminated @go(Terminated,*ContainerStateTerminated) @protobuf(3,bytes,opt)
}

// ContainerStatus contains details for the current status of this container.
ContainerStatus :: {
	// This must be a DNS_LABEL. Each container in a pod must have a unique name.
	// Cannot be updated.
	name: string @go(Name) @protobuf(1,bytes,opt)

	// Details about the container's current condition.
	// +optional
	state?: ContainerState @go(State) @protobuf(2,bytes,opt)

	// Details about the container's last termination condition.
	// +optional
	lastState?: ContainerState @go(LastTerminationState) @protobuf(3,bytes,opt)

	// Specifies whether the container has passed its readiness probe.
	ready: bool @go(Ready) @protobuf(4,varint,opt)

	// The number of times the container has been restarted, currently based on
	// the number of dead containers that have not yet been removed.
	// Note that this is calculated from dead containers. But those containers are subject to
	// garbage collection. This value will get capped at 5 by GC.
	restartCount: int32 @go(RestartCount) @protobuf(5,varint,opt)

	// The image the container is running.
	// More info: https://kubernetes.io/docs/concepts/containers/images
	// TODO(dchen1107): Which image the container is running with?
	image: string @go(Image) @protobuf(6,bytes,opt)

	// ImageID of the container's image.
	imageID: string @go(ImageID) @protobuf(7,bytes,opt)

	// Container's ID in the format 'docker://<container_id>'.
	// +optional
	containerID?: string @go(ContainerID) @protobuf(8,bytes,opt)

	// Specifies whether the container has passed its startup probe.
	// Initialized as false, becomes true after startupProbe is considered successful.
	// Resets to false when the container is restarted, or if kubelet loses state temporarily.
	// Is always true when no startupProbe is defined.
	// +optional
	started?: null | bool @go(Started,*bool) @protobuf(9,varint,opt)
}

// PodPhase is a label for the condition of a pod at the current time.
PodPhase :: string // enumPodPhase

enumPodPhase ::
	PodPending |
	PodRunning |
	PodSucceeded |
	PodFailed |
	PodUnknown

// PodPending means the pod has been accepted by the system, but one or more of the containers
// has not been started. This includes time before being bound to a node, as well as time spent
// pulling images onto the host.
PodPending :: PodPhase & "Pending"

// PodRunning means the pod has been bound to a node and all of the containers have been started.
// At least one container is still running or is in the process of being restarted.
PodRunning :: PodPhase & "Running"

// PodSucceeded means that all containers in the pod have voluntarily terminated
// with a container exit code of 0, and the system is not going to restart any of these containers.
PodSucceeded :: PodPhase & "Succeeded"

// PodFailed means that all containers in the pod have terminated, and at least one container has
// terminated in a failure (exited with a non-zero exit code or was stopped by the system).
PodFailed :: PodPhase & "Failed"

// PodUnknown means that for some reason the state of the pod could not be obtained, typically due
// to an error in communicating with the host of the pod.
PodUnknown :: PodPhase & "Unknown"

// PodConditionType is a valid value for PodCondition.Type
PodConditionType :: string // enumPodConditionType

enumPodConditionType ::
	ContainersReady |
	PodInitialized |
	PodReady |
	PodScheduled

// ContainersReady indicates whether all containers in the pod are ready.
ContainersReady :: PodConditionType & "ContainersReady"

// PodInitialized means that all init containers in the pod have started successfully.
PodInitialized :: PodConditionType & "Initialized"

// PodReady means the pod is able to service requests and should be added to the
// load balancing pools of all matching services.
PodReady :: PodConditionType & "Ready"

// PodScheduled represents status of the scheduling process for this pod.
PodScheduled :: PodConditionType & "PodScheduled"

// PodReasonUnschedulable reason in PodScheduled PodCondition means that the scheduler
// can't schedule the pod right now, for example due to insufficient resources in the cluster.
PodReasonUnschedulable :: "Unschedulable"

// PodCondition contains details for the current condition of this pod.
PodCondition :: {
	// Type is the type of the condition.
	// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
	type: PodConditionType @go(Type) @protobuf(1,bytes,opt,casttype=PodConditionType)

	// Status is the status of the condition.
	// Can be True, False, Unknown.
	// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
	status: ConditionStatus @go(Status) @protobuf(2,bytes,opt,casttype=ConditionStatus)

	// Last time we probed the condition.
	// +optional
	lastProbeTime?: metav1.Time @go(LastProbeTime) @protobuf(3,bytes,opt)

	// Last time the condition transitioned from one status to another.
	// +optional
	lastTransitionTime?: metav1.Time @go(LastTransitionTime) @protobuf(4,bytes,opt)

	// Unique, one-word, CamelCase reason for the condition's last transition.
	// +optional
	reason?: string @go(Reason) @protobuf(5,bytes,opt)

	// Human-readable message indicating details about last transition.
	// +optional
	message?: string @go(Message) @protobuf(6,bytes,opt)
}

// RestartPolicy describes how the container should be restarted.
// Only one of the following restart policies may be specified.
// If none of the following policies is specified, the default one
// is RestartPolicyAlways.
RestartPolicy :: string // enumRestartPolicy

enumRestartPolicy ::
	RestartPolicyAlways |
	RestartPolicyOnFailure |
	RestartPolicyNever

RestartPolicyAlways ::    RestartPolicy & "Always"
RestartPolicyOnFailure :: RestartPolicy & "OnFailure"
RestartPolicyNever ::     RestartPolicy & "Never"

// DNSPolicy defines how a pod's DNS will be configured.
DNSPolicy :: string // enumDNSPolicy

enumDNSPolicy ::
	DNSClusterFirstWithHostNet |
	DNSClusterFirst |
	DNSDefault |
	DNSNone

// DNSClusterFirstWithHostNet indicates that the pod should use cluster DNS
// first, if it is available, then fall back on the default
// (as determined by kubelet) DNS settings.
DNSClusterFirstWithHostNet :: DNSPolicy & "ClusterFirstWithHostNet"

// DNSClusterFirst indicates that the pod should use cluster DNS
// first unless hostNetwork is true, if it is available, then
// fall back on the default (as determined by kubelet) DNS settings.
DNSClusterFirst :: DNSPolicy & "ClusterFirst"

// DNSDefault indicates that the pod should use the default (as
// determined by kubelet) DNS settings.
DNSDefault :: DNSPolicy & "Default"

// DNSNone indicates that the pod should use empty DNS settings. DNS
// parameters such as nameservers and search paths should be defined via
// DNSConfig.
DNSNone :: DNSPolicy & "None"

// DefaultTerminationGracePeriodSeconds indicates the default duration in
// seconds a pod needs to terminate gracefully.
DefaultTerminationGracePeriodSeconds :: 30

// A node selector represents the union of the results of one or more label queries
// over a set of nodes; that is, it represents the OR of the selectors represented
// by the node selector terms.
NodeSelector :: {
	//Required. A list of node selector terms. The terms are ORed.
	nodeSelectorTerms: [...NodeSelectorTerm] @go(NodeSelectorTerms,[]NodeSelectorTerm) @protobuf(1,bytes,rep)
}

// A null or empty node selector term matches no objects. The requirements of
// them are ANDed.
// The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.
NodeSelectorTerm :: {
	// A list of node selector requirements by node's labels.
	// +optional
	matchExpressions?: [...NodeSelectorRequirement] @go(MatchExpressions,[]NodeSelectorRequirement) @protobuf(1,bytes,rep)

	// A list of node selector requirements by node's fields.
	// +optional
	matchFields?: [...NodeSelectorRequirement] @go(MatchFields,[]NodeSelectorRequirement) @protobuf(2,bytes,rep)
}

// A node selector requirement is a selector that contains values, a key, and an operator
// that relates the key and values.
NodeSelectorRequirement :: {
	// The label key that the selector applies to.
	key: string @go(Key) @protobuf(1,bytes,opt)

	// Represents a key's relationship to a set of values.
	// Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
	operator: NodeSelectorOperator @go(Operator) @protobuf(2,bytes,opt,casttype=NodeSelectorOperator)

	// An array of string values. If the operator is In or NotIn,
	// the values array must be non-empty. If the operator is Exists or DoesNotExist,
	// the values array must be empty. If the operator is Gt or Lt, the values
	// array must have a single element, which will be interpreted as an integer.
	// This array is replaced during a strategic merge patch.
	// +optional
	values?: [...string] @go(Values,[]string) @protobuf(3,bytes,rep)
}

// A node selector operator is the set of operators that can be used in
// a node selector requirement.
NodeSelectorOperator :: string // enumNodeSelectorOperator

enumNodeSelectorOperator ::
	NodeSelectorOpIn |
	NodeSelectorOpNotIn |
	NodeSelectorOpExists |
	NodeSelectorOpDoesNotExist |
	NodeSelectorOpGt |
	NodeSelectorOpLt

NodeSelectorOpIn ::           NodeSelectorOperator & "In"
NodeSelectorOpNotIn ::        NodeSelectorOperator & "NotIn"
NodeSelectorOpExists ::       NodeSelectorOperator & "Exists"
NodeSelectorOpDoesNotExist :: NodeSelectorOperator & "DoesNotExist"
NodeSelectorOpGt ::           NodeSelectorOperator & "Gt"
NodeSelectorOpLt ::           NodeSelectorOperator & "Lt"

// A topology selector term represents the result of label queries.
// A null or empty topology selector term matches no objects.
// The requirements of them are ANDed.
// It provides a subset of functionality as NodeSelectorTerm.
// This is an alpha feature and may change in the future.
TopologySelectorTerm :: {
	// A list of topology selector requirements by labels.
	// +optional
	matchLabelExpressions?: [...TopologySelectorLabelRequirement] @go(MatchLabelExpressions,[]TopologySelectorLabelRequirement) @protobuf(1,bytes,rep)
}

// A topology selector requirement is a selector that matches given label.
// This is an alpha feature and may change in the future.
TopologySelectorLabelRequirement :: {
	// The label key that the selector applies to.
	key: string @go(Key) @protobuf(1,bytes,opt)

	// An array of string values. One value must match the label to be selected.
	// Each entry in Values is ORed.
	values: [...string] @go(Values,[]string) @protobuf(2,bytes,rep)
}

// Affinity is a group of affinity scheduling rules.
Affinity :: {
	// Describes node affinity scheduling rules for the pod.
	// +optional
	nodeAffinity?: null | NodeAffinity @go(NodeAffinity,*NodeAffinity) @protobuf(1,bytes,opt)

	// Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).
	// +optional
	podAffinity?: null | PodAffinity @go(PodAffinity,*PodAffinity) @protobuf(2,bytes,opt)

	// Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).
	// +optional
	podAntiAffinity?: null | PodAntiAffinity @go(PodAntiAffinity,*PodAntiAffinity) @protobuf(3,bytes,opt)
}

// Pod affinity is a group of inter pod affinity scheduling rules.
PodAffinity :: {
	// If the affinity requirements specified by this field are not met at
	// scheduling time, the pod will not be scheduled onto the node.
	// If the affinity requirements specified by this field cease to be met
	// at some point during pod execution (e.g. due to a pod label update), the
	// system may or may not try to eventually evict the pod from its node.
	// When there are multiple elements, the lists of nodes corresponding to each
	// podAffinityTerm are intersected, i.e. all terms must be satisfied.
	// +optional
	requiredDuringSchedulingIgnoredDuringExecution?: [...PodAffinityTerm] @go(RequiredDuringSchedulingIgnoredDuringExecution,[]PodAffinityTerm) @protobuf(1,bytes,rep)

	// The scheduler will prefer to schedule pods to nodes that satisfy
	// the affinity expressions specified by this field, but it may choose
	// a node that violates one or more of the expressions. The node that is
	// most preferred is the one with the greatest sum of weights, i.e.
	// for each node that meets all of the scheduling requirements (resource
	// request, requiredDuringScheduling affinity expressions, etc.),
	// compute a sum by iterating through the elements of this field and adding
	// "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the
	// node(s) with the highest sum are the most preferred.
	// +optional
	preferredDuringSchedulingIgnoredDuringExecution?: [...WeightedPodAffinityTerm] @go(PreferredDuringSchedulingIgnoredDuringExecution,[]WeightedPodAffinityTerm) @protobuf(2,bytes,rep)
}

// Pod anti affinity is a group of inter pod anti affinity scheduling rules.
PodAntiAffinity :: {
	// If the anti-affinity requirements specified by this field are not met at
	// scheduling time, the pod will not be scheduled onto the node.
	// If the anti-affinity requirements specified by this field cease to be met
	// at some point during pod execution (e.g. due to a pod label update), the
	// system may or may not try to eventually evict the pod from its node.
	// When there are multiple elements, the lists of nodes corresponding to each
	// podAffinityTerm are intersected, i.e. all terms must be satisfied.
	// +optional
	requiredDuringSchedulingIgnoredDuringExecution?: [...PodAffinityTerm] @go(RequiredDuringSchedulingIgnoredDuringExecution,[]PodAffinityTerm) @protobuf(1,bytes,rep)

	// The scheduler will prefer to schedule pods to nodes that satisfy
	// the anti-affinity expressions specified by this field, but it may choose
	// a node that violates one or more of the expressions. The node that is
	// most preferred is the one with the greatest sum of weights, i.e.
	// for each node that meets all of the scheduling requirements (resource
	// request, requiredDuringScheduling anti-affinity expressions, etc.),
	// compute a sum by iterating through the elements of this field and adding
	// "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the
	// node(s) with the highest sum are the most preferred.
	// +optional
	preferredDuringSchedulingIgnoredDuringExecution?: [...WeightedPodAffinityTerm] @go(PreferredDuringSchedulingIgnoredDuringExecution,[]WeightedPodAffinityTerm) @protobuf(2,bytes,rep)
}

// The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)
WeightedPodAffinityTerm :: {
	// weight associated with matching the corresponding podAffinityTerm,
	// in the range 1-100.
	weight: int32 @go(Weight) @protobuf(1,varint,opt)

	// Required. A pod affinity term, associated with the corresponding weight.
	podAffinityTerm: PodAffinityTerm @go(PodAffinityTerm) @protobuf(2,bytes,opt)
}

// Defines a set of pods (namely those matching the labelSelector
// relative to the given namespace(s)) that this pod should be
// co-located (affinity) or not co-located (anti-affinity) with,
// where co-located is defined as running on a node whose value of
// the label with key <topologyKey> matches that of any node on which
// a pod of the set of pods is running
PodAffinityTerm :: {
	// A label query over a set of resources, in this case pods.
	// +optional
	labelSelector?: null | metav1.LabelSelector @go(LabelSelector,*metav1.LabelSelector) @protobuf(1,bytes,opt)

	// namespaces specifies which namespaces the labelSelector applies to (matches against);
	// null or empty list means "this pod's namespace"
	// +optional
	namespaces?: [...string] @go(Namespaces,[]string) @protobuf(2,bytes,rep)

	// This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
	// the labelSelector in the specified namespaces, where co-located is defined as running on a node
	// whose value of the label with key topologyKey matches that of any node on which any of the
	// selected pods is running.
	// Empty topologyKey is not allowed.
	topologyKey: string @go(TopologyKey) @protobuf(3,bytes,opt)
}

// Node affinity is a group of node affinity scheduling rules.
NodeAffinity :: {
	// If the affinity requirements specified by this field are not met at
	// scheduling time, the pod will not be scheduled onto the node.
	// If the affinity requirements specified by this field cease to be met
	// at some point during pod execution (e.g. due to an update), the system
	// may or may not try to eventually evict the pod from its node.
	// +optional
	requiredDuringSchedulingIgnoredDuringExecution?: null | NodeSelector @go(RequiredDuringSchedulingIgnoredDuringExecution,*NodeSelector) @protobuf(1,bytes,opt)

	// The scheduler will prefer to schedule pods to nodes that satisfy
	// the affinity expressions specified by this field, but it may choose
	// a node that violates one or more of the expressions. The node that is
	// most preferred is the one with the greatest sum of weights, i.e.
	// for each node that meets all of the scheduling requirements (resource
	// request, requiredDuringScheduling affinity expressions, etc.),
	// compute a sum by iterating through the elements of this field and adding
	// "weight" to the sum if the node matches the corresponding matchExpressions; the
	// node(s) with the highest sum are the most preferred.
	// +optional
	preferredDuringSchedulingIgnoredDuringExecution?: [...PreferredSchedulingTerm] @go(PreferredDuringSchedulingIgnoredDuringExecution,[]PreferredSchedulingTerm) @protobuf(2,bytes,rep)
}

// An empty preferred scheduling term matches all objects with implicit weight 0
// (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).
PreferredSchedulingTerm :: {
	// Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.
	weight: int32 @go(Weight) @protobuf(1,varint,opt)

	// A node selector term, associated with the corresponding weight.
	preference: NodeSelectorTerm @go(Preference) @protobuf(2,bytes,opt)
}

// The node this Taint is attached to has the "effect" on
// any pod that does not tolerate the Taint.
Taint :: {
	// Required. The taint key to be applied to a node.
	key: string @go(Key) @protobuf(1,bytes,opt)

	// Required. The taint value corresponding to the taint key.
	// +optional
	value?: string @go(Value) @protobuf(2,bytes,opt)

	// Required. The effect of the taint on pods
	// that do not tolerate the taint.
	// Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
	effect: TaintEffect @go(Effect) @protobuf(3,bytes,opt,casttype=TaintEffect)

	// TimeAdded represents the time at which the taint was added.
	// It is only written for NoExecute taints.
	// +optional
	timeAdded?: null | metav1.Time @go(TimeAdded,*metav1.Time) @protobuf(4,bytes,opt)
}

TaintEffect :: string // enumTaintEffect

enumTaintEffect ::
	TaintEffectNoSchedule |
	TaintEffectPreferNoSchedule |
	TaintEffectNoExecute

// Do not allow new pods to schedule onto the node unless they tolerate the taint,
// but allow all pods submitted to Kubelet without going through the scheduler
// to start, and allow all already-running pods to continue running.
// Enforced by the scheduler.
TaintEffectNoSchedule :: TaintEffect & "NoSchedule"

// Like TaintEffectNoSchedule, but the scheduler tries not to schedule
// new pods onto the node, rather than prohibiting new pods from scheduling
// onto the node entirely. Enforced by the scheduler.
TaintEffectPreferNoSchedule :: TaintEffect & "PreferNoSchedule"

// Evict any already-running pods that do not tolerate the taint.
// Currently enforced by NodeController.
TaintEffectNoExecute :: TaintEffect & "NoExecute"

// The pod this Toleration is attached to tolerates any taint that matches
// the triple <key,value,effect> using the matching operator <operator>.
Toleration :: {
	// Key is the taint key that the toleration applies to. Empty means match all taint keys.
	// If the key is empty, operator must be Exists; this combination means to match all values and all keys.
	// +optional
	key?: string @go(Key) @protobuf(1,bytes,opt)

	// Operator represents a key's relationship to the value.
	// Valid operators are Exists and Equal. Defaults to Equal.
	// Exists is equivalent to wildcard for value, so that a pod can
	// tolerate all taints of a particular category.
	// +optional
	operator?: TolerationOperator @go(Operator) @protobuf(2,bytes,opt,casttype=TolerationOperator)

	// Value is the taint value the toleration matches to.
	// If the operator is Exists, the value should be empty, otherwise just a regular string.
	// +optional
	value?: string @go(Value) @protobuf(3,bytes,opt)

	// Effect indicates the taint effect to match. Empty means match all taint effects.
	// When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
	// +optional
	effect?: TaintEffect @go(Effect) @protobuf(4,bytes,opt,casttype=TaintEffect)

	// TolerationSeconds represents the period of time the toleration (which must be
	// of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default,
	// it is not set, which means tolerate the taint forever (do not evict). Zero and
	// negative values will be treated as 0 (evict immediately) by the system.
	// +optional
	tolerationSeconds?: null | int64 @go(TolerationSeconds,*int64) @protobuf(5,varint,opt)
}

// A toleration operator is the set of operators that can be used in a toleration.
TolerationOperator :: string // enumTolerationOperator

enumTolerationOperator ::
	TolerationOpExists |
	TolerationOpEqual

TolerationOpExists :: TolerationOperator & "Exists"
TolerationOpEqual ::  TolerationOperator & "Equal"

// PodReadinessGate contains the reference to a pod condition
PodReadinessGate :: {
	// ConditionType refers to a condition in the pod's condition list with matching type.
	conditionType: PodConditionType @go(ConditionType) @protobuf(1,bytes,opt,casttype=PodConditionType)
}

// PodSpec is a description of a pod.
PodSpec :: {
	// List of volumes that can be mounted by containers belonging to the pod.
	// More info: https://kubernetes.io/docs/concepts/storage/volumes
	// +optional
	// +patchMergeKey=name
	// +patchStrategy=merge,retainKeys
	volumes?: [...Volume] @go(Volumes,[]Volume) @protobuf(1,bytes,rep)

	// List of initialization containers belonging to the pod.
	// Init containers are executed in order prior to containers being started. If any
	// init container fails, the pod is considered to have failed and is handled according
	// to its restartPolicy. The name for an init container or normal container must be
	// unique among all containers.
	// Init containers may not have Lifecycle actions, Readiness probes, Liveness probes, or Startup probes.
	// The resourceRequirements of an init container are taken into account during scheduling
	// by finding the highest request/limit for each resource type, and then using the max of
	// of that value or the sum of the normal containers. Limits are applied to init containers
	// in a similar fashion.
	// Init containers cannot currently be added or removed.
	// Cannot be updated.
	// More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
	// +patchMergeKey=name
	// +patchStrategy=merge
	initContainers?: [...Container] @go(InitContainers,[]Container) @protobuf(20,bytes,rep)

	// List of containers belonging to the pod.
	// Containers cannot currently be added or removed.
	// There must be at least one container in a Pod.
	// Cannot be updated.
	// +patchMergeKey=name
	// +patchStrategy=merge
	containers: [...Container] @go(Containers,[]Container) @protobuf(2,bytes,rep)

	// List of ephemeral containers run in this pod. Ephemeral containers may be run in an existing
	// pod to perform user-initiated actions such as debugging. This list cannot be specified when
	// creating a pod, and it cannot be modified by updating the pod spec. In order to add an
	// ephemeral container to an existing pod, use the pod's ephemeralcontainers subresource.
	// This field is alpha-level and is only honored by servers that enable the EphemeralContainers feature.
	// +optional
	// +patchMergeKey=name
	// +patchStrategy=merge
	ephemeralContainers?: [...EphemeralContainer] @go(EphemeralContainers,[]EphemeralContainer) @protobuf(34,bytes,rep)

	// Restart policy for all containers within the pod.
	// One of Always, OnFailure, Never.
	// Default to Always.
	// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy
	// +optional
	restartPolicy?: RestartPolicy @go(RestartPolicy) @protobuf(3,bytes,opt,casttype=RestartPolicy)

	// Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request.
	// Value must be non-negative integer. The value zero indicates delete immediately.
	// If this value is nil, the default grace period will be used instead.
	// The grace period is the duration in seconds after the processes running in the pod are sent
	// a termination signal and the time when the processes are forcibly halted with a kill signal.
	// Set this value longer than the expected cleanup time for your process.
	// Defaults to 30 seconds.
	// +optional
	terminationGracePeriodSeconds?: null | int64 @go(TerminationGracePeriodSeconds,*int64) @protobuf(4,varint,opt)

	// Optional duration in seconds the pod may be active on the node relative to
	// StartTime before the system will actively try to mark it failed and kill associated containers.
	// Value must be a positive integer.
	// +optional
	activeDeadlineSeconds?: null | int64 @go(ActiveDeadlineSeconds,*int64) @protobuf(5,varint,opt)

	// Set DNS policy for the pod.
	// Defaults to "ClusterFirst".
	// Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'.
	// DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy.
	// To have DNS options set along with hostNetwork, you have to specify DNS policy
	// explicitly to 'ClusterFirstWithHostNet'.
	// +optional
	dnsPolicy?: DNSPolicy @go(DNSPolicy) @protobuf(6,bytes,opt,casttype=DNSPolicy)

	// NodeSelector is a selector which must be true for the pod to fit on a node.
	// Selector which must match a node's labels for the pod to be scheduled on that node.
	// More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
	// +optional
	nodeSelector?: {<_>: string} @go(NodeSelector,map[string]string) @protobuf(7,bytes,rep)

	// ServiceAccountName is the name of the ServiceAccount to use to run this pod.
	// More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
	// +optional
	serviceAccountName?: string @go(ServiceAccountName) @protobuf(8,bytes,opt)

	// DeprecatedServiceAccount is a depreciated alias for ServiceAccountName.
	// Deprecated: Use serviceAccountName instead.
	// +k8s:conversion-gen=false
	// +optional
	serviceAccount?: string @go(DeprecatedServiceAccount) @protobuf(9,bytes,opt)

	// AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.
	// +optional
	automountServiceAccountToken?: null | bool @go(AutomountServiceAccountToken,*bool) @protobuf(21,varint,opt)

	// NodeName is a request to schedule this pod onto a specific node. If it is non-empty,
	// the scheduler simply schedules this pod onto that node, assuming that it fits resource
	// requirements.
	// +optional
	nodeName?: string @go(NodeName) @protobuf(10,bytes,opt)

	// Host networking requested for this pod. Use the host's network namespace.
	// If this option is set, the ports that will be used must be specified.
	// Default to false.
	// +k8s:conversion-gen=false
	// +optional
	hostNetwork?: bool @go(HostNetwork) @protobuf(11,varint,opt)

	// Use the host's pid namespace.
	// Optional: Default to false.
	// +k8s:conversion-gen=false
	// +optional
	hostPID?: bool @go(HostPID) @protobuf(12,varint,opt)

	// Use the host's ipc namespace.
	// Optional: Default to false.
	// +k8s:conversion-gen=false
	// +optional
	hostIPC?: bool @go(HostIPC) @protobuf(13,varint,opt)

	// Share a single process namespace between all of the containers in a pod.
	// When this is set containers will be able to view and signal processes from other containers
	// in the same pod, and the first process in each container will not be assigned PID 1.
	// HostPID and ShareProcessNamespace cannot both be set.
	// Optional: Default to false.
	// This field is beta-level and may be disabled with the PodShareProcessNamespace feature.
	// +k8s:conversion-gen=false
	// +optional
	shareProcessNamespace?: null | bool @go(ShareProcessNamespace,*bool) @protobuf(27,varint,opt)

	// SecurityContext holds pod-level security attributes and common container settings.
	// Optional: Defaults to empty.  See type description for default values of each field.
	// +optional
	securityContext?: null | PodSecurityContext @go(SecurityContext,*PodSecurityContext) @protobuf(14,bytes,opt)

	// ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec.
	// If specified, these secrets will be passed to individual puller implementations for them to use. For example,
	// in the case of docker, only DockerConfig type secrets are honored.
	// More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod
	// +optional
	// +patchMergeKey=name
	// +patchStrategy=merge
	imagePullSecrets?: [...LocalObjectReference] @go(ImagePullSecrets,[]LocalObjectReference) @protobuf(15,bytes,rep)

	// Specifies the hostname of the Pod
	// If not specified, the pod's hostname will be set to a system-defined value.
	// +optional
	hostname?: string @go(Hostname) @protobuf(16,bytes,opt)

	// If specified, the fully qualified Pod hostname will be "<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>".
	// If not specified, the pod will not have a domainname at all.
	// +optional
	subdomain?: string @go(Subdomain) @protobuf(17,bytes,opt)

	// If specified, the pod's scheduling constraints
	// +optional
	affinity?: null | Affinity @go(Affinity,*Affinity) @protobuf(18,bytes,opt)

	// If specified, the pod will be dispatched by specified scheduler.
	// If not specified, the pod will be dispatched by default scheduler.
	// +optional
	schedulerName?: string @go(SchedulerName) @protobuf(19,bytes,opt)

	// If specified, the pod's tolerations.
	// +optional
	tolerations?: [...Toleration] @go(Tolerations,[]Toleration) @protobuf(22,bytes,opt)

	// HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts
	// file if specified. This is only valid for non-hostNetwork pods.
	// +optional
	// +patchMergeKey=ip
	// +patchStrategy=merge
	hostAliases?: [...HostAlias] @go(HostAliases,[]HostAlias) @protobuf(23,bytes,rep)

	// If specified, indicates the pod's priority. "system-node-critical" and
	// "system-cluster-critical" are two special keywords which indicate the
	// highest priorities with the former being the highest priority. Any other
	// name must be defined by creating a PriorityClass object with that name.
	// If not specified, the pod priority will be default or zero if there is no
	// default.
	// +optional
	priorityClassName?: string @go(PriorityClassName) @protobuf(24,bytes,opt)

	// The priority value. Various system components use this field to find the
	// priority of the pod. When Priority Admission Controller is enabled, it
	// prevents users from setting this field. The admission controller populates
	// this field from PriorityClassName.
	// The higher the value, the higher the priority.
	// +optional
	priority?: null | int32 @go(Priority,*int32) @protobuf(25,bytes,opt)

	// Specifies the DNS parameters of a pod.
	// Parameters specified here will be merged to the generated DNS
	// configuration based on DNSPolicy.
	// +optional
	dnsConfig?: null | PodDNSConfig @go(DNSConfig,*PodDNSConfig) @protobuf(26,bytes,opt)

	// If specified, all readiness gates will be evaluated for pod readiness.
	// A pod is ready when all its containers are ready AND
	// all conditions specified in the readiness gates have status equal to "True"
	// More info: https://git.k8s.io/enhancements/keps/sig-network/0007-pod-ready%2B%2B.md
	// +optional
	readinessGates?: [...PodReadinessGate] @go(ReadinessGates,[]PodReadinessGate) @protobuf(28,bytes,opt)

	// RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used
	// to run this pod.  If no RuntimeClass resource matches the named class, the pod will not be run.
	// If unset or empty, the "legacy" RuntimeClass will be used, which is an implicit class with an
	// empty definition that uses the default runtime handler.
	// More info: https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md
	// This is a beta feature as of Kubernetes v1.14.
	// +optional
	runtimeClassName?: null | string @go(RuntimeClassName,*string) @protobuf(29,bytes,opt)

	// EnableServiceLinks indicates whether information about services should be injected into pod's
	// environment variables, matching the syntax of Docker links.
	// Optional: Defaults to true.
	// +optional
	enableServiceLinks?: null | bool @go(EnableServiceLinks,*bool) @protobuf(30,varint,opt)

	// PreemptionPolicy is the Policy for preempting pods with lower priority.
	// One of Never, PreemptLowerPriority.
	// Defaults to PreemptLowerPriority if unset.
	// This field is alpha-level and is only honored by servers that enable the NonPreemptingPriority feature.
	// +optional
	preemptionPolicy?: null | PreemptionPolicy @go(PreemptionPolicy,*PreemptionPolicy) @protobuf(31,bytes,opt)

	// Overhead represents the resource overhead associated with running a pod for a given RuntimeClass.
	// This field will be autopopulated at admission time by the RuntimeClass admission controller. If
	// the RuntimeClass admission controller is enabled, overhead must not be set in Pod create requests.
	// The RuntimeClass admission controller will reject Pod create requests which have the overhead already
	// set. If RuntimeClass is configured and selected in the PodSpec, Overhead will be set to the value
	// defined in the corresponding RuntimeClass, otherwise it will remain unset and treated as zero.
	// More info: https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md
	// This field is alpha-level as of Kubernetes v1.16, and is only honored by servers that enable the PodOverhead feature.
	// +optional
	overhead?: ResourceList @go(Overhead) @protobuf(32,bytes,opt)

	// TopologySpreadConstraints describes how a group of pods ought to spread across topology
	// domains. Scheduler will schedule pods in a way which abides by the constraints.
	// This field is alpha-level and is only honored by clusters that enables the EvenPodsSpread
	// feature.
	// All topologySpreadConstraints are ANDed.
	// +optional
	// +patchMergeKey=topologyKey
	// +patchStrategy=merge
	// +listType=map
	// +listMapKey=topologyKey
	// +listMapKey=whenUnsatisfiable
	topologySpreadConstraints?: [...TopologySpreadConstraint] @go(TopologySpreadConstraints,[]TopologySpreadConstraint) @protobuf(33,bytes,opt)
}

UnsatisfiableConstraintAction :: string // enumUnsatisfiableConstraintAction

enumUnsatisfiableConstraintAction ::
	DoNotSchedule |
	ScheduleAnyway

// DoNotSchedule instructs the scheduler not to schedule the pod
// when constraints are not satisfied.
DoNotSchedule :: UnsatisfiableConstraintAction & "DoNotSchedule"

// ScheduleAnyway instructs the scheduler to schedule the pod
// even if constraints are not satisfied.
ScheduleAnyway :: UnsatisfiableConstraintAction & "ScheduleAnyway"

// TopologySpreadConstraint specifies how to spread matching pods among the given topology.
TopologySpreadConstraint :: {
	// MaxSkew describes the degree to which pods may be unevenly distributed.
	// It's the maximum permitted difference between the number of matching pods in
	// any two topology domains of a given topology type.
	// For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same
	// labelSelector spread as 1/1/0:
	// +-------+-------+-------+
	// | zone1 | zone2 | zone3 |
	// +-------+-------+-------+
	// |   P   |   P   |       |
	// +-------+-------+-------+
	// - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1;
	// scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2)
	// violate MaxSkew(1).
	// - if MaxSkew is 2, incoming pod can be scheduled onto any zone.
	// It's a required field. Default value is 1 and 0 is not allowed.
	maxSkew: int32 @go(MaxSkew) @protobuf(1,varint,opt)

	// TopologyKey is the key of node labels. Nodes that have a label with this key
	// and identical values are considered to be in the same topology.
	// We consider each <key, value> as a "bucket", and try to put balanced number
	// of pods into each bucket.
	// It's a required field.
	topologyKey: string @go(TopologyKey) @protobuf(2,bytes,opt)

	// WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy
	// the spread constraint.
	// - DoNotSchedule (default) tells the scheduler not to schedule it
	// - ScheduleAnyway tells the scheduler to still schedule it
	// It's considered as "Unsatisfiable" if and only if placing incoming pod on any
	// topology violates "MaxSkew".
	// For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same
	// labelSelector spread as 3/1/1:
	// +-------+-------+-------+
	// | zone1 | zone2 | zone3 |
	// +-------+-------+-------+
	// | P P P |   P   |   P   |
	// +-------+-------+-------+
	// If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled
	// to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies
	// MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler
	// won't make it *more* imbalanced.
	// It's a required field.
	whenUnsatisfiable: UnsatisfiableConstraintAction @go(WhenUnsatisfiable) @protobuf(3,bytes,opt,casttype=UnsatisfiableConstraintAction)

	// LabelSelector is used to find matching pods.
	// Pods that match this label selector are counted to determine the number of pods
	// in their corresponding topology domain.
	// +optional
	labelSelector?: null | metav1.LabelSelector @go(LabelSelector,*metav1.LabelSelector) @protobuf(4,bytes,opt)
}

// The default value for enableServiceLinks attribute.
DefaultEnableServiceLinks :: true

// HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the
// pod's hosts file.
HostAlias :: {
	// IP address of the host file entry.
	ip?: string @go(IP) @protobuf(1,bytes,opt)

	// Hostnames for the above IP address.
	hostnames?: [...string] @go(Hostnames,[]string) @protobuf(2,bytes,rep)
}

// PodSecurityContext holds pod-level security attributes and common container settings.
// Some fields are also present in container.securityContext.  Field values of
// container.securityContext take precedence over field values of PodSecurityContext.
PodSecurityContext :: {
	// The SELinux context to be applied to all containers.
	// If unspecified, the container runtime will allocate a random SELinux context for each
	// container.  May also be set in SecurityContext.  If set in
	// both SecurityContext and PodSecurityContext, the value specified in SecurityContext
	// takes precedence for that container.
	// +optional
	seLinuxOptions?: null | SELinuxOptions @go(SELinuxOptions,*SELinuxOptions) @protobuf(1,bytes,opt)

	// The Windows specific settings applied to all containers.
	// If unspecified, the options within a container's SecurityContext will be used.
	// If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.
	// +optional
	windowsOptions?: null | WindowsSecurityContextOptions @go(WindowsOptions,*WindowsSecurityContextOptions) @protobuf(8,bytes,opt)

	// The UID to run the entrypoint of the container process.
	// Defaults to user specified in image metadata if unspecified.
	// May also be set in SecurityContext.  If set in both SecurityContext and
	// PodSecurityContext, the value specified in SecurityContext takes precedence
	// for that container.
	// +optional
	runAsUser?: null | int64 @go(RunAsUser,*int64) @protobuf(2,varint,opt)

	// The GID to run the entrypoint of the container process.
	// Uses runtime default if unset.
	// May also be set in SecurityContext.  If set in both SecurityContext and
	// PodSecurityContext, the value specified in SecurityContext takes precedence
	// for that container.
	// +optional
	runAsGroup?: null | int64 @go(RunAsGroup,*int64) @protobuf(6,varint,opt)

	// Indicates that the container must run as a non-root user.
	// If true, the Kubelet will validate the image at runtime to ensure that it
	// does not run as UID 0 (root) and fail to start the container if it does.
	// If unset or false, no such validation will be performed.
	// May also be set in SecurityContext.  If set in both SecurityContext and
	// PodSecurityContext, the value specified in SecurityContext takes precedence.
	// +optional
	runAsNonRoot?: null | bool @go(RunAsNonRoot,*bool) @protobuf(3,varint,opt)

	// A list of groups applied to the first process run in each container, in addition
	// to the container's primary GID.  If unspecified, no groups will be added to
	// any container.
	// +optional
	supplementalGroups?: [...int64] @go(SupplementalGroups,[]int64) @protobuf(4,varint,rep)

	// A special supplemental group that applies to all containers in a pod.
	// Some volume types allow the Kubelet to change the ownership of that volume
	// to be owned by the pod:
	//
	// 1. The owning GID will be the FSGroup
	// 2. The setgid bit is set (new files created in the volume will be owned by FSGroup)
	// 3. The permission bits are OR'd with rw-rw----
	//
	// If unset, the Kubelet will not modify the ownership and permissions of any volume.
	// +optional
	fsGroup?: null | int64 @go(FSGroup,*int64) @protobuf(5,varint,opt)

	// Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported
	// sysctls (by the container runtime) might fail to launch.
	// +optional
	sysctls?: [...Sysctl] @go(Sysctls,[]Sysctl) @protobuf(7,bytes,rep)
}

// PodQOSClass defines the supported qos classes of Pods.
PodQOSClass :: string // enumPodQOSClass

enumPodQOSClass ::
	PodQOSGuaranteed |
	PodQOSBurstable |
	PodQOSBestEffort

// PodQOSGuaranteed is the Guaranteed qos class.
PodQOSGuaranteed :: PodQOSClass & "Guaranteed"

// PodQOSBurstable is the Burstable qos class.
PodQOSBurstable :: PodQOSClass & "Burstable"

// PodQOSBestEffort is the BestEffort qos class.
PodQOSBestEffort :: PodQOSClass & "BestEffort"

// PodDNSConfig defines the DNS parameters of a pod in addition to
// those generated from DNSPolicy.
PodDNSConfig :: {
	// A list of DNS name server IP addresses.
	// This will be appended to the base nameservers generated from DNSPolicy.
	// Duplicated nameservers will be removed.
	// +optional
	nameservers?: [...string] @go(Nameservers,[]string) @protobuf(1,bytes,rep)

	// A list of DNS search domains for host-name lookup.
	// This will be appended to the base search paths generated from DNSPolicy.
	// Duplicated search paths will be removed.
	// +optional
	searches?: [...string] @go(Searches,[]string) @protobuf(2,bytes,rep)

	// A list of DNS resolver options.
	// This will be merged with the base options generated from DNSPolicy.
	// Duplicated entries will be removed. Resolution options given in Options
	// will override those that appear in the base DNSPolicy.
	// +optional
	options?: [...PodDNSConfigOption] @go(Options,[]PodDNSConfigOption) @protobuf(3,bytes,rep)
}

// PodDNSConfigOption defines DNS resolver options of a pod.
PodDNSConfigOption :: {
	// Required.
	name?: string @go(Name) @protobuf(1,bytes,opt)

	// +optional
	value?: null | string @go(Value,*string) @protobuf(2,bytes,opt)
}

// IP address information for entries in the (plural) PodIPs field.
// Each entry includes:
//    IP: An IP address allocated to the pod. Routable at least within the cluster.
PodIP :: {
	// ip is an IP address (IPv4 or IPv6) assigned to the pod
	ip?: string @go(IP) @protobuf(1,bytes,opt)
}

// EphemeralContainerCommon is a copy of all fields in Container to be inlined in
// EphemeralContainer. This separate type allows easy conversion from EphemeralContainer
// to Container and allows separate documentation for the fields of EphemeralContainer.
// When a new field is added to Container it must be added here as well.
EphemeralContainerCommon :: {
	// Name of the ephemeral container specified as a DNS_LABEL.
	// This name must be unique among all containers, init containers and ephemeral containers.
	name: string @go(Name) @protobuf(1,bytes,opt)

	// Docker image name.
	// More info: https://kubernetes.io/docs/concepts/containers/images
	image?: string @go(Image) @protobuf(2,bytes,opt)

	// Entrypoint array. Not executed within a shell.
	// The docker image's ENTRYPOINT is used if this is not provided.
	// Variable references $(VAR_NAME) are expanded using the container's environment. If a variable
	// cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax
	// can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded,
	// regardless of whether the variable exists or not.
	// Cannot be updated.
	// More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
	// +optional
	command?: [...string] @go(Command,[]string) @protobuf(3,bytes,rep)

	// Arguments to the entrypoint.
	// The docker image's CMD is used if this is not provided.
	// Variable references $(VAR_NAME) are expanded using the container's environment. If a variable
	// cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax
	// can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded,
	// regardless of whether the variable exists or not.
	// Cannot be updated.
	// More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
	// +optional
	args?: [...string] @go(Args,[]string) @protobuf(4,bytes,rep)

	// Container's working directory.
	// If not specified, the container runtime's default will be used, which
	// might be configured in the container image.
	// Cannot be updated.
	// +optional
	workingDir?: string @go(WorkingDir) @protobuf(5,bytes,opt)

	// Ports are not allowed for ephemeral containers.
	ports?: [...ContainerPort] @go(Ports,[]ContainerPort) @protobuf(6,bytes,rep)

	// List of sources to populate environment variables in the container.
	// The keys defined within a source must be a C_IDENTIFIER. All invalid keys
	// will be reported as an event when the container is starting. When a key exists in multiple
	// sources, the value associated with the last source will take precedence.
	// Values defined by an Env with a duplicate key will take precedence.
	// Cannot be updated.
	// +optional
	envFrom?: [...EnvFromSource] @go(EnvFrom,[]EnvFromSource) @protobuf(19,bytes,rep)

	// List of environment variables to set in the container.
	// Cannot be updated.
	// +optional
	// +patchMergeKey=name
	// +patchStrategy=merge
	env?: [...EnvVar] @go(Env,[]EnvVar) @protobuf(7,bytes,rep)

	// Resources are not allowed for ephemeral containers. Ephemeral containers use spare resources
	// already allocated to the pod.
	// +optional
	resources?: ResourceRequirements @go(Resources) @protobuf(8,bytes,opt)

	// Pod volumes to mount into the container's filesystem.
	// Cannot be updated.
	// +optional
	// +patchMergeKey=mountPath
	// +patchStrategy=merge
	volumeMounts?: [...VolumeMount] @go(VolumeMounts,[]VolumeMount) @protobuf(9,bytes,rep)

	// volumeDevices is the list of block devices to be used by the container.
	// This is a beta feature.
	// +patchMergeKey=devicePath
	// +patchStrategy=merge
	// +optional
	volumeDevices?: [...VolumeDevice] @go(VolumeDevices,[]VolumeDevice) @protobuf(21,bytes,rep)

	// Probes are not allowed for ephemeral containers.
	// +optional
	livenessProbe?: null | Probe @go(LivenessProbe,*Probe) @protobuf(10,bytes,opt)

	// Probes are not allowed for ephemeral containers.
	// +optional
	readinessProbe?: null | Probe @go(ReadinessProbe,*Probe) @protobuf(11,bytes,opt)

	// Probes are not allowed for ephemeral containers.
	// +optional
	startupProbe?: null | Probe @go(StartupProbe,*Probe) @protobuf(22,bytes,opt)

	// Lifecycle is not allowed for ephemeral containers.
	// +optional
	lifecycle?: null | Lifecycle @go(Lifecycle,*Lifecycle) @protobuf(12,bytes,opt)

	// Optional: Path at which the file to which the container's termination message
	// will be written is mounted into the container's filesystem.
	// Message written is intended to be brief final status, such as an assertion failure message.
	// Will be truncated by the node if greater than 4096 bytes. The total message length across
	// all containers will be limited to 12kb.
	// Defaults to /dev/termination-log.
	// Cannot be updated.
	// +optional
	terminationMessagePath?: string @go(TerminationMessagePath) @protobuf(13,bytes,opt)

	// Indicate how the termination message should be populated. File will use the contents of
	// terminationMessagePath to populate the container status message on both success and failure.
	// FallbackToLogsOnError will use the last chunk of container log output if the termination
	// message file is empty and the container exited with an error.
	// The log output is limited to 2048 bytes or 80 lines, whichever is smaller.
	// Defaults to File.
	// Cannot be updated.
	// +optional
	terminationMessagePolicy?: TerminationMessagePolicy @go(TerminationMessagePolicy) @protobuf(20,bytes,opt,casttype=TerminationMessagePolicy)

	// Image pull policy.
	// One of Always, Never, IfNotPresent.
	// Defaults to Always if :latest tag is specified, or IfNotPresent otherwise.
	// Cannot be updated.
	// More info: https://kubernetes.io/docs/concepts/containers/images#updating-images
	// +optional
	imagePullPolicy?: PullPolicy @go(ImagePullPolicy) @protobuf(14,bytes,opt,casttype=PullPolicy)

	// SecurityContext is not allowed for ephemeral containers.
	// +optional
	securityContext?: null | SecurityContext @go(SecurityContext,*SecurityContext) @protobuf(15,bytes,opt)

	// Whether this container should allocate a buffer for stdin in the container runtime. If this
	// is not set, reads from stdin in the container will always result in EOF.
	// Default is false.
	// +optional
	stdin?: bool @go(Stdin) @protobuf(16,varint,opt)

	// Whether the container runtime should close the stdin channel after it has been opened by
	// a single attach. When stdin is true the stdin stream will remain open across multiple attach
	// sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the
	// first client attaches to stdin, and then remains open and accepts data until the client disconnects,
	// at which time stdin is closed and remains closed until the container is restarted. If this
	// flag is false, a container processes that reads from stdin will never receive an EOF.
	// Default is false
	// +optional
	stdinOnce?: bool @go(StdinOnce) @protobuf(17,varint,opt)

	// Whether this container should allocate a TTY for itself, also requires 'stdin' to be true.
	// Default is false.
	// +optional
	tty?: bool @go(TTY) @protobuf(18,varint,opt)
}

// An EphemeralContainer is a container that may be added temporarily to an existing pod for
// user-initiated activities such as debugging. Ephemeral containers have no resource or
// scheduling guarantees, and they will not be restarted when they exit or when a pod is
// removed or restarted. If an ephemeral container causes a pod to exceed its resource
// allocation, the pod may be evicted.
// Ephemeral containers may not be added by directly updating the pod spec. They must be added
// via the pod's ephemeralcontainers subresource, and they will appear in the pod spec
// once added.
// This is an alpha feature enabled by the EphemeralContainers feature flag.
EphemeralContainer :: {
	EphemeralContainerCommon

	// If set, the name of the container from PodSpec that this ephemeral container targets.
	// The ephemeral container will be run in the namespaces (IPC, PID, etc) of this container.
	// If not set then the ephemeral container is run in whatever namespaces are shared
	// for the pod. Note that the container runtime must support this feature.
	// +optional
	targetContainerName?: string @go(TargetContainerName) @protobuf(2,bytes,opt)
}

// PodStatus represents information about the status of a pod. Status may trail the actual
// state of a system, especially if the node that hosts the pod cannot contact the control
// plane.
PodStatus :: {
	// The phase of a Pod is a simple, high-level summary of where the Pod is in its lifecycle.
	// The conditions array, the reason and message fields, and the individual container status
	// arrays contain more detail about the pod's status.
	// There are five possible phase values:
	//
	// Pending: The pod has been accepted by the Kubernetes system, but one or more of the
	// container images has not been created. This includes time before being scheduled as
	// well as time spent downloading images over the network, which could take a while.
	// Running: The pod has been bound to a node, and all of the containers have been created.
	// At least one container is still running, or is in the process of starting or restarting.
	// Succeeded: All containers in the pod have terminated in success, and will not be restarted.
	// Failed: All containers in the pod have terminated, and at least one container has
	// terminated in failure. The container either exited with non-zero status or was terminated
	// by the system.
	// Unknown: For some reason the state of the pod could not be obtained, typically due to an
	// error in communicating with the host of the pod.
	//
	// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase
	// +optional
	phase?: PodPhase @go(Phase) @protobuf(1,bytes,opt,casttype=PodPhase)

	// Current service state of pod.
	// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
	// +optional
	// +patchMergeKey=type
	// +patchStrategy=merge
	conditions?: [...PodCondition] @go(Conditions,[]PodCondition) @protobuf(2,bytes,rep)

	// A human readable message indicating details about why the pod is in this condition.
	// +optional
	message?: string @go(Message) @protobuf(3,bytes,opt)

	// A brief CamelCase message indicating details about why the pod is in this state.
	// e.g. 'Evicted'
	// +optional
	reason?: string @go(Reason) @protobuf(4,bytes,opt)

	// nominatedNodeName is set only when this pod preempts other pods on the node, but it cannot be
	// scheduled right away as preemption victims receive their graceful termination periods.
	// This field does not guarantee that the pod will be scheduled on this node. Scheduler may decide
	// to place the pod elsewhere if other nodes become available sooner. Scheduler may also decide to
	// give the resources on this node to a higher priority pod that is created after preemption.
	// As a result, this field may be different than PodSpec.nodeName when the pod is
	// scheduled.
	// +optional
	nominatedNodeName?: string @go(NominatedNodeName) @protobuf(11,bytes,opt)

	// IP address of the host to which the pod is assigned. Empty if not yet scheduled.
	// +optional
	hostIP?: string @go(HostIP) @protobuf(5,bytes,opt)

	// IP address allocated to the pod. Routable at least within the cluster.
	// Empty if not yet allocated.
	// +optional
	podIP?: string @go(PodIP) @protobuf(6,bytes,opt)

	// podIPs holds the IP addresses allocated to the pod. If this field is specified, the 0th entry must
	// match the podIP field. Pods may be allocated at most 1 value for each of IPv4 and IPv6. This list
	// is empty if no IPs have been allocated yet.
	// +optional
	// +patchStrategy=merge
	// +patchMergeKey=ip
	podIPs?: [...PodIP] @go(PodIPs,[]PodIP) @protobuf(12,bytes,rep)

	// RFC 3339 date and time at which the object was acknowledged by the Kubelet.
	// This is before the Kubelet pulled the container image(s) for the pod.
	// +optional
	startTime?: null | metav1.Time @go(StartTime,*metav1.Time) @protobuf(7,bytes,opt)

	// The list has one entry per init container in the manifest. The most recent successful
	// init container will have ready = true, the most recently started container will have
	// startTime set.
	// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status
	initContainerStatuses?: [...ContainerStatus] @go(InitContainerStatuses,[]ContainerStatus) @protobuf(10,bytes,rep)

	// The list has one entry per container in the manifest. Each entry is currently the output
	// of `docker inspect`.
	// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status
	// +optional
	containerStatuses?: [...ContainerStatus] @go(ContainerStatuses,[]ContainerStatus) @protobuf(8,bytes,rep)

	// The Quality of Service (QOS) classification assigned to the pod based on resource requirements
	// See PodQOSClass type for available QOS classes
	// More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md
	// +optional
	qosClass?: PodQOSClass @go(QOSClass) @protobuf(9,bytes,rep)

	// Status for any ephemeral containers that have run in this pod.
	// This field is alpha-level and is only populated by servers that enable the EphemeralContainers feature.
	// +optional
	ephemeralContainerStatuses?: [...ContainerStatus] @go(EphemeralContainerStatuses,[]ContainerStatus) @protobuf(13,bytes,rep)
}

// PodStatusResult is a wrapper for PodStatus returned by kubelet that can be encode/decoded
PodStatusResult :: {
	metav1.TypeMeta

	// Standard object's metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
	// +optional
	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)

	// Most recently observed status of the pod.
	// This data may not be up to date.
	// Populated by the system.
	// Read-only.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
	// +optional
	status?: PodStatus @go(Status) @protobuf(2,bytes,opt)
}

// Pod is a collection of containers that can run on a host. This resource is created
// by clients and scheduled onto hosts.
Pod :: {
	metav1.TypeMeta

	// Standard object's metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
	// +optional
	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)

	// Specification of the desired behavior of the pod.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
	// +optional
	spec?: PodSpec @go(Spec) @protobuf(2,bytes,opt)

	// Most recently observed status of the pod.
	// This data may not be up to date.
	// Populated by the system.
	// Read-only.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
	// +optional
	status?: PodStatus @go(Status) @protobuf(3,bytes,opt)
}

// PodList is a list of Pods.
PodList :: {
	metav1.TypeMeta

	// Standard list metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
	// +optional
	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)

	// List of pods.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md
	items: [...Pod] @go(Items,[]Pod) @protobuf(2,bytes,rep)
}

// PodTemplateSpec describes the data a pod should have when created from a template
PodTemplateSpec :: {
	// Standard object's metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
	// +optional
	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)

	// Specification of the desired behavior of the pod.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
	// +optional
	spec?: PodSpec @go(Spec) @protobuf(2,bytes,opt)
}

// PodTemplate describes a template for creating copies of a predefined pod.
PodTemplate :: {
	metav1.TypeMeta

	// Standard object's metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
	// +optional
	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)

	// Template defines the pods that will be created from this pod template.
	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
	// +optional
	template?: PodTemplateSpec @go(Template) @protobuf(2,bytes,opt)
}

// PodTemplateList is a list of PodTemplates.
PodTemplateList :: {
	metav1.TypeMeta

	// Standard list metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
	// +optional
	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)

	// List of pod templates
	items: [...PodTemplate] @go(Items,[]PodTemplate) @protobuf(2,bytes,rep)
}

// ReplicationControllerSpec is the specification of a replication controller.
ReplicationControllerSpec :: {
	// Replicas is the number of desired replicas.
	// This is a pointer to distinguish between explicit zero and unspecified.
	// Defaults to 1.
	// More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller
	// +optional
	replicas?: null | int32 @go(Replicas,*int32) @protobuf(1,varint,opt)

	// Minimum number of seconds for which a newly created pod should be ready
	// without any of its container crashing, for it to be considered available.
	// Defaults to 0 (pod will be considered available as soon as it is ready)
	// +optional
	minReadySeconds?: int32 @go(MinReadySeconds) @protobuf(4,varint,opt)

	// Selector is a label query over pods that should match the Replicas count.
	// If Selector is empty, it is defaulted to the labels present on the Pod template.
	// Label keys and values that must match in order to be controlled by this replication
	// controller, if empty defaulted to labels on Pod template.
	// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
	// +optional
	selector?: {<_>: string} @go(Selector,map[string]string) @protobuf(2,bytes,rep)

	// Template is the object that describes the pod that will be created if
	// insufficient replicas are detected. This takes precedence over a TemplateRef.
	// More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template
	// +optional
	template?: null | PodTemplateSpec @go(Template,*PodTemplateSpec) @protobuf(3,bytes,opt)
}

// ReplicationControllerStatus represents the current status of a replication
// controller.
ReplicationControllerStatus :: {
	// Replicas is the most recently oberved number of replicas.
	// More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller
	replicas: int32 @go(Replicas) @protobuf(1,varint,opt)

	// The number of pods that have labels matching the labels of the pod template of the replication controller.
	// +optional
	fullyLabeledReplicas?: int32 @go(FullyLabeledReplicas) @protobuf(2,varint,opt)

	// The number of ready replicas for this replication controller.
	// +optional
	readyReplicas?: int32 @go(ReadyReplicas) @protobuf(4,varint,opt)

	// The number of available replicas (ready for at least minReadySeconds) for this replication controller.
	// +optional
	availableReplicas?: int32 @go(AvailableReplicas) @protobuf(5,varint,opt)

	// ObservedGeneration reflects the generation of the most recently observed replication controller.
	// +optional
	observedGeneration?: int64 @go(ObservedGeneration) @protobuf(3,varint,opt)

	// Represents the latest available observations of a replication controller's current state.
	// +optional
	// +patchMergeKey=type
	// +patchStrategy=merge
	conditions?: [...ReplicationControllerCondition] @go(Conditions,[]ReplicationControllerCondition) @protobuf(6,bytes,rep)
}

ReplicationControllerConditionType :: string // enumReplicationControllerConditionType

enumReplicationControllerConditionType ::
	ReplicationControllerReplicaFailure

// ReplicationControllerReplicaFailure is added in a replication controller when one of its pods
// fails to be created due to insufficient quota, limit ranges, pod security policy, node selectors,
// etc. or deleted due to kubelet being down or finalizers are failing.
ReplicationControllerReplicaFailure :: ReplicationControllerConditionType & "ReplicaFailure"

// ReplicationControllerCondition describes the state of a replication controller at a certain point.
ReplicationControllerCondition :: {
	// Type of replication controller condition.
	type: ReplicationControllerConditionType @go(Type) @protobuf(1,bytes,opt,casttype=ReplicationControllerConditionType)

	// Status of the condition, one of True, False, Unknown.
	status: ConditionStatus @go(Status) @protobuf(2,bytes,opt,casttype=ConditionStatus)

	// The last time the condition transitioned from one status to another.
	// +optional
	lastTransitionTime?: metav1.Time @go(LastTransitionTime) @protobuf(3,bytes,opt)

	// The reason for the condition's last transition.
	// +optional
	reason?: string @go(Reason) @protobuf(4,bytes,opt)

	// A human readable message indicating details about the transition.
	// +optional
	message?: string @go(Message) @protobuf(5,bytes,opt)
}

// ReplicationController represents the configuration of a replication controller.
ReplicationController :: {
	metav1.TypeMeta

	// If the Labels of a ReplicationController are empty, they are defaulted to
	// be the same as the Pod(s) that the replication controller manages.
	// Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
	// +optional
	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)

	// Spec defines the specification of the desired behavior of the replication controller.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
	// +optional
	spec?: ReplicationControllerSpec @go(Spec) @protobuf(2,bytes,opt)

	// Status is the most recently observed status of the replication controller.
	// This data may be out of date by some window of time.
	// Populated by the system.
	// Read-only.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
	// +optional
	status?: ReplicationControllerStatus @go(Status) @protobuf(3,bytes,opt)
}

// ReplicationControllerList is a collection of replication controllers.
ReplicationControllerList :: {
	metav1.TypeMeta

	// Standard list metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
	// +optional
	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)

	// List of replication controllers.
	// More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller
	items: [...ReplicationController] @go(Items,[]ReplicationController) @protobuf(2,bytes,rep)
}

// Session Affinity Type string
ServiceAffinity :: string // enumServiceAffinity

enumServiceAffinity ::
	ServiceAffinityClientIP |
	ServiceAffinityNone

// ServiceAffinityClientIP is the Client IP based.
ServiceAffinityClientIP :: ServiceAffinity & "ClientIP"

// ServiceAffinityNone - no session affinity.
ServiceAffinityNone :: ServiceAffinity & "None"

DefaultClientIPServiceAffinitySeconds :: int32 & 10800

// SessionAffinityConfig represents the configurations of session affinity.
SessionAffinityConfig :: {
	// clientIP contains the configurations of Client IP based session affinity.
	// +optional
	clientIP?: null | ClientIPConfig @go(ClientIP,*ClientIPConfig) @protobuf(1,bytes,opt)
}

// ClientIPConfig represents the configurations of Client IP based session affinity.
ClientIPConfig :: {
	// timeoutSeconds specifies the seconds of ClientIP type session sticky time.
	// The value must be >0 && <=86400(for 1 day) if ServiceAffinity == "ClientIP".
	// Default value is 10800(for 3 hours).
	// +optional
	timeoutSeconds?: null | int32 @go(TimeoutSeconds,*int32) @protobuf(1,varint,opt)
}

// Service Type string describes ingress methods for a service
ServiceType :: string // enumServiceType

enumServiceType ::
	ServiceTypeClusterIP |
	ServiceTypeNodePort |
	ServiceTypeLoadBalancer |
	ServiceTypeExternalName

// ServiceTypeClusterIP means a service will only be accessible inside the
// cluster, via the cluster IP.
ServiceTypeClusterIP :: ServiceType & "ClusterIP"

// ServiceTypeNodePort means a service will be exposed on one port of
// every node, in addition to 'ClusterIP' type.
ServiceTypeNodePort :: ServiceType & "NodePort"

// ServiceTypeLoadBalancer means a service will be exposed via an
// external load balancer (if the cloud provider supports it), in addition
// to 'NodePort' type.
ServiceTypeLoadBalancer :: ServiceType & "LoadBalancer"

// ServiceTypeExternalName means a service consists of only a reference to
// an external name that kubedns or equivalent will return as a CNAME
// record, with no exposing or proxying of any pods involved.
ServiceTypeExternalName :: ServiceType & "ExternalName"

// Service External Traffic Policy Type string
ServiceExternalTrafficPolicyType :: string // enumServiceExternalTrafficPolicyType

enumServiceExternalTrafficPolicyType ::
	ServiceExternalTrafficPolicyTypeLocal |
	ServiceExternalTrafficPolicyTypeCluster

// ServiceExternalTrafficPolicyTypeLocal specifies node-local endpoints behavior.
ServiceExternalTrafficPolicyTypeLocal :: ServiceExternalTrafficPolicyType & "Local"

// ServiceExternalTrafficPolicyTypeCluster specifies node-global (legacy) behavior.
ServiceExternalTrafficPolicyTypeCluster :: ServiceExternalTrafficPolicyType & "Cluster"

// ServiceStatus represents the current status of a service.
ServiceStatus :: {
	// LoadBalancer contains the current status of the load-balancer,
	// if one is present.
	// +optional
	loadBalancer?: LoadBalancerStatus @go(LoadBalancer) @protobuf(1,bytes,opt)
}

// LoadBalancerStatus represents the status of a load-balancer.
LoadBalancerStatus :: {
	// Ingress is a list containing ingress points for the load-balancer.
	// Traffic intended for the service should be sent to these ingress points.
	// +optional
	ingress?: [...LoadBalancerIngress] @go(Ingress,[]LoadBalancerIngress) @protobuf(1,bytes,rep)
}

// LoadBalancerIngress represents the status of a load-balancer ingress point:
// traffic intended for the service should be sent to an ingress point.
LoadBalancerIngress :: {
	// IP is set for load-balancer ingress points that are IP based
	// (typically GCE or OpenStack load-balancers)
	// +optional
	ip?: string @go(IP) @protobuf(1,bytes,opt)

	// Hostname is set for load-balancer ingress points that are DNS based
	// (typically AWS load-balancers)
	// +optional
	hostname?: string @go(Hostname) @protobuf(2,bytes,opt)
}

// IPFamily represents the IP Family (IPv4 or IPv6). This type is used
// to express the family of an IP expressed by a type (i.e. service.Spec.IPFamily)
IPFamily :: string // enumIPFamily

enumIPFamily ::
	IPv4Protocol |
	IPv6Protocol

// IPv4Protocol indicates that this IP is IPv4 protocol
IPv4Protocol :: IPFamily & "IPv4"

// IPv6Protocol indicates that this IP is IPv6 protocol
IPv6Protocol :: IPFamily & "IPv6"

// ServiceSpec describes the attributes that a user creates on a service.
ServiceSpec :: {
	// The list of ports that are exposed by this service.
	// More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
	// +patchMergeKey=port
	// +patchStrategy=merge
	// +listType=map
	// +listMapKey=port
	// +listMapKey=protocol
	ports?: [...ServicePort] @go(Ports,[]ServicePort) @protobuf(1,bytes,rep)

	// Route service traffic to pods with label keys and values matching this
	// selector. If empty or not present, the service is assumed to have an
	// external process managing its endpoints, which Kubernetes will not
	// modify. Only applies to types ClusterIP, NodePort, and LoadBalancer.
	// Ignored if type is ExternalName.
	// More info: https://kubernetes.io/docs/concepts/services-networking/service/
	// +optional
	selector?: {<_>: string} @go(Selector,map[string]string) @protobuf(2,bytes,rep)

	// clusterIP is the IP address of the service and is usually assigned
	// randomly by the master. If an address is specified manually and is not in
	// use by others, it will be allocated to the service; otherwise, creation
	// of the service will fail. This field can not be changed through updates.
	// Valid values are "None", empty string (""), or a valid IP address. "None"
	// can be specified for headless services when proxying is not required.
	// Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if
	// type is ExternalName.
	// More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
	// +optional
	clusterIP?: string @go(ClusterIP) @protobuf(3,bytes,opt)

	// type determines how the Service is exposed. Defaults to ClusterIP. Valid
	// options are ExternalName, ClusterIP, NodePort, and LoadBalancer.
	// "ExternalName" maps to the specified externalName.
	// "ClusterIP" allocates a cluster-internal IP address for load-balancing to
	// endpoints. Endpoints are determined by the selector or if that is not
	// specified, by manual construction of an Endpoints object. If clusterIP is
	// "None", no virtual IP is allocated and the endpoints are published as a
	// set of endpoints rather than a stable IP.
	// "NodePort" builds on ClusterIP and allocates a port on every node which
	// routes to the clusterIP.
	// "LoadBalancer" builds on NodePort and creates an
	// external load-balancer (if supported in the current cloud) which routes
	// to the clusterIP.
	// More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
	// +optional
	type?: ServiceType @go(Type) @protobuf(4,bytes,opt,casttype=ServiceType)

	// externalIPs is a list of IP addresses for which nodes in the cluster
	// will also accept traffic for this service.  These IPs are not managed by
	// Kubernetes.  The user is responsible for ensuring that traffic arrives
	// at a node with this IP.  A common example is external load-balancers
	// that are not part of the Kubernetes system.
	// +optional
	externalIPs?: [...string] @go(ExternalIPs,[]string) @protobuf(5,bytes,rep)

	// Supports "ClientIP" and "None". Used to maintain session affinity.
	// Enable client IP based session affinity.
	// Must be ClientIP or None.
	// Defaults to None.
	// More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
	// +optional
	sessionAffinity?: ServiceAffinity @go(SessionAffinity) @protobuf(7,bytes,opt,casttype=ServiceAffinity)

	// Only applies to Service Type: LoadBalancer
	// LoadBalancer will get created with the IP specified in this field.
	// This feature depends on whether the underlying cloud-provider supports specifying
	// the loadBalancerIP when a load balancer is created.
	// This field will be ignored if the cloud-provider does not support the feature.
	// +optional
	loadBalancerIP?: string @go(LoadBalancerIP) @protobuf(8,bytes,opt)

	// If specified and supported by the platform, this will restrict traffic through the cloud-provider
	// load-balancer will be restricted to the specified client IPs. This field will be ignored if the
	// cloud-provider does not support the feature."
	// More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/
	// +optional
	loadBalancerSourceRanges?: [...string] @go(LoadBalancerSourceRanges,[]string) @protobuf(9,bytes,opt)

	// externalName is the external reference that kubedns or equivalent will
	// return as a CNAME record for this service. No proxying will be involved.
	// Must be a valid RFC-1123 hostname (https://tools.ietf.org/html/rfc1123)
	// and requires Type to be ExternalName.
	// +optional
	externalName?: string @go(ExternalName) @protobuf(10,bytes,opt)

	// externalTrafficPolicy denotes if this Service desires to route external
	// traffic to node-local or cluster-wide endpoints. "Local" preserves the
	// client source IP and avoids a second hop for LoadBalancer and Nodeport
	// type services, but risks potentially imbalanced traffic spreading.
	// "Cluster" obscures the client source IP and may cause a second hop to
	// another node, but should have good overall load-spreading.
	// +optional
	externalTrafficPolicy?: ServiceExternalTrafficPolicyType @go(ExternalTrafficPolicy) @protobuf(11,bytes,opt)

	// healthCheckNodePort specifies the healthcheck nodePort for the service.
	// If not specified, HealthCheckNodePort is created by the service api
	// backend with the allocated nodePort. Will use user-specified nodePort value
	// if specified by the client. Only effects when Type is set to LoadBalancer
	// and ExternalTrafficPolicy is set to Local.
	// +optional
	healthCheckNodePort?: int32 @go(HealthCheckNodePort) @protobuf(12,bytes,opt)

	// publishNotReadyAddresses, when set to true, indicates that DNS implementations
	// must publish the notReadyAddresses of subsets for the Endpoints associated with
	// the Service. The default value is false.
	// The primary use case for setting this field is to use a StatefulSet's Headless Service
	// to propagate SRV records for its Pods without respect to their readiness for purpose
	// of peer discovery.
	// +optional
	publishNotReadyAddresses?: bool @go(PublishNotReadyAddresses) @protobuf(13,varint,opt)

	// sessionAffinityConfig contains the configurations of session affinity.
	// +optional
	sessionAffinityConfig?: null | SessionAffinityConfig @go(SessionAffinityConfig,*SessionAffinityConfig) @protobuf(14,bytes,opt)

	// ipFamily specifies whether this Service has a preference for a particular IP family (e.g. IPv4 vs.
	// IPv6).  If a specific IP family is requested, the clusterIP field will be allocated from that family, if it is
	// available in the cluster.  If no IP family is requested, the cluster's primary IP family will be used.
	// Other IP fields (loadBalancerIP, loadBalancerSourceRanges, externalIPs) and controllers which
	// allocate external load-balancers should use the same IP family.  Endpoints for this Service will be of
	// this family.  This field is immutable after creation. Assigning a ServiceIPFamily not available in the
	// cluster (e.g. IPv6 in IPv4 only cluster) is an error condition and will fail during clusterIP assignment.
	// +optional
	ipFamily?: null | IPFamily @go(IPFamily,*IPFamily) @protobuf(15,bytes,opt,Configcasttype=IPFamily)
}

// ServicePort contains information on service's port.
ServicePort :: {
	// The name of this port within the service. This must be a DNS_LABEL.
	// All ports within a ServiceSpec must have unique names. When considering
	// the endpoints for a Service, this must match the 'name' field in the
	// EndpointPort.
	// Optional if only one ServicePort is defined on this service.
	// +optional
	name?: string @go(Name) @protobuf(1,bytes,opt)

	// The IP protocol for this port. Supports "TCP", "UDP", and "SCTP".
	// Default is TCP.
	// +optional
	protocol?: Protocol @go(Protocol) @protobuf(2,bytes,opt,casttype=Protocol)

	// The port that will be exposed by this service.
	port: int32 @go(Port) @protobuf(3,varint,opt)

	// Number or name of the port to access on the pods targeted by the service.
	// Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.
	// If this is a string, it will be looked up as a named port in the
	// target Pod's container ports. If this is not specified, the value
	// of the 'port' field is used (an identity map).
	// This field is ignored for services with clusterIP=None, and should be
	// omitted or set equal to the 'port' field.
	// More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service
	// +optional
	targetPort?: intstr.IntOrString @go(TargetPort) @protobuf(4,bytes,opt)

	// The port on each node on which this service is exposed when type=NodePort or LoadBalancer.
	// Usually assigned by the system. If specified, it will be allocated to the service
	// if unused or else creation of the service will fail.
	// Default is to auto-allocate a port if the ServiceType of this Service requires one.
	// More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport
	// +optional
	nodePort?: int32 @go(NodePort) @protobuf(5,varint,opt)
}

// Service is a named abstraction of software service (for example, mysql) consisting of local port
// (for example 3306) that the proxy listens on, and the selector that determines which pods
// will answer requests sent through the proxy.
Service :: {
	metav1.TypeMeta

	// Standard object's metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
	// +optional
	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)

	// Spec defines the behavior of a service.
	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
	// +optional
	spec?: ServiceSpec @go(Spec) @protobuf(2,bytes,opt)

	// Most recently observed status of the service.
	// Populated by the system.
	// Read-only.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
	// +optional
	status?: ServiceStatus @go(Status) @protobuf(3,bytes,opt)
}

// ClusterIPNone - do not assign a cluster IP
// no proxying required and no environment variables should be created for pods
ClusterIPNone :: "None"

// ServiceList holds a list of services.
ServiceList :: {
	metav1.TypeMeta

	// Standard list metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
	// +optional
	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)

	// List of services
	items: [...Service] @go(Items,[]Service) @protobuf(2,bytes,rep)
}

// ServiceAccount binds together:
// * a name, understood by users, and perhaps by peripheral systems, for an identity
// * a principal that can be authenticated and authorized
// * a set of secrets
ServiceAccount :: {
	metav1.TypeMeta

	// Standard object's metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
	// +optional
	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)

	// Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount.
	// More info: https://kubernetes.io/docs/concepts/configuration/secret
	// +optional
	// +patchMergeKey=name
	// +patchStrategy=merge
	secrets?: [...ObjectReference] @go(Secrets,[]ObjectReference) @protobuf(2,bytes,rep)

	// ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images
	// in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets
	// can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet.
	// More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod
	// +optional
	imagePullSecrets?: [...LocalObjectReference] @go(ImagePullSecrets,[]LocalObjectReference) @protobuf(3,bytes,rep)

	// AutomountServiceAccountToken indicates whether pods running as this service account should have an API token automatically mounted.
	// Can be overridden at the pod level.
	// +optional
	automountServiceAccountToken?: null | bool @go(AutomountServiceAccountToken,*bool) @protobuf(4,varint,opt)
}

// ServiceAccountList is a list of ServiceAccount objects
ServiceAccountList :: {
	metav1.TypeMeta

	// Standard list metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
	// +optional
	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)

	// List of ServiceAccounts.
	// More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
	items: [...ServiceAccount] @go(Items,[]ServiceAccount) @protobuf(2,bytes,rep)
}

// Endpoints is a collection of endpoints that implement the actual service. Example:
//   Name: "mysvc",
//   Subsets: [
//     {
//       Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}],
//       Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}]
//     },
//     {
//       Addresses: [{"ip": "10.10.3.3"}],
//       Ports: [{"name": "a", "port": 93}, {"name": "b", "port": 76}]
//     },
//  ]
Endpoints :: {
	metav1.TypeMeta

	// Standard object's metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
	// +optional
	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)

	// The set of all endpoints is the union of all subsets. Addresses are placed into
	// subsets according to the IPs they share. A single address with multiple ports,
	// some of which are ready and some of which are not (because they come from
	// different containers) will result in the address being displayed in different
	// subsets for the different ports. No address will appear in both Addresses and
	// NotReadyAddresses in the same subset.
	// Sets of addresses and ports that comprise a service.
	// +optional
	subsets?: [...EndpointSubset] @go(Subsets,[]EndpointSubset) @protobuf(2,bytes,rep)
}

// EndpointSubset is a group of addresses with a common set of ports. The
// expanded set of endpoints is the Cartesian product of Addresses x Ports.
// For example, given:
//   {
//     Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}],
//     Ports:     [{"name": "a", "port": 8675}, {"name": "b", "port": 309}]
//   }
// The resulting set of endpoints can be viewed as:
//     a: [ 10.10.1.1:8675, 10.10.2.2:8675 ],
//     b: [ 10.10.1.1:309, 10.10.2.2:309 ]
EndpointSubset :: {
	// IP addresses which offer the related ports that are marked as ready. These endpoints
	// should be considered safe for load balancers and clients to utilize.
	// +optional
	addresses?: [...EndpointAddress] @go(Addresses,[]EndpointAddress) @protobuf(1,bytes,rep)

	// IP addresses which offer the related ports but are not currently marked as ready
	// because they have not yet finished starting, have recently failed a readiness check,
	// or have recently failed a liveness check.
	// +optional
	notReadyAddresses?: [...EndpointAddress] @go(NotReadyAddresses,[]EndpointAddress) @protobuf(2,bytes,rep)

	// Port numbers available on the related IP addresses.
	// +optional
	ports?: [...EndpointPort] @go(Ports,[]EndpointPort) @protobuf(3,bytes,rep)
}

// EndpointAddress is a tuple that describes single IP address.
EndpointAddress :: {
	// The IP of this endpoint.
	// May not be loopback (127.0.0.0/8), link-local (169.254.0.0/16),
	// or link-local multicast ((224.0.0.0/24).
	// IPv6 is also accepted but not fully supported on all platforms. Also, certain
	// kubernetes components, like kube-proxy, are not IPv6 ready.
	// TODO: This should allow hostname or IP, See #4447.
	ip: string @go(IP) @protobuf(1,bytes,opt)

	// The Hostname of this endpoint
	// +optional
	hostname?: string @go(Hostname) @protobuf(3,bytes,opt)

	// Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node.
	// +optional
	nodeName?: null | string @go(NodeName,*string) @protobuf(4,bytes,opt)

	// Reference to object providing the endpoint.
	// +optional
	targetRef?: null | ObjectReference @go(TargetRef,*ObjectReference) @protobuf(2,bytes,opt)
}

// EndpointPort is a tuple that describes a single port.
EndpointPort :: {
	// The name of this port.  This must match the 'name' field in the
	// corresponding ServicePort.
	// Must be a DNS_LABEL.
	// Optional only if one port is defined.
	// +optional
	name?: string @go(Name) @protobuf(1,bytes,opt)

	// The port number of the endpoint.
	port: int32 @go(Port) @protobuf(2,varint,opt)

	// The IP protocol for this port.
	// Must be UDP, TCP, or SCTP.
	// Default is TCP.
	// +optional
	protocol?: Protocol @go(Protocol) @protobuf(3,bytes,opt,casttype=Protocol)
}

// EndpointsList is a list of endpoints.
EndpointsList :: {
	metav1.TypeMeta

	// Standard list metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
	// +optional
	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)

	// List of endpoints.
	items: [...Endpoints] @go(Items,[]Endpoints) @protobuf(2,bytes,rep)
}

// NodeSpec describes the attributes that a node is created with.
NodeSpec :: {
	// PodCIDR represents the pod IP range assigned to the node.
	// +optional
	podCIDR?: string @go(PodCIDR) @protobuf(1,bytes,opt)

	// podCIDRs represents the IP ranges assigned to the node for usage by Pods on that node. If this
	// field is specified, the 0th entry must match the podCIDR field. It may contain at most 1 value for
	// each of IPv4 and IPv6.
	// +optional
	// +patchStrategy=merge
	podCIDRs?: [...string] @go(PodCIDRs,[]string) @protobuf(7,bytes,opt)

	// ID of the node assigned by the cloud provider in the format: <ProviderName>://<ProviderSpecificNodeID>
	// +optional
	providerID?: string @go(ProviderID) @protobuf(3,bytes,opt)

	// Unschedulable controls node schedulability of new pods. By default, node is schedulable.
	// More info: https://kubernetes.io/docs/concepts/nodes/node/#manual-node-administration
	// +optional
	unschedulable?: bool @go(Unschedulable) @protobuf(4,varint,opt)

	// If specified, the node's taints.
	// +optional
	taints?: [...Taint] @go(Taints,[]Taint) @protobuf(5,bytes,opt)

	// If specified, the source to get node configuration from
	// The DynamicKubeletConfig feature gate must be enabled for the Kubelet to use this field
	// +optional
	configSource?: null | NodeConfigSource @go(ConfigSource,*NodeConfigSource) @protobuf(6,bytes,opt)

	// Deprecated. Not all kubelets will set this field. Remove field after 1.13.
	// see: https://issues.k8s.io/61966
	// +optional
	externalID?: string @go(DoNotUse_ExternalID) @protobuf(2,bytes,opt)
}

// NodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil.
NodeConfigSource :: {
	// ConfigMap is a reference to a Node's ConfigMap
	configMap?: null | ConfigMapNodeConfigSource @go(ConfigMap,*ConfigMapNodeConfigSource) @protobuf(2,bytes,opt)
}

// ConfigMapNodeConfigSource contains the information to reference a ConfigMap as a config source for the Node.
ConfigMapNodeConfigSource :: {
	// Namespace is the metadata.namespace of the referenced ConfigMap.
	// This field is required in all cases.
	namespace: string @go(Namespace) @protobuf(1,bytes,opt)

	// Name is the metadata.name of the referenced ConfigMap.
	// This field is required in all cases.
	name: string @go(Name) @protobuf(2,bytes,opt)

	// UID is the metadata.UID of the referenced ConfigMap.
	// This field is forbidden in Node.Spec, and required in Node.Status.
	// +optional
	uid?: types.UID @go(UID) @protobuf(3,bytes,opt)

	// ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap.
	// This field is forbidden in Node.Spec, and required in Node.Status.
	// +optional
	resourceVersion?: string @go(ResourceVersion) @protobuf(4,bytes,opt)

	// KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure
	// This field is required in all cases.
	kubeletConfigKey: string @go(KubeletConfigKey) @protobuf(5,bytes,opt)
}

// DaemonEndpoint contains information about a single Daemon endpoint.
DaemonEndpoint :: {
	// Port number of the given endpoint.
	Port: int32 @protobuf(1,varint,opt)
}

// NodeDaemonEndpoints lists ports opened by daemons running on the Node.
NodeDaemonEndpoints :: {
	// Endpoint on which Kubelet is listening.
	// +optional
	kubeletEndpoint?: DaemonEndpoint @go(KubeletEndpoint) @protobuf(1,bytes,opt)
}

// NodeSystemInfo is a set of ids/uuids to uniquely identify the node.
NodeSystemInfo :: {
	// MachineID reported by the node. For unique machine identification
	// in the cluster this field is preferred. Learn more from man(5)
	// machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html
	machineID: string @go(MachineID) @protobuf(1,bytes,opt)

	// SystemUUID reported by the node. For unique machine identification
	// MachineID is preferred. This field is specific to Red Hat hosts
	// https://access.redhat.com/documentation/en-US/Red_Hat_Subscription_Management/1/html/RHSM/getting-system-uuid.html
	systemUUID: string @go(SystemUUID) @protobuf(2,bytes,opt)

	// Boot ID reported by the node.
	bootID: string @go(BootID) @protobuf(3,bytes,opt)

	// Kernel Version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64).
	kernelVersion: string @go(KernelVersion) @protobuf(4,bytes,opt)

	// OS Image reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy)).
	osImage: string @go(OSImage) @protobuf(5,bytes,opt)

	// ContainerRuntime Version reported by the node through runtime remote API (e.g. docker://1.5.0).
	containerRuntimeVersion: string @go(ContainerRuntimeVersion) @protobuf(6,bytes,opt)

	// Kubelet Version reported by the node.
	kubeletVersion: string @go(KubeletVersion) @protobuf(7,bytes,opt)

	// KubeProxy Version reported by the node.
	kubeProxyVersion: string @go(KubeProxyVersion) @protobuf(8,bytes,opt)

	// The Operating System reported by the node
	operatingSystem: string @go(OperatingSystem) @protobuf(9,bytes,opt)

	// The Architecture reported by the node
	architecture: string @go(Architecture) @protobuf(10,bytes,opt)
}

// NodeConfigStatus describes the status of the config assigned by Node.Spec.ConfigSource.
NodeConfigStatus :: {
	// Assigned reports the checkpointed config the node will try to use.
	// When Node.Spec.ConfigSource is updated, the node checkpoints the associated
	// config payload to local disk, along with a record indicating intended
	// config. The node refers to this record to choose its config checkpoint, and
	// reports this record in Assigned. Assigned only updates in the status after
	// the record has been checkpointed to disk. When the Kubelet is restarted,
	// it tries to make the Assigned config the Active config by loading and
	// validating the checkpointed payload identified by Assigned.
	// +optional
	assigned?: null | NodeConfigSource @go(Assigned,*NodeConfigSource) @protobuf(1,bytes,opt)

	// Active reports the checkpointed config the node is actively using.
	// Active will represent either the current version of the Assigned config,
	// or the current LastKnownGood config, depending on whether attempting to use the
	// Assigned config results in an error.
	// +optional
	active?: null | NodeConfigSource @go(Active,*NodeConfigSource) @protobuf(2,bytes,opt)

	// LastKnownGood reports the checkpointed config the node will fall back to
	// when it encounters an error attempting to use the Assigned config.
	// The Assigned config becomes the LastKnownGood config when the node determines
	// that the Assigned config is stable and correct.
	// This is currently implemented as a 10-minute soak period starting when the local
	// record of Assigned config is updated. If the Assigned config is Active at the end
	// of this period, it becomes the LastKnownGood. Note that if Spec.ConfigSource is
	// reset to nil (use local defaults), the LastKnownGood is also immediately reset to nil,
	// because the local default config is always assumed good.
	// You should not make assumptions about the node's method of determining config stability
	// and correctness, as this may change or become configurable in the future.
	// +optional
	lastKnownGood?: null | NodeConfigSource @go(LastKnownGood,*NodeConfigSource) @protobuf(3,bytes,opt)

	// Error describes any problems reconciling the Spec.ConfigSource to the Active config.
	// Errors may occur, for example, attempting to checkpoint Spec.ConfigSource to the local Assigned
	// record, attempting to checkpoint the payload associated with Spec.ConfigSource, attempting
	// to load or validate the Assigned config, etc.
	// Errors may occur at different points while syncing config. Earlier errors (e.g. download or
	// checkpointing errors) will not result in a rollback to LastKnownGood, and may resolve across
	// Kubelet retries. Later errors (e.g. loading or validating a checkpointed config) will result in
	// a rollback to LastKnownGood. In the latter case, it is usually possible to resolve the error
	// by fixing the config assigned in Spec.ConfigSource.
	// You can find additional information for debugging by searching the error message in the Kubelet log.
	// Error is a human-readable description of the error state; machines can check whether or not Error
	// is empty, but should not rely on the stability of the Error text across Kubelet versions.
	// +optional
	error?: string @go(Error) @protobuf(4,bytes,opt)
}

// NodeStatus is information about the current status of a node.
NodeStatus :: {
	// Capacity represents the total resources of a node.
	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity
	// +optional
	capacity?: ResourceList @go(Capacity) @protobuf(1,bytes,rep,casttype=ResourceList,castkey=ResourceName)

	// Allocatable represents the resources of a node that are available for scheduling.
	// Defaults to Capacity.
	// +optional
	allocatable?: ResourceList @go(Allocatable) @protobuf(2,bytes,rep,casttype=ResourceList,castkey=ResourceName)

	// NodePhase is the recently observed lifecycle phase of the node.
	// More info: https://kubernetes.io/docs/concepts/nodes/node/#phase
	// The field is never populated, and now is deprecated.
	// +optional
	phase?: NodePhase @go(Phase) @protobuf(3,bytes,opt,casttype=NodePhase)

	// Conditions is an array of current observed node conditions.
	// More info: https://kubernetes.io/docs/concepts/nodes/node/#condition
	// +optional
	// +patchMergeKey=type
	// +patchStrategy=merge
	conditions?: [...NodeCondition] @go(Conditions,[]NodeCondition) @protobuf(4,bytes,rep)

	// List of addresses reachable to the node.
	// Queried from cloud provider, if available.
	// More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses
	// Note: This field is declared as mergeable, but the merge key is not sufficiently
	// unique, which can cause data corruption when it is merged. Callers should instead
	// use a full-replacement patch. See http://pr.k8s.io/79391 for an example.
	// +optional
	// +patchMergeKey=type
	// +patchStrategy=merge
	addresses?: [...NodeAddress] @go(Addresses,[]NodeAddress) @protobuf(5,bytes,rep)

	// Endpoints of daemons running on the Node.
	// +optional
	daemonEndpoints?: NodeDaemonEndpoints @go(DaemonEndpoints) @protobuf(6,bytes,opt)

	// Set of ids/uuids to uniquely identify the node.
	// More info: https://kubernetes.io/docs/concepts/nodes/node/#info
	// +optional
	nodeInfo?: NodeSystemInfo @go(NodeInfo) @protobuf(7,bytes,opt)

	// List of container images on this node
	// +optional
	images?: [...ContainerImage] @go(Images,[]ContainerImage) @protobuf(8,bytes,rep)

	// List of attachable volumes in use (mounted) by the node.
	// +optional
	volumesInUse?: [...UniqueVolumeName] @go(VolumesInUse,[]UniqueVolumeName) @protobuf(9,bytes,rep)

	// List of volumes that are attached to the node.
	// +optional
	volumesAttached?: [...AttachedVolume] @go(VolumesAttached,[]AttachedVolume) @protobuf(10,bytes,rep)

	// Status of the config assigned to the node via the dynamic Kubelet config feature.
	// +optional
	config?: null | NodeConfigStatus @go(Config,*NodeConfigStatus) @protobuf(11,bytes,opt)
}

UniqueVolumeName :: string

// AttachedVolume describes a volume attached to a node
AttachedVolume :: {
	// Name of the attached volume
	name: UniqueVolumeName @go(Name) @protobuf(1,bytes,rep)

	// DevicePath represents the device path where the volume should be available
	devicePath: string @go(DevicePath) @protobuf(2,bytes,rep)
}

// AvoidPods describes pods that should avoid this node. This is the value for a
// Node annotation with key scheduler.alpha.kubernetes.io/preferAvoidPods and
// will eventually become a field of NodeStatus.
AvoidPods :: {
	// Bounded-sized list of signatures of pods that should avoid this node, sorted
	// in timestamp order from oldest to newest. Size of the slice is unspecified.
	// +optional
	preferAvoidPods?: [...PreferAvoidPodsEntry] @go(PreferAvoidPods,[]PreferAvoidPodsEntry) @protobuf(1,bytes,rep)
}

// Describes a class of pods that should avoid this node.
PreferAvoidPodsEntry :: {
	// The class of pods.
	podSignature: PodSignature @go(PodSignature) @protobuf(1,bytes,opt)

	// Time at which this entry was added to the list.
	// +optional
	evictionTime?: metav1.Time @go(EvictionTime) @protobuf(2,bytes,opt)

	// (brief) reason why this entry was added to the list.
	// +optional
	reason?: string @go(Reason) @protobuf(3,bytes,opt)

	// Human readable message indicating why this entry was added to the list.
	// +optional
	message?: string @go(Message) @protobuf(4,bytes,opt)
}

// Describes the class of pods that should avoid this node.
// Exactly one field should be set.
PodSignature :: {
	// Reference to controller whose pods should avoid this node.
	// +optional
	podController?: null | metav1.OwnerReference @go(PodController,*metav1.OwnerReference) @protobuf(1,bytes,opt)
}

// Describe a container image
ContainerImage :: {
	// Names by which this image is known.
	// e.g. ["k8s.gcr.io/hyperkube:v1.0.7", "dockerhub.io/google_containers/hyperkube:v1.0.7"]
	names: [...string] @go(Names,[]string) @protobuf(1,bytes,rep)

	// The size of the image in bytes.
	// +optional
	sizeBytes?: int64 @go(SizeBytes) @protobuf(2,varint,opt)
}

NodePhase :: string // enumNodePhase

enumNodePhase ::
	NodePending |
	NodeRunning |
	NodeTerminated

// NodePending means the node has been created/added by the system, but not configured.
NodePending :: NodePhase & "Pending"

// NodeRunning means the node has been configured and has Kubernetes components running.
NodeRunning :: NodePhase & "Running"

// NodeTerminated means the node has been removed from the cluster.
NodeTerminated :: NodePhase & "Terminated"

NodeConditionType :: string // enumNodeConditionType

enumNodeConditionType ::
	NodeReady |
	NodeMemoryPressure |
	NodeDiskPressure |
	NodePIDPressure |
	NodeNetworkUnavailable

// NodeReady means kubelet is healthy and ready to accept pods.
NodeReady :: NodeConditionType & "Ready"

// NodeMemoryPressure means the kubelet is under pressure due to insufficient available memory.
NodeMemoryPressure :: NodeConditionType & "MemoryPressure"

// NodeDiskPressure means the kubelet is under pressure due to insufficient available disk.
NodeDiskPressure :: NodeConditionType & "DiskPressure"

// NodePIDPressure means the kubelet is under pressure due to insufficient available PID.
NodePIDPressure :: NodeConditionType & "PIDPressure"

// NodeNetworkUnavailable means that network for the node is not correctly configured.
NodeNetworkUnavailable :: NodeConditionType & "NetworkUnavailable"

// NodeCondition contains condition information for a node.
NodeCondition :: {
	// Type of node condition.
	type: NodeConditionType @go(Type) @protobuf(1,bytes,opt,casttype=NodeConditionType)

	// Status of the condition, one of True, False, Unknown.
	status: ConditionStatus @go(Status) @protobuf(2,bytes,opt,casttype=ConditionStatus)

	// Last time we got an update on a given condition.
	// +optional
	lastHeartbeatTime?: metav1.Time @go(LastHeartbeatTime) @protobuf(3,bytes,opt)

	// Last time the condition transit from one status to another.
	// +optional
	lastTransitionTime?: metav1.Time @go(LastTransitionTime) @protobuf(4,bytes,opt)

	// (brief) reason for the condition's last transition.
	// +optional
	reason?: string @go(Reason) @protobuf(5,bytes,opt)

	// Human readable message indicating details about last transition.
	// +optional
	message?: string @go(Message) @protobuf(6,bytes,opt)
}

NodeAddressType :: string // enumNodeAddressType

enumNodeAddressType ::
	NodeHostName |
	NodeExternalIP |
	NodeInternalIP |
	NodeExternalDNS |
	NodeInternalDNS

NodeHostName ::    NodeAddressType & "Hostname"
NodeExternalIP ::  NodeAddressType & "ExternalIP"
NodeInternalIP ::  NodeAddressType & "InternalIP"
NodeExternalDNS :: NodeAddressType & "ExternalDNS"
NodeInternalDNS :: NodeAddressType & "InternalDNS"

// NodeAddress contains information for the node's address.
NodeAddress :: {
	// Node address type, one of Hostname, ExternalIP or InternalIP.
	type: NodeAddressType @go(Type) @protobuf(1,bytes,opt,casttype=NodeAddressType)

	// The node address.
	address: string @go(Address) @protobuf(2,bytes,opt)
}

// ResourceName is the name identifying various resources in a ResourceList.
ResourceName :: string // enumResourceName

enumResourceName ::
	ResourceCPU |
	ResourceMemory |
	ResourceStorage |
	ResourceEphemeralStorage |
	ResourcePods |
	ResourceServices |
	ResourceReplicationControllers |
	ResourceQuotas |
	ResourceSecrets |
	ResourceConfigMaps |
	ResourcePersistentVolumeClaims |
	ResourceServicesNodePorts |
	ResourceServicesLoadBalancers |
	ResourceRequestsCPU |
	ResourceRequestsMemory |
	ResourceRequestsStorage |
	ResourceRequestsEphemeralStorage |
	ResourceLimitsCPU |
	ResourceLimitsMemory |
	ResourceLimitsEphemeralStorage

// CPU, in cores. (500m = .5 cores)
ResourceCPU :: ResourceName & "cpu"

// Memory, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024)
ResourceMemory :: ResourceName & "memory"

// Volume size, in bytes (e,g. 5Gi = 5GiB = 5 * 1024 * 1024 * 1024)
ResourceStorage :: ResourceName & "storage"

// Local ephemeral storage, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024)
// The resource name for ResourceEphemeralStorage is alpha and it can change across releases.
ResourceEphemeralStorage :: ResourceName & "ephemeral-storage"

// Default namespace prefix.
ResourceDefaultNamespacePrefix :: "kubernetes.io/"

// Name prefix for huge page resources (alpha).
ResourceHugePagesPrefix :: "hugepages-"

// Name prefix for storage resource limits
ResourceAttachableVolumesPrefix :: "attachable-volumes-"

// ResourceList is a set of (resource name, quantity) pairs.
ResourceList :: {<_>: resource.Quantity}

// Node is a worker node in Kubernetes.
// Each node will have a unique identifier in the cache (i.e. in etcd).
Node :: {
	metav1.TypeMeta

	// Standard object's metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
	// +optional
	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)

	// Spec defines the behavior of a node.
	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
	// +optional
	spec?: NodeSpec @go(Spec) @protobuf(2,bytes,opt)

	// Most recently observed status of the node.
	// Populated by the system.
	// Read-only.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
	// +optional
	status?: NodeStatus @go(Status) @protobuf(3,bytes,opt)
}

// NodeList is the whole list of all Nodes which have been registered with master.
NodeList :: {
	metav1.TypeMeta

	// Standard list metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
	// +optional
	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)

	// List of nodes
	items: [...Node] @go(Items,[]Node) @protobuf(2,bytes,rep)
}

// FinalizerName is the name identifying a finalizer during namespace lifecycle.
FinalizerName :: string // enumFinalizerName

enumFinalizerName ::
	FinalizerKubernetes

FinalizerKubernetes :: FinalizerName & "kubernetes"

// NamespaceSpec describes the attributes on a Namespace.
NamespaceSpec :: {
	// Finalizers is an opaque list of values that must be empty to permanently remove object from storage.
	// More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/
	// +optional
	finalizers?: [...FinalizerName] @go(Finalizers,[]FinalizerName) @protobuf(1,bytes,rep,casttype=FinalizerName)
}

// NamespaceStatus is information about the current status of a Namespace.
NamespaceStatus :: {
	// Phase is the current lifecycle phase of the namespace.
	// More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/
	// +optional
	phase?: NamespacePhase @go(Phase) @protobuf(1,bytes,opt,casttype=NamespacePhase)

	// Represents the latest available observations of a namespace's current state.
	// +optional
	// +patchMergeKey=type
	// +patchStrategy=merge
	conditions?: [...NamespaceCondition] @go(Conditions,[]NamespaceCondition) @protobuf(2,bytes,rep)
}

NamespacePhase :: string // enumNamespacePhase

enumNamespacePhase ::
	NamespaceActive |
	NamespaceTerminating

// NamespaceActive means the namespace is available for use in the system
NamespaceActive :: NamespacePhase & "Active"

// NamespaceTerminating means the namespace is undergoing graceful termination
NamespaceTerminating :: NamespacePhase & "Terminating"

NamespaceConditionType :: string // enumNamespaceConditionType

enumNamespaceConditionType ::
	NamespaceDeletionDiscoveryFailure |
	NamespaceDeletionContentFailure |
	NamespaceDeletionGVParsingFailure

// NamespaceDeletionDiscoveryFailure contains information about namespace deleter errors during resource discovery.
NamespaceDeletionDiscoveryFailure :: NamespaceConditionType & "NamespaceDeletionDiscoveryFailure"

// NamespaceDeletionContentFailure contains information about namespace deleter errors during deletion of resources.
NamespaceDeletionContentFailure :: NamespaceConditionType & "NamespaceDeletionContentFailure"

// NamespaceDeletionGVParsingFailure contains information about namespace deleter errors parsing GV for legacy types.
NamespaceDeletionGVParsingFailure :: NamespaceConditionType & "NamespaceDeletionGroupVersionParsingFailure"

// NamespaceCondition contains details about state of namespace.
NamespaceCondition :: {
	// Type of namespace controller condition.
	type: NamespaceConditionType @go(Type) @protobuf(1,bytes,opt,casttype=NamespaceConditionType)

	// Status of the condition, one of True, False, Unknown.
	status: ConditionStatus @go(Status) @protobuf(2,bytes,opt,casttype=ConditionStatus)

	// +optional
	lastTransitionTime?: metav1.Time @go(LastTransitionTime) @protobuf(4,bytes,opt)

	// +optional
	reason?: string @go(Reason) @protobuf(5,bytes,opt)

	// +optional
	message?: string @go(Message) @protobuf(6,bytes,opt)
}

// Namespace provides a scope for Names.
// Use of multiple namespaces is optional.
Namespace :: {
	metav1.TypeMeta

	// Standard object's metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
	// +optional
	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)

	// Spec defines the behavior of the Namespace.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
	// +optional
	spec?: NamespaceSpec @go(Spec) @protobuf(2,bytes,opt)

	// Status describes the current status of a Namespace.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
	// +optional
	status?: NamespaceStatus @go(Status) @protobuf(3,bytes,opt)
}

// NamespaceList is a list of Namespaces.
NamespaceList :: {
	metav1.TypeMeta

	// Standard list metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
	// +optional
	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)

	// Items is the list of Namespace objects in the list.
	// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
	items: [...Namespace] @go(Items,[]Namespace) @protobuf(2,bytes,rep)
}

// Binding ties one object to another; for example, a pod is bound to a node by a scheduler.
// Deprecated in 1.7, please use the bindings subresource of pods instead.
Binding :: {
	metav1.TypeMeta

	// Standard object's metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
	// +optional
	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)

	// The target object that you want to bind to the standard object.
	target: ObjectReference @go(Target) @protobuf(2,bytes,opt)
}

// A list of ephemeral containers used with the Pod ephemeralcontainers subresource.
EphemeralContainers :: {
	metav1.TypeMeta

	// +optional
	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)

	// A list of ephemeral containers associated with this pod. New ephemeral containers
	// may be appended to this list, but existing ephemeral containers may not be removed
	// or modified.
	// +patchMergeKey=name
	// +patchStrategy=merge
	ephemeralContainers: [...EphemeralContainer] @go(EphemeralContainers,[]EphemeralContainer) @protobuf(2,bytes,rep)
}

// Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out.
// +k8s:openapi-gen=false
Preconditions :: {
	// Specifies the target UID.
	// +optional
	uid?: null | types.UID @go(UID,*types.UID) @protobuf(1,bytes,opt,casttype=k8s.io/apimachinery/pkg/types.UID)
}

// PodLogOptions is the query options for a Pod's logs REST call.
PodLogOptions :: {
	metav1.TypeMeta

	// The container for which to stream logs. Defaults to only container if there is one container in the pod.
	// +optional
	container?: string @go(Container) @protobuf(1,bytes,opt)

	// Follow the log stream of the pod. Defaults to false.
	// +optional
	follow?: bool @go(Follow) @protobuf(2,varint,opt)

	// Return previous terminated container logs. Defaults to false.
	// +optional
	previous?: bool @go(Previous) @protobuf(3,varint,opt)

	// A relative time in seconds before the current time from which to show logs. If this value
	// precedes the time a pod was started, only logs since the pod start will be returned.
	// If this value is in the future, no logs will be returned.
	// Only one of sinceSeconds or sinceTime may be specified.
	// +optional
	sinceSeconds?: null | int64 @go(SinceSeconds,*int64) @protobuf(4,varint,opt)

	// An RFC3339 timestamp from which to show logs. If this value
	// precedes the time a pod was started, only logs since the pod start will be returned.
	// If this value is in the future, no logs will be returned.
	// Only one of sinceSeconds or sinceTime may be specified.
	// +optional
	sinceTime?: null | metav1.Time @go(SinceTime,*metav1.Time) @protobuf(5,bytes,opt)

	// If true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line
	// of log output. Defaults to false.
	// +optional
	timestamps?: bool @go(Timestamps) @protobuf(6,varint,opt)

	// If set, the number of lines from the end of the logs to show. If not specified,
	// logs are shown from the creation of the container or sinceSeconds or sinceTime
	// +optional
	tailLines?: null | int64 @go(TailLines,*int64) @protobuf(7,varint,opt)

	// If set, the number of bytes to read from the server before terminating the
	// log output. This may not display a complete final line of logging, and may return
	// slightly more or slightly less than the specified limit.
	// +optional
	limitBytes?: null | int64 @go(LimitBytes,*int64) @protobuf(8,varint,opt)
}

// PodAttachOptions is the query options to a Pod's remote attach call.
// ---
// TODO: merge w/ PodExecOptions below for stdin, stdout, etc
// and also when we cut V2, we should export a "StreamOptions" or somesuch that contains Stdin, Stdout, Stder and TTY
PodAttachOptions :: {
	metav1.TypeMeta

	// Stdin if true, redirects the standard input stream of the pod for this call.
	// Defaults to false.
	// +optional
	stdin?: bool @go(Stdin) @protobuf(1,varint,opt)

	// Stdout if true indicates that stdout is to be redirected for the attach call.
	// Defaults to true.
	// +optional
	stdout?: bool @go(Stdout) @protobuf(2,varint,opt)

	// Stderr if true indicates that stderr is to be redirected for the attach call.
	// Defaults to true.
	// +optional
	stderr?: bool @go(Stderr) @protobuf(3,varint,opt)

	// TTY if true indicates that a tty will be allocated for the attach call.
	// This is passed through the container runtime so the tty
	// is allocated on the worker node by the container runtime.
	// Defaults to false.
	// +optional
	tty?: bool @go(TTY) @protobuf(4,varint,opt)

	// The container in which to execute the command.
	// Defaults to only container if there is only one container in the pod.
	// +optional
	container?: string @go(Container) @protobuf(5,bytes,opt)
}

// PodExecOptions is the query options to a Pod's remote exec call.
// ---
// TODO: This is largely identical to PodAttachOptions above, make sure they stay in sync and see about merging
// and also when we cut V2, we should export a "StreamOptions" or somesuch that contains Stdin, Stdout, Stder and TTY
PodExecOptions :: {
	metav1.TypeMeta

	// Redirect the standard input stream of the pod for this call.
	// Defaults to false.
	// +optional
	stdin?: bool @go(Stdin) @protobuf(1,varint,opt)

	// Redirect the standard output stream of the pod for this call.
	// Defaults to true.
	// +optional
	stdout?: bool @go(Stdout) @protobuf(2,varint,opt)

	// Redirect the standard error stream of the pod for this call.
	// Defaults to true.
	// +optional
	stderr?: bool @go(Stderr) @protobuf(3,varint,opt)

	// TTY if true indicates that a tty will be allocated for the exec call.
	// Defaults to false.
	// +optional
	tty?: bool @go(TTY) @protobuf(4,varint,opt)

	// Container in which to execute the command.
	// Defaults to only container if there is only one container in the pod.
	// +optional
	container?: string @go(Container) @protobuf(5,bytes,opt)

	// Command is the remote command to execute. argv array. Not executed within a shell.
	command: [...string] @go(Command,[]string) @protobuf(6,bytes,rep)
}

// PodPortForwardOptions is the query options to a Pod's port forward call
// when using WebSockets.
// The `port` query parameter must specify the port or
// ports (comma separated) to forward over.
// Port forwarding over SPDY does not use these options. It requires the port
// to be passed in the `port` header as part of request.
PodPortForwardOptions :: {
	metav1.TypeMeta

	// List of ports to forward
	// Required when using WebSockets
	// +optional
	ports?: [...int32] @go(Ports,[]int32) @protobuf(1,varint,rep)
}

// PodProxyOptions is the query options to a Pod's proxy call.
PodProxyOptions :: {
	metav1.TypeMeta

	// Path is the URL path to use for the current proxy request to pod.
	// +optional
	path?: string @go(Path) @protobuf(1,bytes,opt)
}

// NodeProxyOptions is the query options to a Node's proxy call.
NodeProxyOptions :: {
	metav1.TypeMeta

	// Path is the URL path to use for the current proxy request to node.
	// +optional
	path?: string @go(Path) @protobuf(1,bytes,opt)
}

// ServiceProxyOptions is the query options to a Service's proxy call.
ServiceProxyOptions :: {
	metav1.TypeMeta

	// Path is the part of URLs that include service endpoints, suffixes,
	// and parameters to use for the current proxy request to service.
	// For example, the whole request URL is
	// http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy.
	// Path is _search?q=user:kimchy.
	// +optional
	path?: string @go(Path) @protobuf(1,bytes,opt)
}

// ObjectReference contains enough information to let you inspect or modify the referred object.
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
ObjectReference :: {
	// Kind of the referent.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
	// +optional
	kind?: string @go(Kind) @protobuf(1,bytes,opt)

	// Namespace of the referent.
	// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
	// +optional
	namespace?: string @go(Namespace) @protobuf(2,bytes,opt)

	// Name of the referent.
	// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
	// +optional
	name?: string @go(Name) @protobuf(3,bytes,opt)

	// UID of the referent.
	// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
	// +optional
	uid?: types.UID @go(UID) @protobuf(4,bytes,opt,casttype=k8s.io/apimachinery/pkg/types.UID)

	// API version of the referent.
	// +optional
	apiVersion?: string @go(APIVersion) @protobuf(5,bytes,opt)

	// Specific resourceVersion to which this reference is made, if any.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
	// +optional
	resourceVersion?: string @go(ResourceVersion) @protobuf(6,bytes,opt)

	// If referring to a piece of an object instead of an entire object, this string
	// should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
	// For example, if the object reference is to a container within a pod, this would take on a value like:
	// "spec.containers{name}" (where "name" refers to the name of the container that triggered
	// the event) or if no container name is specified "spec.containers[2]" (container with
	// index 2 in this pod). This syntax is chosen only to have some well-defined way of
	// referencing a part of an object.
	// TODO: this design is not final and this field is subject to change in the future.
	// +optional
	fieldPath?: string @go(FieldPath) @protobuf(7,bytes,opt)
}

// LocalObjectReference contains enough information to let you locate the
// referenced object inside the same namespace.
LocalObjectReference :: {
	// Name of the referent.
	// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
	// TODO: Add other useful fields. apiVersion, kind, uid?
	// +optional
	name?: string @go(Name) @protobuf(1,bytes,opt)
}

// TypedLocalObjectReference contains enough information to let you locate the
// typed referenced object inside the same namespace.
TypedLocalObjectReference :: {
	// APIGroup is the group for the resource being referenced.
	// If APIGroup is not specified, the specified Kind must be in the core API group.
	// For any other third-party types, APIGroup is required.
	// +optional
	apiGroup: null | string @go(APIGroup,*string) @protobuf(1,bytes,opt)

	// Kind is the type of resource being referenced
	kind: string @go(Kind) @protobuf(2,bytes,opt)

	// Name is the name of resource being referenced
	name: string @go(Name) @protobuf(3,bytes,opt)
}

// SerializedReference is a reference to serialized object.
SerializedReference :: {
	metav1.TypeMeta

	// The reference to an object in the system.
	// +optional
	reference?: ObjectReference @go(Reference) @protobuf(1,bytes,opt)
}

// EventSource contains information for an event.
EventSource :: {
	// Component from which the event is generated.
	// +optional
	component?: string @go(Component) @protobuf(1,bytes,opt)

	// Node name on which the event is generated.
	// +optional
	host?: string @go(Host) @protobuf(2,bytes,opt)
}

// Information only and will not cause any problems
EventTypeNormal :: "Normal"

// These events are to warn that something might go wrong
EventTypeWarning :: "Warning"

// Event is a report of an event somewhere in the cluster.
Event :: {
	metav1.TypeMeta

	// Standard object's metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
	metadata: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)

	// The object that this event is about.
	involvedObject: ObjectReference @go(InvolvedObject) @protobuf(2,bytes,opt)

	// This should be a short, machine understandable string that gives the reason
	// for the transition into the object's current status.
	// TODO: provide exact specification for format.
	// +optional
	reason?: string @go(Reason) @protobuf(3,bytes,opt)

	// A human-readable description of the status of this operation.
	// TODO: decide on maximum length.
	// +optional
	message?: string @go(Message) @protobuf(4,bytes,opt)

	// The component reporting this event. Should be a short machine understandable string.
	// +optional
	source?: EventSource @go(Source) @protobuf(5,bytes,opt)

	// The time at which the event was first recorded. (Time of server receipt is in TypeMeta.)
	// +optional
	firstTimestamp?: metav1.Time @go(FirstTimestamp) @protobuf(6,bytes,opt)

	// The time at which the most recent occurrence of this event was recorded.
	// +optional
	lastTimestamp?: metav1.Time @go(LastTimestamp) @protobuf(7,bytes,opt)

	// The number of times this event has occurred.
	// +optional
	count?: int32 @go(Count) @protobuf(8,varint,opt)

	// Type of this event (Normal, Warning), new types could be added in the future
	// +optional
	type?: string @go(Type) @protobuf(9,bytes,opt)

	// Time when this Event was first observed.
	// +optional
	eventTime?: metav1.MicroTime @go(EventTime) @protobuf(10,bytes,opt)

	// Data about the Event series this event represents or nil if it's a singleton Event.
	// +optional
	series?: null | EventSeries @go(Series,*EventSeries) @protobuf(11,bytes,opt)

	// What action was taken/failed regarding to the Regarding object.
	// +optional
	action?: string @go(Action) @protobuf(12,bytes,opt)

	// Optional secondary object for more complex actions.
	// +optional
	related?: null | ObjectReference @go(Related,*ObjectReference) @protobuf(13,bytes,opt)

	// Name of the controller that emitted this Event, e.g. `kubernetes.io/kubelet`.
	// +optional
	reportingComponent: string @go(ReportingController) @protobuf(14,bytes,opt)

	// ID of the controller instance, e.g. `kubelet-xyzf`.
	// +optional
	reportingInstance: string @go(ReportingInstance) @protobuf(15,bytes,opt)
}

// EventSeries contain information on series of events, i.e. thing that was/is happening
// continuously for some time.
EventSeries :: {
	// Number of occurrences in this series up to the last heartbeat time
	count?: int32 @go(Count) @protobuf(1,varint)

	// Time of the last occurrence observed
	lastObservedTime?: metav1.MicroTime @go(LastObservedTime) @protobuf(2,bytes)

	// State of this Series: Ongoing or Finished
	// Deprecated. Planned removal for 1.18
	state?: EventSeriesState @go(State) @protobuf(3,bytes)
}

EventSeriesState :: string // enumEventSeriesState

enumEventSeriesState ::
	EventSeriesStateOngoing |
	EventSeriesStateFinished |
	EventSeriesStateUnknown

EventSeriesStateOngoing ::  EventSeriesState & "Ongoing"
EventSeriesStateFinished :: EventSeriesState & "Finished"
EventSeriesStateUnknown ::  EventSeriesState & "Unknown"

// EventList is a list of events.
EventList :: {
	metav1.TypeMeta

	// Standard list metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
	// +optional
	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)

	// List of events
	items: [...Event] @go(Items,[]Event) @protobuf(2,bytes,rep)
}

// List holds a list of objects, which may not be known by the server.
List :: metav1.List

// LimitType is a type of object that is limited
LimitType :: string // enumLimitType

enumLimitType ::
	LimitTypePod |
	LimitTypeContainer |
	LimitTypePersistentVolumeClaim

// Limit that applies to all pods in a namespace
LimitTypePod :: LimitType & "Pod"

// Limit that applies to all containers in a namespace
LimitTypeContainer :: LimitType & "Container"

// Limit that applies to all persistent volume claims in a namespace
LimitTypePersistentVolumeClaim :: LimitType & "PersistentVolumeClaim"

// LimitRangeItem defines a min/max usage limit for any resource that matches on kind.
LimitRangeItem :: {
	// Type of resource that this limit applies to.
	// +optional
	type?: LimitType @go(Type) @protobuf(1,bytes,opt,casttype=LimitType)

	// Max usage constraints on this kind by resource name.
	// +optional
	max?: ResourceList @go(Max) @protobuf(2,bytes,rep,casttype=ResourceList,castkey=ResourceName)

	// Min usage constraints on this kind by resource name.
	// +optional
	min?: ResourceList @go(Min) @protobuf(3,bytes,rep,casttype=ResourceList,castkey=ResourceName)

	// Default resource requirement limit value by resource name if resource limit is omitted.
	// +optional
	default?: ResourceList @go(Default) @protobuf(4,bytes,rep,casttype=ResourceList,castkey=ResourceName)

	// DefaultRequest is the default resource requirement request value by resource name if resource request is omitted.
	// +optional
	defaultRequest?: ResourceList @go(DefaultRequest) @protobuf(5,bytes,rep,casttype=ResourceList,castkey=ResourceName)

	// MaxLimitRequestRatio if specified, the named resource must have a request and limit that are both non-zero where limit divided by request is less than or equal to the enumerated value; this represents the max burst for the named resource.
	// +optional
	maxLimitRequestRatio?: ResourceList @go(MaxLimitRequestRatio) @protobuf(6,bytes,rep,casttype=ResourceList,castkey=ResourceName)
}

// LimitRangeSpec defines a min/max usage limit for resources that match on kind.
LimitRangeSpec :: {
	// Limits is the list of LimitRangeItem objects that are enforced.
	limits: [...LimitRangeItem] @go(Limits,[]LimitRangeItem) @protobuf(1,bytes,rep)
}

// LimitRange sets resource usage limits for each kind of resource in a Namespace.
LimitRange :: {
	metav1.TypeMeta

	// Standard object's metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
	// +optional
	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)

	// Spec defines the limits enforced.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
	// +optional
	spec?: LimitRangeSpec @go(Spec) @protobuf(2,bytes,opt)
}

// LimitRangeList is a list of LimitRange items.
LimitRangeList :: {
	metav1.TypeMeta

	// Standard list metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
	// +optional
	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)

	// Items is a list of LimitRange objects.
	// More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
	items: [...LimitRange] @go(Items,[]LimitRange) @protobuf(2,bytes,rep)
}

// Pods, number
ResourcePods :: ResourceName & "pods"

// Services, number
ResourceServices :: ResourceName & "services"

// ReplicationControllers, number
ResourceReplicationControllers :: ResourceName & "replicationcontrollers"

// ResourceQuotas, number
ResourceQuotas :: ResourceName & "resourcequotas"

// ResourceSecrets, number
ResourceSecrets :: ResourceName & "secrets"

// ResourceConfigMaps, number
ResourceConfigMaps :: ResourceName & "configmaps"

// ResourcePersistentVolumeClaims, number
ResourcePersistentVolumeClaims :: ResourceName & "persistentvolumeclaims"

// ResourceServicesNodePorts, number
ResourceServicesNodePorts :: ResourceName & "services.nodeports"

// ResourceServicesLoadBalancers, number
ResourceServicesLoadBalancers :: ResourceName & "services.loadbalancers"

// CPU request, in cores. (500m = .5 cores)
ResourceRequestsCPU :: ResourceName & "requests.cpu"

// Memory request, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024)
ResourceRequestsMemory :: ResourceName & "requests.memory"

// Storage request, in bytes
ResourceRequestsStorage :: ResourceName & "requests.storage"

// Local ephemeral storage request, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024)
ResourceRequestsEphemeralStorage :: ResourceName & "requests.ephemeral-storage"

// CPU limit, in cores. (500m = .5 cores)
ResourceLimitsCPU :: ResourceName & "limits.cpu"

// Memory limit, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024)
ResourceLimitsMemory :: ResourceName & "limits.memory"

// Local ephemeral storage limit, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024)
ResourceLimitsEphemeralStorage :: ResourceName & "limits.ephemeral-storage"

// HugePages request, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024)
// As burst is not supported for HugePages, we would only quota its request, and ignore the limit.
ResourceRequestsHugePagesPrefix :: "requests.hugepages-"

// Default resource requests prefix
DefaultResourceRequestsPrefix :: "requests."

// A ResourceQuotaScope defines a filter that must match each object tracked by a quota
ResourceQuotaScope :: string // enumResourceQuotaScope

enumResourceQuotaScope ::
	ResourceQuotaScopeTerminating |
	ResourceQuotaScopeNotTerminating |
	ResourceQuotaScopeBestEffort |
	ResourceQuotaScopeNotBestEffort |
	ResourceQuotaScopePriorityClass

// Match all pod objects where spec.activeDeadlineSeconds
ResourceQuotaScopeTerminating :: ResourceQuotaScope & "Terminating"

// Match all pod objects where !spec.activeDeadlineSeconds
ResourceQuotaScopeNotTerminating :: ResourceQuotaScope & "NotTerminating"

// Match all pod objects that have best effort quality of service
ResourceQuotaScopeBestEffort :: ResourceQuotaScope & "BestEffort"

// Match all pod objects that do not have best effort quality of service
ResourceQuotaScopeNotBestEffort :: ResourceQuotaScope & "NotBestEffort"

// Match all pod objects that have priority class mentioned
ResourceQuotaScopePriorityClass :: ResourceQuotaScope & "PriorityClass"

// ResourceQuotaSpec defines the desired hard limits to enforce for Quota.
ResourceQuotaSpec :: {
	// hard is the set of desired hard limits for each named resource.
	// More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/
	// +optional
	hard?: ResourceList @go(Hard) @protobuf(1,bytes,rep,casttype=ResourceList,castkey=ResourceName)

	// A collection of filters that must match each object tracked by a quota.
	// If not specified, the quota matches all objects.
	// +optional
	scopes?: [...ResourceQuotaScope] @go(Scopes,[]ResourceQuotaScope) @protobuf(2,bytes,rep,casttype=ResourceQuotaScope)

	// scopeSelector is also a collection of filters like scopes that must match each object tracked by a quota
	// but expressed using ScopeSelectorOperator in combination with possible values.
	// For a resource to match, both scopes AND scopeSelector (if specified in spec), must be matched.
	// +optional
	scopeSelector?: null | ScopeSelector @go(ScopeSelector,*ScopeSelector) @protobuf(3,bytes,opt)
}

// A scope selector represents the AND of the selectors represented
// by the scoped-resource selector requirements.
ScopeSelector :: {
	// A list of scope selector requirements by scope of the resources.
	// +optional
	matchExpressions?: [...ScopedResourceSelectorRequirement] @go(MatchExpressions,[]ScopedResourceSelectorRequirement) @protobuf(1,bytes,rep)
}

// A scoped-resource selector requirement is a selector that contains values, a scope name, and an operator
// that relates the scope name and values.
ScopedResourceSelectorRequirement :: {
	// The name of the scope that the selector applies to.
	scopeName: ResourceQuotaScope @go(ScopeName) @protobuf(1,bytes,opt)

	// Represents a scope's relationship to a set of values.
	// Valid operators are In, NotIn, Exists, DoesNotExist.
	operator: ScopeSelectorOperator @go(Operator) @protobuf(2,bytes,opt,casttype=ScopedResourceSelectorOperator)

	// An array of string values. If the operator is In or NotIn,
	// the values array must be non-empty. If the operator is Exists or DoesNotExist,
	// the values array must be empty.
	// This array is replaced during a strategic merge patch.
	// +optional
	values?: [...string] @go(Values,[]string) @protobuf(3,bytes,rep)
}

// A scope selector operator is the set of operators that can be used in
// a scope selector requirement.
ScopeSelectorOperator :: string // enumScopeSelectorOperator

enumScopeSelectorOperator ::
	ScopeSelectorOpIn |
	ScopeSelectorOpNotIn |
	ScopeSelectorOpExists |
	ScopeSelectorOpDoesNotExist

ScopeSelectorOpIn ::           ScopeSelectorOperator & "In"
ScopeSelectorOpNotIn ::        ScopeSelectorOperator & "NotIn"
ScopeSelectorOpExists ::       ScopeSelectorOperator & "Exists"
ScopeSelectorOpDoesNotExist :: ScopeSelectorOperator & "DoesNotExist"

// ResourceQuotaStatus defines the enforced hard limits and observed use.
ResourceQuotaStatus :: {
	// Hard is the set of enforced hard limits for each named resource.
	// More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/
	// +optional
	hard?: ResourceList @go(Hard) @protobuf(1,bytes,rep,casttype=ResourceList,castkey=ResourceName)

	// Used is the current observed total usage of the resource in the namespace.
	// +optional
	used?: ResourceList @go(Used) @protobuf(2,bytes,rep,casttype=ResourceList,castkey=ResourceName)
}

// ResourceQuota sets aggregate quota restrictions enforced per namespace
ResourceQuota :: {
	metav1.TypeMeta

	// Standard object's metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
	// +optional
	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)

	// Spec defines the desired quota.
	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
	// +optional
	spec?: ResourceQuotaSpec @go(Spec) @protobuf(2,bytes,opt)

	// Status defines the actual enforced quota and its current usage.
	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
	// +optional
	status?: ResourceQuotaStatus @go(Status) @protobuf(3,bytes,opt)
}

// ResourceQuotaList is a list of ResourceQuota items.
ResourceQuotaList :: {
	metav1.TypeMeta

	// Standard list metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
	// +optional
	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)

	// Items is a list of ResourceQuota objects.
	// More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/
	items: [...ResourceQuota] @go(Items,[]ResourceQuota) @protobuf(2,bytes,rep)
}

// Secret holds secret data of a certain type. The total bytes of the values in
// the Data field must be less than MaxSecretSize bytes.
Secret :: {
	metav1.TypeMeta

	// Standard object's metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
	// +optional
	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)

	// 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?: {<_>: bytes} @go(Data,map[string][]byte) @protobuf(2,bytes,rep)

	// stringData allows specifying non-binary secret data in string form.
	// It is provided as a write-only convenience method.
	// All keys and values are merged into the data field on write, overwriting any existing values.
	// It is never output when reading from the API.
	// +k8s:conversion-gen=false
	// +optional
	stringData?: {<_>: string} @go(StringData,map[string]string) @protobuf(4,bytes,rep)

	// Used to facilitate programmatic handling of secret data.
	// +optional
	type?: SecretType @go(Type) @protobuf(3,bytes,opt,casttype=SecretType)
}

MaxSecretSize :: 1048576

SecretType :: string // enumSecretType

enumSecretType ::
	SecretTypeOpaque |
	SecretTypeServiceAccountToken |
	SecretTypeDockercfg |
	SecretTypeDockerConfigJson |
	SecretTypeBasicAuth |
	SecretTypeSSHAuth |
	SecretTypeTLS |
	SecretTypeBootstrapToken

// SecretTypeOpaque is the default. Arbitrary user-defined data
SecretTypeOpaque :: SecretType & "Opaque"

// SecretTypeServiceAccountToken contains a token that identifies a service account to the API
//
// Required fields:
// - Secret.Annotations["kubernetes.io/service-account.name"] - the name of the ServiceAccount the token identifies
// - Secret.Annotations["kubernetes.io/service-account.uid"] - the UID of the ServiceAccount the token identifies
// - Secret.Data["token"] - a token that identifies the service account to the API
SecretTypeServiceAccountToken :: SecretType & "kubernetes.io/service-account-token"

// ServiceAccountNameKey is the key of the required annotation for SecretTypeServiceAccountToken secrets
ServiceAccountNameKey :: "kubernetes.io/service-account.name"

// ServiceAccountUIDKey is the key of the required annotation for SecretTypeServiceAccountToken secrets
ServiceAccountUIDKey :: "kubernetes.io/service-account.uid"

// ServiceAccountTokenKey is the key of the required data for SecretTypeServiceAccountToken secrets
ServiceAccountTokenKey :: "token"

// ServiceAccountKubeconfigKey is the key of the optional kubeconfig data for SecretTypeServiceAccountToken secrets
ServiceAccountKubeconfigKey :: "kubernetes.kubeconfig"

// ServiceAccountRootCAKey is the key of the optional root certificate authority for SecretTypeServiceAccountToken secrets
ServiceAccountRootCAKey :: "ca.crt"

// ServiceAccountNamespaceKey is the key of the optional namespace to use as the default for namespaced API calls
ServiceAccountNamespaceKey :: "namespace"

// SecretTypeDockercfg contains a dockercfg file that follows the same format rules as ~/.dockercfg
//
// Required fields:
// - Secret.Data[".dockercfg"] - a serialized ~/.dockercfg file
SecretTypeDockercfg :: SecretType & "kubernetes.io/dockercfg"

// DockerConfigKey is the key of the required data for SecretTypeDockercfg secrets
DockerConfigKey :: ".dockercfg"

// SecretTypeDockerConfigJson contains a dockercfg file that follows the same format rules as ~/.docker/config.json
//
// Required fields:
// - Secret.Data[".dockerconfigjson"] - a serialized ~/.docker/config.json file
SecretTypeDockerConfigJson :: SecretType & "kubernetes.io/dockerconfigjson"

// DockerConfigJsonKey is the key of the required data for SecretTypeDockerConfigJson secrets
DockerConfigJsonKey :: ".dockerconfigjson"

// SecretTypeBasicAuth contains data needed for basic authentication.
//
// Required at least one of fields:
// - Secret.Data["username"] - username used for authentication
// - Secret.Data["password"] - password or token needed for authentication
SecretTypeBasicAuth :: SecretType & "kubernetes.io/basic-auth"

// BasicAuthUsernameKey is the key of the username for SecretTypeBasicAuth secrets
BasicAuthUsernameKey :: "username"

// BasicAuthPasswordKey is the key of the password or token for SecretTypeBasicAuth secrets
BasicAuthPasswordKey :: "password"

// SecretTypeSSHAuth contains data needed for SSH authetication.
//
// Required field:
// - Secret.Data["ssh-privatekey"] - private SSH key needed for authentication
SecretTypeSSHAuth :: SecretType & "kubernetes.io/ssh-auth"

// SSHAuthPrivateKey is the key of the required SSH private key for SecretTypeSSHAuth secrets
SSHAuthPrivateKey :: "ssh-privatekey"

// SecretTypeTLS contains information about a TLS client or server secret. It
// is primarily used with TLS termination of the Ingress resource, but may be
// used in other types.
//
// Required fields:
// - Secret.Data["tls.key"] - TLS private key.
//   Secret.Data["tls.crt"] - TLS certificate.
// TODO: Consider supporting different formats, specifying CA/destinationCA.
SecretTypeTLS :: SecretType & "kubernetes.io/tls"

// TLSCertKey is the key for tls certificates in a TLS secert.
TLSCertKey :: "tls.crt"

// TLSPrivateKeyKey is the key for the private key field in a TLS secret.
TLSPrivateKeyKey :: "tls.key"

// SecretTypeBootstrapToken is used during the automated bootstrap process (first
// implemented by kubeadm). It stores tokens that are used to sign well known
// ConfigMaps. They are used for authn.
SecretTypeBootstrapToken :: SecretType & "bootstrap.kubernetes.io/token"

// SecretList is a list of Secret.
SecretList :: {
	metav1.TypeMeta

	// Standard list metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
	// +optional
	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)

	// Items is a list of secret objects.
	// More info: https://kubernetes.io/docs/concepts/configuration/secret
	items: [...Secret] @go(Items,[]Secret) @protobuf(2,bytes,rep)
}

// ConfigMap holds configuration data for pods to consume.
ConfigMap :: {
	metav1.TypeMeta

	// Standard object's metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
	// +optional
	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)

	// Data contains the configuration data.
	// Each key must consist of alphanumeric characters, '-', '_' or '.'.
	// Values with non-UTF-8 byte sequences must use the BinaryData field.
	// The keys stored in Data must not overlap with the keys in
	// the BinaryData field, this is enforced during validation process.
	// +optional
	data?: {<_>: string} @go(Data,map[string]string) @protobuf(2,bytes,rep)

	// BinaryData contains the binary data.
	// Each key must consist of alphanumeric characters, '-', '_' or '.'.
	// BinaryData can contain byte sequences that are not in the UTF-8 range.
	// The keys stored in BinaryData must not overlap with the ones in
	// the Data field, this is enforced during validation process.
	// Using this field will require 1.10+ apiserver and
	// kubelet.
	// +optional
	binaryData?: {<_>: bytes} @go(BinaryData,map[string][]byte) @protobuf(3,bytes,rep)
}

// ConfigMapList is a resource containing a list of ConfigMap objects.
ConfigMapList :: {
	metav1.TypeMeta

	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
	// +optional
	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)

	// Items is the list of ConfigMaps.
	items: [...ConfigMap] @go(Items,[]ConfigMap) @protobuf(2,bytes,rep)
}

// Type and constants for component health validation.
ComponentConditionType :: string // enumComponentConditionType

enumComponentConditionType ::
	ComponentHealthy

ComponentHealthy :: ComponentConditionType & "Healthy"

// Information about the condition of a component.
ComponentCondition :: {
	// Type of condition for a component.
	// Valid value: "Healthy"
	type: ComponentConditionType @go(Type) @protobuf(1,bytes,opt,casttype=ComponentConditionType)

	// Status of the condition for a component.
	// Valid values for "Healthy": "True", "False", or "Unknown".
	status: ConditionStatus @go(Status) @protobuf(2,bytes,opt,casttype=ConditionStatus)

	// Message about the condition for a component.
	// For example, information about a health check.
	// +optional
	message?: string @go(Message) @protobuf(3,bytes,opt)

	// Condition error code for a component.
	// For example, a health check error code.
	// +optional
	error?: string @go(Error) @protobuf(4,bytes,opt)
}

// ComponentStatus (and ComponentStatusList) holds the cluster validation info.
ComponentStatus :: {
	metav1.TypeMeta

	// Standard object's metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
	// +optional
	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)

	// List of component conditions observed
	// +optional
	// +patchMergeKey=type
	// +patchStrategy=merge
	conditions?: [...ComponentCondition] @go(Conditions,[]ComponentCondition) @protobuf(2,bytes,rep)
}

// Status of all the conditions for the component as a list of ComponentStatus objects.
ComponentStatusList :: {
	metav1.TypeMeta

	// Standard list metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
	// +optional
	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)

	// List of ComponentStatus objects.
	items: [...ComponentStatus] @go(Items,[]ComponentStatus) @protobuf(2,bytes,rep)
}

// DownwardAPIVolumeSource represents a volume containing downward API info.
// Downward API volumes support ownership management and SELinux relabeling.
DownwardAPIVolumeSource :: {
	// Items is a list of downward API volume file
	// +optional
	items?: [...DownwardAPIVolumeFile] @go(Items,[]DownwardAPIVolumeFile) @protobuf(1,bytes,rep)

	// Optional: mode bits to use on created files by default. Must be a
	// value between 0 and 0777. Defaults to 0644.
	// Directories within the path are not affected by this setting.
	// This might be in conflict with other options that affect the file
	// mode, like fsGroup, and the result can be other mode bits set.
	// +optional
	defaultMode?: null | int32 @go(DefaultMode,*int32) @protobuf(2,varint,opt)
}

DownwardAPIVolumeSourceDefaultMode :: int32 & 0o644

// DownwardAPIVolumeFile represents information to create the file containing the pod field
DownwardAPIVolumeFile :: {
	// Required: Path is  the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'
	path: string @go(Path) @protobuf(1,bytes,opt)

	// Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.
	// +optional
	fieldRef?: null | ObjectFieldSelector @go(FieldRef,*ObjectFieldSelector) @protobuf(2,bytes,opt)

	// Selects a resource of the container: only resources limits and requests
	// (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.
	// +optional
	resourceFieldRef?: null | ResourceFieldSelector @go(ResourceFieldRef,*ResourceFieldSelector) @protobuf(3,bytes,opt)

	// Optional: mode bits to use on this file, must be a value between 0
	// and 0777. If not specified, the volume defaultMode will be used.
	// This might be in conflict with other options that affect the file
	// mode, like fsGroup, and the result can be other mode bits set.
	// +optional
	mode?: null | int32 @go(Mode,*int32) @protobuf(4,varint,opt)
}

// Represents downward API info for projecting into a projected volume.
// Note that this is identical to a downwardAPI volume source without the default
// mode.
DownwardAPIProjection :: {
	// Items is a list of DownwardAPIVolume file
	// +optional
	items?: [...DownwardAPIVolumeFile] @go(Items,[]DownwardAPIVolumeFile) @protobuf(1,bytes,rep)
}

// SecurityContext holds security configuration that will be applied to a container.
// Some fields are present in both SecurityContext and PodSecurityContext.  When both
// are set, the values in SecurityContext take precedence.
SecurityContext :: {
	// The capabilities to add/drop when running containers.
	// Defaults to the default set of capabilities granted by the container runtime.
	// +optional
	capabilities?: null | Capabilities @go(Capabilities,*Capabilities) @protobuf(1,bytes,opt)

	// Run container in privileged mode.
	// Processes in privileged containers are essentially equivalent to root on the host.
	// Defaults to false.
	// +optional
	privileged?: null | bool @go(Privileged,*bool) @protobuf(2,varint,opt)

	// The SELinux context to be applied to the container.
	// If unspecified, the container runtime will allocate a random SELinux context for each
	// container.  May also be set in PodSecurityContext.  If set in both SecurityContext and
	// PodSecurityContext, the value specified in SecurityContext takes precedence.
	// +optional
	seLinuxOptions?: null | SELinuxOptions @go(SELinuxOptions,*SELinuxOptions) @protobuf(3,bytes,opt)

	// The Windows specific settings applied to all containers.
	// If unspecified, the options from the PodSecurityContext will be used.
	// If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.
	// +optional
	windowsOptions?: null | WindowsSecurityContextOptions @go(WindowsOptions,*WindowsSecurityContextOptions) @protobuf(10,bytes,opt)

	// The UID to run the entrypoint of the container process.
	// Defaults to user specified in image metadata if unspecified.
	// May also be set in PodSecurityContext.  If set in both SecurityContext and
	// PodSecurityContext, the value specified in SecurityContext takes precedence.
	// +optional
	runAsUser?: null | int64 @go(RunAsUser,*int64) @protobuf(4,varint,opt)

	// The GID to run the entrypoint of the container process.
	// Uses runtime default if unset.
	// May also be set in PodSecurityContext.  If set in both SecurityContext and
	// PodSecurityContext, the value specified in SecurityContext takes precedence.
	// +optional
	runAsGroup?: null | int64 @go(RunAsGroup,*int64) @protobuf(8,varint,opt)

	// Indicates that the container must run as a non-root user.
	// If true, the Kubelet will validate the image at runtime to ensure that it
	// does not run as UID 0 (root) and fail to start the container if it does.
	// If unset or false, no such validation will be performed.
	// May also be set in PodSecurityContext.  If set in both SecurityContext and
	// PodSecurityContext, the value specified in SecurityContext takes precedence.
	// +optional
	runAsNonRoot?: null | bool @go(RunAsNonRoot,*bool) @protobuf(5,varint,opt)

	// Whether this container has a read-only root filesystem.
	// Default is false.
	// +optional
	readOnlyRootFilesystem?: null | bool @go(ReadOnlyRootFilesystem,*bool) @protobuf(6,varint,opt)

	// AllowPrivilegeEscalation controls whether a process can gain more
	// privileges than its parent process. This bool directly controls if
	// the no_new_privs flag will be set on the container process.
	// AllowPrivilegeEscalation is true always when the container is:
	// 1) run as Privileged
	// 2) has CAP_SYS_ADMIN
	// +optional
	allowPrivilegeEscalation?: null | bool @go(AllowPrivilegeEscalation,*bool) @protobuf(7,varint,opt)

	// procMount denotes the type of proc mount to use for the containers.
	// The default is DefaultProcMount which uses the container runtime defaults for
	// readonly paths and masked paths.
	// This requires the ProcMountType feature flag to be enabled.
	// +optional
	procMount?: null | ProcMountType @go(ProcMount,*ProcMountType) @protobuf(9,bytes,opt)
}

ProcMountType :: string // enumProcMountType

enumProcMountType ::
	DefaultProcMount |
	UnmaskedProcMount

// DefaultProcMount uses the container runtime defaults for readonly and masked
// paths for /proc.  Most container runtimes mask certain paths in /proc to avoid
// accidental security exposure of special devices or information.
DefaultProcMount :: ProcMountType & "Default"

// UnmaskedProcMount bypasses the default masking behavior of the container
// runtime and ensures the newly created /proc the container stays in tact with
// no modifications.
UnmaskedProcMount :: ProcMountType & "Unmasked"

// SELinuxOptions are the labels to be applied to the container
SELinuxOptions :: {
	// User is a SELinux user label that applies to the container.
	// +optional
	user?: string @go(User) @protobuf(1,bytes,opt)

	// Role is a SELinux role label that applies to the container.
	// +optional
	role?: string @go(Role) @protobuf(2,bytes,opt)

	// Type is a SELinux type label that applies to the container.
	// +optional
	type?: string @go(Type) @protobuf(3,bytes,opt)

	// Level is SELinux level label that applies to the container.
	// +optional
	level?: string @go(Level) @protobuf(4,bytes,opt)
}

// WindowsSecurityContextOptions contain Windows-specific options and credentials.
WindowsSecurityContextOptions :: {
	// GMSACredentialSpecName is the name of the GMSA credential spec to use.
	// This field is alpha-level and is only honored by servers that enable the WindowsGMSA feature flag.
	// +optional
	gmsaCredentialSpecName?: null | string @go(GMSACredentialSpecName,*string) @protobuf(1,bytes,opt)

	// GMSACredentialSpec is where the GMSA admission webhook
	// (https://github.com/kubernetes-sigs/windows-gmsa) inlines the contents of the
	// GMSA credential spec named by the GMSACredentialSpecName field.
	// This field is alpha-level and is only honored by servers that enable the WindowsGMSA feature flag.
	// +optional
	gmsaCredentialSpec?: null | string @go(GMSACredentialSpec,*string) @protobuf(2,bytes,opt)

	// The UserName in Windows to run the entrypoint of the container process.
	// Defaults to the user specified in image metadata if unspecified.
	// May also be set in PodSecurityContext. If set in both SecurityContext and
	// PodSecurityContext, the value specified in SecurityContext takes precedence.
	// This field is alpha-level and it is only honored by servers that enable the WindowsRunAsUserName feature flag.
	// +optional
	runAsUserName?: null | string @go(RunAsUserName,*string) @protobuf(3,bytes,opt)
}

// RangeAllocation is not a public type.
RangeAllocation :: {
	metav1.TypeMeta

	// Standard object's metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
	// +optional
	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)

	// Range is string that identifies the range represented by 'data'.
	range: string @go(Range) @protobuf(2,bytes,opt)

	// Data is a bit array containing all allocated addresses in the previous segment.
	data: bytes @go(Data,[]byte) @protobuf(3,bytes,opt)
}

// "default-scheduler" is the name of default scheduler.
DefaultSchedulerName :: "default-scheduler"

// RequiredDuringScheduling affinity is not symmetric, but there is an implicit PreferredDuringScheduling affinity rule
// corresponding to every RequiredDuringScheduling affinity rule.
// When the --hard-pod-affinity-weight scheduler flag is not specified,
// DefaultHardPodAffinityWeight defines the weight of the implicit PreferredDuringScheduling affinity rule.
DefaultHardPodAffinitySymmetricWeight :: int32 & 1

// Sysctl defines a kernel parameter to be set
Sysctl :: {
	// Name of a property to set
	name: string @go(Name) @protobuf(1,bytes,opt)

	// Value of a property to set
	value: string @go(Value) @protobuf(2,bytes,opt)
}

// NodeResources is an object for conveying resource information about a node.
// see http://releases.k8s.io/HEAD/docs/design/resources.md for more details.
NodeResources :: {
	// Capacity represents the available resources of a node
	Capacity: ResourceList @protobuf(1,bytes,rep,name=capacity,casttype=ResourceList,castkey=ResourceName)
}

// Enable stdin for remote command execution
ExecStdinParam :: "input"

// Enable stdout for remote command execution
ExecStdoutParam :: "output"

// Enable stderr for remote command execution
ExecStderrParam :: "error"

// Enable TTY for remote command execution
ExecTTYParam :: "tty"

// Command to run for remote command execution
ExecCommandParam :: "command"

// Name of header that specifies stream type
StreamType :: "streamType"

// Value for streamType header for stdin stream
StreamTypeStdin :: "stdin"

// Value for streamType header for stdout stream
StreamTypeStdout :: "stdout"

// Value for streamType header for stderr stream
StreamTypeStderr :: "stderr"

// Value for streamType header for data stream
StreamTypeData :: "data"

// Value for streamType header for error stream
StreamTypeError :: "error"

// Value for streamType header for terminal resize stream
StreamTypeResize :: "resize"

// Name of header that specifies the port being forwarded
PortHeader :: "port"

// Name of header that specifies a request ID used to associate the error
// and data streams for a single forwarded connection
PortForwardRequestIDHeader :: "requestID"
