internal/api/types.go (123 lines of code) (raw):

// +kubebuilder:object:generate=true // +groupName=node.eks.aws package api import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" ) // +kubebuilder:skipversion // +kubebuilder:object:root=true type NodeConfig struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` Spec NodeConfigSpec `json:"spec,omitempty"` // +k8s:conversion-gen=false Status NodeConfigStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true type NodeConfigList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty"` Items []NodeConfig `json:"items"` } type NodeConfigSpec struct { Cluster ClusterDetails `json:"cluster,omitempty"` Containerd ContainerdOptions `json:"containerd,omitempty"` Instance InstanceOptions `json:"instance,omitempty"` Kubelet KubeletOptions `json:"kubelet,omitempty"` Hybrid *HybridOptions `json:"hybrid,omitempty"` } type NodeConfigStatus struct { Instance InstanceDetails `json:"instance,omitempty"` Hybrid HybridDetails `json:"hybrid,omitempty"` Defaults DefaultOptions `json:"default,omitempty"` } type InstanceDetails struct { ID string `json:"id,omitempty"` Region string `json:"region,omitempty"` Type string `json:"type,omitempty"` AvailabilityZone string `json:"availabilityZone,omitempty"` MAC string `json:"mac,omitempty"` PrivateDNSName string `json:"privateDnsName,omitempty"` } type HybridDetails struct { NodeName string `json:"nodeName,omitempty"` } type DefaultOptions struct { SandboxImage string `json:"sandboxImage,omitempty"` } type ClusterDetails struct { Name string `json:"name,omitempty"` Region string `json:"region,omitempty"` APIServerEndpoint string `json:"apiServerEndpoint,omitempty"` CertificateAuthority []byte `json:"certificateAuthority,omitempty"` CIDR string `json:"cidr,omitempty"` EnableOutpost *bool `json:"enableOutpost,omitempty"` ID string `json:"id,omitempty"` } type KubeletOptions struct { // Config is a kubelet config that can be provided by the user to override // default generated configurations // https://kubernetes.io/docs/reference/config-api/kubelet-config.v1/ Config InlineDocument `json:"config,omitempty"` // Flags is a list of command-line kubelet arguments. These arguments are // amended to the generated defaults, and therefore will act as overrides // https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/ Flags []string `json:"flags,omitempty"` } // InlineDocument is an alias to a dynamically typed map. This allows using // embedded YAML and JSON types within the parent yaml config. type InlineDocument map[string]runtime.RawExtension type ContainerdOptions struct { // Config is an inline containerd config toml document that can be provided // by the user to override default generated configurations // https://github.com/containerd/containerd/blob/main/docs/man/containerd-config.toml.5.md Config string `json:"config,omitempty"` } type IPFamily string const ( IPFamilyIPv4 IPFamily = "ipv4" IPFamilyIPv6 IPFamily = "ipv6" ) type InstanceOptions struct { LocalStorage LocalStorageOptions `json:"localStorage,omitempty"` } type LocalStorageOptions struct { Strategy LocalStorageStrategy `json:"strategy,omitempty"` } type LocalStorageStrategy string const ( LocalStorageRAID0 LocalStorageStrategy = "RAID0" LocalStorageMount LocalStorageStrategy = "Mount" ) type NodeType string const ( Ssm NodeType = "ssm" IamRolesAnywhere NodeType = "iam-ra" Ec2 NodeType = "ec2" Outpost NodeType = "outpost" ) type HybridOptions struct { EnableCredentialsFile bool `json:"enableCredentialsFile,omitempty"` IAMRolesAnywhere *IAMRolesAnywhere `json:"iamRolesAnywhere,omitempty"` SSM *SSM `json:"ssm,omitempty"` } func (nc NodeConfig) IsHybridNode() bool { return nc.Spec.Hybrid != nil } func (nc NodeConfig) IsOutpostNode() bool { enabled := nc.Spec.Cluster.EnableOutpost return enabled != nil && *enabled } func (nc NodeConfig) IsIAMRolesAnywhere() bool { return nc.Spec.Hybrid != nil && nc.Spec.Hybrid.IAMRolesAnywhere != nil } func (nc NodeConfig) IsSSM() bool { return nc.Spec.Hybrid != nil && nc.Spec.Hybrid.SSM != nil } func (nc NodeConfig) GetNodeType() NodeType { if nc.IsSSM() { return Ssm } else if nc.IsIAMRolesAnywhere() { return IamRolesAnywhere } else if nc.IsOutpostNode() { return Outpost } return Ec2 } type IAMRolesAnywhere struct { NodeName string `json:"nodeName,omitempty"` TrustAnchorARN string `json:"trustAnchorArn,omitempty"` ProfileARN string `json:"profileArn,omitempty"` RoleARN string `json:"roleArn,omitempty"` AwsConfigPath string `json:"awsConfigPath,omitempty"` CertificatePath string `json:"certificatePath,omitempty"` PrivateKeyPath string `json:"privateKeyPath,omitempty"` } type SSM struct { ActivationCode string `json:"activationCode,omitempty"` ActivationID string `json:"activationId,omitempty"` }