{
  "description": "EKSConfig is the schema for the Amazon EKS Machine Bootstrap Configuration 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": "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
    },
    "status": {
      "description": "EKSConfigStatus defines the observed state of the Amazon EKS Bootstrap Configuration.",
      "properties": {
        "conditions": {
          "description": "Conditions defines current service state of the EKSConfig.",
          "items": {
            "description": "Condition defines an observation of a Cluster API resource operational state.",
            "properties": {
              "lastTransitionTime": {
                "description": "Last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when\nthe API field changed is acceptable.",
                "format": "date-time",
                "type": "string"
              },
              "message": {
                "description": "A human readable message indicating details about the transition.\nThis field may be empty.",
                "type": "string"
              },
              "reason": {
                "description": "The reason for the condition's last transition in CamelCase.\nThe specific API may choose whether or not this field is considered a guaranteed API.\nThis field may not be empty.",
                "type": "string"
              },
              "severity": {
                "description": "Severity provides an explicit classification of Reason code, so the users or machines can immediately\nunderstand the current situation and act accordingly.\nThe Severity field MUST be set only when Status=False.",
                "type": "string"
              },
              "status": {
                "description": "Status of the condition, one of True, False, Unknown.",
                "type": "string"
              },
              "type": {
                "description": "Type of condition in CamelCase or in foo.example.com/CamelCase.\nMany .condition.type values are consistent across resources like Available, but because arbitrary conditions\ncan be useful (see .node.status.conditions), the ability to deconflict is important.",
                "type": "string"
              }
            },
            "required": [
              "lastTransitionTime",
              "status",
              "type"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "dataSecretName": {
          "description": "DataSecretName is the name of the secret that stores the bootstrap data script.",
          "type": "string"
        },
        "failureMessage": {
          "description": "FailureMessage will be set on non-retryable errors",
          "type": "string"
        },
        "failureReason": {
          "description": "FailureReason will be set on non-retryable errors",
          "type": "string"
        },
        "observedGeneration": {
          "description": "ObservedGeneration is the latest generation observed by the controller.",
          "format": "int64",
          "type": "integer"
        },
        "ready": {
          "description": "Ready indicates the BootstrapData secret is ready to be consumed",
          "type": "boolean"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
