{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--aws-eks-nodegroup.json",
  "title": "AWSEKSNodegroupProperties",
  "description": "Resource schema for AWS::EKS::Nodegroup. Source:- <https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git>",
  "x-lintel": {
    "source": "https://raw.githubusercontent.com/lalcebo/json-schema/master/serverless/resources/cloudformation-modified/aws-eks-nodegroup.json",
    "sourceSha256": "8ae2fde239eb13a63e6d883a4b31fc86f9cae0f1b60582b6e53b5ff88c49f699"
  },
  "type": "object",
  "properties": {
    "AmiType": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "description": "The AMI type for your node group."
    },
    "CapacityType": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "description": "The capacity type of your managed node group."
    },
    "ClusterName": {
      "oneOf": [
        {
          "type": "string",
          "minLength": 1
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "description": "Name of the cluster to create the node group in."
    },
    "DiskSize": {
      "description": "The root device disk size (in GiB) for your node group instances.",
      "type": "integer"
    },
    "ForceUpdateEnabled": {
      "description": "Force the update if the existing node group's pods are unable to be drained due to a pod disruption budget issue.",
      "type": "boolean",
      "default": false
    },
    "InstanceTypes": {
      "description": "Specify the instance types for a node group.",
      "type": "array",
      "uniqueItems": false,
      "insertionOrder": false,
      "items": {
        "type": "string"
      }
    },
    "Labels": {
      "description": "The Kubernetes labels to be applied to the nodes in the node group when they are created.",
      "type": "object",
      "additionalProperties": false,
      "patternProperties": {
        "^.+$": {
          "type": "string"
        }
      }
    },
    "LaunchTemplate": {
      "description": "An object representing a node group's launch template specification.",
      "$ref": "#/$defs/LaunchTemplateSpecification"
    },
    "NodegroupName": {
      "oneOf": [
        {
          "type": "string",
          "minLength": 1
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "description": "The unique name to give your node group."
    },
    "NodeRole": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "description": "The Amazon Resource Name (ARN) of the IAM role to associate with your node group."
    },
    "ReleaseVersion": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "description": "The AMI version of the Amazon EKS-optimized AMI to use with your node group."
    },
    "RemoteAccess": {
      "description": "The remote access (SSH) configuration to use with your node group.",
      "$ref": "#/$defs/RemoteAccess"
    },
    "ScalingConfig": {
      "description": "The scaling configuration details for the Auto Scaling group that is created for your node group.",
      "$ref": "#/$defs/ScalingConfig"
    },
    "Subnets": {
      "description": "The subnets to use for the Auto Scaling group that is created for your node group.",
      "type": "array",
      "uniqueItems": false,
      "insertionOrder": false,
      "items": {
        "type": "string"
      }
    },
    "Tags": {
      "description": "The metadata, as key-value pairs, to apply to the node group to assist with categorization and organization. Follows same schema as Labels for consistency.",
      "type": "object",
      "additionalProperties": false,
      "patternProperties": {
        "^.+$": {
          "type": "string"
        }
      }
    },
    "Taints": {
      "description": "The Kubernetes taints to be applied to the nodes in the node group when they are created.",
      "type": "array",
      "insertionOrder": false,
      "items": {
        "$ref": "#/$defs/Taint"
      }
    },
    "UpdateConfig": {
      "description": "The node group update configuration.",
      "$ref": "#/$defs/UpdateConfig"
    },
    "Version": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "description": "The Kubernetes version to use for your managed nodes."
    }
  },
  "typeName": "AWS::EKS::Nodegroup",
  "readOnlyProperties": [
    "/properties/Id",
    "/properties/Arn"
  ],
  "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
  "additionalProperties": false,
  "primaryIdentifier": [
    "/properties/Id"
  ],
  "$defs": {
    "LaunchTemplateSpecification": {
      "description": "An object representing a launch template specification for AWS EKS Nodegroup.",
      "type": "object",
      "title": "AWSEKSNodegroupLaunchTemplateSpecificationDefinition",
      "properties": {
        "Id": {
          "oneOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
            }
          ]
        },
        "Version": {
          "oneOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
            }
          ]
        },
        "Name": {
          "oneOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "Taint": {
      "description": "An object representing a Taint specification for AWS EKS Nodegroup.",
      "type": "object",
      "title": "AWSEKSNodegroupTaintDefinition",
      "properties": {
        "Key": {
          "oneOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
            }
          ]
        },
        "Value": {
          "oneOf": [
            {
              "type": "string",
              "minLength": 0
            },
            {
              "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
            }
          ]
        },
        "Effect": {
          "oneOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "ScalingConfig": {
      "description": "An object representing a auto scaling group specification for AWS EKS Nodegroup.",
      "type": "object",
      "title": "AWSEKSNodegroupScalingConfigDefinition",
      "properties": {
        "MinSize": {
          "type": "integer",
          "minimum": 0
        },
        "DesiredSize": {
          "type": "integer",
          "minimum": 0
        },
        "MaxSize": {
          "type": "integer",
          "minimum": 1
        }
      },
      "additionalProperties": false
    },
    "RemoteAccess": {
      "description": "An object representing a remote access configuration specification for AWS EKS Nodegroup.",
      "type": "object",
      "title": "AWSEKSNodegroupRemoteAccessDefinition",
      "properties": {
        "SourceSecurityGroups": {
          "type": "array",
          "uniqueItems": false,
          "insertionOrder": false,
          "items": {
            "type": "string"
          }
        },
        "Ec2SshKey": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
            }
          ]
        }
      },
      "required": [
        "Ec2SshKey"
      ],
      "additionalProperties": false
    },
    "UpdateConfig": {
      "description": "The node group update configuration.",
      "type": "object",
      "title": "AWSEKSNodegroupUpdateConfigDefinition",
      "properties": {
        "MaxUnavailable": {
          "description": "The maximum number of nodes unavailable at once during a version update. Nodes will be updated in parallel. This value or maxUnavailablePercentage is required to have a value.The maximum number is 100. ",
          "type": "number",
          "minimum": 1
        },
        "MaxUnavailablePercentage": {
          "description": "The maximum percentage of nodes unavailable during a version update. This percentage of nodes will be updated in parallel, up to 100 nodes at once. This value or maxUnavailable is required to have a value.",
          "type": "number",
          "minimum": 1,
          "maximum": 100
        }
      },
      "additionalProperties": false
    }
  },
  "tagging": {
    "taggable": true,
    "tagOnCreate": true,
    "tagUpdatable": true,
    "cloudFormationSystemTags": true,
    "tagProperty": "/properties/Tags"
  },
  "required": [
    "ClusterName",
    "NodeRole",
    "Subnets"
  ],
  "createOnlyProperties": [
    "/properties/CapacityType",
    "/properties/NodegroupName",
    "/properties/RemoteAccess",
    "/properties/NodeRole",
    "/properties/ClusterName",
    "/properties/InstanceTypes",
    "/properties/DiskSize",
    "/properties/AmiType",
    "/properties/Subnets"
  ],
  "writeOnlyProperties": [
    "/properties/ForceUpdateEnabled"
  ]
}
