{
  "description": "OCIManagedMachinePoolTemplate is the Schema for the OCIManagedMachinePoolTemplates API.",
  "properties": {
    "apiVersion": {
      "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More 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. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
      "type": "string"
    },
    "metadata": {
      "type": "object"
    },
    "spec": {
      "description": "OCIManagedMachinePoolTemplateSpec defines the desired state of OCIManagedMachinePoolTemplate.",
      "properties": {
        "template": {
          "description": "OCIManagedMachinePoolSpec describes the data needed to create an OCIManagedMachinePool from a template.",
          "properties": {
            "spec": {
              "description": "OCIManagedMachinePoolSpec defines the desired state of an OCI managed machine pool. An OCIManagedMachinePool translates to an OKE NodePool. The properties are generated from https://docs.oracle.com/en-us/iaas/api/#/en/containerengine/20180222/datatypes/CreateNodePoolDetails",
              "properties": {
                "id": {
                  "description": "ID is the OCID of the associated NodePool",
                  "type": "string"
                },
                "initialNodeLabels": {
                  "description": "InitialNodeLabels defines a list of key/value pairs to add to nodes after they join the Kubernetes cluster.",
                  "items": {
                    "description": "KeyValue The properties that define a key value pair.",
                    "properties": {
                      "key": {
                        "description": "The key of the pair.",
                        "type": "string"
                      },
                      "value": {
                        "description": "The value of the pair.",
                        "type": "string"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "type": "array"
                },
                "nodeEvictionNodePoolSettings": {
                  "description": "NodeEvictionNodePoolSettings defines the eviction settings.",
                  "properties": {
                    "evictionGraceDuration": {
                      "description": "EvictionGraceDuration defines the duration after which OKE will give up eviction of the pods on the node. PT0M will indicate you want to delete the node without cordon and drain. Default PT60M, Min PT0M, Max: PT60M. Format ISO 8601 e.g PT30M",
                      "type": "string"
                    },
                    "isForceDeleteAfterGraceDuration": {
                      "description": "IsForceDeleteAfterGraceDuration defines if the underlying compute instance should be deleted if you cannot evict all the pods in grace period",
                      "type": "boolean"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "nodeMetadata": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "NodeMetadata defines a list of key/value pairs to add to each underlying OCI instance in the node pool on launch.",
                  "type": "object"
                },
                "nodePoolNodeConfig": {
                  "description": "NodePoolNodeConfig defines the configuration of nodes in the node pool.",
                  "properties": {
                    "isPvEncryptionInTransitEnabled": {
                      "description": "IsPvEncryptionInTransitEnabled defines whether in transit encryption should be enabled on the nodes.",
                      "type": "boolean"
                    },
                    "kmsKeyId": {
                      "description": "KmsKeyId  defines whether in transit encryption should be enabled on the nodes.",
                      "type": "string"
                    },
                    "nodePoolPodNetworkOptionDetails": {
                      "description": "NodePoolPodNetworkOptionDetails defines the pod networking details of the node pool",
                      "properties": {
                        "cniType": {
                          "description": "CniType describes the CNI plugin used by this node pool. Allowed values are OCI_VCN_IP_NATIVE and FLANNEL_OVERLAY.",
                          "type": "string"
                        },
                        "vcnIpNativePodNetworkOptions": {
                          "description": "VcnIpNativePodNetworkOptions describes the network options specific to using the OCI VCN Native CNI",
                          "properties": {
                            "maxPodsPerNode": {
                              "description": "MemoryInGBs defines the max number of pods per node in the node pool. This value will be limited by the number of VNICs attachable to the node pool shape",
                              "type": "integer"
                            },
                            "nsgNames": {
                              "description": "NSGNames defines the NSGs associated with the native pod network.",
                              "items": {
                                "type": "string"
                              },
                              "type": "array"
                            },
                            "subnetNames": {
                              "description": "SubnetNames defines the Subnets associated with the native pod network.",
                              "items": {
                                "type": "string"
                              },
                              "type": "array"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "nsgNames": {
                      "description": "NsgNames defines the names of NSGs which will be associated with the nodes. the NSGs are defined in OCIManagedCluster object.",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "placementConfigs": {
                      "description": "PlacementConfigs defines the placement configurations for the node pool.",
                      "items": {
                        "description": "PlacementConfig defines the placement configurations for the node pool.",
                        "properties": {
                          "availabilityDomain": {
                            "description": "AvailabilityDomain defines the availability domain in which to place nodes.",
                            "type": "string"
                          },
                          "capacityReservationId": {
                            "description": "CapacityReservationId defines the OCID of the compute capacity reservation in which to place the compute instance.",
                            "type": "string"
                          },
                          "faultDomains": {
                            "description": "FaultDomains defines the list of fault domains in which to place nodes.",
                            "items": {
                              "type": "string"
                            },
                            "type": "array"
                          },
                          "subnetName": {
                            "description": "SubnetName defines the name of the subnet which need ot be associated with the Nodepool. The subnets are defined in the OCiManagedCluster object.",
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      },
                      "type": "array"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "nodeShape": {
                  "description": "NodeShape defines the name of the node shape of the nodes in the node pool.",
                  "type": "string"
                },
                "nodeShapeConfig": {
                  "description": "NodeShapeConfig defines the configuration of the shape to launch nodes in the node pool.",
                  "properties": {
                    "memoryInGBs": {
                      "description": "MemoryInGBs defines the total amount of memory available to each node, in gigabytes.",
                      "type": "string"
                    },
                    "ocpus": {
                      "description": "Ocpus defines the total number of OCPUs available to each node in the node pool.",
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "nodeSourceViaImage": {
                  "description": "NodeSourceViaImage defines the image configuration of the nodes in the nodepool.",
                  "properties": {
                    "bootVolumeSizeInGBs": {
                      "description": "BootVolumeSizeInGBs defines the size of the boot volume in GBs.",
                      "format": "int64",
                      "type": "integer"
                    },
                    "imageId": {
                      "description": "ImageId defines the OCID of the image used to boot the node.",
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "providerID": {
                  "description": "ProviderID is the OCID of the associated NodePool in a provider format",
                  "type": "string"
                },
                "providerIDList": {
                  "description": "ProviderIDList are the identification IDs of machine instances provided by the provider. This field must match the provider IDs as seen on the node objects corresponding to a machine pool's machine instances.",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "sshPublicKey": {
                  "description": "SshPublicKey defines the SSH public key on each node in the node pool on launch.",
                  "type": "string"
                },
                "version": {
                  "description": "Version represents the version of the OKE node pool.",
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "required": [
            "spec"
          ],
          "type": "object",
          "additionalProperties": false
        }
      },
      "required": [
        "template"
      ],
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
