{
  "description": "GCPMachineTemplate is the Schema for the gcpmachinetemplates 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": "GCPMachineTemplateSpec defines the desired state of GCPMachineTemplate.",
      "properties": {
        "template": {
          "description": "GCPMachineTemplateResource describes the data needed to create am GCPMachine from a template.",
          "properties": {
            "spec": {
              "description": "Spec is the specification of the desired behavior of the machine.",
              "properties": {
                "additionalDisks": {
                  "description": "AdditionalDisks are optional non-boot attached disks.",
                  "items": {
                    "description": "AttachedDiskSpec degined GCP machine disk.",
                    "properties": {
                      "deviceType": {
                        "description": "DeviceType is a device type of the attached disk. Supported types of non-root attached volumes: 1. \"pd-standard\" - Standard (HDD) persistent disk 2. \"pd-ssd\" - SSD persistent disk 3. \"local-ssd\" - Local SSD disk (https://cloud.google.com/compute/docs/disks/local-ssd). Default is \"pd-standard\".",
                        "type": "string"
                      },
                      "size": {
                        "description": "Size is the size of the disk in GBs. Defaults to 30GB. For \"local-ssd\" size is always 375GB.",
                        "format": "int64",
                        "type": "integer"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "type": "array"
                },
                "additionalLabels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "AdditionalLabels is an optional set of tags to add to an instance, in addition to the ones added by default by the GCP provider. If both the GCPCluster and the GCPMachine specify the same tag name with different values, the GCPMachine's value takes precedence.",
                  "type": "object"
                },
                "additionalMetadata": {
                  "description": "AdditionalMetadata is an optional set of metadata to add to an instance, in addition to the ones added by default by the GCP provider.",
                  "items": {
                    "description": "MetadataItem defines a single piece of metadata associated with an instance.",
                    "properties": {
                      "key": {
                        "description": "Key is the identifier for the metadata entry.",
                        "type": "string"
                      },
                      "value": {
                        "description": "Value is the value of the metadata entry.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "key"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "type": "array",
                  "x-kubernetes-list-map-keys": [
                    "key"
                  ],
                  "x-kubernetes-list-type": "map"
                },
                "additionalNetworkTags": {
                  "description": "AdditionalNetworkTags is a list of network tags that should be applied to the instance. These tags are set in addition to any network tags defined at the cluster level or in the actuator.",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "image": {
                  "description": "Image is the full reference to a valid image to be used for this machine. Takes precedence over ImageFamily.",
                  "type": "string"
                },
                "imageFamily": {
                  "description": "ImageFamily is the full reference to a valid image family to be used for this machine.",
                  "type": "string"
                },
                "instanceType": {
                  "description": "InstanceType is the type of instance to create. Example: n1.standard-2",
                  "type": "string"
                },
                "preemptible": {
                  "description": "Preemptible defines if instance is preemptible",
                  "type": "boolean"
                },
                "providerID": {
                  "description": "ProviderID is the unique identifier as specified by the cloud provider.",
                  "type": "string"
                },
                "publicIP": {
                  "description": "PublicIP specifies whether the instance should get a public IP. Set this to true if you don't have a NAT instances or Cloud Nat setup.",
                  "type": "boolean"
                },
                "rootDeviceSize": {
                  "description": "RootDeviceSize is the size of the root volume in GB. Defaults to 30.",
                  "format": "int64",
                  "type": "integer"
                },
                "rootDeviceType": {
                  "description": "RootDeviceType is the type of the root volume. Supported types of root volumes: 1. \"pd-standard\" - Standard (HDD) persistent disk 2. \"pd-ssd\" - SSD persistent disk Default is \"pd-standard\".",
                  "type": "string"
                },
                "serviceAccounts": {
                  "description": "ServiceAccount specifies the service account email and which scopes to assign to the machine. Defaults to: email: \"default\", scope: []{compute.CloudPlatformScope}",
                  "properties": {
                    "email": {
                      "description": "Email: Email address of the service account.",
                      "type": "string"
                    },
                    "scopes": {
                      "description": "Scopes: The list of scopes to be made available for this service account.",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "subnet": {
                  "description": "Subnet is a reference to the subnetwork to use for this instance. If not specified, the first subnetwork retrieved from the Cluster Region and Network is picked.",
                  "type": "string"
                }
              },
              "required": [
                "instanceType"
              ],
              "type": "object",
              "additionalProperties": false
            }
          },
          "required": [
            "spec"
          ],
          "type": "object",
          "additionalProperties": false
        }
      },
      "required": [
        "template"
      ],
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
