{
  "description": "GCPManagedMachinePool is the Schema for the gcpmanagedmachinepools 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": "GCPManagedMachinePoolSpec defines the desired state of GCPManagedMachinePool.",
      "properties": {
        "additionalLabels": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "AdditionalLabels is an optional set of tags to add to GCP resources managed by the GCP provider, in addition to the\nones added by default.",
          "type": "object"
        },
        "diskSizeGB": {
          "description": "DiskSizeGB is size of the disk attached to each node,\nspecified in GB.",
          "format": "int64",
          "minimum": 10,
          "type": "integer"
        },
        "diskSizeGb": {
          "description": "DiskSizeGb is the size of the disk attached to each node, specified in GB.\nThe smallest allowed disk size is 10GB. If unspecified, the default disk size is 100GB.",
          "format": "int32",
          "type": "integer"
        },
        "diskType": {
          "description": "DiskType is type of the disk attached to each node.",
          "enum": [
            "pd-standard",
            "pd-ssd",
            "pd-balanced"
          ],
          "type": "string"
        },
        "imageType": {
          "description": "ImageType is image type to use for this nodepool.",
          "type": "string"
        },
        "instanceType": {
          "description": "InstanceType is name of Compute Engine machine type.",
          "type": "string"
        },
        "kubernetesLabels": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "KubernetesLabels specifies the labels to apply to the nodes of the node pool.",
          "type": "object"
        },
        "kubernetesTaints": {
          "description": "KubernetesTaints specifies the taints to apply to the nodes of the node pool.",
          "items": {
            "description": "Taint represents a Kubernetes taint.",
            "properties": {
              "effect": {
                "description": "Effect specifies the effect for the taint.",
                "enum": [
                  "NoSchedule",
                  "NoExecute",
                  "PreferNoSchedule"
                ],
                "type": "string"
              },
              "key": {
                "description": "Key is the key of the taint",
                "type": "string"
              },
              "value": {
                "description": "Value is the value of the taint",
                "type": "string"
              }
            },
            "required": [
              "effect",
              "key",
              "value"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "linuxNodeConfig": {
          "description": "LinuxNodeConfig specifies the settings for Linux agent nodes.",
          "properties": {
            "cgroupMode": {
              "description": "CgroupMode specifies the cgroup mode for this node pool.",
              "format": "int32",
              "type": "integer"
            },
            "sysctls": {
              "description": "Sysctls specifies the sysctl settings for this node pool.",
              "items": {
                "description": "SysctlConfig specifies the sysctl settings for Linux nodes.",
                "properties": {
                  "parameter": {
                    "description": "Parameter specifies sysctl parameter name.",
                    "type": "string"
                  },
                  "value": {
                    "description": "Value specifies sysctl parameter value.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "localSsdCount": {
          "description": "LocalSsdCount is the number of local SSD disks to be attached to the node.",
          "format": "int32",
          "type": "integer"
        },
        "machineType": {
          "description": "MachineType is the name of a Google Compute Engine [machine\ntype](https://cloud.google.com/compute/docs/machine-types).\nIf unspecified, the default machine type is `e2-medium`.",
          "type": "string"
        },
        "management": {
          "description": "Management specifies the node pool management options.",
          "properties": {
            "autoRepair": {
              "description": "AutoRepair specifies whether the node auto-repair is enabled for the node\npool. If enabled, the nodes in this node pool will be monitored and, if\nthey fail health checks too many times, an automatic repair action will be\ntriggered.",
              "type": "boolean"
            },
            "autoUpgrade": {
              "description": "AutoUpgrade specifies whether node auto-upgrade is enabled for the node\npool. If enabled, node auto-upgrade helps keep the nodes in your node pool\nup to date with the latest release version of Kubernetes.",
              "type": "boolean"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "maxPodsPerNode": {
          "description": "MaxPodsPerNode is constraint enforced on the max num of\npods per node.",
          "format": "int64",
          "maximum": 256,
          "minimum": 8,
          "type": "integer"
        },
        "nodeLocations": {
          "description": "NodeLocations is the list of zones in which the NodePool's\nnodes should be located.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "nodeNetwork": {
          "description": "NodeNetwork specifies the node network configuration\noptions.",
          "properties": {
            "createPodRange": {
              "description": "CreatePodRange specifies whether to create a new range for\npod IPs in this node pool.",
              "type": "boolean"
            },
            "podRangeCidrBlock": {
              "description": "PodRangeCidrBlock is the IP address range for pod IPs in\nthis node pool.",
              "type": "string"
            },
            "podRangeName": {
              "description": "PodRangeName is ID of the secondary range for pod IPs.",
              "type": "string"
            },
            "tags": {
              "description": "Tags is list of instance tags applied to all nodes. Tags\nare used to identify valid sources or targets for network\nfirewalls.",
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "nodePoolName": {
          "description": "NodePoolName specifies the name of the GKE node pool corresponding to this MachinePool. If you don't specify a name\nthen a default name will be created based on the namespace and name of the managed machine pool.",
          "type": "string"
        },
        "nodeSecurity": {
          "description": "NodeSecurity specifies the node security options.",
          "properties": {
            "enableIntegrityMonitoring": {
              "description": "EnableIntegrityMonitoring defines whether the instance has\nintegrity monitoring enabled.",
              "type": "boolean"
            },
            "enableSecureBoot": {
              "description": "EnableSecureBoot defines whether the instance has Secure\nBoot enabled.",
              "type": "boolean"
            },
            "sandboxType": {
              "description": "SandboxType is type of the sandbox to use for the node.",
              "type": "string"
            },
            "serviceAccount": {
              "description": "ServiceAccount specifies the identity details for node\npool.",
              "properties": {
                "email": {
                  "description": "Email is the Google Cloud Platform Service Account to be\nused by the node VMs.",
                  "type": "string"
                },
                "scopes": {
                  "description": "Scopes is a set of Google API scopes to be made available\non all of the node VMs under the \"default\" service account.",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "providerIDList": {
          "description": "ProviderIDList are the provider IDs of instances in the\nmanaged instance group corresponding to the nodegroup represented by this\nmachine pool",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "scaling": {
          "description": "Scaling specifies scaling for the node pool",
          "properties": {
            "enableAutoscaling": {
              "description": "Is autoscaling enabled for this node pool. If unspecified, the default value is true.",
              "type": "boolean"
            },
            "locationPolicy": {
              "description": "Location policy used when scaling up a nodepool.",
              "enum": [
                "balanced",
                "any"
              ],
              "type": "string"
            },
            "maxCount": {
              "description": "MaxCount specifies the maximum number of nodes in the node pool",
              "format": "int32",
              "type": "integer"
            },
            "minCount": {
              "description": "MinCount specifies the minimum number of nodes in the node pool",
              "format": "int32",
              "type": "integer"
            }
          },
          "type": "object",
          "additionalProperties": false
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "GCPManagedMachinePoolStatus defines the observed state of GCPManagedMachinePool.",
      "properties": {
        "conditions": {
          "description": "Conditions specifies the cpnditions for the managed machine pool",
          "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"
        },
        "ready": {
          "default": false,
          "description": "Ready denotes that the GCPManagedMachinePool has joined the cluster",
          "type": "boolean"
        },
        "replicas": {
          "description": "Replicas is the most recently observed number of replicas.",
          "format": "int32",
          "type": "integer"
        }
      },
      "required": [
        "ready"
      ],
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
