{
  "description": "OCIManagedMachinePool is the Schema for the ocimanagedmachinepool 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": "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"
        },
        "nodePoolCyclingDetails": {
          "description": "NodePoolCyclingDetails defines the node pool recycling options.",
          "properties": {
            "isNodeCyclingEnabled": {
              "description": "IsNodeCyclingEnabled refers if nodes in the nodepool will be cycled to have new changes.",
              "type": "boolean"
            },
            "maximumSurge": {
              "description": "MaximumSurge refers to the maximum additional new compute instances that would be temporarily created and added to nodepool during the cycling nodepool process. OKE supports both integer and percentage input. Defaults to 1, Ranges from 0 to Nodepool size or 0% to 100%",
              "type": "string"
            },
            "maximumUnavailable": {
              "description": "Maximum active nodes that would be terminated from nodepool during the cycling nodepool process. OKE supports both integer and percentage input. Defaults to 0, Ranges from 0 to Nodepool size or 0% to 100%",
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "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
    },
    "status": {
      "description": "OCIManagedMachinePoolStatus defines the observed state of OCIManagedMachinePool",
      "properties": {
        "conditions": {
          "description": "NetworkSpec encapsulates all things related to OCI network.",
          "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. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
                "format": "date-time",
                "type": "string"
              },
              "message": {
                "description": "A human readable message indicating details about the transition. This field may be empty.",
                "type": "string"
              },
              "reason": {
                "description": "The reason for the condition's last transition in CamelCase. The specific API may choose whether or not this field is considered a guaranteed API. This field may not be empty.",
                "type": "string"
              },
              "severity": {
                "description": "Severity provides an explicit classification of Reason code, so the users or machines can immediately understand the current situation and act accordingly. The 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. Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important.",
                "type": "string"
              }
            },
            "required": [
              "lastTransitionTime",
              "status",
              "type"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "failureMessages": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "failureReason": {
          "description": "MachineStatusError defines errors states for Machine objects.",
          "type": "string"
        },
        "infrastructureMachineKind": {
          "description": "InfrastructureMachineKind is the kind of the infrastructure resources behind MachinePool Machines.",
          "type": "string"
        },
        "nodepoolLifecycleState": {
          "type": "string"
        },
        "ready": {
          "type": "boolean"
        },
        "replicas": {
          "description": "Replicas is the most recently observed number of replicas",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
