{
    "description": "AlibabaCloudMachineProviderConfig is the Schema for the alibabacloudmachineproviderconfig API Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).",
    "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"
        },
        "bandwidth": {
            "description": "Bandwidth describes the internet bandwidth strategy for the instance",
            "properties": {
                "internetMaxBandwidthIn": {
                    "description": "InternetMaxBandwidthIn is the maximum inbound public bandwidth. Unit: Mbit/s. Valid values: When the purchased outbound public bandwidth is less than or equal to 10 Mbit/s, the valid values of this parameter are 1 to 10. Currently the default is `10` when outbound bandwidth is less than or equal to 10 Mbit/s. When the purchased outbound public bandwidth is greater than 10, the valid values are 1 to the InternetMaxBandwidthOut value. Currently the default is the value used for `InternetMaxBandwidthOut` when outbound public bandwidth is greater than 10.",
                    "format": "int64",
                    "type": "integer",
                    "minimum": -9223372036854776000,
                    "maximum": 9223372036854776000
                },
                "internetMaxBandwidthOut": {
                    "description": "InternetMaxBandwidthOut is the maximum outbound public bandwidth. Unit: Mbit/s. Valid values: 0 to 100. When a value greater than 0 is used then a public IP address is assigned to the instance. Empty value means no opinion and the platform chooses the a default, which is subject to change over time. Currently the default is `0`",
                    "format": "int64",
                    "type": "integer",
                    "minimum": -9223372036854776000,
                    "maximum": 9223372036854776000
                }
            },
            "type": "object",
            "additionalProperties": false
        },
        "credentialsSecret": {
            "description": "CredentialsSecret is a reference to the secret with alibabacloud credentials. Otherwise, defaults to permissions provided by attached RAM role where the actuator is running.",
            "properties": {
                "name": {
                    "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?",
                    "type": "string"
                }
            },
            "type": "object",
            "additionalProperties": false
        },
        "dataDisk": {
            "description": "DataDisks holds information regarding the extra disks attached to the instance",
            "items": {
                "description": "DataDisk contains the information regarding the datadisk attached to an instance",
                "type": "object"
            },
            "type": "array"
        },
        "imageId": {
            "description": "The ID of the image used to create the instance.",
            "type": "string"
        },
        "instanceType": {
            "description": "The instance type of the instance.",
            "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"
        },
        "ramRoleName": {
            "description": "RAMRoleName is the name of the instance Resource Access Management (RAM) role. This allows the instance to perform API calls as this specified RAM role.",
            "type": "string"
        },
        "regionId": {
            "description": "The ID of the region in which to create the instance. You can call the DescribeRegions operation to query the most recent region list.",
            "type": "string"
        },
        "resourceGroup": {
            "description": "ResourceGroup references the resource group to which to assign the instance. A reference holds either the resource group ID, the resource name, or the required tags to search. When more than one resource group are returned for a search, an error will be produced and the Machine will not be created. Resource Groups do not support searching by tags.",
            "properties": {
                "id": {
                    "description": "ID of resource",
                    "type": "string"
                },
                "name": {
                    "description": "Name of the resource",
                    "type": "string"
                },
                "tags": {
                    "description": "Tags is a set of metadata based upon ECS object tags used to identify a resource. For details about usage when multiple resources are found, please see the owning parent field documentation.",
                    "items": {
                        "description": "Tag  The tags of ECS Instance",
                        "type": "object"
                    },
                    "type": "array"
                },
                "type": {
                    "description": "type identifies the resource reference type for this entry.",
                    "type": "string"
                }
            },
            "type": "object",
            "additionalProperties": false
        },
        "securityGroups": {
            "description": "SecurityGroups is a list of security group references to assign to the instance. A reference holds either the security group ID, the resource name, or the required tags to search. When more than one security group is returned for a tag search, all the groups are associated with the instance up to the maximum number of security groups to which an instance can belong. For more information, see the \"Security group limits\" section in Limits. https://www.alibabacloud.com/help/en/doc-detail/25412.htm",
            "items": {
                "description": "ResourceTagReference is a reference to a specific AlibabaCloud resource by ID, or tags. Only one of ID or Tags may be specified. Specifying more than one will result in a validation error.",
                "properties": {
                    "id": {
                        "description": "ID of resource",
                        "type": "string"
                    },
                    "name": {
                        "description": "Name of the resource",
                        "type": "string"
                    },
                    "tags": {
                        "description": "Tags is a set of metadata based upon ECS object tags used to identify a resource. For details about usage when multiple resources are found, please see the owning parent field documentation.",
                        "items": {
                            "description": "Tag  The tags of ECS Instance",
                            "type": "object"
                        },
                        "type": "array"
                    },
                    "type": {
                        "description": "type identifies the resource reference type for this entry.",
                        "type": "string"
                    }
                },
                "type": "object",
                "additionalProperties": false
            },
            "type": "array"
        },
        "systemDisk": {
            "description": "SystemDisk holds the properties regarding the system disk for the instance",
            "properties": {
                "category": {
                    "description": "Category is the category of the system disk. Valid values: cloud_essd: ESSD. When the parameter is set to this value, you can use the SystemDisk.PerformanceLevel parameter to specify the performance level of the disk. cloud_efficiency: ultra disk. cloud_ssd: standard SSD. cloud: basic disk. Empty value means no opinion and the platform chooses the a default, which is subject to change over time. Currently for non-I/O optimized instances of retired instance types, the default is `cloud`. Currently for other instances, the default is `cloud_efficiency`.",
                    "enum": [
                        "cloud_efficiency",
                        "cloud_ssd",
                        "cloud_essd",
                        "cloud"
                    ],
                    "type": "string"
                },
                "name": {
                    "description": "Name is the name of the system disk. If the name is specified the name must be 2 to 128 characters in length. It must start with a letter and cannot start with http:// or https://. It can contain letters, digits, colons (:), underscores (_), and hyphens (-). Empty value means the platform chooses a default, which is subject to change over time. Currently the default is `\"\"`.",
                    "maxLength": 128,
                    "type": "string"
                },
                "performanceLevel": {
                    "description": "PerformanceLevel is the performance level of the ESSD used as the system disk. Valid values: \n PL0: A single ESSD can deliver up to 10,000 random read/write IOPS. PL1: A single ESSD can deliver up to 50,000 random read/write IOPS. PL2: A single ESSD can deliver up to 100,000 random read/write IOPS. PL3: A single ESSD can deliver up to 1,000,000 random read/write IOPS. Empty value means no opinion and the platform chooses a default, which is subject to change over time. Currently the default is `PL1`. For more information about ESSD performance levels, see ESSDs.",
                    "enum": [
                        "PL0",
                        "PL1",
                        "PL2",
                        "PL3"
                    ],
                    "type": "string"
                },
                "size": {
                    "description": "Size is the size of the system disk. Unit: GiB. Valid values: 20 to 500. The value must be at least 20 and greater than or equal to the size of the image. Empty value means the platform chooses a default, which is subject to change over time. Currently the default is `40` or the size of the image depending on whichever is greater.",
                    "format": "int64",
                    "type": "integer",
                    "minimum": -9223372036854776000,
                    "maximum": 9223372036854776000
                }
            },
            "type": "object",
            "additionalProperties": false
        },
        "tag": {
            "description": "Tags are the set of metadata to add to an instance.",
            "items": {
                "description": "Tag  The tags of ECS Instance",
                "type": "object"
            },
            "type": "array"
        },
        "tenancy": {
            "description": "Tenancy specifies whether to create the instance on a dedicated host. Valid values: \n default: creates the instance on a non-dedicated host. host: creates the instance on a dedicated host. If you do not specify the DedicatedHostID parameter, Alibaba Cloud automatically selects a dedicated host for the instance. Empty value means no opinion and the platform chooses the a default, which is subject to change over time. Currently the default is `default`.",
            "type": "string"
        },
        "userDataSecret": {
            "description": "UserDataSecret contains a local reference to a secret that contains the UserData to apply to the instance",
            "properties": {
                "name": {
                    "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?",
                    "type": "string"
                }
            },
            "type": "object",
            "additionalProperties": false
        },
        "vSwitch": {
            "description": "VSwitch is a reference to the vswitch to use for this instance. A reference holds either the vSwitch ID, the resource name, or the required tags to search. When more than one vSwitch is returned for a tag search, only the first vSwitch returned will be used. This parameter is required when you create an instance of the VPC type. You can call the DescribeVSwitches operation to query the created vSwitches.",
            "properties": {
                "id": {
                    "description": "ID of resource",
                    "type": "string"
                },
                "name": {
                    "description": "Name of the resource",
                    "type": "string"
                },
                "tags": {
                    "description": "Tags is a set of metadata based upon ECS object tags used to identify a resource. For details about usage when multiple resources are found, please see the owning parent field documentation.",
                    "items": {
                        "description": "Tag  The tags of ECS Instance",
                        "type": "object"
                    },
                    "type": "array"
                },
                "type": {
                    "description": "type identifies the resource reference type for this entry.",
                    "type": "string"
                }
            },
            "type": "object",
            "additionalProperties": false
        },
        "vpcId": {
            "description": "The ID of the vpc",
            "type": "string"
        },
        "zoneId": {
            "description": "The ID of the zone in which to create the instance. You can call the DescribeZones operation to query the most recent region list.",
            "type": "string"
        }
    },
    "type": "object",
    "additionalProperties": false,
    "$schema": "http://json-schema.org/draft-04/schema#"
}
