{
  "description": "GCPMachine is the Schema for the gcpmachines 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/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/api-conventions.md#types-kinds",
      "type": "string"
    },
    "metadata": {
      "type": "object"
    },
    "spec": {
      "description": "GCPMachineSpec defines the desired state of GCPMachine",
      "properties": {
        "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"
        },
        "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"
        },
        "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"
        },
        "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"
        },
        "zone": {
          "description": "Zone is references the GCP zone to use for this instance.",
          "type": "string"
        }
      },
      "required": [
        "instanceType",
        "zone"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "GCPMachineStatus defines the observed state of GCPMachine",
      "properties": {
        "addresses": {
          "description": "Addresses contains the GCP instance associated addresses.",
          "items": {
            "description": "NodeAddress contains information for the node's address.",
            "properties": {
              "address": {
                "description": "The node address.",
                "type": "string"
              },
              "type": {
                "description": "Node address type, one of Hostname, ExternalIP or InternalIP.",
                "type": "string"
              }
            },
            "required": [
              "address",
              "type"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "errorMessage": {
          "description": "ErrorMessage will be set in the event that there is a terminal problem reconciling the Machine and will contain a more verbose string suitable for logging and human consumption. \n This field should not be set for transitive errors that a controller faces that are expected to be fixed automatically over time (like service outages), but instead indicate that something is fundamentally wrong with the Machine's spec or the configuration of the controller, and that manual intervention is required. Examples of terminal errors would be invalid combinations of settings in the spec, values that are unsupported by the controller, or the responsible controller itself being critically misconfigured. \n Any transient errors that occur during the reconciliation of Machines can be added as events to the Machine object and/or logged in the controller's output.",
          "type": "string"
        },
        "errorReason": {
          "description": "ErrorReason will be set in the event that there is a terminal problem reconciling the Machine and will contain a succinct value suitable for machine interpretation. \n This field should not be set for transitive errors that a controller faces that are expected to be fixed automatically over time (like service outages), but instead indicate that something is fundamentally wrong with the Machine's spec or the configuration of the controller, and that manual intervention is required. Examples of terminal errors would be invalid combinations of settings in the spec, values that are unsupported by the controller, or the responsible controller itself being critically misconfigured. \n Any transient errors that occur during the reconciliation of Machines can be added as events to the Machine object and/or logged in the controller's output.",
          "type": "string"
        },
        "instanceState": {
          "description": "InstanceStatus is the status of the GCP instance for this machine.",
          "type": "string"
        },
        "ready": {
          "description": "Ready is true when the provider resource is ready.",
          "type": "boolean"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
