{
  "description": "EKSConfigTemplate is the Amazon EKS Bootstrap Configuration Template 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": "EKSConfigTemplateSpec defines the desired state of templated EKSConfig Amazon EKS Bootstrap Configuration resources.",
      "properties": {
        "template": {
          "description": "EKSConfigTemplateResource defines the Template structure.",
          "properties": {
            "spec": {
              "description": "EKSConfigSpec defines the desired state of Amazon EKS Bootstrap Configuration.",
              "properties": {
                "apiRetryAttempts": {
                  "description": "APIRetryAttempts is the number of retry attempts for AWS API call.",
                  "type": "integer"
                },
                "boostrapCommandOverride": {
                  "description": "BootstrapCommandOverride allows you to override the bootstrap command to use for EKS nodes.",
                  "type": "string"
                },
                "containerRuntime": {
                  "description": "ContainerRuntime specify the container runtime to use when bootstrapping EKS.",
                  "type": "string"
                },
                "diskSetup": {
                  "description": "DiskSetup specifies options for the creation of partition tables and file systems on devices.",
                  "properties": {
                    "filesystems": {
                      "description": "Filesystems specifies the list of file systems to setup.",
                      "items": {
                        "description": "Filesystem defines the file systems to be created.",
                        "properties": {
                          "device": {
                            "description": "Device specifies the device name",
                            "type": "string"
                          },
                          "extraOpts": {
                            "description": "ExtraOpts defined extra options to add to the command for creating the file system.",
                            "items": {
                              "type": "string"
                            },
                            "type": "array"
                          },
                          "filesystem": {
                            "description": "Filesystem specifies the file system type.",
                            "type": "string"
                          },
                          "label": {
                            "description": "Label specifies the file system label to be used. If set to None, no label is used.",
                            "type": "string"
                          },
                          "overwrite": {
                            "description": "Overwrite defines whether or not to overwrite any existing filesystem.\nIf true, any pre-existing file system will be destroyed. Use with Caution.",
                            "type": "boolean"
                          },
                          "partition": {
                            "description": "Partition specifies the partition to use. The valid options are: \"auto|any\", \"auto\", \"any\", \"none\", and <NUM>, where NUM is the actual partition number.",
                            "type": "string"
                          }
                        },
                        "required": [
                          "device",
                          "filesystem",
                          "label"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "type": "array"
                    },
                    "partitions": {
                      "description": "Partitions specifies the list of the partitions to setup.",
                      "items": {
                        "description": "Partition defines how to create and layout a partition.",
                        "properties": {
                          "device": {
                            "description": "Device is the name of the device.",
                            "type": "string"
                          },
                          "layout": {
                            "description": "Layout specifies the device layout.\nIf it is true, a single partition will be created for the entire device.\nWhen layout is false, it means don't partition or ignore existing partitioning.",
                            "type": "boolean"
                          },
                          "overwrite": {
                            "description": "Overwrite describes whether to skip checks and create the partition if a partition or filesystem is found on the device.\nUse with caution. Default is 'false'.",
                            "type": "boolean"
                          },
                          "tableType": {
                            "description": "TableType specifies the tupe of partition table. The following are supported:\n'mbr': default and setups a MS-DOS partition table\n'gpt': setups a GPT partition table",
                            "type": "string"
                          }
                        },
                        "required": [
                          "device",
                          "layout"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "type": "array"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "dnsClusterIP": {
                  "description": " DNSClusterIP overrides the IP address to use for DNS queries within the cluster.",
                  "type": "string"
                },
                "dockerConfigJson": {
                  "description": "DockerConfigJson is used for the contents of the /etc/docker/daemon.json file. Useful if you want a custom config differing from the default one in the AMI.\nThis is expected to be a json string.",
                  "type": "string"
                },
                "files": {
                  "description": "Files specifies extra files to be passed to user_data upon creation.",
                  "items": {
                    "description": "File defines the input for generating write_files in cloud-init.",
                    "properties": {
                      "append": {
                        "description": "Append specifies whether to append Content to existing file if Path exists.",
                        "type": "boolean"
                      },
                      "content": {
                        "description": "Content is the actual content of the file.",
                        "type": "string"
                      },
                      "contentFrom": {
                        "description": "ContentFrom is a referenced source of content to populate the file.",
                        "properties": {
                          "secret": {
                            "description": "Secret represents a secret that should populate this file.",
                            "properties": {
                              "key": {
                                "description": "Key is the key in the secret's data map for this value.",
                                "type": "string"
                              },
                              "name": {
                                "description": "Name of the secret in the KubeadmBootstrapConfig's namespace to use.",
                                "type": "string"
                              }
                            },
                            "required": [
                              "key",
                              "name"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          }
                        },
                        "required": [
                          "secret"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "encoding": {
                        "description": "Encoding specifies the encoding of the file contents.",
                        "enum": [
                          "base64",
                          "gzip",
                          "gzip+base64"
                        ],
                        "type": "string"
                      },
                      "owner": {
                        "description": "Owner specifies the ownership of the file, e.g. \"root:root\".",
                        "type": "string"
                      },
                      "path": {
                        "description": "Path specifies the full path on disk where to store the file.",
                        "type": "string"
                      },
                      "permissions": {
                        "description": "Permissions specifies the permissions to assign to the file, e.g. \"0640\".",
                        "type": "string"
                      }
                    },
                    "required": [
                      "path"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "type": "array"
                },
                "kubeletExtraArgs": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "KubeletExtraArgs passes the specified kubelet args into the Amazon EKS machine bootstrap script",
                  "type": "object"
                },
                "mounts": {
                  "description": "Mounts specifies a list of mount points to be setup.",
                  "items": {
                    "description": "MountPoints defines input for generated mounts in cloud-init.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "type": "array"
                },
                "ntp": {
                  "description": "NTP specifies NTP configuration",
                  "properties": {
                    "enabled": {
                      "description": "Enabled specifies whether NTP should be enabled",
                      "type": "boolean"
                    },
                    "servers": {
                      "description": "Servers specifies which NTP servers to use",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "pauseContainer": {
                  "description": "PauseContainer allows customization of the pause container to use.",
                  "properties": {
                    "accountNumber": {
                      "description": " AccountNumber is the AWS account number to pull the pause container from.",
                      "type": "string"
                    },
                    "version": {
                      "description": "Version is the tag of the pause container to use.",
                      "type": "string"
                    }
                  },
                  "required": [
                    "accountNumber",
                    "version"
                  ],
                  "type": "object",
                  "additionalProperties": false
                },
                "postBootstrapCommands": {
                  "description": "PostBootstrapCommands specifies extra commands to run after bootstrapping nodes to the cluster",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "preBootstrapCommands": {
                  "description": "PreBootstrapCommands specifies extra commands to run before bootstrapping nodes to the cluster",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "serviceIPV6Cidr": {
                  "description": "ServiceIPV6Cidr is the ipv6 cidr range of the cluster. If this is specified then\nthe ip family will be set to ipv6.",
                  "type": "string"
                },
                "useMaxPods": {
                  "description": "UseMaxPods  sets --max-pods for the kubelet when true.",
                  "type": "boolean"
                },
                "users": {
                  "description": "Users specifies extra users to add",
                  "items": {
                    "description": "User defines the input for a generated user in cloud-init.",
                    "properties": {
                      "gecos": {
                        "description": "Gecos specifies the gecos to use for the user",
                        "type": "string"
                      },
                      "groups": {
                        "description": "Groups specifies the additional groups for the user",
                        "type": "string"
                      },
                      "homeDir": {
                        "description": "HomeDir specifies the home directory to use for the user",
                        "type": "string"
                      },
                      "inactive": {
                        "description": "Inactive specifies whether to mark the user as inactive",
                        "type": "boolean"
                      },
                      "lockPassword": {
                        "description": "LockPassword specifies if password login should be disabled",
                        "type": "boolean"
                      },
                      "name": {
                        "description": "Name specifies the username",
                        "type": "string"
                      },
                      "passwd": {
                        "description": "Passwd specifies a hashed password for the user",
                        "type": "string"
                      },
                      "passwdFrom": {
                        "description": "PasswdFrom is a referenced source of passwd to populate the passwd.",
                        "properties": {
                          "secret": {
                            "description": "Secret represents a secret that should populate this password.",
                            "properties": {
                              "key": {
                                "description": "Key is the key in the secret's data map for this value.",
                                "type": "string"
                              },
                              "name": {
                                "description": "Name of the secret in the KubeadmBootstrapConfig's namespace to use.",
                                "type": "string"
                              }
                            },
                            "required": [
                              "key",
                              "name"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          }
                        },
                        "required": [
                          "secret"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "primaryGroup": {
                        "description": "PrimaryGroup specifies the primary group for the user",
                        "type": "string"
                      },
                      "shell": {
                        "description": "Shell specifies the user's shell",
                        "type": "string"
                      },
                      "sshAuthorizedKeys": {
                        "description": "SSHAuthorizedKeys specifies a list of ssh authorized keys for the user",
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "sudo": {
                        "description": "Sudo specifies a sudo role for the user",
                        "type": "string"
                      }
                    },
                    "required": [
                      "name"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "type": "array"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        }
      },
      "required": [
        "template"
      ],
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
