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

//cue:generate cue get go k8s.io/apimachinery/pkg/types

package types

// NodeName is a type that holds a api.Node's Name identifier.
// Being a type captures intent and helps make sure that the node name
// is not confused with similar concepts (the hostname, the cloud provider id,
// the cloud provider name etc)
//
// To clarify the various types:
//
// * Node.Name is the Name field of the Node in the API.  This should be stored in a NodeName.
//   Unfortunately, because Name is part of ObjectMeta, we can't store it as a NodeName at the API level.
//
// * Hostname is the hostname of the local machine (from uname -n).
//   However, some components allow the user to pass in a --hostname-override flag,
//   which will override this in most places. In the absence of anything more meaningful,
//   kubelet will use Hostname as the Node.Name when it creates the Node.
//
// * The cloudproviders have the own names: GCE has InstanceName, AWS has InstanceId.
//
//   For GCE, InstanceName is the Name of an Instance object in the GCE API.  On GCE, Instance.Name becomes the
//   Hostname, and thus it makes sense also to use it as the Node.Name.  But that is GCE specific, and it is up
//   to the cloudprovider how to do this mapping.
//
//   For AWS, the InstanceID is not yet suitable for use as a Node.Name, so we actually use the
//   PrivateDnsName for the Node.Name.  And this is _not_ always the same as the hostname: if
//   we are using a custom DHCP domain it won't be.
NodeName :: string
