{
  "description": "AzureMachine is the Schema for the azuremachines 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": "AzureMachineSpec defines the desired state of AzureMachine",
      "properties": {
        "additionalTags": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "AdditionalTags is an optional set of tags to add to an instance, in addition to the ones added by default by the Azure provider. If both the AzureCluster and the AzureMachine specify the same tag name with different values, the AzureMachine's value takes precedence.",
          "type": "object"
        },
        "allocatePublicIP": {
          "description": "AllocatePublicIP allows the ability to create dynamic public ips for machines where this value is true.",
          "type": "boolean"
        },
        "availabilityZone": {
          "properties": {
            "enabled": {
              "type": "boolean"
            },
            "id": {
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "image": {
          "description": "Image defines information about the image to use for VM creation. There are three ways to specify an image: by ID, by publisher, or by Shared Image Gallery. If specifying an image by ID, only the ID field needs to be set. If specifying an image by publisher, the Publisher, Offer, SKU, and Version fields must be set. If specifying an image from a Shared Image Gallery, the SubscriptionID, ResourceGroup, Gallery, Name, and Version fields must be set.",
          "properties": {
            "gallery": {
              "type": "string"
            },
            "id": {
              "type": "string"
            },
            "name": {
              "type": "string"
            },
            "offer": {
              "type": "string"
            },
            "publisher": {
              "type": "string"
            },
            "resourceGroup": {
              "type": "string"
            },
            "sku": {
              "type": "string"
            },
            "subscriptionID": {
              "type": "string"
            },
            "version": {
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "location": {
          "type": "string"
        },
        "osDisk": {
          "properties": {
            "diskSizeGB": {
              "format": "int32",
              "type": "integer"
            },
            "managedDisk": {
              "properties": {
                "storageAccountType": {
                  "type": "string"
                }
              },
              "required": [
                "storageAccountType"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "osType": {
              "type": "string"
            }
          },
          "required": [
            "diskSizeGB",
            "managedDisk",
            "osType"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "providerID": {
          "description": "ProviderID is the unique identifier as specified by the cloud provider.",
          "type": "string"
        },
        "sshPublicKey": {
          "type": "string"
        },
        "vmSize": {
          "type": "string"
        }
      },
      "required": [
        "location",
        "osDisk",
        "sshPublicKey",
        "vmSize"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "AzureMachineStatus defines the observed state of AzureMachine",
      "properties": {
        "addresses": {
          "description": "Addresses contains the Azure 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"
        },
        "ready": {
          "description": "Ready is true when the provider resource is ready.",
          "type": "boolean"
        },
        "vmState": {
          "description": "VMState is the provisioning state of the Azure virtual machine.",
          "type": "string"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
