{
  "description": "OCIVirtualMachinePool is the Schema for the ocivirtualmachinepool 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": "OCIVirtualMachinePoolSpec defines the desired state of an OCI virtual machine pool. An OCIVirtualMachinePool translates to an OKE Virtual node poo;. The properties are generated from https://docs.oracle.com/en-us/iaas/api/#/en/containerengine/20180222/datatypes/CreateVirtualNodePoolDetails",
      "properties": {
        "id": {
          "description": "ID is the OCID of the associated NodePool",
          "type": "string"
        },
        "initialVirtualNodeLabels": {
          "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"
        },
        "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": "VirtualNodepoolPlacementConfig defines the placement configurations for the virtual node pool.",
            "properties": {
              "availabilityDomain": {
                "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 to be associated with the Virtual Node Pool. The subnets are defined in the OCiManagedCluster object.",
                "type": "string"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "podConfiguration": {
          "description": "PodConfiguration defines pod configuration",
          "properties": {
            "nsgNames": {
              "description": "NsgNames defines the names of NSGs which will be associated with the pods.",
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "shape": {
              "description": "Shape described the shape of the pods.",
              "type": "string"
            },
            "subnetName": {
              "description": "SubnetName described the regional subnet where pods' VNIC will be placed.",
              "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"
        },
        "taints": {
          "description": "Taints describes the taints will be applied to the Virtual Nodes of this Virtual Node Pool for Kubernetes scheduling.",
          "items": {
            "description": "Taint describes a taint.",
            "properties": {
              "effect": {
                "description": "The effect of the pair.",
                "type": "string"
              },
              "key": {
                "description": "The key of the pair.",
                "type": "string"
              },
              "value": {
                "description": "The value of the pair.",
                "type": "string"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "OCIVirtualMachinePoolStatus defines the observed state of OCIVirtualMachinePool",
      "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": {
          "description": "FailureMessages contains the verbose erorr messages related to the virtual machine pool failures.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "failureReason": {
          "description": "FailureReason will contains the CAPI MachinePoolStatusFailure if the virtual machine pool has hit an error condition.",
          "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"
}
