{
  "description": "Nodegroup is the Schema for the Nodegroups API",
  "properties": {
    "apiVersion": {
      "description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
      "type": "string"
    },
    "kind": {
      "description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
      "type": "string"
    },
    "metadata": {
      "type": "object"
    },
    "spec": {
      "description": "NodegroupSpec defines the desired state of Nodegroup.\n\nAn object representing an Amazon EKS managed node group.",
      "properties": {
        "amiType": {
          "description": "The AMI type for your node group. If you specify launchTemplate, and your\nlaunch template uses a custom AMI, then don't specify amiType, or the node\ngroup deployment will fail. If your launch template uses a Windows custom\nAMI, then add eks:kube-proxy-windows to your Windows nodes rolearn in the\naws-auth ConfigMap. For more information about using launch templates with\nAmazon EKS, see Customizing managed nodes with launch templates (https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html)\nin the Amazon EKS User Guide.",
          "type": "string",
          "x-kubernetes-validations": [
            {
              "message": "Value is immutable once set",
              "rule": "self == oldSelf"
            }
          ]
        },
        "capacityType": {
          "description": "The capacity type for your node group.",
          "type": "string"
        },
        "clientRequestToken": {
          "description": "A unique, case-sensitive identifier that you provide to ensurethe idempotency\nof the request.",
          "type": "string"
        },
        "clusterName": {
          "description": "The name of your cluster.",
          "type": "string",
          "x-kubernetes-validations": [
            {
              "message": "Value is immutable once set",
              "rule": "self == oldSelf"
            }
          ]
        },
        "clusterRef": {
          "description": "AWSResourceReferenceWrapper provides a wrapper around *AWSResourceReference\ntype to provide more user friendly syntax for references using 'from' field\nEx:\nAPIIDRef:\n\n\tfrom:\n\t  name: my-api",
          "properties": {
            "from": {
              "description": "AWSResourceReference provides all the values necessary to reference another\nk8s resource for finding the identifier(Id/ARN/Name)",
              "properties": {
                "name": {
                  "type": "string"
                },
                "namespace": {
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "diskSize": {
          "description": "The root device disk size (in GiB) for your node group instances. The default\ndisk size is 20 GiB for Linux and Bottlerocket. The default disk size is\n50 GiB for Windows. If you specify launchTemplate, then don't specify diskSize,\nor the node group deployment will fail. For more information about using\nlaunch templates with Amazon EKS, see Customizing managed nodes with launch\ntemplates (https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html)\nin the Amazon EKS User Guide.",
          "format": "int64",
          "type": "integer",
          "x-kubernetes-validations": [
            {
              "message": "Value is immutable once set",
              "rule": "self == oldSelf"
            }
          ]
        },
        "instanceTypes": {
          "description": "Specify the instance types for a node group. If you specify a GPU instance\ntype, make sure to also specify an applicable GPU AMI type with the amiType\nparameter. If you specify launchTemplate, then you can specify zero or one\ninstance type in your launch template or you can specify 0-20 instance types\nfor instanceTypes. If however, you specify an instance type in your launch\ntemplate and specify any instanceTypes, the node group deployment will fail.\nIf you don't specify an instance type in a launch template or for instanceTypes,\nthen t3.medium is used, by default. If you specify Spot for capacityType,\nthen we recommend specifying multiple values for instanceTypes. For more\ninformation, see Managed node group capacity types (https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html#managed-node-group-capacity-types)\nand Customizing managed nodes with launch templates (https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html)\nin the Amazon EKS User Guide.",
          "items": {
            "type": "string"
          },
          "type": "array",
          "x-kubernetes-validations": [
            {
              "message": "Value is immutable once set",
              "rule": "self == oldSelf"
            }
          ]
        },
        "labels": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "The Kubernetes labels to apply to the nodes in the node group when they are\ncreated.",
          "type": "object"
        },
        "launchTemplate": {
          "description": "An object representing a node group's launch template specification. When\nusing this object, don't directly specify instanceTypes, diskSize, or remoteAccess.\nMake sure that the launch template meets the requirements in launchTemplateSpecification.\nAlso refer to Customizing managed nodes with launch templates (https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html)\nin the Amazon EKS User Guide.",
          "properties": {
            "id": {
              "type": "string"
            },
            "name": {
              "type": "string"
            },
            "version": {
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "name": {
          "description": "The unique name to give your node group.",
          "type": "string",
          "x-kubernetes-validations": [
            {
              "message": "Value is immutable once set",
              "rule": "self == oldSelf"
            }
          ]
        },
        "nodeRole": {
          "description": "The Amazon Resource Name (ARN) of the IAM role to associate with your node\ngroup. The Amazon EKS worker node kubelet daemon makes calls to Amazon Web\nServices APIs on your behalf. Nodes receive permissions for these API calls\nthrough an IAM instance profile and associated policies. Before you can launch\nnodes and register them into a cluster, you must create an IAM role for those\nnodes to use when they are launched. For more information, see Amazon EKS\nnode IAM role (https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html)\nin the Amazon EKS User Guide . If you specify launchTemplate, then don't\nspecify IamInstanceProfile (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_IamInstanceProfile.html)\nin your launch template, or the node group deployment will fail. For more\ninformation about using launch templates with Amazon EKS, see Customizing\nmanaged nodes with launch templates (https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html)\nin the Amazon EKS User Guide.",
          "type": "string",
          "x-kubernetes-validations": [
            {
              "message": "Value is immutable once set",
              "rule": "self == oldSelf"
            }
          ]
        },
        "nodeRoleRef": {
          "description": "AWSResourceReferenceWrapper provides a wrapper around *AWSResourceReference\ntype to provide more user friendly syntax for references using 'from' field\nEx:\nAPIIDRef:\n\n\tfrom:\n\t  name: my-api",
          "properties": {
            "from": {
              "description": "AWSResourceReference provides all the values necessary to reference another\nk8s resource for finding the identifier(Id/ARN/Name)",
              "properties": {
                "name": {
                  "type": "string"
                },
                "namespace": {
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "releaseVersion": {
          "description": "The AMI version of the Amazon EKS optimized AMI to use with your node group.\nBy default, the latest available AMI version for the node group's current\nKubernetes version is used. For information about Linux versions, see Amazon\nEKS optimized Amazon Linux AMI versions (https://docs.aws.amazon.com/eks/latest/userguide/eks-linux-ami-versions.html)\nin the Amazon EKS User Guide. Amazon EKS managed node groups support the\nNovember 2022 and later releases of the Windows AMIs. For information about\nWindows versions, see Amazon EKS optimized Windows AMI versions (https://docs.aws.amazon.com/eks/latest/userguide/eks-ami-versions-windows.html)\nin the Amazon EKS User Guide.\n\nIf you specify launchTemplate, and your launch template uses a custom AMI,\nthen don't specify releaseVersion, or the node group deployment will fail.\nFor more information about using launch templates with Amazon EKS, see Customizing\nmanaged nodes with launch templates (https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html)\nin the Amazon EKS User Guide.",
          "type": "string"
        },
        "remoteAccess": {
          "description": "The remote access configuration to use with your node group. For Linux, the\nprotocol is SSH. For Windows, the protocol is RDP. If you specify launchTemplate,\nthen don't specify remoteAccess, or the node group deployment will fail.\nFor more information about using launch templates with Amazon EKS, see Customizing\nmanaged nodes with launch templates (https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html)\nin the Amazon EKS User Guide.",
          "properties": {
            "ec2SshKey": {
              "type": "string"
            },
            "sourceSecurityGroupRefs": {
              "description": "Reference field for SourceSecurityGroups",
              "items": {
                "description": "AWSResourceReferenceWrapper provides a wrapper around *AWSResourceReference\ntype to provide more user friendly syntax for references using 'from' field\nEx:\nAPIIDRef:\n\n\tfrom:\n\t  name: my-api",
                "properties": {
                  "from": {
                    "description": "AWSResourceReference provides all the values necessary to reference another\nk8s resource for finding the identifier(Id/ARN/Name)",
                    "properties": {
                      "name": {
                        "type": "string"
                      },
                      "namespace": {
                        "type": "string"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "sourceSecurityGroups": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          "type": "object",
          "x-kubernetes-validations": [
            {
              "message": "Value is immutable once set",
              "rule": "self == oldSelf"
            }
          ],
          "additionalProperties": false
        },
        "scalingConfig": {
          "description": "The scaling configuration details for the Auto Scaling group that is created\nfor your node group.",
          "properties": {
            "desiredSize": {
              "format": "int64",
              "type": "integer"
            },
            "maxSize": {
              "format": "int64",
              "type": "integer"
            },
            "minSize": {
              "format": "int64",
              "type": "integer"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "subnetRefs": {
          "items": {
            "description": "AWSResourceReferenceWrapper provides a wrapper around *AWSResourceReference\ntype to provide more user friendly syntax for references using 'from' field\nEx:\nAPIIDRef:\n\n\tfrom:\n\t  name: my-api",
            "properties": {
              "from": {
                "description": "AWSResourceReference provides all the values necessary to reference another\nk8s resource for finding the identifier(Id/ARN/Name)",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "namespace": {
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "subnets": {
          "description": "The subnets to use for the Auto Scaling group that is created for your node\ngroup. If you specify launchTemplate, then don't specify SubnetId (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateNetworkInterface.html)\nin your launch template, or the node group deployment will fail. For more\ninformation about using launch templates with Amazon EKS, see Customizing\nmanaged nodes with launch templates (https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html)\nin the Amazon EKS User Guide.",
          "items": {
            "type": "string"
          },
          "type": "array",
          "x-kubernetes-validations": [
            {
              "message": "Value is immutable once set",
              "rule": "self == oldSelf"
            }
          ]
        },
        "tags": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Metadata that assists with categorization and organization. Each tag consists\nof a key and an optional value. You define both. Tags don't propagate to\nany other cluster or Amazon Web Services resources.",
          "type": "object"
        },
        "taints": {
          "description": "The Kubernetes taints to be applied to the nodes in the node group. For more\ninformation, see Node taints on managed node groups (https://docs.aws.amazon.com/eks/latest/userguide/node-taints-managed-node-groups.html).",
          "items": {
            "description": "A property that allows a node to repel a Pod. For more information, see Node\ntaints on managed node groups (https://docs.aws.amazon.com/eks/latest/userguide/node-taints-managed-node-groups.html)\nin the Amazon EKS User Guide.",
            "properties": {
              "effect": {
                "type": "string"
              },
              "key": {
                "type": "string"
              },
              "value": {
                "type": "string"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "updateConfig": {
          "description": "The node group update configuration.",
          "properties": {
            "maxUnavailable": {
              "format": "int64",
              "type": "integer"
            },
            "maxUnavailablePercentage": {
              "format": "int64",
              "type": "integer"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "version": {
          "description": "The Kubernetes version to use for your managed nodes. By default, the Kubernetes\nversion of the cluster is used, and this is the only accepted specified value.\nIf you specify launchTemplate, and your launch template uses a custom AMI,\nthen don't specify version, or the node group deployment will fail. For more\ninformation about using launch templates with Amazon EKS, see Customizing\nmanaged nodes with launch templates (https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html)\nin the Amazon EKS User Guide.",
          "type": "string"
        }
      },
      "required": [
        "name"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "NodegroupStatus defines the observed state of Nodegroup",
      "properties": {
        "ackResourceMetadata": {
          "description": "All CRs managed by ACK have a common `Status.ACKResourceMetadata` member\nthat is used to contain resource sync state, account ownership,\nconstructed ARN for the resource",
          "properties": {
            "arn": {
              "description": "ARN is the Amazon Resource Name for the resource. This is a\nglobally-unique identifier and is set only by the ACK service controller\nonce the controller has orchestrated the creation of the resource OR\nwhen it has verified that an \"adopted\" resource (a resource where the\nARN annotation was set by the Kubernetes user on the CR) exists and\nmatches the supplied CR's Spec field values.\nhttps://github.com/aws/aws-controllers-k8s/issues/270",
              "type": "string"
            },
            "ownerAccountID": {
              "description": "OwnerAccountID is the AWS Account ID of the account that owns the\nbackend AWS service API resource.",
              "type": "string"
            },
            "region": {
              "description": "Region is the AWS region in which the resource exists or will exist.",
              "type": "string"
            }
          },
          "required": [
            "ownerAccountID",
            "region"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "conditions": {
          "description": "All CRs managed by ACK have a common `Status.Conditions` member that\ncontains a collection of `ackv1alpha1.Condition` objects that describe\nthe various terminal states of the CR and its backend AWS service API\nresource",
          "items": {
            "description": "Condition is the common struct used by all CRDs managed by ACK service\ncontrollers to indicate terminal states  of the CR and its backend AWS\nservice API resource",
            "properties": {
              "lastTransitionTime": {
                "description": "Last time the condition transitioned from one status to another.",
                "format": "date-time",
                "type": "string"
              },
              "message": {
                "description": "A human readable message indicating details about the transition.",
                "type": "string"
              },
              "reason": {
                "description": "The reason for the condition's last transition.",
                "type": "string"
              },
              "status": {
                "description": "Status of the condition, one of True, False, Unknown.",
                "type": "string"
              },
              "type": {
                "description": "Type is the type of the Condition",
                "type": "string"
              }
            },
            "required": [
              "status",
              "type"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "createdAt": {
          "description": "The Unix epoch timestamp at object creation.",
          "format": "date-time",
          "type": "string"
        },
        "desiredSize": {
          "format": "int64",
          "type": "integer"
        },
        "health": {
          "description": "The health status of the node group. If there are issues with your node group's\nhealth, they are listed here.",
          "properties": {
            "issues": {
              "items": {
                "description": "An object representing an issue with an Amazon EKS resource.",
                "properties": {
                  "code": {
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "resourceIDs": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "modifiedAt": {
          "description": "The Unix epoch timestamp for the last modification to the object.",
          "format": "date-time",
          "type": "string"
        },
        "resources": {
          "description": "The resources associated with the node group, such as Auto Scaling groups\nand security groups for remote access.",
          "properties": {
            "autoScalingGroups": {
              "items": {
                "description": "An Auto Scaling group that is associated with an Amazon EKS managed node\ngroup.",
                "properties": {
                  "name": {
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "remoteAccessSecurityGroup": {
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "status": {
          "description": "The current status of the managed node group.",
          "type": "string"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
