{
    "description": "AWSMachineProviderConfig is the Schema for the awsmachineproviderconfigs API Compatibility level 2: Stable within a major release for a minimum of 9 months or 3 minor releases (whichever is longer).",
    "properties": {
        "ami": {
            "description": "AMI is the reference to the AMI from which to create the machine instance.",
            "properties": {
                "arn": {
                    "description": "ARN of resource",
                    "type": "string"
                },
                "filters": {
                    "description": "Filters is a set of filters used to identify a resource",
                    "items": {
                        "description": "Filter is a filter used to identify an AWS resource",
                        "properties": {
                            "name": {
                                "description": "Name of the filter. Filter names are case-sensitive.",
                                "type": "string"
                            },
                            "values": {
                                "description": "Values includes one or more filter values. Filter values are case-sensitive.",
                                "items": {
                                    "type": "string"
                                },
                                "type": "array"
                            }
                        },
                        "type": "object",
                        "additionalProperties": false
                    },
                    "type": "array"
                },
                "id": {
                    "description": "ID of resource",
                    "type": "string"
                }
            },
            "type": "object",
            "additionalProperties": false
        },
        "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"
        },
        "blockDevices": {
            "description": "BlockDevices is the set of block device mapping associated to this instance, block device without a name will be used as a root device and only one device without a name is allowed https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html",
            "items": {
                "description": "BlockDeviceMappingSpec describes a block device mapping",
                "properties": {
                    "deviceName": {
                        "description": "The device name exposed to the machine (for example, /dev/sdh or xvdh).",
                        "type": "string"
                    },
                    "ebs": {
                        "description": "Parameters used to automatically set up EBS volumes when the machine is launched.",
                        "properties": {
                            "deleteOnTermination": {
                                "description": "Indicates whether the EBS volume is deleted on machine termination.",
                                "type": "boolean"
                            },
                            "encrypted": {
                                "description": "Indicates whether the EBS volume is encrypted. Encrypted Amazon EBS volumes may only be attached to machines that support Amazon EBS encryption.",
                                "type": "boolean"
                            },
                            "iops": {
                                "description": "The number of I/O operations per second (IOPS) that the volume supports. For io1, this represents the number of IOPS that are provisioned for the volume. For gp2, this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting. For more information about General Purpose SSD baseline performance, I/O credits, and bursting, see Amazon EBS Volume Types (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html) in the Amazon Elastic Compute Cloud User Guide. \n Minimal and maximal IOPS for io1 and gp2 are constrained. Please, check https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html for precise boundaries for individual volumes. \n Condition: This parameter is required for requests to create io1 volumes; it is not used in requests to create gp2, st1, sc1, or standard volumes.",
                                "format": "int64",
                                "type": "integer",
                                "minimum": -9223372036854776000,
                                "maximum": 9223372036854776000
                            },
                            "kmsKey": {
                                "description": "Indicates the KMS key that should be used to encrypt the Amazon EBS volume.",
                                "properties": {
                                    "arn": {
                                        "description": "ARN of resource",
                                        "type": "string"
                                    },
                                    "filters": {
                                        "description": "Filters is a set of filters used to identify a resource",
                                        "items": {
                                            "description": "Filter is a filter used to identify an AWS resource",
                                            "properties": {
                                                "name": {
                                                    "description": "Name of the filter. Filter names are case-sensitive.",
                                                    "type": "string"
                                                },
                                                "values": {
                                                    "description": "Values includes one or more filter values. Filter values are case-sensitive.",
                                                    "items": {
                                                        "type": "string"
                                                    },
                                                    "type": "array"
                                                }
                                            },
                                            "type": "object",
                                            "additionalProperties": false
                                        },
                                        "type": "array"
                                    },
                                    "id": {
                                        "description": "ID of resource",
                                        "type": "string"
                                    }
                                },
                                "type": "object",
                                "additionalProperties": false
                            },
                            "volumeSize": {
                                "description": "The size of the volume, in GiB. \n Constraints: 1-16384 for General Purpose SSD (gp2), 4-16384 for Provisioned IOPS SSD (io1), 500-16384 for Throughput Optimized HDD (st1), 500-16384 for Cold HDD (sc1), and 1-1024 for Magnetic (standard) volumes. If you specify a snapshot, the volume size must be equal to or larger than the snapshot size. \n Default: If you're creating the volume from a snapshot and don't specify a volume size, the default is the snapshot size.",
                                "format": "int64",
                                "type": "integer",
                                "minimum": -9223372036854776000,
                                "maximum": 9223372036854776000
                            },
                            "volumeType": {
                                "description": "The volume type: gp2, io1, st1, sc1, or standard. Default: standard",
                                "type": "string"
                            }
                        },
                        "type": "object",
                        "additionalProperties": false
                    },
                    "noDevice": {
                        "description": "Suppresses the specified device included in the block device mapping of the AMI.",
                        "type": "string"
                    },
                    "virtualName": {
                        "description": "The virtual device name (ephemeralN). Machine store volumes are numbered starting from 0. An machine type with 2 available machine store volumes can specify mappings for ephemeral0 and ephemeral1.The number of available machine store volumes depends on the machine type. After you connect to the machine, you must mount the volume. \n Constraints: For M3 machines, you must specify machine store volumes in the block device mapping for the machine. When you launch an M3 machine, we ignore any machine store volumes specified in the block device mapping for the AMI.",
                        "type": "string"
                    }
                },
                "type": "object",
                "additionalProperties": false
            },
            "type": "array"
        },
        "credentialsSecret": {
            "description": "CredentialsSecret is a reference to the secret with AWS credentials. Otherwise, defaults to permissions provided by attached IAM 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
        },
        "deviceIndex": {
            "description": "DeviceIndex is the index of the device on the instance for the network interface attachment. Defaults to 0.",
            "format": "int64",
            "type": "integer",
            "minimum": -9223372036854776000,
            "maximum": 9223372036854776000
        },
        "iamInstanceProfile": {
            "description": "IAMInstanceProfile is a reference to an IAM role to assign to the instance",
            "properties": {
                "arn": {
                    "description": "ARN of resource",
                    "type": "string"
                },
                "filters": {
                    "description": "Filters is a set of filters used to identify a resource",
                    "items": {
                        "description": "Filter is a filter used to identify an AWS resource",
                        "properties": {
                            "name": {
                                "description": "Name of the filter. Filter names are case-sensitive.",
                                "type": "string"
                            },
                            "values": {
                                "description": "Values includes one or more filter values. Filter values are case-sensitive.",
                                "items": {
                                    "type": "string"
                                },
                                "type": "array"
                            }
                        },
                        "type": "object",
                        "additionalProperties": false
                    },
                    "type": "array"
                },
                "id": {
                    "description": "ID of resource",
                    "type": "string"
                }
            },
            "type": "object",
            "additionalProperties": false
        },
        "instanceType": {
            "description": "InstanceType is the type of instance to create. Example: m4.xlarge",
            "type": "string"
        },
        "keyName": {
            "description": "KeyName is the name of the KeyPair to use for SSH",
            "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"
        },
        "loadBalancers": {
            "description": "LoadBalancers is the set of load balancers to which the new instance should be added once it is created.",
            "items": {
                "description": "LoadBalancerReference is a reference to a load balancer on AWS.",
                "properties": {
                    "name": {
                        "type": "string"
                    },
                    "type": {
                        "description": "AWSLoadBalancerType is the type of LoadBalancer to use when registering an instance with load balancers specified in LoadBalancerNames",
                        "type": "string"
                    }
                },
                "type": "object",
                "additionalProperties": false
            },
            "type": "array"
        },
        "metadata": {
            "type": "object"
        },
        "metadataServiceOptions": {
            "description": "MetadataServiceOptions allows users to configure instance metadata service interaction options. If nothing specified, default AWS IMDS settings will be applied. https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_InstanceMetadataOptionsRequest.html",
            "properties": {
                "authentication": {
                    "description": "Authentication determines whether or not the host requires the use of authentication when interacting with the metadata service. When using authentication, this enforces v2 interaction method (IMDSv2) with the metadata service. When omitted, this means the user has no opinion and the value is left to the platform to choose a good default, which is subject to change over time. The current default is optional. At this point this field represents `HttpTokens` parameter from `InstanceMetadataOptionsRequest` structure in AWS EC2 API https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_InstanceMetadataOptionsRequest.html",
                    "enum": [
                        "Required",
                        "Optional"
                    ],
                    "type": "string"
                }
            },
            "type": "object",
            "additionalProperties": false
        },
        "networkInterfaceType": {
            "description": "NetworkInterfaceType specifies the type of network interface to be used for the primary network interface. Valid values are \"ENA\", \"EFA\", and omitted, which means no opinion and the platform chooses a good default which may change over time. The current default value is \"ENA\". Please visit https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html to learn more about the AWS Elastic Fabric Adapter interface option.",
            "enum": [
                "ENA",
                "EFA"
            ],
            "type": "string"
        },
        "placement": {
            "description": "Placement specifies where to create the instance in AWS",
            "properties": {
                "availabilityZone": {
                    "description": "AvailabilityZone is the availability zone of the instance",
                    "type": "string"
                },
                "region": {
                    "description": "Region is the region to use to create the instance",
                    "type": "string"
                },
                "tenancy": {
                    "description": "Tenancy indicates if instance should run on shared or single-tenant hardware. There are supported 3 options: default, dedicated and host.",
                    "type": "string"
                }
            },
            "type": "object",
            "additionalProperties": false
        },
        "publicIp": {
            "description": "PublicIP specifies whether the instance should get a public IP. If not present, it should use the default of its subnet.",
            "type": "boolean"
        },
        "securityGroups": {
            "description": "SecurityGroups is an array of references to security groups that should be applied to the instance.",
            "items": {
                "description": "AWSResourceReference is a reference to a specific AWS resource by ID, ARN, or filters. Only one of ID, ARN or Filters may be specified. Specifying more than one will result in a validation error.",
                "properties": {
                    "arn": {
                        "description": "ARN of resource",
                        "type": "string"
                    },
                    "filters": {
                        "description": "Filters is a set of filters used to identify a resource",
                        "items": {
                            "description": "Filter is a filter used to identify an AWS resource",
                            "properties": {
                                "name": {
                                    "description": "Name of the filter. Filter names are case-sensitive.",
                                    "type": "string"
                                },
                                "values": {
                                    "description": "Values includes one or more filter values. Filter values are case-sensitive.",
                                    "items": {
                                        "type": "string"
                                    },
                                    "type": "array"
                                }
                            },
                            "type": "object",
                            "additionalProperties": false
                        },
                        "type": "array"
                    },
                    "id": {
                        "description": "ID of resource",
                        "type": "string"
                    }
                },
                "type": "object",
                "additionalProperties": false
            },
            "type": "array"
        },
        "spotMarketOptions": {
            "description": "SpotMarketOptions allows users to configure instances to be run using AWS Spot instances.",
            "properties": {
                "maxPrice": {
                    "description": "The maximum price the user is willing to pay for their instances Default: On-Demand price",
                    "type": "string"
                }
            },
            "type": "object",
            "additionalProperties": false
        },
        "subnet": {
            "description": "Subnet is a reference to the subnet to use for this instance",
            "properties": {
                "arn": {
                    "description": "ARN of resource",
                    "type": "string"
                },
                "filters": {
                    "description": "Filters is a set of filters used to identify a resource",
                    "items": {
                        "description": "Filter is a filter used to identify an AWS resource",
                        "properties": {
                            "name": {
                                "description": "Name of the filter. Filter names are case-sensitive.",
                                "type": "string"
                            },
                            "values": {
                                "description": "Values includes one or more filter values. Filter values are case-sensitive.",
                                "items": {
                                    "type": "string"
                                },
                                "type": "array"
                            }
                        },
                        "type": "object",
                        "additionalProperties": false
                    },
                    "type": "array"
                },
                "id": {
                    "description": "ID of resource",
                    "type": "string"
                }
            },
            "type": "object",
            "additionalProperties": false
        },
        "tags": {
            "description": "Tags is the set of tags to add to apply to an instance, in addition to the ones added by default by the actuator. These tags are additive. The actuator will ensure these tags are present, but will not remove any other tags that may exist on the instance.",
            "items": {
                "description": "TagSpecification is the name/value pair for a tag",
                "properties": {
                    "name": {
                        "description": "Name of the tag",
                        "type": "string"
                    },
                    "value": {
                        "description": "Value of the tag",
                        "type": "string"
                    }
                },
                "type": "object",
                "additionalProperties": false
            },
            "type": "array"
        },
        "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
        }
    },
    "type": "object",
    "additionalProperties": false,
    "$schema": "http://json-schema.org/draft-04/schema#"
}
