/*
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License. See License.txt in the project root for
 * license information.
 *
 * Code generated by Microsoft (R) AutoRest Code Generator.
 * Changes may cause incorrect behavior and will be lost if the code is
 * regenerated.
*/

import { ServiceClientOptions, RequestOptions, ServiceCallback, HttpOperationResponse } from 'ms-rest';
import * as models from '../models';


/**
 * @class
 * AvailabilitySets
 * __NOTE__: An instance of this class is automatically created for an
 * instance of the ComputeManagementClient.
 */
export interface AvailabilitySets {


    /**
     * Create or update an availability set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} availabilitySetName The name of the availability set.
     *
     * @param {object} parameters Parameters supplied to the Create Availability
     * Set operation.
     *
     * @param {number} [parameters.platformUpdateDomainCount] Update Domain count.
     *
     * @param {number} [parameters.platformFaultDomainCount] Fault Domain count.
     *
     * @param {array} [parameters.virtualMachines] A list of references to all
     * virtual machines in the availability set.
     *
     * @param {object} [parameters.sku] Sku of the availability set
     *
     * @param {string} [parameters.sku.name] The sku name.
     *
     * @param {string} [parameters.sku.tier] Specifies the tier of virtual machines
     * in a scale set.<br /><br /> Possible Values:<br /><br /> **Standard**<br
     * /><br /> **Basic**
     *
     * @param {number} [parameters.sku.capacity] Specifies the number of virtual
     * machines in the scale set.
     *
     * @param {string} parameters.location Resource location
     *
     * @param {object} [parameters.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<AvailabilitySet>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    createOrUpdateWithHttpOperationResponse(resourceGroupName: string, availabilitySetName: string, parameters: models.AvailabilitySet, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.AvailabilitySet>>;

    /**
     * Create or update an availability set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} availabilitySetName The name of the availability set.
     *
     * @param {object} parameters Parameters supplied to the Create Availability
     * Set operation.
     *
     * @param {number} [parameters.platformUpdateDomainCount] Update Domain count.
     *
     * @param {number} [parameters.platformFaultDomainCount] Fault Domain count.
     *
     * @param {array} [parameters.virtualMachines] A list of references to all
     * virtual machines in the availability set.
     *
     * @param {object} [parameters.sku] Sku of the availability set
     *
     * @param {string} [parameters.sku.name] The sku name.
     *
     * @param {string} [parameters.sku.tier] Specifies the tier of virtual machines
     * in a scale set.<br /><br /> Possible Values:<br /><br /> **Standard**<br
     * /><br /> **Basic**
     *
     * @param {number} [parameters.sku.capacity] Specifies the number of virtual
     * machines in the scale set.
     *
     * @param {string} parameters.location Resource location
     *
     * @param {object} [parameters.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {AvailabilitySet} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {AvailabilitySet} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link AvailabilitySet} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    createOrUpdate(resourceGroupName: string, availabilitySetName: string, parameters: models.AvailabilitySet, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.AvailabilitySet>;
    createOrUpdate(resourceGroupName: string, availabilitySetName: string, parameters: models.AvailabilitySet, callback: ServiceCallback<models.AvailabilitySet>): void;
    createOrUpdate(resourceGroupName: string, availabilitySetName: string, parameters: models.AvailabilitySet, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.AvailabilitySet>): void;


    /**
     * Delete an availability set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} availabilitySetName The name of the availability set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    deleteMethodWithHttpOperationResponse(resourceGroupName: string, availabilitySetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Delete an availability set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} availabilitySetName The name of the availability set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    deleteMethod(resourceGroupName: string, availabilitySetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    deleteMethod(resourceGroupName: string, availabilitySetName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    deleteMethod(resourceGroupName: string, availabilitySetName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Retrieves information about an availability set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} availabilitySetName The name of the availability set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<AvailabilitySet>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    getWithHttpOperationResponse(resourceGroupName: string, availabilitySetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.AvailabilitySet>>;

    /**
     * Retrieves information about an availability set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} availabilitySetName The name of the availability set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {AvailabilitySet} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {AvailabilitySet} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link AvailabilitySet} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    get(resourceGroupName: string, availabilitySetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.AvailabilitySet>;
    get(resourceGroupName: string, availabilitySetName: string, callback: ServiceCallback<models.AvailabilitySet>): void;
    get(resourceGroupName: string, availabilitySetName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.AvailabilitySet>): void;


    /**
     * Lists all availability sets in a resource group.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<AvailabilitySetListResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listWithHttpOperationResponse(resourceGroupName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.AvailabilitySetListResult>>;

    /**
     * Lists all availability sets in a resource group.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {AvailabilitySetListResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {AvailabilitySetListResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link AvailabilitySetListResult} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    list(resourceGroupName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.AvailabilitySetListResult>;
    list(resourceGroupName: string, callback: ServiceCallback<models.AvailabilitySetListResult>): void;
    list(resourceGroupName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.AvailabilitySetListResult>): void;


    /**
     * Lists all available virtual machine sizes that can be used to create a new
     * virtual machine in an existing availability set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} availabilitySetName The name of the availability set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineSizeListResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listAvailableSizesWithHttpOperationResponse(resourceGroupName: string, availabilitySetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineSizeListResult>>;

    /**
     * Lists all available virtual machine sizes that can be used to create a new
     * virtual machine in an existing availability set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} availabilitySetName The name of the availability set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineSizeListResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineSizeListResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineSizeListResult} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listAvailableSizes(resourceGroupName: string, availabilitySetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineSizeListResult>;
    listAvailableSizes(resourceGroupName: string, availabilitySetName: string, callback: ServiceCallback<models.VirtualMachineSizeListResult>): void;
    listAvailableSizes(resourceGroupName: string, availabilitySetName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineSizeListResult>): void;
}

/**
 * @class
 * VirtualMachineExtensionImages
 * __NOTE__: An instance of this class is automatically created for an
 * instance of the ComputeManagementClient.
 */
export interface VirtualMachineExtensionImages {


    /**
     * Gets a virtual machine extension image.
     *
     * @param {string} location The name of a supported Azure region.
     *
     * @param {string} publisherName
     *
     * @param {string} type
     *
     * @param {string} version
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineExtensionImage>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    getWithHttpOperationResponse(location: string, publisherName: string, type: string, version: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineExtensionImage>>;

    /**
     * Gets a virtual machine extension image.
     *
     * @param {string} location The name of a supported Azure region.
     *
     * @param {string} publisherName
     *
     * @param {string} type
     *
     * @param {string} version
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineExtensionImage} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineExtensionImage} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineExtensionImage} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    get(location: string, publisherName: string, type: string, version: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineExtensionImage>;
    get(location: string, publisherName: string, type: string, version: string, callback: ServiceCallback<models.VirtualMachineExtensionImage>): void;
    get(location: string, publisherName: string, type: string, version: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineExtensionImage>): void;


    /**
     * Gets a list of virtual machine extension image types.
     *
     * @param {string} location The name of a supported Azure region.
     *
     * @param {string} publisherName
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<Array>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listTypesWithHttpOperationResponse(location: string, publisherName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineExtensionImage[]>>;

    /**
     * Gets a list of virtual machine extension image types.
     *
     * @param {string} location The name of a supported Azure region.
     *
     * @param {string} publisherName
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {Array} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {Array} [result]   - The deserialized result object if an error did not occur.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listTypes(location: string, publisherName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineExtensionImage[]>;
    listTypes(location: string, publisherName: string, callback: ServiceCallback<models.VirtualMachineExtensionImage[]>): void;
    listTypes(location: string, publisherName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineExtensionImage[]>): void;


    /**
     * Gets a list of virtual machine extension image versions.
     *
     * @param {string} location The name of a supported Azure region.
     *
     * @param {string} publisherName
     *
     * @param {string} type
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {string} [options.filter] The filter to apply on the operation.
     *
     * @param {number} [options.top]
     *
     * @param {string} [options.orderby]
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<Array>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listVersionsWithHttpOperationResponse(location: string, publisherName: string, type: string, options?: { filter? : string, top? : number, orderby? : string, customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineExtensionImage[]>>;

    /**
     * Gets a list of virtual machine extension image versions.
     *
     * @param {string} location The name of a supported Azure region.
     *
     * @param {string} publisherName
     *
     * @param {string} type
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {string} [options.filter] The filter to apply on the operation.
     *
     * @param {number} [options.top]
     *
     * @param {string} [options.orderby]
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {Array} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {Array} [result]   - The deserialized result object if an error did not occur.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listVersions(location: string, publisherName: string, type: string, options?: { filter? : string, top? : number, orderby? : string, customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineExtensionImage[]>;
    listVersions(location: string, publisherName: string, type: string, callback: ServiceCallback<models.VirtualMachineExtensionImage[]>): void;
    listVersions(location: string, publisherName: string, type: string, options: { filter? : string, top? : number, orderby? : string, customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineExtensionImage[]>): void;
}

/**
 * @class
 * VirtualMachineExtensions
 * __NOTE__: An instance of this class is automatically created for an
 * instance of the ComputeManagementClient.
 */
export interface VirtualMachineExtensions {


    /**
     * The operation to create or update the extension.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine where the extension
     * should be create or updated.
     *
     * @param {string} vmExtensionName The name of the virtual machine extension.
     *
     * @param {object} extensionParameters Parameters supplied to the Create
     * Virtual Machine Extension operation.
     *
     * @param {string} [extensionParameters.forceUpdateTag] How the extension
     * handler should be forced to update even if the extension configuration has
     * not changed.
     *
     * @param {string} [extensionParameters.publisher] The name of the extension
     * handler publisher.
     *
     * @param {string} [extensionParameters.virtualMachineExtensionType] Specifies
     * the type of the extension; an example is "CustomScriptExtension".
     *
     * @param {string} [extensionParameters.typeHandlerVersion] Specifies the
     * version of the script handler.
     *
     * @param {boolean} [extensionParameters.autoUpgradeMinorVersion] Indicates
     * whether the extension should use a newer minor version if one is available
     * at deployment time. Once deployed, however, the extension will not upgrade
     * minor versions unless redeployed, even with this property set to true.
     *
     * @param {object} [extensionParameters.settings] Json formatted public
     * settings for the extension.
     *
     * @param {object} [extensionParameters.protectedSettings] The extension can
     * contain either protectedSettings or protectedSettingsFromKeyVault or no
     * protected settings at all.
     *
     * @param {object} [extensionParameters.instanceView] The virtual machine
     * extension instance view.
     *
     * @param {string} [extensionParameters.instanceView.name] The virtual machine
     * extension name.
     *
     * @param {string} [extensionParameters.instanceView.type] Specifies the type
     * of the extension; an example is "CustomScriptExtension".
     *
     * @param {string} [extensionParameters.instanceView.typeHandlerVersion]
     * Specifies the version of the script handler.
     *
     * @param {array} [extensionParameters.instanceView.substatuses] The resource
     * status information.
     *
     * @param {array} [extensionParameters.instanceView.statuses] The resource
     * status information.
     *
     * @param {string} extensionParameters.location Resource location
     *
     * @param {object} [extensionParameters.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineExtension>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    createOrUpdateWithHttpOperationResponse(resourceGroupName: string, vmName: string, vmExtensionName: string, extensionParameters: models.VirtualMachineExtension, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineExtension>>;

    /**
     * The operation to create or update the extension.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine where the extension
     * should be create or updated.
     *
     * @param {string} vmExtensionName The name of the virtual machine extension.
     *
     * @param {object} extensionParameters Parameters supplied to the Create
     * Virtual Machine Extension operation.
     *
     * @param {string} [extensionParameters.forceUpdateTag] How the extension
     * handler should be forced to update even if the extension configuration has
     * not changed.
     *
     * @param {string} [extensionParameters.publisher] The name of the extension
     * handler publisher.
     *
     * @param {string} [extensionParameters.virtualMachineExtensionType] Specifies
     * the type of the extension; an example is "CustomScriptExtension".
     *
     * @param {string} [extensionParameters.typeHandlerVersion] Specifies the
     * version of the script handler.
     *
     * @param {boolean} [extensionParameters.autoUpgradeMinorVersion] Indicates
     * whether the extension should use a newer minor version if one is available
     * at deployment time. Once deployed, however, the extension will not upgrade
     * minor versions unless redeployed, even with this property set to true.
     *
     * @param {object} [extensionParameters.settings] Json formatted public
     * settings for the extension.
     *
     * @param {object} [extensionParameters.protectedSettings] The extension can
     * contain either protectedSettings or protectedSettingsFromKeyVault or no
     * protected settings at all.
     *
     * @param {object} [extensionParameters.instanceView] The virtual machine
     * extension instance view.
     *
     * @param {string} [extensionParameters.instanceView.name] The virtual machine
     * extension name.
     *
     * @param {string} [extensionParameters.instanceView.type] Specifies the type
     * of the extension; an example is "CustomScriptExtension".
     *
     * @param {string} [extensionParameters.instanceView.typeHandlerVersion]
     * Specifies the version of the script handler.
     *
     * @param {array} [extensionParameters.instanceView.substatuses] The resource
     * status information.
     *
     * @param {array} [extensionParameters.instanceView.statuses] The resource
     * status information.
     *
     * @param {string} extensionParameters.location Resource location
     *
     * @param {object} [extensionParameters.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineExtension} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineExtension} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineExtension} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    createOrUpdate(resourceGroupName: string, vmName: string, vmExtensionName: string, extensionParameters: models.VirtualMachineExtension, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineExtension>;
    createOrUpdate(resourceGroupName: string, vmName: string, vmExtensionName: string, extensionParameters: models.VirtualMachineExtension, callback: ServiceCallback<models.VirtualMachineExtension>): void;
    createOrUpdate(resourceGroupName: string, vmName: string, vmExtensionName: string, extensionParameters: models.VirtualMachineExtension, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineExtension>): void;


    /**
     * The operation to delete the extension.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine where the extension
     * should be deleted.
     *
     * @param {string} vmExtensionName The name of the virtual machine extension.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    deleteMethodWithHttpOperationResponse(resourceGroupName: string, vmName: string, vmExtensionName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * The operation to delete the extension.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine where the extension
     * should be deleted.
     *
     * @param {string} vmExtensionName The name of the virtual machine extension.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    deleteMethod(resourceGroupName: string, vmName: string, vmExtensionName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    deleteMethod(resourceGroupName: string, vmName: string, vmExtensionName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    deleteMethod(resourceGroupName: string, vmName: string, vmExtensionName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * The operation to get the extension.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine containing the
     * extension.
     *
     * @param {string} vmExtensionName The name of the virtual machine extension.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {string} [options.expand] The expand expression to apply on the
     * operation.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineExtension>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    getWithHttpOperationResponse(resourceGroupName: string, vmName: string, vmExtensionName: string, options?: { expand? : string, customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineExtension>>;

    /**
     * The operation to get the extension.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine containing the
     * extension.
     *
     * @param {string} vmExtensionName The name of the virtual machine extension.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {string} [options.expand] The expand expression to apply on the
     * operation.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineExtension} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineExtension} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineExtension} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    get(resourceGroupName: string, vmName: string, vmExtensionName: string, options?: { expand? : string, customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineExtension>;
    get(resourceGroupName: string, vmName: string, vmExtensionName: string, callback: ServiceCallback<models.VirtualMachineExtension>): void;
    get(resourceGroupName: string, vmName: string, vmExtensionName: string, options: { expand? : string, customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineExtension>): void;


    /**
     * The operation to create or update the extension.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine where the extension
     * should be create or updated.
     *
     * @param {string} vmExtensionName The name of the virtual machine extension.
     *
     * @param {object} extensionParameters Parameters supplied to the Create
     * Virtual Machine Extension operation.
     *
     * @param {string} [extensionParameters.forceUpdateTag] How the extension
     * handler should be forced to update even if the extension configuration has
     * not changed.
     *
     * @param {string} [extensionParameters.publisher] The name of the extension
     * handler publisher.
     *
     * @param {string} [extensionParameters.virtualMachineExtensionType] Specifies
     * the type of the extension; an example is "CustomScriptExtension".
     *
     * @param {string} [extensionParameters.typeHandlerVersion] Specifies the
     * version of the script handler.
     *
     * @param {boolean} [extensionParameters.autoUpgradeMinorVersion] Indicates
     * whether the extension should use a newer minor version if one is available
     * at deployment time. Once deployed, however, the extension will not upgrade
     * minor versions unless redeployed, even with this property set to true.
     *
     * @param {object} [extensionParameters.settings] Json formatted public
     * settings for the extension.
     *
     * @param {object} [extensionParameters.protectedSettings] The extension can
     * contain either protectedSettings or protectedSettingsFromKeyVault or no
     * protected settings at all.
     *
     * @param {object} [extensionParameters.instanceView] The virtual machine
     * extension instance view.
     *
     * @param {string} [extensionParameters.instanceView.name] The virtual machine
     * extension name.
     *
     * @param {string} [extensionParameters.instanceView.type] Specifies the type
     * of the extension; an example is "CustomScriptExtension".
     *
     * @param {string} [extensionParameters.instanceView.typeHandlerVersion]
     * Specifies the version of the script handler.
     *
     * @param {array} [extensionParameters.instanceView.substatuses] The resource
     * status information.
     *
     * @param {array} [extensionParameters.instanceView.statuses] The resource
     * status information.
     *
     * @param {string} extensionParameters.location Resource location
     *
     * @param {object} [extensionParameters.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineExtension>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginCreateOrUpdateWithHttpOperationResponse(resourceGroupName: string, vmName: string, vmExtensionName: string, extensionParameters: models.VirtualMachineExtension, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineExtension>>;

    /**
     * The operation to create or update the extension.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine where the extension
     * should be create or updated.
     *
     * @param {string} vmExtensionName The name of the virtual machine extension.
     *
     * @param {object} extensionParameters Parameters supplied to the Create
     * Virtual Machine Extension operation.
     *
     * @param {string} [extensionParameters.forceUpdateTag] How the extension
     * handler should be forced to update even if the extension configuration has
     * not changed.
     *
     * @param {string} [extensionParameters.publisher] The name of the extension
     * handler publisher.
     *
     * @param {string} [extensionParameters.virtualMachineExtensionType] Specifies
     * the type of the extension; an example is "CustomScriptExtension".
     *
     * @param {string} [extensionParameters.typeHandlerVersion] Specifies the
     * version of the script handler.
     *
     * @param {boolean} [extensionParameters.autoUpgradeMinorVersion] Indicates
     * whether the extension should use a newer minor version if one is available
     * at deployment time. Once deployed, however, the extension will not upgrade
     * minor versions unless redeployed, even with this property set to true.
     *
     * @param {object} [extensionParameters.settings] Json formatted public
     * settings for the extension.
     *
     * @param {object} [extensionParameters.protectedSettings] The extension can
     * contain either protectedSettings or protectedSettingsFromKeyVault or no
     * protected settings at all.
     *
     * @param {object} [extensionParameters.instanceView] The virtual machine
     * extension instance view.
     *
     * @param {string} [extensionParameters.instanceView.name] The virtual machine
     * extension name.
     *
     * @param {string} [extensionParameters.instanceView.type] Specifies the type
     * of the extension; an example is "CustomScriptExtension".
     *
     * @param {string} [extensionParameters.instanceView.typeHandlerVersion]
     * Specifies the version of the script handler.
     *
     * @param {array} [extensionParameters.instanceView.substatuses] The resource
     * status information.
     *
     * @param {array} [extensionParameters.instanceView.statuses] The resource
     * status information.
     *
     * @param {string} extensionParameters.location Resource location
     *
     * @param {object} [extensionParameters.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineExtension} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineExtension} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineExtension} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginCreateOrUpdate(resourceGroupName: string, vmName: string, vmExtensionName: string, extensionParameters: models.VirtualMachineExtension, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineExtension>;
    beginCreateOrUpdate(resourceGroupName: string, vmName: string, vmExtensionName: string, extensionParameters: models.VirtualMachineExtension, callback: ServiceCallback<models.VirtualMachineExtension>): void;
    beginCreateOrUpdate(resourceGroupName: string, vmName: string, vmExtensionName: string, extensionParameters: models.VirtualMachineExtension, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineExtension>): void;


    /**
     * The operation to delete the extension.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine where the extension
     * should be deleted.
     *
     * @param {string} vmExtensionName The name of the virtual machine extension.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginDeleteMethodWithHttpOperationResponse(resourceGroupName: string, vmName: string, vmExtensionName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * The operation to delete the extension.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine where the extension
     * should be deleted.
     *
     * @param {string} vmExtensionName The name of the virtual machine extension.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginDeleteMethod(resourceGroupName: string, vmName: string, vmExtensionName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginDeleteMethod(resourceGroupName: string, vmName: string, vmExtensionName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginDeleteMethod(resourceGroupName: string, vmName: string, vmExtensionName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;
}

/**
 * @class
 * VirtualMachineImages
 * __NOTE__: An instance of this class is automatically created for an
 * instance of the ComputeManagementClient.
 */
export interface VirtualMachineImages {


    /**
     * Gets a virtual machine image.
     *
     * @param {string} location The name of a supported Azure region.
     *
     * @param {string} publisherName A valid image publisher.
     *
     * @param {string} offer A valid image publisher offer.
     *
     * @param {string} skus A valid image SKU.
     *
     * @param {string} version A valid image SKU version.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineImage>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    getWithHttpOperationResponse(location: string, publisherName: string, offer: string, skus: string, version: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineImage>>;

    /**
     * Gets a virtual machine image.
     *
     * @param {string} location The name of a supported Azure region.
     *
     * @param {string} publisherName A valid image publisher.
     *
     * @param {string} offer A valid image publisher offer.
     *
     * @param {string} skus A valid image SKU.
     *
     * @param {string} version A valid image SKU version.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineImage} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineImage} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineImage} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    get(location: string, publisherName: string, offer: string, skus: string, version: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineImage>;
    get(location: string, publisherName: string, offer: string, skus: string, version: string, callback: ServiceCallback<models.VirtualMachineImage>): void;
    get(location: string, publisherName: string, offer: string, skus: string, version: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineImage>): void;


    /**
     * Gets a list of all virtual machine image versions for the specified
     * location, publisher, offer, and SKU.
     *
     * @param {string} location The name of a supported Azure region.
     *
     * @param {string} publisherName A valid image publisher.
     *
     * @param {string} offer A valid image publisher offer.
     *
     * @param {string} skus A valid image SKU.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {string} [options.filter] The filter to apply on the operation.
     *
     * @param {number} [options.top]
     *
     * @param {string} [options.orderby]
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<Array>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listWithHttpOperationResponse(location: string, publisherName: string, offer: string, skus: string, options?: { filter? : string, top? : number, orderby? : string, customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineImageResource[]>>;

    /**
     * Gets a list of all virtual machine image versions for the specified
     * location, publisher, offer, and SKU.
     *
     * @param {string} location The name of a supported Azure region.
     *
     * @param {string} publisherName A valid image publisher.
     *
     * @param {string} offer A valid image publisher offer.
     *
     * @param {string} skus A valid image SKU.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {string} [options.filter] The filter to apply on the operation.
     *
     * @param {number} [options.top]
     *
     * @param {string} [options.orderby]
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {Array} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {Array} [result]   - The deserialized result object if an error did not occur.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    list(location: string, publisherName: string, offer: string, skus: string, options?: { filter? : string, top? : number, orderby? : string, customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineImageResource[]>;
    list(location: string, publisherName: string, offer: string, skus: string, callback: ServiceCallback<models.VirtualMachineImageResource[]>): void;
    list(location: string, publisherName: string, offer: string, skus: string, options: { filter? : string, top? : number, orderby? : string, customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineImageResource[]>): void;


    /**
     * Gets a list of virtual machine image offers for the specified location and
     * publisher.
     *
     * @param {string} location The name of a supported Azure region.
     *
     * @param {string} publisherName A valid image publisher.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<Array>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listOffersWithHttpOperationResponse(location: string, publisherName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineImageResource[]>>;

    /**
     * Gets a list of virtual machine image offers for the specified location and
     * publisher.
     *
     * @param {string} location The name of a supported Azure region.
     *
     * @param {string} publisherName A valid image publisher.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {Array} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {Array} [result]   - The deserialized result object if an error did not occur.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listOffers(location: string, publisherName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineImageResource[]>;
    listOffers(location: string, publisherName: string, callback: ServiceCallback<models.VirtualMachineImageResource[]>): void;
    listOffers(location: string, publisherName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineImageResource[]>): void;


    /**
     * Gets a list of virtual machine image publishers for the specified Azure
     * location.
     *
     * @param {string} location The name of a supported Azure region.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<Array>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listPublishersWithHttpOperationResponse(location: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineImageResource[]>>;

    /**
     * Gets a list of virtual machine image publishers for the specified Azure
     * location.
     *
     * @param {string} location The name of a supported Azure region.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {Array} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {Array} [result]   - The deserialized result object if an error did not occur.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listPublishers(location: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineImageResource[]>;
    listPublishers(location: string, callback: ServiceCallback<models.VirtualMachineImageResource[]>): void;
    listPublishers(location: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineImageResource[]>): void;


    /**
     * Gets a list of virtual machine image SKUs for the specified location,
     * publisher, and offer.
     *
     * @param {string} location The name of a supported Azure region.
     *
     * @param {string} publisherName A valid image publisher.
     *
     * @param {string} offer A valid image publisher offer.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<Array>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listSkusWithHttpOperationResponse(location: string, publisherName: string, offer: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineImageResource[]>>;

    /**
     * Gets a list of virtual machine image SKUs for the specified location,
     * publisher, and offer.
     *
     * @param {string} location The name of a supported Azure region.
     *
     * @param {string} publisherName A valid image publisher.
     *
     * @param {string} offer A valid image publisher offer.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {Array} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {Array} [result]   - The deserialized result object if an error did not occur.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listSkus(location: string, publisherName: string, offer: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineImageResource[]>;
    listSkus(location: string, publisherName: string, offer: string, callback: ServiceCallback<models.VirtualMachineImageResource[]>): void;
    listSkus(location: string, publisherName: string, offer: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineImageResource[]>): void;
}

/**
 * @class
 * UsageOperations
 * __NOTE__: An instance of this class is automatically created for an
 * instance of the ComputeManagementClient.
 */
export interface UsageOperations {


    /**
     * Gets, for the specified location, the current compute resource usage
     * information as well as the limits for compute resources under the
     * subscription.
     *
     * @param {string} location The location for which resource usage is queried.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<ListUsagesResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listWithHttpOperationResponse(location: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.ListUsagesResult>>;

    /**
     * Gets, for the specified location, the current compute resource usage
     * information as well as the limits for compute resources under the
     * subscription.
     *
     * @param {string} location The location for which resource usage is queried.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {ListUsagesResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {ListUsagesResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link ListUsagesResult} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    list(location: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.ListUsagesResult>;
    list(location: string, callback: ServiceCallback<models.ListUsagesResult>): void;
    list(location: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.ListUsagesResult>): void;


    /**
     * Gets, for the specified location, the current compute resource usage
     * information as well as the limits for compute resources under the
     * subscription.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<ListUsagesResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listNextWithHttpOperationResponse(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.ListUsagesResult>>;

    /**
     * Gets, for the specified location, the current compute resource usage
     * information as well as the limits for compute resources under the
     * subscription.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {ListUsagesResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {ListUsagesResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link ListUsagesResult} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listNext(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.ListUsagesResult>;
    listNext(nextPageLink: string, callback: ServiceCallback<models.ListUsagesResult>): void;
    listNext(nextPageLink: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.ListUsagesResult>): void;
}

/**
 * @class
 * VirtualMachineSizes
 * __NOTE__: An instance of this class is automatically created for an
 * instance of the ComputeManagementClient.
 */
export interface VirtualMachineSizes {


    /**
     * Lists all available virtual machine sizes for a subscription in a location.
     *
     * @param {string} location The location upon which virtual-machine-sizes is
     * queried.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineSizeListResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listWithHttpOperationResponse(location: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineSizeListResult>>;

    /**
     * Lists all available virtual machine sizes for a subscription in a location.
     *
     * @param {string} location The location upon which virtual-machine-sizes is
     * queried.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineSizeListResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineSizeListResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineSizeListResult} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    list(location: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineSizeListResult>;
    list(location: string, callback: ServiceCallback<models.VirtualMachineSizeListResult>): void;
    list(location: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineSizeListResult>): void;
}

/**
 * @class
 * Images
 * __NOTE__: An instance of this class is automatically created for an
 * instance of the ComputeManagementClient.
 */
export interface Images {


    /**
     * Create or update an image.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} imageName The name of the image.
     *
     * @param {object} parameters Parameters supplied to the Create Image
     * operation.
     *
     * @param {object} [parameters.sourceVirtualMachine] The source virtual machine
     * from which Image is created.
     *
     * @param {object} [parameters.storageProfile] Specifies the storage settings
     * for the virtual machine disks.
     *
     * @param {object} parameters.storageProfile.osDisk Specifies information about
     * the operating system disk used by the virtual machine. <br><br> For more
     * information about disks, see [About disks and VHDs for Azure virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     *
     * @param {string} parameters.storageProfile.osDisk.osType This property allows
     * you to specify the type of the OS that is included in the disk if creating a
     * VM from a custom image. <br><br> Possible values are: <br><br> **Windows**
     * <br><br> **Linux**. Possible values include: 'Windows', 'Linux'
     *
     * @param {string} parameters.storageProfile.osDisk.osState The OS State.
     * Possible values include: 'Generalized', 'Specialized'
     *
     * @param {object} [parameters.storageProfile.osDisk.snapshot] The snapshot.
     *
     * @param {object} [parameters.storageProfile.osDisk.managedDisk] The
     * managedDisk.
     *
     * @param {string} [parameters.storageProfile.osDisk.managedDisk.id] Resource
     * Id
     *
     * @param {string} [parameters.storageProfile.osDisk.blobUri] The Virtual Hard
     * Disk.
     *
     * @param {string} [parameters.storageProfile.osDisk.caching] Specifies the
     * caching requirements. <br><br> Possible values are: <br><br> **None**
     * <br><br> **ReadOnly** <br><br> **ReadWrite** <br><br> Default: **None for
     * Standard storage. ReadOnly for Premium storage**. Possible values include:
     * 'None', 'ReadOnly', 'ReadWrite'
     *
     * @param {number} [parameters.storageProfile.osDisk.diskSizeGB] Specifies the
     * size of empty data disks in gigabytes. This element can be used to overwrite
     * the name of the disk in a virtual machine image. <br><br> This value cannot
     * be larger than 1023 GB
     *
     * @param {string} [parameters.storageProfile.osDisk.storageAccountType]
     * Specifies the storage account type for the managed disk. Possible values
     * are: Standard_LRS or Premium_LRS. Possible values include: 'Standard_LRS',
     * 'Premium_LRS'
     *
     * @param {array} [parameters.storageProfile.dataDisks] Specifies the
     * parameters that are used to add a data disk to a virtual machine. <br><br>
     * For more information about disks, see [About disks and VHDs for Azure
     * virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     *
     * @param {string} parameters.location Resource location
     *
     * @param {object} [parameters.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<Image>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    createOrUpdateWithHttpOperationResponse(resourceGroupName: string, imageName: string, parameters: models.Image, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.Image>>;

    /**
     * Create or update an image.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} imageName The name of the image.
     *
     * @param {object} parameters Parameters supplied to the Create Image
     * operation.
     *
     * @param {object} [parameters.sourceVirtualMachine] The source virtual machine
     * from which Image is created.
     *
     * @param {object} [parameters.storageProfile] Specifies the storage settings
     * for the virtual machine disks.
     *
     * @param {object} parameters.storageProfile.osDisk Specifies information about
     * the operating system disk used by the virtual machine. <br><br> For more
     * information about disks, see [About disks and VHDs for Azure virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     *
     * @param {string} parameters.storageProfile.osDisk.osType This property allows
     * you to specify the type of the OS that is included in the disk if creating a
     * VM from a custom image. <br><br> Possible values are: <br><br> **Windows**
     * <br><br> **Linux**. Possible values include: 'Windows', 'Linux'
     *
     * @param {string} parameters.storageProfile.osDisk.osState The OS State.
     * Possible values include: 'Generalized', 'Specialized'
     *
     * @param {object} [parameters.storageProfile.osDisk.snapshot] The snapshot.
     *
     * @param {object} [parameters.storageProfile.osDisk.managedDisk] The
     * managedDisk.
     *
     * @param {string} [parameters.storageProfile.osDisk.managedDisk.id] Resource
     * Id
     *
     * @param {string} [parameters.storageProfile.osDisk.blobUri] The Virtual Hard
     * Disk.
     *
     * @param {string} [parameters.storageProfile.osDisk.caching] Specifies the
     * caching requirements. <br><br> Possible values are: <br><br> **None**
     * <br><br> **ReadOnly** <br><br> **ReadWrite** <br><br> Default: **None for
     * Standard storage. ReadOnly for Premium storage**. Possible values include:
     * 'None', 'ReadOnly', 'ReadWrite'
     *
     * @param {number} [parameters.storageProfile.osDisk.diskSizeGB] Specifies the
     * size of empty data disks in gigabytes. This element can be used to overwrite
     * the name of the disk in a virtual machine image. <br><br> This value cannot
     * be larger than 1023 GB
     *
     * @param {string} [parameters.storageProfile.osDisk.storageAccountType]
     * Specifies the storage account type for the managed disk. Possible values
     * are: Standard_LRS or Premium_LRS. Possible values include: 'Standard_LRS',
     * 'Premium_LRS'
     *
     * @param {array} [parameters.storageProfile.dataDisks] Specifies the
     * parameters that are used to add a data disk to a virtual machine. <br><br>
     * For more information about disks, see [About disks and VHDs for Azure
     * virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     *
     * @param {string} parameters.location Resource location
     *
     * @param {object} [parameters.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {Image} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {Image} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link Image} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    createOrUpdate(resourceGroupName: string, imageName: string, parameters: models.Image, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.Image>;
    createOrUpdate(resourceGroupName: string, imageName: string, parameters: models.Image, callback: ServiceCallback<models.Image>): void;
    createOrUpdate(resourceGroupName: string, imageName: string, parameters: models.Image, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.Image>): void;


    /**
     * Deletes an Image.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} imageName The name of the image.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    deleteMethodWithHttpOperationResponse(resourceGroupName: string, imageName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Deletes an Image.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} imageName The name of the image.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    deleteMethod(resourceGroupName: string, imageName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    deleteMethod(resourceGroupName: string, imageName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    deleteMethod(resourceGroupName: string, imageName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Gets an image.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} imageName The name of the image.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {string} [options.expand] The expand expression to apply on the
     * operation.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<Image>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    getWithHttpOperationResponse(resourceGroupName: string, imageName: string, options?: { expand? : string, customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.Image>>;

    /**
     * Gets an image.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} imageName The name of the image.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {string} [options.expand] The expand expression to apply on the
     * operation.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {Image} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {Image} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link Image} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    get(resourceGroupName: string, imageName: string, options?: { expand? : string, customHeaders? : { [headerName: string]: string; } }): Promise<models.Image>;
    get(resourceGroupName: string, imageName: string, callback: ServiceCallback<models.Image>): void;
    get(resourceGroupName: string, imageName: string, options: { expand? : string, customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.Image>): void;


    /**
     * Gets the list of images under a resource group.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<ImageListResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listByResourceGroupWithHttpOperationResponse(resourceGroupName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.ImageListResult>>;

    /**
     * Gets the list of images under a resource group.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {ImageListResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {ImageListResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link ImageListResult} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listByResourceGroup(resourceGroupName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.ImageListResult>;
    listByResourceGroup(resourceGroupName: string, callback: ServiceCallback<models.ImageListResult>): void;
    listByResourceGroup(resourceGroupName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.ImageListResult>): void;


    /**
     * Gets the list of Images in the subscription. Use nextLink property in the
     * response to get the next page of Images. Do this till nextLink is not null
     * to fetch all the Images.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<ImageListResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listWithHttpOperationResponse(options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.ImageListResult>>;

    /**
     * Gets the list of Images in the subscription. Use nextLink property in the
     * response to get the next page of Images. Do this till nextLink is not null
     * to fetch all the Images.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {ImageListResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {ImageListResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link ImageListResult} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    list(options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.ImageListResult>;
    list(callback: ServiceCallback<models.ImageListResult>): void;
    list(options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.ImageListResult>): void;


    /**
     * Create or update an image.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} imageName The name of the image.
     *
     * @param {object} parameters Parameters supplied to the Create Image
     * operation.
     *
     * @param {object} [parameters.sourceVirtualMachine] The source virtual machine
     * from which Image is created.
     *
     * @param {object} [parameters.storageProfile] Specifies the storage settings
     * for the virtual machine disks.
     *
     * @param {object} parameters.storageProfile.osDisk Specifies information about
     * the operating system disk used by the virtual machine. <br><br> For more
     * information about disks, see [About disks and VHDs for Azure virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     *
     * @param {string} parameters.storageProfile.osDisk.osType This property allows
     * you to specify the type of the OS that is included in the disk if creating a
     * VM from a custom image. <br><br> Possible values are: <br><br> **Windows**
     * <br><br> **Linux**. Possible values include: 'Windows', 'Linux'
     *
     * @param {string} parameters.storageProfile.osDisk.osState The OS State.
     * Possible values include: 'Generalized', 'Specialized'
     *
     * @param {object} [parameters.storageProfile.osDisk.snapshot] The snapshot.
     *
     * @param {object} [parameters.storageProfile.osDisk.managedDisk] The
     * managedDisk.
     *
     * @param {string} [parameters.storageProfile.osDisk.managedDisk.id] Resource
     * Id
     *
     * @param {string} [parameters.storageProfile.osDisk.blobUri] The Virtual Hard
     * Disk.
     *
     * @param {string} [parameters.storageProfile.osDisk.caching] Specifies the
     * caching requirements. <br><br> Possible values are: <br><br> **None**
     * <br><br> **ReadOnly** <br><br> **ReadWrite** <br><br> Default: **None for
     * Standard storage. ReadOnly for Premium storage**. Possible values include:
     * 'None', 'ReadOnly', 'ReadWrite'
     *
     * @param {number} [parameters.storageProfile.osDisk.diskSizeGB] Specifies the
     * size of empty data disks in gigabytes. This element can be used to overwrite
     * the name of the disk in a virtual machine image. <br><br> This value cannot
     * be larger than 1023 GB
     *
     * @param {string} [parameters.storageProfile.osDisk.storageAccountType]
     * Specifies the storage account type for the managed disk. Possible values
     * are: Standard_LRS or Premium_LRS. Possible values include: 'Standard_LRS',
     * 'Premium_LRS'
     *
     * @param {array} [parameters.storageProfile.dataDisks] Specifies the
     * parameters that are used to add a data disk to a virtual machine. <br><br>
     * For more information about disks, see [About disks and VHDs for Azure
     * virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     *
     * @param {string} parameters.location Resource location
     *
     * @param {object} [parameters.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<Image>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginCreateOrUpdateWithHttpOperationResponse(resourceGroupName: string, imageName: string, parameters: models.Image, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.Image>>;

    /**
     * Create or update an image.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} imageName The name of the image.
     *
     * @param {object} parameters Parameters supplied to the Create Image
     * operation.
     *
     * @param {object} [parameters.sourceVirtualMachine] The source virtual machine
     * from which Image is created.
     *
     * @param {object} [parameters.storageProfile] Specifies the storage settings
     * for the virtual machine disks.
     *
     * @param {object} parameters.storageProfile.osDisk Specifies information about
     * the operating system disk used by the virtual machine. <br><br> For more
     * information about disks, see [About disks and VHDs for Azure virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     *
     * @param {string} parameters.storageProfile.osDisk.osType This property allows
     * you to specify the type of the OS that is included in the disk if creating a
     * VM from a custom image. <br><br> Possible values are: <br><br> **Windows**
     * <br><br> **Linux**. Possible values include: 'Windows', 'Linux'
     *
     * @param {string} parameters.storageProfile.osDisk.osState The OS State.
     * Possible values include: 'Generalized', 'Specialized'
     *
     * @param {object} [parameters.storageProfile.osDisk.snapshot] The snapshot.
     *
     * @param {object} [parameters.storageProfile.osDisk.managedDisk] The
     * managedDisk.
     *
     * @param {string} [parameters.storageProfile.osDisk.managedDisk.id] Resource
     * Id
     *
     * @param {string} [parameters.storageProfile.osDisk.blobUri] The Virtual Hard
     * Disk.
     *
     * @param {string} [parameters.storageProfile.osDisk.caching] Specifies the
     * caching requirements. <br><br> Possible values are: <br><br> **None**
     * <br><br> **ReadOnly** <br><br> **ReadWrite** <br><br> Default: **None for
     * Standard storage. ReadOnly for Premium storage**. Possible values include:
     * 'None', 'ReadOnly', 'ReadWrite'
     *
     * @param {number} [parameters.storageProfile.osDisk.diskSizeGB] Specifies the
     * size of empty data disks in gigabytes. This element can be used to overwrite
     * the name of the disk in a virtual machine image. <br><br> This value cannot
     * be larger than 1023 GB
     *
     * @param {string} [parameters.storageProfile.osDisk.storageAccountType]
     * Specifies the storage account type for the managed disk. Possible values
     * are: Standard_LRS or Premium_LRS. Possible values include: 'Standard_LRS',
     * 'Premium_LRS'
     *
     * @param {array} [parameters.storageProfile.dataDisks] Specifies the
     * parameters that are used to add a data disk to a virtual machine. <br><br>
     * For more information about disks, see [About disks and VHDs for Azure
     * virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     *
     * @param {string} parameters.location Resource location
     *
     * @param {object} [parameters.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {Image} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {Image} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link Image} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginCreateOrUpdate(resourceGroupName: string, imageName: string, parameters: models.Image, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.Image>;
    beginCreateOrUpdate(resourceGroupName: string, imageName: string, parameters: models.Image, callback: ServiceCallback<models.Image>): void;
    beginCreateOrUpdate(resourceGroupName: string, imageName: string, parameters: models.Image, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.Image>): void;


    /**
     * Deletes an Image.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} imageName The name of the image.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginDeleteMethodWithHttpOperationResponse(resourceGroupName: string, imageName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Deletes an Image.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} imageName The name of the image.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginDeleteMethod(resourceGroupName: string, imageName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginDeleteMethod(resourceGroupName: string, imageName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginDeleteMethod(resourceGroupName: string, imageName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Gets the list of images under a resource group.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<ImageListResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listByResourceGroupNextWithHttpOperationResponse(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.ImageListResult>>;

    /**
     * Gets the list of images under a resource group.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {ImageListResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {ImageListResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link ImageListResult} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listByResourceGroupNext(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.ImageListResult>;
    listByResourceGroupNext(nextPageLink: string, callback: ServiceCallback<models.ImageListResult>): void;
    listByResourceGroupNext(nextPageLink: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.ImageListResult>): void;


    /**
     * Gets the list of Images in the subscription. Use nextLink property in the
     * response to get the next page of Images. Do this till nextLink is not null
     * to fetch all the Images.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<ImageListResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listNextWithHttpOperationResponse(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.ImageListResult>>;

    /**
     * Gets the list of Images in the subscription. Use nextLink property in the
     * response to get the next page of Images. Do this till nextLink is not null
     * to fetch all the Images.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {ImageListResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {ImageListResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link ImageListResult} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listNext(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.ImageListResult>;
    listNext(nextPageLink: string, callback: ServiceCallback<models.ImageListResult>): void;
    listNext(nextPageLink: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.ImageListResult>): void;
}

/**
 * @class
 * ResourceSkus
 * __NOTE__: An instance of this class is automatically created for an
 * instance of the ComputeManagementClient.
 */
export interface ResourceSkus {


    /**
     * Gets the list of Microsoft.Compute SKUs available for your Subscription.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<ResourceSkusResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listWithHttpOperationResponse(options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.ResourceSkusResult>>;

    /**
     * Gets the list of Microsoft.Compute SKUs available for your Subscription.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {ResourceSkusResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {ResourceSkusResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link ResourceSkusResult} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    list(options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.ResourceSkusResult>;
    list(callback: ServiceCallback<models.ResourceSkusResult>): void;
    list(options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.ResourceSkusResult>): void;


    /**
     * Gets the list of Microsoft.Compute SKUs available for your Subscription.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<ResourceSkusResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listNextWithHttpOperationResponse(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.ResourceSkusResult>>;

    /**
     * Gets the list of Microsoft.Compute SKUs available for your Subscription.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {ResourceSkusResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {ResourceSkusResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link ResourceSkusResult} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listNext(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.ResourceSkusResult>;
    listNext(nextPageLink: string, callback: ServiceCallback<models.ResourceSkusResult>): void;
    listNext(nextPageLink: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.ResourceSkusResult>): void;
}

/**
 * @class
 * VirtualMachines
 * __NOTE__: An instance of this class is automatically created for an
 * instance of the ComputeManagementClient.
 */
export interface VirtualMachines {


    /**
     * Captures the VM by copying virtual hard disks of the VM and outputs a
     * template that can be used to create similar VMs.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} parameters Parameters supplied to the Capture Virtual
     * Machine operation.
     *
     * @param {string} parameters.vhdPrefix The captured virtual hard disk's name
     * prefix.
     *
     * @param {string} parameters.destinationContainerName The destination
     * container name.
     *
     * @param {boolean} parameters.overwriteVhds Specifies whether to overwrite the
     * destination virtual hard disk, in case of conflict.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineCaptureResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    captureWithHttpOperationResponse(resourceGroupName: string, vmName: string, parameters: models.VirtualMachineCaptureParameters, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineCaptureResult>>;

    /**
     * Captures the VM by copying virtual hard disks of the VM and outputs a
     * template that can be used to create similar VMs.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} parameters Parameters supplied to the Capture Virtual
     * Machine operation.
     *
     * @param {string} parameters.vhdPrefix The captured virtual hard disk's name
     * prefix.
     *
     * @param {string} parameters.destinationContainerName The destination
     * container name.
     *
     * @param {boolean} parameters.overwriteVhds Specifies whether to overwrite the
     * destination virtual hard disk, in case of conflict.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineCaptureResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineCaptureResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineCaptureResult} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    capture(resourceGroupName: string, vmName: string, parameters: models.VirtualMachineCaptureParameters, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineCaptureResult>;
    capture(resourceGroupName: string, vmName: string, parameters: models.VirtualMachineCaptureParameters, callback: ServiceCallback<models.VirtualMachineCaptureResult>): void;
    capture(resourceGroupName: string, vmName: string, parameters: models.VirtualMachineCaptureParameters, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineCaptureResult>): void;


    /**
     * The operation to create or update a virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} parameters Parameters supplied to the Create Virtual Machine
     * operation.
     *
     * @param {object} [parameters.plan] Specifies information about the
     * marketplace image used to create the virtual machine. This element is only
     * used for marketplace images. Before you can use a marketplace image from an
     * API, you must enable the image for programmatic use.  In the Azure portal,
     * find the marketplace image that you want to use and then click **Want to
     * deploy programmatically, Get Started ->**. Enter any required information
     * and then click **Save**.
     *
     * @param {string} [parameters.plan.name] The plan ID.
     *
     * @param {string} [parameters.plan.publisher] The publisher ID.
     *
     * @param {string} [parameters.plan.product] Specifies the product of the image
     * from the marketplace. This is the same value as Offer under the
     * imageReference element.
     *
     * @param {string} [parameters.plan.promotionCode] The promotion code.
     *
     * @param {object} [parameters.hardwareProfile] Specifies the hardware settings
     * for the virtual machine.
     *
     * @param {string} [parameters.hardwareProfile.vmSize] Specifies the size of
     * the virtual machine. For more information about virtual machine sizes, see
     * [Sizes for virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-sizes?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     * <br><br> The available VM sizes depend on region and availability set. For a
     * list of available sizes use these APIs:  <br><br> [List all available
     * virtual machine sizes in an availability
     * set](virtualmachines-list-sizes-availability-set.md) <br><br> [List all
     * available virtual machine sizes in a
     * region](virtualmachines-list-sizes-region.md) <br><br> [List all available
     * virtual machine sizes for
     * resizing](virtualmachines-list-sizes-for-resizing.md). Possible values
     * include: 'Basic_A0', 'Basic_A1', 'Basic_A2', 'Basic_A3', 'Basic_A4',
     * 'Standard_A0', 'Standard_A1', 'Standard_A2', 'Standard_A3', 'Standard_A4',
     * 'Standard_A5', 'Standard_A6', 'Standard_A7', 'Standard_A8', 'Standard_A9',
     * 'Standard_A10', 'Standard_A11', 'Standard_A1_v2', 'Standard_A2_v2',
     * 'Standard_A4_v2', 'Standard_A8_v2', 'Standard_A2m_v2', 'Standard_A4m_v2',
     * 'Standard_A8m_v2', 'Standard_D1', 'Standard_D2', 'Standard_D3',
     * 'Standard_D4', 'Standard_D11', 'Standard_D12', 'Standard_D13',
     * 'Standard_D14', 'Standard_D1_v2', 'Standard_D2_v2', 'Standard_D3_v2',
     * 'Standard_D4_v2', 'Standard_D5_v2', 'Standard_D11_v2', 'Standard_D12_v2',
     * 'Standard_D13_v2', 'Standard_D14_v2', 'Standard_D15_v2', 'Standard_DS1',
     * 'Standard_DS2', 'Standard_DS3', 'Standard_DS4', 'Standard_DS11',
     * 'Standard_DS12', 'Standard_DS13', 'Standard_DS14', 'Standard_DS1_v2',
     * 'Standard_DS2_v2', 'Standard_DS3_v2', 'Standard_DS4_v2', 'Standard_DS5_v2',
     * 'Standard_DS11_v2', 'Standard_DS12_v2', 'Standard_DS13_v2',
     * 'Standard_DS14_v2', 'Standard_DS15_v2', 'Standard_F1', 'Standard_F2',
     * 'Standard_F4', 'Standard_F8', 'Standard_F16', 'Standard_F1s',
     * 'Standard_F2s', 'Standard_F4s', 'Standard_F8s', 'Standard_F16s',
     * 'Standard_G1', 'Standard_G2', 'Standard_G3', 'Standard_G4', 'Standard_G5',
     * 'Standard_GS1', 'Standard_GS2', 'Standard_GS3', 'Standard_GS4',
     * 'Standard_GS5', 'Standard_H8', 'Standard_H16', 'Standard_H8m',
     * 'Standard_H16m', 'Standard_H16r', 'Standard_H16mr', 'Standard_L4s',
     * 'Standard_L8s', 'Standard_L16s', 'Standard_L32s', 'Standard_NC6',
     * 'Standard_NC12', 'Standard_NC24', 'Standard_NC24r', 'Standard_NV6',
     * 'Standard_NV12', 'Standard_NV24'
     *
     * @param {object} [parameters.storageProfile] Specifies the storage settings
     * for the virtual machine disks.
     *
     * @param {object} [parameters.storageProfile.imageReference] Specifies
     * information about the image to use. You can specify information about
     * platform images, marketplace images, or virtual machine images. This element
     * is required when you want to use a platform image, marketplace image, or
     * virtual machine image, but is not used in other creation operations.
     *
     * @param {string} [parameters.storageProfile.imageReference.publisher] The
     * image publisher.
     *
     * @param {string} [parameters.storageProfile.imageReference.offer] Specifies
     * the offer of the platform image or marketplace image used to create the
     * virtual machine.
     *
     * @param {string} [parameters.storageProfile.imageReference.sku] The image
     * SKU.
     *
     * @param {string} [parameters.storageProfile.imageReference.version] Specifies
     * the version of the platform image or marketplace image used to create the
     * virtual machine. The allowed formats are Major.Minor.Build or 'latest'.
     * Major, Minor, and Build are decimal numbers. Specify 'latest' to use the
     * latest version of an image available at deploy time. Even if you use
     * 'latest', the VM image will not automatically update after deploy time even
     * if a new version becomes available.
     *
     * @param {string} [parameters.storageProfile.imageReference.id] Resource Id
     *
     * @param {object} [parameters.storageProfile.osDisk] Specifies information
     * about the operating system disk used by the virtual machine. <br><br> For
     * more information about disks, see [About disks and VHDs for Azure virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     *
     * @param {string} [parameters.storageProfile.osDisk.osType] This property
     * allows you to specify the type of the OS that is included in the disk if
     * creating a VM from user-image or a specialized VHD. <br><br> Possible values
     * are: <br><br> **Windows** <br><br> **Linux**. Possible values include:
     * 'Windows', 'Linux'
     *
     * @param {object} [parameters.storageProfile.osDisk.encryptionSettings]
     * Specifies the encryption settings for the OS Disk. <br><br> Minimum
     * api-version: 2015-06-15
     *
     * @param {object}
     * [parameters.storageProfile.osDisk.encryptionSettings.diskEncryptionKey]
     * Specifies the location of the disk encryption key, which is a Key Vault
     * Secret.
     *
     * @param {string}
     * parameters.storageProfile.osDisk.encryptionSettings.diskEncryptionKey.secretUrl
     * The URL referencing a secret in a Key Vault.
     *
     * @param {object}
     * parameters.storageProfile.osDisk.encryptionSettings.diskEncryptionKey.sourceVault
     * The relative URL of the Key Vault containing the secret.
     *
     * @param {object}
     * [parameters.storageProfile.osDisk.encryptionSettings.keyEncryptionKey]
     * Specifies the location of the key encryption key in Key Vault.
     *
     * @param {string}
     * parameters.storageProfile.osDisk.encryptionSettings.keyEncryptionKey.keyUrl
     * The URL referencing a key encryption key in Key Vault.
     *
     * @param {object}
     * parameters.storageProfile.osDisk.encryptionSettings.keyEncryptionKey.sourceVault
     * The relative URL of the Key Vault containing the key.
     *
     * @param {boolean}
     * [parameters.storageProfile.osDisk.encryptionSettings.enabled] Specifies
     * whether disk encryption should be enabled on the virtual machine.
     *
     * @param {string} [parameters.storageProfile.osDisk.name] The disk name.
     *
     * @param {object} [parameters.storageProfile.osDisk.vhd] The virtual hard
     * disk.
     *
     * @param {object} [parameters.storageProfile.osDisk.image] The source user
     * image virtual hard disk. The virtual hard disk will be copied before being
     * attached to the virtual machine. If SourceImage is provided, the destination
     * virtual hard drive must not exist.
     *
     * @param {string} [parameters.storageProfile.osDisk.image.uri] Specifies the
     * virtual hard disk's uri.
     *
     * @param {string} [parameters.storageProfile.osDisk.caching] Specifies the
     * caching requirements. <br><br> Possible values are: <br><br> **None**
     * <br><br> **ReadOnly** <br><br> **ReadWrite** <br><br> Default: **None for
     * Standard storage. ReadOnly for Premium storage**. Possible values include:
     * 'None', 'ReadOnly', 'ReadWrite'
     *
     * @param {string} parameters.storageProfile.osDisk.createOption Specifies how
     * the virtual machine should be created.<br><br> Possible values are:<br><br>
     * **Attach** \u2013 This value is used when you are using a specialized disk
     * to create the virtual machine.<br><br> **FromImage** \u2013 This value is
     * used when you are using an image to create the virtual machine. If you are
     * using a platform image, you also use the imageReference element described
     * above. If you are using a marketplace image, you  also use the plan element
     * previously described. Possible values include: 'fromImage', 'empty',
     * 'attach'
     *
     * @param {number} [parameters.storageProfile.osDisk.diskSizeGB] Specifies the
     * size of an empty data disk in gigabytes. This element can be used to
     * overwrite the name of the disk in a virtual machine image. <br><br> This
     * value cannot be larger than 1023 GB
     *
     * @param {object} [parameters.storageProfile.osDisk.managedDisk] The managed
     * disk parameters.
     *
     * @param {string}
     * [parameters.storageProfile.osDisk.managedDisk.storageAccountType] Specifies
     * the storage account type for the managed disk. Possible values are:
     * Standard_LRS or Premium_LRS. Possible values include: 'Standard_LRS',
     * 'Premium_LRS'
     *
     * @param {string} [parameters.storageProfile.osDisk.managedDisk.id] Resource
     * Id
     *
     * @param {array} [parameters.storageProfile.dataDisks] Specifies the
     * parameters that are used to add a data disk to a virtual machine. <br><br>
     * For more information about disks, see [About disks and VHDs for Azure
     * virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     *
     * @param {object} [parameters.osProfile] Specifies the operating system
     * settings for the virtual machine.
     *
     * @param {string} [parameters.osProfile.computerName] Specifies the host OS
     * name of the virtual machine. <br><br> **Max-length (Windows):** 15
     * characters <br><br> **Max-length (Linux):** 64 characters. <br><br> For
     * naming conventions and restrictions see [Azure infrastructure services
     * implementation
     * guidelines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-infrastructure-subscription-accounts-guidelines?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#1-naming-conventions).
     *
     * @param {string} [parameters.osProfile.adminUsername] Specifies the name of
     * the administrator account. <br><br> **Windows-only restriction:** Cannot end
     * in "." <br><br> **Disallowed values:** "administrator", "admin", "user",
     * "user1", "test", "user2", "test1", "user3", "admin1", "1", "123", "a",
     * "actuser", "adm", "admin2", "aspnet", "backup", "console", "david", "guest",
     * "john", "owner", "root", "server", "sql", "support", "support_388945a0",
     * "sys", "test2", "test3", "user4", "user5". <br><br> **Minimum-length
     * (Linux):** 1  character <br><br> **Max-length (Linux):** 64 characters
     * <br><br> **Max-length (Windows):** 20 characters  <br><br><li> For root
     * access to the Linux VM, see [Using root privileges on Linux virtual machines
     * in
     * Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-use-root-privileges?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)<br><li>
     * For a list of built-in system users on Linux that should not be used in this
     * field, see [Selecting User Names for Linux on
     * Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-usernames?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)
     *
     * @param {string} [parameters.osProfile.adminPassword] Specifies the password
     * of the administrator account. <br><br> **Minimum-length (Windows):** 8
     * characters <br><br> **Minimum-length (Linux):** 6 characters <br><br>
     * **Max-length (Windows):** 123 characters <br><br> **Max-length (Linux):** 72
     * characters <br><br> **Complexity requirements:** 3 out of 4 conditions below
     * need to be fulfilled <br> Has lower characters <br>Has upper characters <br>
     * Has a digit <br> Has a special character (Regex match [\W_]) <br><br>
     * **Disallowed values:** "abc@123", "P@$$w0rd", "P@ssw0rd", "P@ssword123",
     * "Pa$$word", "pass@word1", "Password!", "Password1", "Password22",
     * "iloveyou!" <br><br> For resetting the password, see [How to reset the
     * Remote Desktop service or its login password in a Windows
     * VM](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-reset-rdp?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json)
     * <br><br> For resetting root password, see [Manage users, SSH, and check or
     * repair disks on Azure Linux VMs using the VMAccess
     * Extension](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-vmaccess-extension?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#reset-root-password)
     *
     * @param {string} [parameters.osProfile.customData] Specifies a base-64
     * encoded string of custom data. The base-64 encoded string is decoded to a
     * binary array that is saved as a file on the Virtual Machine. The maximum
     * length of the binary array is 65535 bytes. <br><br> For using cloud-init for
     * your VM, see [Using cloud-init to customize a Linux VM during
     * creation](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-cloud-init?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)
     *
     * @param {object} [parameters.osProfile.windowsConfiguration] Specifies
     * Windows operating system settings on the virtual machine.
     *
     * @param {boolean}
     * [parameters.osProfile.windowsConfiguration.provisionVMAgent] Indicates
     * whether virtual machine agent should be provisioned on the virtual machine.
     * <br><br> When this property is not specified in the request body, default
     * behavior is to set it to true.  This will ensure that VM Agent is installed
     * on the VM so that extensions can be added to the VM later.
     *
     * @param {boolean}
     * [parameters.osProfile.windowsConfiguration.enableAutomaticUpdates] Indicates
     * whether virtual machine is enabled for automatic updates.
     *
     * @param {string} [parameters.osProfile.windowsConfiguration.timeZone]
     * Specifies the time zone of the virtual machine. e.g. "Pacific Standard Time"
     *
     * @param {array}
     * [parameters.osProfile.windowsConfiguration.additionalUnattendContent]
     * Specifies additional base-64 encoded XML formatted information that can be
     * included in the Unattend.xml file, which is used by Windows Setup.
     *
     * @param {object} [parameters.osProfile.windowsConfiguration.winRM] Specifies
     * the Windows Remote Management listeners. This enables remote Windows
     * PowerShell.
     *
     * @param {array} [parameters.osProfile.windowsConfiguration.winRM.listeners]
     * The list of Windows Remote Management listeners
     *
     * @param {object} [parameters.osProfile.linuxConfiguration] Specifies the
     * Linux operating system settings on the virtual machine. <br><br>For a list
     * of supported Linux distributions, see [Linux on Azure-Endorsed
     * Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-endorsed-distros?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)
     * <br><br> For running non-endorsed distributions, see [Information for
     * Non-Endorsed
     * Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-create-upload-generic?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json).
     *
     * @param {boolean}
     * [parameters.osProfile.linuxConfiguration.disablePasswordAuthentication]
     * Specifies whether password authentication should be disabled.
     *
     * @param {object} [parameters.osProfile.linuxConfiguration.ssh] Specifies the
     * ssh key configuration for a Linux OS.
     *
     * @param {array} [parameters.osProfile.linuxConfiguration.ssh.publicKeys] The
     * list of SSH public keys used to authenticate with linux based VMs.
     *
     * @param {array} [parameters.osProfile.secrets] Specifies set of certificates
     * that should be installed onto the virtual machine.
     *
     * @param {object} [parameters.networkProfile] Specifies the network interfaces
     * of the virtual machine.
     *
     * @param {array} [parameters.networkProfile.networkInterfaces] Specifies the
     * list of resource Ids for the network interfaces associated with the virtual
     * machine.
     *
     * @param {object} [parameters.diagnosticsProfile] Specifies the boot
     * diagnostic settings state. <br><br>Minimum api-version: 2015-06-15.
     *
     * @param {object} [parameters.diagnosticsProfile.bootDiagnostics] Boot
     * Diagnostics is a debugging feature which allows you to view Console Output
     * and Screenshot to diagnose VM status. <br><br> For Linux Virtual Machines,
     * you can easily view the output of your console log. <br><br> For both
     * Windows and Linux virtual machines, Azure also enables you to see a
     * screenshot of the VM from the hypervisor.
     *
     * @param {boolean} [parameters.diagnosticsProfile.bootDiagnostics.enabled]
     * Whether boot diagnostics should be enabled on the Virtual Machine.
     *
     * @param {string} [parameters.diagnosticsProfile.bootDiagnostics.storageUri]
     * Uri of the storage account to use for placing the console output and
     * screenshot.
     *
     * @param {object} [parameters.availabilitySet] Specifies information about the
     * availability set that the virtual machine should be assigned to. Virtual
     * machines specified in the same availability set are allocated to different
     * nodes to maximize availability. For more information about availability
     * sets, see [Manage the availability of virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-manage-availability?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     * <br><br> For more information on Azure planned maintainance, see [Planned
     * maintenance for virtual machines in
     * Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-planned-maintenance?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json)
     * <br><br> Currently, a VM can only be added to availability set at creation
     * time. An existing VM cannot be added to an availability set.
     *
     * @param {string} [parameters.availabilitySet.id] Resource Id
     *
     * @param {string} [parameters.licenseType] Specifies that the image or disk
     * that is being used was licensed on-premises. This element is only used for
     * images that contain the Windows Server operating system. <br><br> Possible
     * values are: <br><br> Windows_Client <br><br> Windows_Server <br><br> If this
     * element is included in a request for an update, the value must match the
     * initial value. This value cannot be updated. <br><br> For more information,
     * see [Azure Hybrid Use Benefit for Windows
     * Server](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-hybrid-use-benefit-licensing?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json)
     * <br><br> Minimum api-version: 2015-06-15
     *
     * @param {object} [parameters.identity] The identity of the virtual machine,
     * if configured.
     *
     * @param {string} [parameters.identity.type] The type of identity used for the
     * virtual machine. Currently, the only supported type is 'SystemAssigned',
     * which implicitly creates an identity. Possible values include:
     * 'SystemAssigned'
     *
     * @param {array} [parameters.zones] The virtual machine zones.
     *
     * @param {string} parameters.location Resource location
     *
     * @param {object} [parameters.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachine>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    createOrUpdateWithHttpOperationResponse(resourceGroupName: string, vmName: string, parameters: models.VirtualMachine, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachine>>;

    /**
     * The operation to create or update a virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} parameters Parameters supplied to the Create Virtual Machine
     * operation.
     *
     * @param {object} [parameters.plan] Specifies information about the
     * marketplace image used to create the virtual machine. This element is only
     * used for marketplace images. Before you can use a marketplace image from an
     * API, you must enable the image for programmatic use.  In the Azure portal,
     * find the marketplace image that you want to use and then click **Want to
     * deploy programmatically, Get Started ->**. Enter any required information
     * and then click **Save**.
     *
     * @param {string} [parameters.plan.name] The plan ID.
     *
     * @param {string} [parameters.plan.publisher] The publisher ID.
     *
     * @param {string} [parameters.plan.product] Specifies the product of the image
     * from the marketplace. This is the same value as Offer under the
     * imageReference element.
     *
     * @param {string} [parameters.plan.promotionCode] The promotion code.
     *
     * @param {object} [parameters.hardwareProfile] Specifies the hardware settings
     * for the virtual machine.
     *
     * @param {string} [parameters.hardwareProfile.vmSize] Specifies the size of
     * the virtual machine. For more information about virtual machine sizes, see
     * [Sizes for virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-sizes?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     * <br><br> The available VM sizes depend on region and availability set. For a
     * list of available sizes use these APIs:  <br><br> [List all available
     * virtual machine sizes in an availability
     * set](virtualmachines-list-sizes-availability-set.md) <br><br> [List all
     * available virtual machine sizes in a
     * region](virtualmachines-list-sizes-region.md) <br><br> [List all available
     * virtual machine sizes for
     * resizing](virtualmachines-list-sizes-for-resizing.md). Possible values
     * include: 'Basic_A0', 'Basic_A1', 'Basic_A2', 'Basic_A3', 'Basic_A4',
     * 'Standard_A0', 'Standard_A1', 'Standard_A2', 'Standard_A3', 'Standard_A4',
     * 'Standard_A5', 'Standard_A6', 'Standard_A7', 'Standard_A8', 'Standard_A9',
     * 'Standard_A10', 'Standard_A11', 'Standard_A1_v2', 'Standard_A2_v2',
     * 'Standard_A4_v2', 'Standard_A8_v2', 'Standard_A2m_v2', 'Standard_A4m_v2',
     * 'Standard_A8m_v2', 'Standard_D1', 'Standard_D2', 'Standard_D3',
     * 'Standard_D4', 'Standard_D11', 'Standard_D12', 'Standard_D13',
     * 'Standard_D14', 'Standard_D1_v2', 'Standard_D2_v2', 'Standard_D3_v2',
     * 'Standard_D4_v2', 'Standard_D5_v2', 'Standard_D11_v2', 'Standard_D12_v2',
     * 'Standard_D13_v2', 'Standard_D14_v2', 'Standard_D15_v2', 'Standard_DS1',
     * 'Standard_DS2', 'Standard_DS3', 'Standard_DS4', 'Standard_DS11',
     * 'Standard_DS12', 'Standard_DS13', 'Standard_DS14', 'Standard_DS1_v2',
     * 'Standard_DS2_v2', 'Standard_DS3_v2', 'Standard_DS4_v2', 'Standard_DS5_v2',
     * 'Standard_DS11_v2', 'Standard_DS12_v2', 'Standard_DS13_v2',
     * 'Standard_DS14_v2', 'Standard_DS15_v2', 'Standard_F1', 'Standard_F2',
     * 'Standard_F4', 'Standard_F8', 'Standard_F16', 'Standard_F1s',
     * 'Standard_F2s', 'Standard_F4s', 'Standard_F8s', 'Standard_F16s',
     * 'Standard_G1', 'Standard_G2', 'Standard_G3', 'Standard_G4', 'Standard_G5',
     * 'Standard_GS1', 'Standard_GS2', 'Standard_GS3', 'Standard_GS4',
     * 'Standard_GS5', 'Standard_H8', 'Standard_H16', 'Standard_H8m',
     * 'Standard_H16m', 'Standard_H16r', 'Standard_H16mr', 'Standard_L4s',
     * 'Standard_L8s', 'Standard_L16s', 'Standard_L32s', 'Standard_NC6',
     * 'Standard_NC12', 'Standard_NC24', 'Standard_NC24r', 'Standard_NV6',
     * 'Standard_NV12', 'Standard_NV24'
     *
     * @param {object} [parameters.storageProfile] Specifies the storage settings
     * for the virtual machine disks.
     *
     * @param {object} [parameters.storageProfile.imageReference] Specifies
     * information about the image to use. You can specify information about
     * platform images, marketplace images, or virtual machine images. This element
     * is required when you want to use a platform image, marketplace image, or
     * virtual machine image, but is not used in other creation operations.
     *
     * @param {string} [parameters.storageProfile.imageReference.publisher] The
     * image publisher.
     *
     * @param {string} [parameters.storageProfile.imageReference.offer] Specifies
     * the offer of the platform image or marketplace image used to create the
     * virtual machine.
     *
     * @param {string} [parameters.storageProfile.imageReference.sku] The image
     * SKU.
     *
     * @param {string} [parameters.storageProfile.imageReference.version] Specifies
     * the version of the platform image or marketplace image used to create the
     * virtual machine. The allowed formats are Major.Minor.Build or 'latest'.
     * Major, Minor, and Build are decimal numbers. Specify 'latest' to use the
     * latest version of an image available at deploy time. Even if you use
     * 'latest', the VM image will not automatically update after deploy time even
     * if a new version becomes available.
     *
     * @param {string} [parameters.storageProfile.imageReference.id] Resource Id
     *
     * @param {object} [parameters.storageProfile.osDisk] Specifies information
     * about the operating system disk used by the virtual machine. <br><br> For
     * more information about disks, see [About disks and VHDs for Azure virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     *
     * @param {string} [parameters.storageProfile.osDisk.osType] This property
     * allows you to specify the type of the OS that is included in the disk if
     * creating a VM from user-image or a specialized VHD. <br><br> Possible values
     * are: <br><br> **Windows** <br><br> **Linux**. Possible values include:
     * 'Windows', 'Linux'
     *
     * @param {object} [parameters.storageProfile.osDisk.encryptionSettings]
     * Specifies the encryption settings for the OS Disk. <br><br> Minimum
     * api-version: 2015-06-15
     *
     * @param {object}
     * [parameters.storageProfile.osDisk.encryptionSettings.diskEncryptionKey]
     * Specifies the location of the disk encryption key, which is a Key Vault
     * Secret.
     *
     * @param {string}
     * parameters.storageProfile.osDisk.encryptionSettings.diskEncryptionKey.secretUrl
     * The URL referencing a secret in a Key Vault.
     *
     * @param {object}
     * parameters.storageProfile.osDisk.encryptionSettings.diskEncryptionKey.sourceVault
     * The relative URL of the Key Vault containing the secret.
     *
     * @param {object}
     * [parameters.storageProfile.osDisk.encryptionSettings.keyEncryptionKey]
     * Specifies the location of the key encryption key in Key Vault.
     *
     * @param {string}
     * parameters.storageProfile.osDisk.encryptionSettings.keyEncryptionKey.keyUrl
     * The URL referencing a key encryption key in Key Vault.
     *
     * @param {object}
     * parameters.storageProfile.osDisk.encryptionSettings.keyEncryptionKey.sourceVault
     * The relative URL of the Key Vault containing the key.
     *
     * @param {boolean}
     * [parameters.storageProfile.osDisk.encryptionSettings.enabled] Specifies
     * whether disk encryption should be enabled on the virtual machine.
     *
     * @param {string} [parameters.storageProfile.osDisk.name] The disk name.
     *
     * @param {object} [parameters.storageProfile.osDisk.vhd] The virtual hard
     * disk.
     *
     * @param {object} [parameters.storageProfile.osDisk.image] The source user
     * image virtual hard disk. The virtual hard disk will be copied before being
     * attached to the virtual machine. If SourceImage is provided, the destination
     * virtual hard drive must not exist.
     *
     * @param {string} [parameters.storageProfile.osDisk.image.uri] Specifies the
     * virtual hard disk's uri.
     *
     * @param {string} [parameters.storageProfile.osDisk.caching] Specifies the
     * caching requirements. <br><br> Possible values are: <br><br> **None**
     * <br><br> **ReadOnly** <br><br> **ReadWrite** <br><br> Default: **None for
     * Standard storage. ReadOnly for Premium storage**. Possible values include:
     * 'None', 'ReadOnly', 'ReadWrite'
     *
     * @param {string} parameters.storageProfile.osDisk.createOption Specifies how
     * the virtual machine should be created.<br><br> Possible values are:<br><br>
     * **Attach** \u2013 This value is used when you are using a specialized disk
     * to create the virtual machine.<br><br> **FromImage** \u2013 This value is
     * used when you are using an image to create the virtual machine. If you are
     * using a platform image, you also use the imageReference element described
     * above. If you are using a marketplace image, you  also use the plan element
     * previously described. Possible values include: 'fromImage', 'empty',
     * 'attach'
     *
     * @param {number} [parameters.storageProfile.osDisk.diskSizeGB] Specifies the
     * size of an empty data disk in gigabytes. This element can be used to
     * overwrite the name of the disk in a virtual machine image. <br><br> This
     * value cannot be larger than 1023 GB
     *
     * @param {object} [parameters.storageProfile.osDisk.managedDisk] The managed
     * disk parameters.
     *
     * @param {string}
     * [parameters.storageProfile.osDisk.managedDisk.storageAccountType] Specifies
     * the storage account type for the managed disk. Possible values are:
     * Standard_LRS or Premium_LRS. Possible values include: 'Standard_LRS',
     * 'Premium_LRS'
     *
     * @param {string} [parameters.storageProfile.osDisk.managedDisk.id] Resource
     * Id
     *
     * @param {array} [parameters.storageProfile.dataDisks] Specifies the
     * parameters that are used to add a data disk to a virtual machine. <br><br>
     * For more information about disks, see [About disks and VHDs for Azure
     * virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     *
     * @param {object} [parameters.osProfile] Specifies the operating system
     * settings for the virtual machine.
     *
     * @param {string} [parameters.osProfile.computerName] Specifies the host OS
     * name of the virtual machine. <br><br> **Max-length (Windows):** 15
     * characters <br><br> **Max-length (Linux):** 64 characters. <br><br> For
     * naming conventions and restrictions see [Azure infrastructure services
     * implementation
     * guidelines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-infrastructure-subscription-accounts-guidelines?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#1-naming-conventions).
     *
     * @param {string} [parameters.osProfile.adminUsername] Specifies the name of
     * the administrator account. <br><br> **Windows-only restriction:** Cannot end
     * in "." <br><br> **Disallowed values:** "administrator", "admin", "user",
     * "user1", "test", "user2", "test1", "user3", "admin1", "1", "123", "a",
     * "actuser", "adm", "admin2", "aspnet", "backup", "console", "david", "guest",
     * "john", "owner", "root", "server", "sql", "support", "support_388945a0",
     * "sys", "test2", "test3", "user4", "user5". <br><br> **Minimum-length
     * (Linux):** 1  character <br><br> **Max-length (Linux):** 64 characters
     * <br><br> **Max-length (Windows):** 20 characters  <br><br><li> For root
     * access to the Linux VM, see [Using root privileges on Linux virtual machines
     * in
     * Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-use-root-privileges?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)<br><li>
     * For a list of built-in system users on Linux that should not be used in this
     * field, see [Selecting User Names for Linux on
     * Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-usernames?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)
     *
     * @param {string} [parameters.osProfile.adminPassword] Specifies the password
     * of the administrator account. <br><br> **Minimum-length (Windows):** 8
     * characters <br><br> **Minimum-length (Linux):** 6 characters <br><br>
     * **Max-length (Windows):** 123 characters <br><br> **Max-length (Linux):** 72
     * characters <br><br> **Complexity requirements:** 3 out of 4 conditions below
     * need to be fulfilled <br> Has lower characters <br>Has upper characters <br>
     * Has a digit <br> Has a special character (Regex match [\W_]) <br><br>
     * **Disallowed values:** "abc@123", "P@$$w0rd", "P@ssw0rd", "P@ssword123",
     * "Pa$$word", "pass@word1", "Password!", "Password1", "Password22",
     * "iloveyou!" <br><br> For resetting the password, see [How to reset the
     * Remote Desktop service or its login password in a Windows
     * VM](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-reset-rdp?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json)
     * <br><br> For resetting root password, see [Manage users, SSH, and check or
     * repair disks on Azure Linux VMs using the VMAccess
     * Extension](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-vmaccess-extension?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#reset-root-password)
     *
     * @param {string} [parameters.osProfile.customData] Specifies a base-64
     * encoded string of custom data. The base-64 encoded string is decoded to a
     * binary array that is saved as a file on the Virtual Machine. The maximum
     * length of the binary array is 65535 bytes. <br><br> For using cloud-init for
     * your VM, see [Using cloud-init to customize a Linux VM during
     * creation](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-cloud-init?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)
     *
     * @param {object} [parameters.osProfile.windowsConfiguration] Specifies
     * Windows operating system settings on the virtual machine.
     *
     * @param {boolean}
     * [parameters.osProfile.windowsConfiguration.provisionVMAgent] Indicates
     * whether virtual machine agent should be provisioned on the virtual machine.
     * <br><br> When this property is not specified in the request body, default
     * behavior is to set it to true.  This will ensure that VM Agent is installed
     * on the VM so that extensions can be added to the VM later.
     *
     * @param {boolean}
     * [parameters.osProfile.windowsConfiguration.enableAutomaticUpdates] Indicates
     * whether virtual machine is enabled for automatic updates.
     *
     * @param {string} [parameters.osProfile.windowsConfiguration.timeZone]
     * Specifies the time zone of the virtual machine. e.g. "Pacific Standard Time"
     *
     * @param {array}
     * [parameters.osProfile.windowsConfiguration.additionalUnattendContent]
     * Specifies additional base-64 encoded XML formatted information that can be
     * included in the Unattend.xml file, which is used by Windows Setup.
     *
     * @param {object} [parameters.osProfile.windowsConfiguration.winRM] Specifies
     * the Windows Remote Management listeners. This enables remote Windows
     * PowerShell.
     *
     * @param {array} [parameters.osProfile.windowsConfiguration.winRM.listeners]
     * The list of Windows Remote Management listeners
     *
     * @param {object} [parameters.osProfile.linuxConfiguration] Specifies the
     * Linux operating system settings on the virtual machine. <br><br>For a list
     * of supported Linux distributions, see [Linux on Azure-Endorsed
     * Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-endorsed-distros?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)
     * <br><br> For running non-endorsed distributions, see [Information for
     * Non-Endorsed
     * Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-create-upload-generic?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json).
     *
     * @param {boolean}
     * [parameters.osProfile.linuxConfiguration.disablePasswordAuthentication]
     * Specifies whether password authentication should be disabled.
     *
     * @param {object} [parameters.osProfile.linuxConfiguration.ssh] Specifies the
     * ssh key configuration for a Linux OS.
     *
     * @param {array} [parameters.osProfile.linuxConfiguration.ssh.publicKeys] The
     * list of SSH public keys used to authenticate with linux based VMs.
     *
     * @param {array} [parameters.osProfile.secrets] Specifies set of certificates
     * that should be installed onto the virtual machine.
     *
     * @param {object} [parameters.networkProfile] Specifies the network interfaces
     * of the virtual machine.
     *
     * @param {array} [parameters.networkProfile.networkInterfaces] Specifies the
     * list of resource Ids for the network interfaces associated with the virtual
     * machine.
     *
     * @param {object} [parameters.diagnosticsProfile] Specifies the boot
     * diagnostic settings state. <br><br>Minimum api-version: 2015-06-15.
     *
     * @param {object} [parameters.diagnosticsProfile.bootDiagnostics] Boot
     * Diagnostics is a debugging feature which allows you to view Console Output
     * and Screenshot to diagnose VM status. <br><br> For Linux Virtual Machines,
     * you can easily view the output of your console log. <br><br> For both
     * Windows and Linux virtual machines, Azure also enables you to see a
     * screenshot of the VM from the hypervisor.
     *
     * @param {boolean} [parameters.diagnosticsProfile.bootDiagnostics.enabled]
     * Whether boot diagnostics should be enabled on the Virtual Machine.
     *
     * @param {string} [parameters.diagnosticsProfile.bootDiagnostics.storageUri]
     * Uri of the storage account to use for placing the console output and
     * screenshot.
     *
     * @param {object} [parameters.availabilitySet] Specifies information about the
     * availability set that the virtual machine should be assigned to. Virtual
     * machines specified in the same availability set are allocated to different
     * nodes to maximize availability. For more information about availability
     * sets, see [Manage the availability of virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-manage-availability?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     * <br><br> For more information on Azure planned maintainance, see [Planned
     * maintenance for virtual machines in
     * Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-planned-maintenance?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json)
     * <br><br> Currently, a VM can only be added to availability set at creation
     * time. An existing VM cannot be added to an availability set.
     *
     * @param {string} [parameters.availabilitySet.id] Resource Id
     *
     * @param {string} [parameters.licenseType] Specifies that the image or disk
     * that is being used was licensed on-premises. This element is only used for
     * images that contain the Windows Server operating system. <br><br> Possible
     * values are: <br><br> Windows_Client <br><br> Windows_Server <br><br> If this
     * element is included in a request for an update, the value must match the
     * initial value. This value cannot be updated. <br><br> For more information,
     * see [Azure Hybrid Use Benefit for Windows
     * Server](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-hybrid-use-benefit-licensing?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json)
     * <br><br> Minimum api-version: 2015-06-15
     *
     * @param {object} [parameters.identity] The identity of the virtual machine,
     * if configured.
     *
     * @param {string} [parameters.identity.type] The type of identity used for the
     * virtual machine. Currently, the only supported type is 'SystemAssigned',
     * which implicitly creates an identity. Possible values include:
     * 'SystemAssigned'
     *
     * @param {array} [parameters.zones] The virtual machine zones.
     *
     * @param {string} parameters.location Resource location
     *
     * @param {object} [parameters.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachine} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachine} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachine} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    createOrUpdate(resourceGroupName: string, vmName: string, parameters: models.VirtualMachine, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachine>;
    createOrUpdate(resourceGroupName: string, vmName: string, parameters: models.VirtualMachine, callback: ServiceCallback<models.VirtualMachine>): void;
    createOrUpdate(resourceGroupName: string, vmName: string, parameters: models.VirtualMachine, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachine>): void;


    /**
     * The operation to delete a virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    deleteMethodWithHttpOperationResponse(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * The operation to delete a virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    deleteMethod(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    deleteMethod(resourceGroupName: string, vmName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    deleteMethod(resourceGroupName: string, vmName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Retrieves information about the model view or the instance view of a virtual
     * machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {string} [options.expand] The expand expression to apply on the
     * operation. Possible values include: 'instanceView'
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachine>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    getWithHttpOperationResponse(resourceGroupName: string, vmName: string, options?: { expand? : string, customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachine>>;

    /**
     * Retrieves information about the model view or the instance view of a virtual
     * machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {string} [options.expand] The expand expression to apply on the
     * operation. Possible values include: 'instanceView'
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachine} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachine} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachine} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    get(resourceGroupName: string, vmName: string, options?: { expand? : string, customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachine>;
    get(resourceGroupName: string, vmName: string, callback: ServiceCallback<models.VirtualMachine>): void;
    get(resourceGroupName: string, vmName: string, options: { expand? : string, customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachine>): void;


    /**
     * Retrieves information about the run-time state of a virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineInstanceView>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    instanceViewWithHttpOperationResponse(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineInstanceView>>;

    /**
     * Retrieves information about the run-time state of a virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineInstanceView} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineInstanceView} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineInstanceView} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    instanceView(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineInstanceView>;
    instanceView(resourceGroupName: string, vmName: string, callback: ServiceCallback<models.VirtualMachineInstanceView>): void;
    instanceView(resourceGroupName: string, vmName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineInstanceView>): void;


    /**
     * Converts virtual machine disks from blob-based to managed disks. Virtual
     * machine must be stop-deallocated before invoking this operation.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    convertToManagedDisksWithHttpOperationResponse(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Converts virtual machine disks from blob-based to managed disks. Virtual
     * machine must be stop-deallocated before invoking this operation.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    convertToManagedDisks(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    convertToManagedDisks(resourceGroupName: string, vmName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    convertToManagedDisks(resourceGroupName: string, vmName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Shuts down the virtual machine and releases the compute resources. You are
     * not billed for the compute resources that this virtual machine uses.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    deallocateWithHttpOperationResponse(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Shuts down the virtual machine and releases the compute resources. You are
     * not billed for the compute resources that this virtual machine uses.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    deallocate(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    deallocate(resourceGroupName: string, vmName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    deallocate(resourceGroupName: string, vmName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Sets the state of the virtual machine to generalized.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    generalizeWithHttpOperationResponse(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Sets the state of the virtual machine to generalized.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    generalize(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    generalize(resourceGroupName: string, vmName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    generalize(resourceGroupName: string, vmName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Lists all of the virtual machines in the specified resource group. Use the
     * nextLink property in the response to get the next page of virtual machines.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineListResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listWithHttpOperationResponse(resourceGroupName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineListResult>>;

    /**
     * Lists all of the virtual machines in the specified resource group. Use the
     * nextLink property in the response to get the next page of virtual machines.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineListResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineListResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineListResult} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    list(resourceGroupName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineListResult>;
    list(resourceGroupName: string, callback: ServiceCallback<models.VirtualMachineListResult>): void;
    list(resourceGroupName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineListResult>): void;


    /**
     * Lists all of the virtual machines in the specified subscription. Use the
     * nextLink property in the response to get the next page of virtual machines.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineListResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listAllWithHttpOperationResponse(options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineListResult>>;

    /**
     * Lists all of the virtual machines in the specified subscription. Use the
     * nextLink property in the response to get the next page of virtual machines.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineListResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineListResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineListResult} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listAll(options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineListResult>;
    listAll(callback: ServiceCallback<models.VirtualMachineListResult>): void;
    listAll(options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineListResult>): void;


    /**
     * Lists all available virtual machine sizes to which the specified virtual
     * machine can be resized.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineSizeListResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listAvailableSizesWithHttpOperationResponse(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineSizeListResult>>;

    /**
     * Lists all available virtual machine sizes to which the specified virtual
     * machine can be resized.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineSizeListResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineSizeListResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineSizeListResult} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listAvailableSizes(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineSizeListResult>;
    listAvailableSizes(resourceGroupName: string, vmName: string, callback: ServiceCallback<models.VirtualMachineSizeListResult>): void;
    listAvailableSizes(resourceGroupName: string, vmName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineSizeListResult>): void;


    /**
     * The operation to power off (stop) a virtual machine. The virtual machine can
     * be restarted with the same provisioned resources. You are still charged for
     * this virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    powerOffWithHttpOperationResponse(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * The operation to power off (stop) a virtual machine. The virtual machine can
     * be restarted with the same provisioned resources. You are still charged for
     * this virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    powerOff(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    powerOff(resourceGroupName: string, vmName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    powerOff(resourceGroupName: string, vmName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * The operation to restart a virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    restartWithHttpOperationResponse(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * The operation to restart a virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    restart(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    restart(resourceGroupName: string, vmName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    restart(resourceGroupName: string, vmName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * The operation to start a virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    startWithHttpOperationResponse(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * The operation to start a virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    start(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    start(resourceGroupName: string, vmName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    start(resourceGroupName: string, vmName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * The operation to redeploy a virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    redeployWithHttpOperationResponse(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * The operation to redeploy a virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    redeploy(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    redeploy(resourceGroupName: string, vmName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    redeploy(resourceGroupName: string, vmName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * The operation to perform maintenance on a virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    performMaintenanceWithHttpOperationResponse(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * The operation to perform maintenance on a virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    performMaintenance(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    performMaintenance(resourceGroupName: string, vmName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    performMaintenance(resourceGroupName: string, vmName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Run command on the VM.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} parameters Parameters supplied to the Run command operation.
     *
     * @param {string} parameters.commandId The run command id.
     *
     * @param {array} [parameters.script] Optional. The script to be executed.
     * When this value is given, the given script will override the default script
     * of the command.
     *
     * @param {array} [parameters.parameters] The run command parameters.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<RunCommandResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    runCommandWithHttpOperationResponse(resourceGroupName: string, vmName: string, parameters: models.RunCommandInput, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.RunCommandResult>>;

    /**
     * Run command on the VM.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} parameters Parameters supplied to the Run command operation.
     *
     * @param {string} parameters.commandId The run command id.
     *
     * @param {array} [parameters.script] Optional. The script to be executed.
     * When this value is given, the given script will override the default script
     * of the command.
     *
     * @param {array} [parameters.parameters] The run command parameters.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {RunCommandResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {RunCommandResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link RunCommandResult} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    runCommand(resourceGroupName: string, vmName: string, parameters: models.RunCommandInput, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.RunCommandResult>;
    runCommand(resourceGroupName: string, vmName: string, parameters: models.RunCommandInput, callback: ServiceCallback<models.RunCommandResult>): void;
    runCommand(resourceGroupName: string, vmName: string, parameters: models.RunCommandInput, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.RunCommandResult>): void;


    /**
     * Captures the VM by copying virtual hard disks of the VM and outputs a
     * template that can be used to create similar VMs.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} parameters Parameters supplied to the Capture Virtual
     * Machine operation.
     *
     * @param {string} parameters.vhdPrefix The captured virtual hard disk's name
     * prefix.
     *
     * @param {string} parameters.destinationContainerName The destination
     * container name.
     *
     * @param {boolean} parameters.overwriteVhds Specifies whether to overwrite the
     * destination virtual hard disk, in case of conflict.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineCaptureResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginCaptureWithHttpOperationResponse(resourceGroupName: string, vmName: string, parameters: models.VirtualMachineCaptureParameters, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineCaptureResult>>;

    /**
     * Captures the VM by copying virtual hard disks of the VM and outputs a
     * template that can be used to create similar VMs.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} parameters Parameters supplied to the Capture Virtual
     * Machine operation.
     *
     * @param {string} parameters.vhdPrefix The captured virtual hard disk's name
     * prefix.
     *
     * @param {string} parameters.destinationContainerName The destination
     * container name.
     *
     * @param {boolean} parameters.overwriteVhds Specifies whether to overwrite the
     * destination virtual hard disk, in case of conflict.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineCaptureResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineCaptureResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineCaptureResult} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginCapture(resourceGroupName: string, vmName: string, parameters: models.VirtualMachineCaptureParameters, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineCaptureResult>;
    beginCapture(resourceGroupName: string, vmName: string, parameters: models.VirtualMachineCaptureParameters, callback: ServiceCallback<models.VirtualMachineCaptureResult>): void;
    beginCapture(resourceGroupName: string, vmName: string, parameters: models.VirtualMachineCaptureParameters, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineCaptureResult>): void;


    /**
     * The operation to create or update a virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} parameters Parameters supplied to the Create Virtual Machine
     * operation.
     *
     * @param {object} [parameters.plan] Specifies information about the
     * marketplace image used to create the virtual machine. This element is only
     * used for marketplace images. Before you can use a marketplace image from an
     * API, you must enable the image for programmatic use.  In the Azure portal,
     * find the marketplace image that you want to use and then click **Want to
     * deploy programmatically, Get Started ->**. Enter any required information
     * and then click **Save**.
     *
     * @param {string} [parameters.plan.name] The plan ID.
     *
     * @param {string} [parameters.plan.publisher] The publisher ID.
     *
     * @param {string} [parameters.plan.product] Specifies the product of the image
     * from the marketplace. This is the same value as Offer under the
     * imageReference element.
     *
     * @param {string} [parameters.plan.promotionCode] The promotion code.
     *
     * @param {object} [parameters.hardwareProfile] Specifies the hardware settings
     * for the virtual machine.
     *
     * @param {string} [parameters.hardwareProfile.vmSize] Specifies the size of
     * the virtual machine. For more information about virtual machine sizes, see
     * [Sizes for virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-sizes?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     * <br><br> The available VM sizes depend on region and availability set. For a
     * list of available sizes use these APIs:  <br><br> [List all available
     * virtual machine sizes in an availability
     * set](virtualmachines-list-sizes-availability-set.md) <br><br> [List all
     * available virtual machine sizes in a
     * region](virtualmachines-list-sizes-region.md) <br><br> [List all available
     * virtual machine sizes for
     * resizing](virtualmachines-list-sizes-for-resizing.md). Possible values
     * include: 'Basic_A0', 'Basic_A1', 'Basic_A2', 'Basic_A3', 'Basic_A4',
     * 'Standard_A0', 'Standard_A1', 'Standard_A2', 'Standard_A3', 'Standard_A4',
     * 'Standard_A5', 'Standard_A6', 'Standard_A7', 'Standard_A8', 'Standard_A9',
     * 'Standard_A10', 'Standard_A11', 'Standard_A1_v2', 'Standard_A2_v2',
     * 'Standard_A4_v2', 'Standard_A8_v2', 'Standard_A2m_v2', 'Standard_A4m_v2',
     * 'Standard_A8m_v2', 'Standard_D1', 'Standard_D2', 'Standard_D3',
     * 'Standard_D4', 'Standard_D11', 'Standard_D12', 'Standard_D13',
     * 'Standard_D14', 'Standard_D1_v2', 'Standard_D2_v2', 'Standard_D3_v2',
     * 'Standard_D4_v2', 'Standard_D5_v2', 'Standard_D11_v2', 'Standard_D12_v2',
     * 'Standard_D13_v2', 'Standard_D14_v2', 'Standard_D15_v2', 'Standard_DS1',
     * 'Standard_DS2', 'Standard_DS3', 'Standard_DS4', 'Standard_DS11',
     * 'Standard_DS12', 'Standard_DS13', 'Standard_DS14', 'Standard_DS1_v2',
     * 'Standard_DS2_v2', 'Standard_DS3_v2', 'Standard_DS4_v2', 'Standard_DS5_v2',
     * 'Standard_DS11_v2', 'Standard_DS12_v2', 'Standard_DS13_v2',
     * 'Standard_DS14_v2', 'Standard_DS15_v2', 'Standard_F1', 'Standard_F2',
     * 'Standard_F4', 'Standard_F8', 'Standard_F16', 'Standard_F1s',
     * 'Standard_F2s', 'Standard_F4s', 'Standard_F8s', 'Standard_F16s',
     * 'Standard_G1', 'Standard_G2', 'Standard_G3', 'Standard_G4', 'Standard_G5',
     * 'Standard_GS1', 'Standard_GS2', 'Standard_GS3', 'Standard_GS4',
     * 'Standard_GS5', 'Standard_H8', 'Standard_H16', 'Standard_H8m',
     * 'Standard_H16m', 'Standard_H16r', 'Standard_H16mr', 'Standard_L4s',
     * 'Standard_L8s', 'Standard_L16s', 'Standard_L32s', 'Standard_NC6',
     * 'Standard_NC12', 'Standard_NC24', 'Standard_NC24r', 'Standard_NV6',
     * 'Standard_NV12', 'Standard_NV24'
     *
     * @param {object} [parameters.storageProfile] Specifies the storage settings
     * for the virtual machine disks.
     *
     * @param {object} [parameters.storageProfile.imageReference] Specifies
     * information about the image to use. You can specify information about
     * platform images, marketplace images, or virtual machine images. This element
     * is required when you want to use a platform image, marketplace image, or
     * virtual machine image, but is not used in other creation operations.
     *
     * @param {string} [parameters.storageProfile.imageReference.publisher] The
     * image publisher.
     *
     * @param {string} [parameters.storageProfile.imageReference.offer] Specifies
     * the offer of the platform image or marketplace image used to create the
     * virtual machine.
     *
     * @param {string} [parameters.storageProfile.imageReference.sku] The image
     * SKU.
     *
     * @param {string} [parameters.storageProfile.imageReference.version] Specifies
     * the version of the platform image or marketplace image used to create the
     * virtual machine. The allowed formats are Major.Minor.Build or 'latest'.
     * Major, Minor, and Build are decimal numbers. Specify 'latest' to use the
     * latest version of an image available at deploy time. Even if you use
     * 'latest', the VM image will not automatically update after deploy time even
     * if a new version becomes available.
     *
     * @param {string} [parameters.storageProfile.imageReference.id] Resource Id
     *
     * @param {object} [parameters.storageProfile.osDisk] Specifies information
     * about the operating system disk used by the virtual machine. <br><br> For
     * more information about disks, see [About disks and VHDs for Azure virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     *
     * @param {string} [parameters.storageProfile.osDisk.osType] This property
     * allows you to specify the type of the OS that is included in the disk if
     * creating a VM from user-image or a specialized VHD. <br><br> Possible values
     * are: <br><br> **Windows** <br><br> **Linux**. Possible values include:
     * 'Windows', 'Linux'
     *
     * @param {object} [parameters.storageProfile.osDisk.encryptionSettings]
     * Specifies the encryption settings for the OS Disk. <br><br> Minimum
     * api-version: 2015-06-15
     *
     * @param {object}
     * [parameters.storageProfile.osDisk.encryptionSettings.diskEncryptionKey]
     * Specifies the location of the disk encryption key, which is a Key Vault
     * Secret.
     *
     * @param {string}
     * parameters.storageProfile.osDisk.encryptionSettings.diskEncryptionKey.secretUrl
     * The URL referencing a secret in a Key Vault.
     *
     * @param {object}
     * parameters.storageProfile.osDisk.encryptionSettings.diskEncryptionKey.sourceVault
     * The relative URL of the Key Vault containing the secret.
     *
     * @param {object}
     * [parameters.storageProfile.osDisk.encryptionSettings.keyEncryptionKey]
     * Specifies the location of the key encryption key in Key Vault.
     *
     * @param {string}
     * parameters.storageProfile.osDisk.encryptionSettings.keyEncryptionKey.keyUrl
     * The URL referencing a key encryption key in Key Vault.
     *
     * @param {object}
     * parameters.storageProfile.osDisk.encryptionSettings.keyEncryptionKey.sourceVault
     * The relative URL of the Key Vault containing the key.
     *
     * @param {boolean}
     * [parameters.storageProfile.osDisk.encryptionSettings.enabled] Specifies
     * whether disk encryption should be enabled on the virtual machine.
     *
     * @param {string} [parameters.storageProfile.osDisk.name] The disk name.
     *
     * @param {object} [parameters.storageProfile.osDisk.vhd] The virtual hard
     * disk.
     *
     * @param {object} [parameters.storageProfile.osDisk.image] The source user
     * image virtual hard disk. The virtual hard disk will be copied before being
     * attached to the virtual machine. If SourceImage is provided, the destination
     * virtual hard drive must not exist.
     *
     * @param {string} [parameters.storageProfile.osDisk.image.uri] Specifies the
     * virtual hard disk's uri.
     *
     * @param {string} [parameters.storageProfile.osDisk.caching] Specifies the
     * caching requirements. <br><br> Possible values are: <br><br> **None**
     * <br><br> **ReadOnly** <br><br> **ReadWrite** <br><br> Default: **None for
     * Standard storage. ReadOnly for Premium storage**. Possible values include:
     * 'None', 'ReadOnly', 'ReadWrite'
     *
     * @param {string} parameters.storageProfile.osDisk.createOption Specifies how
     * the virtual machine should be created.<br><br> Possible values are:<br><br>
     * **Attach** \u2013 This value is used when you are using a specialized disk
     * to create the virtual machine.<br><br> **FromImage** \u2013 This value is
     * used when you are using an image to create the virtual machine. If you are
     * using a platform image, you also use the imageReference element described
     * above. If you are using a marketplace image, you  also use the plan element
     * previously described. Possible values include: 'fromImage', 'empty',
     * 'attach'
     *
     * @param {number} [parameters.storageProfile.osDisk.diskSizeGB] Specifies the
     * size of an empty data disk in gigabytes. This element can be used to
     * overwrite the name of the disk in a virtual machine image. <br><br> This
     * value cannot be larger than 1023 GB
     *
     * @param {object} [parameters.storageProfile.osDisk.managedDisk] The managed
     * disk parameters.
     *
     * @param {string}
     * [parameters.storageProfile.osDisk.managedDisk.storageAccountType] Specifies
     * the storage account type for the managed disk. Possible values are:
     * Standard_LRS or Premium_LRS. Possible values include: 'Standard_LRS',
     * 'Premium_LRS'
     *
     * @param {string} [parameters.storageProfile.osDisk.managedDisk.id] Resource
     * Id
     *
     * @param {array} [parameters.storageProfile.dataDisks] Specifies the
     * parameters that are used to add a data disk to a virtual machine. <br><br>
     * For more information about disks, see [About disks and VHDs for Azure
     * virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     *
     * @param {object} [parameters.osProfile] Specifies the operating system
     * settings for the virtual machine.
     *
     * @param {string} [parameters.osProfile.computerName] Specifies the host OS
     * name of the virtual machine. <br><br> **Max-length (Windows):** 15
     * characters <br><br> **Max-length (Linux):** 64 characters. <br><br> For
     * naming conventions and restrictions see [Azure infrastructure services
     * implementation
     * guidelines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-infrastructure-subscription-accounts-guidelines?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#1-naming-conventions).
     *
     * @param {string} [parameters.osProfile.adminUsername] Specifies the name of
     * the administrator account. <br><br> **Windows-only restriction:** Cannot end
     * in "." <br><br> **Disallowed values:** "administrator", "admin", "user",
     * "user1", "test", "user2", "test1", "user3", "admin1", "1", "123", "a",
     * "actuser", "adm", "admin2", "aspnet", "backup", "console", "david", "guest",
     * "john", "owner", "root", "server", "sql", "support", "support_388945a0",
     * "sys", "test2", "test3", "user4", "user5". <br><br> **Minimum-length
     * (Linux):** 1  character <br><br> **Max-length (Linux):** 64 characters
     * <br><br> **Max-length (Windows):** 20 characters  <br><br><li> For root
     * access to the Linux VM, see [Using root privileges on Linux virtual machines
     * in
     * Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-use-root-privileges?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)<br><li>
     * For a list of built-in system users on Linux that should not be used in this
     * field, see [Selecting User Names for Linux on
     * Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-usernames?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)
     *
     * @param {string} [parameters.osProfile.adminPassword] Specifies the password
     * of the administrator account. <br><br> **Minimum-length (Windows):** 8
     * characters <br><br> **Minimum-length (Linux):** 6 characters <br><br>
     * **Max-length (Windows):** 123 characters <br><br> **Max-length (Linux):** 72
     * characters <br><br> **Complexity requirements:** 3 out of 4 conditions below
     * need to be fulfilled <br> Has lower characters <br>Has upper characters <br>
     * Has a digit <br> Has a special character (Regex match [\W_]) <br><br>
     * **Disallowed values:** "abc@123", "P@$$w0rd", "P@ssw0rd", "P@ssword123",
     * "Pa$$word", "pass@word1", "Password!", "Password1", "Password22",
     * "iloveyou!" <br><br> For resetting the password, see [How to reset the
     * Remote Desktop service or its login password in a Windows
     * VM](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-reset-rdp?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json)
     * <br><br> For resetting root password, see [Manage users, SSH, and check or
     * repair disks on Azure Linux VMs using the VMAccess
     * Extension](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-vmaccess-extension?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#reset-root-password)
     *
     * @param {string} [parameters.osProfile.customData] Specifies a base-64
     * encoded string of custom data. The base-64 encoded string is decoded to a
     * binary array that is saved as a file on the Virtual Machine. The maximum
     * length of the binary array is 65535 bytes. <br><br> For using cloud-init for
     * your VM, see [Using cloud-init to customize a Linux VM during
     * creation](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-cloud-init?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)
     *
     * @param {object} [parameters.osProfile.windowsConfiguration] Specifies
     * Windows operating system settings on the virtual machine.
     *
     * @param {boolean}
     * [parameters.osProfile.windowsConfiguration.provisionVMAgent] Indicates
     * whether virtual machine agent should be provisioned on the virtual machine.
     * <br><br> When this property is not specified in the request body, default
     * behavior is to set it to true.  This will ensure that VM Agent is installed
     * on the VM so that extensions can be added to the VM later.
     *
     * @param {boolean}
     * [parameters.osProfile.windowsConfiguration.enableAutomaticUpdates] Indicates
     * whether virtual machine is enabled for automatic updates.
     *
     * @param {string} [parameters.osProfile.windowsConfiguration.timeZone]
     * Specifies the time zone of the virtual machine. e.g. "Pacific Standard Time"
     *
     * @param {array}
     * [parameters.osProfile.windowsConfiguration.additionalUnattendContent]
     * Specifies additional base-64 encoded XML formatted information that can be
     * included in the Unattend.xml file, which is used by Windows Setup.
     *
     * @param {object} [parameters.osProfile.windowsConfiguration.winRM] Specifies
     * the Windows Remote Management listeners. This enables remote Windows
     * PowerShell.
     *
     * @param {array} [parameters.osProfile.windowsConfiguration.winRM.listeners]
     * The list of Windows Remote Management listeners
     *
     * @param {object} [parameters.osProfile.linuxConfiguration] Specifies the
     * Linux operating system settings on the virtual machine. <br><br>For a list
     * of supported Linux distributions, see [Linux on Azure-Endorsed
     * Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-endorsed-distros?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)
     * <br><br> For running non-endorsed distributions, see [Information for
     * Non-Endorsed
     * Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-create-upload-generic?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json).
     *
     * @param {boolean}
     * [parameters.osProfile.linuxConfiguration.disablePasswordAuthentication]
     * Specifies whether password authentication should be disabled.
     *
     * @param {object} [parameters.osProfile.linuxConfiguration.ssh] Specifies the
     * ssh key configuration for a Linux OS.
     *
     * @param {array} [parameters.osProfile.linuxConfiguration.ssh.publicKeys] The
     * list of SSH public keys used to authenticate with linux based VMs.
     *
     * @param {array} [parameters.osProfile.secrets] Specifies set of certificates
     * that should be installed onto the virtual machine.
     *
     * @param {object} [parameters.networkProfile] Specifies the network interfaces
     * of the virtual machine.
     *
     * @param {array} [parameters.networkProfile.networkInterfaces] Specifies the
     * list of resource Ids for the network interfaces associated with the virtual
     * machine.
     *
     * @param {object} [parameters.diagnosticsProfile] Specifies the boot
     * diagnostic settings state. <br><br>Minimum api-version: 2015-06-15.
     *
     * @param {object} [parameters.diagnosticsProfile.bootDiagnostics] Boot
     * Diagnostics is a debugging feature which allows you to view Console Output
     * and Screenshot to diagnose VM status. <br><br> For Linux Virtual Machines,
     * you can easily view the output of your console log. <br><br> For both
     * Windows and Linux virtual machines, Azure also enables you to see a
     * screenshot of the VM from the hypervisor.
     *
     * @param {boolean} [parameters.diagnosticsProfile.bootDiagnostics.enabled]
     * Whether boot diagnostics should be enabled on the Virtual Machine.
     *
     * @param {string} [parameters.diagnosticsProfile.bootDiagnostics.storageUri]
     * Uri of the storage account to use for placing the console output and
     * screenshot.
     *
     * @param {object} [parameters.availabilitySet] Specifies information about the
     * availability set that the virtual machine should be assigned to. Virtual
     * machines specified in the same availability set are allocated to different
     * nodes to maximize availability. For more information about availability
     * sets, see [Manage the availability of virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-manage-availability?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     * <br><br> For more information on Azure planned maintainance, see [Planned
     * maintenance for virtual machines in
     * Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-planned-maintenance?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json)
     * <br><br> Currently, a VM can only be added to availability set at creation
     * time. An existing VM cannot be added to an availability set.
     *
     * @param {string} [parameters.availabilitySet.id] Resource Id
     *
     * @param {string} [parameters.licenseType] Specifies that the image or disk
     * that is being used was licensed on-premises. This element is only used for
     * images that contain the Windows Server operating system. <br><br> Possible
     * values are: <br><br> Windows_Client <br><br> Windows_Server <br><br> If this
     * element is included in a request for an update, the value must match the
     * initial value. This value cannot be updated. <br><br> For more information,
     * see [Azure Hybrid Use Benefit for Windows
     * Server](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-hybrid-use-benefit-licensing?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json)
     * <br><br> Minimum api-version: 2015-06-15
     *
     * @param {object} [parameters.identity] The identity of the virtual machine,
     * if configured.
     *
     * @param {string} [parameters.identity.type] The type of identity used for the
     * virtual machine. Currently, the only supported type is 'SystemAssigned',
     * which implicitly creates an identity. Possible values include:
     * 'SystemAssigned'
     *
     * @param {array} [parameters.zones] The virtual machine zones.
     *
     * @param {string} parameters.location Resource location
     *
     * @param {object} [parameters.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachine>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginCreateOrUpdateWithHttpOperationResponse(resourceGroupName: string, vmName: string, parameters: models.VirtualMachine, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachine>>;

    /**
     * The operation to create or update a virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} parameters Parameters supplied to the Create Virtual Machine
     * operation.
     *
     * @param {object} [parameters.plan] Specifies information about the
     * marketplace image used to create the virtual machine. This element is only
     * used for marketplace images. Before you can use a marketplace image from an
     * API, you must enable the image for programmatic use.  In the Azure portal,
     * find the marketplace image that you want to use and then click **Want to
     * deploy programmatically, Get Started ->**. Enter any required information
     * and then click **Save**.
     *
     * @param {string} [parameters.plan.name] The plan ID.
     *
     * @param {string} [parameters.plan.publisher] The publisher ID.
     *
     * @param {string} [parameters.plan.product] Specifies the product of the image
     * from the marketplace. This is the same value as Offer under the
     * imageReference element.
     *
     * @param {string} [parameters.plan.promotionCode] The promotion code.
     *
     * @param {object} [parameters.hardwareProfile] Specifies the hardware settings
     * for the virtual machine.
     *
     * @param {string} [parameters.hardwareProfile.vmSize] Specifies the size of
     * the virtual machine. For more information about virtual machine sizes, see
     * [Sizes for virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-sizes?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     * <br><br> The available VM sizes depend on region and availability set. For a
     * list of available sizes use these APIs:  <br><br> [List all available
     * virtual machine sizes in an availability
     * set](virtualmachines-list-sizes-availability-set.md) <br><br> [List all
     * available virtual machine sizes in a
     * region](virtualmachines-list-sizes-region.md) <br><br> [List all available
     * virtual machine sizes for
     * resizing](virtualmachines-list-sizes-for-resizing.md). Possible values
     * include: 'Basic_A0', 'Basic_A1', 'Basic_A2', 'Basic_A3', 'Basic_A4',
     * 'Standard_A0', 'Standard_A1', 'Standard_A2', 'Standard_A3', 'Standard_A4',
     * 'Standard_A5', 'Standard_A6', 'Standard_A7', 'Standard_A8', 'Standard_A9',
     * 'Standard_A10', 'Standard_A11', 'Standard_A1_v2', 'Standard_A2_v2',
     * 'Standard_A4_v2', 'Standard_A8_v2', 'Standard_A2m_v2', 'Standard_A4m_v2',
     * 'Standard_A8m_v2', 'Standard_D1', 'Standard_D2', 'Standard_D3',
     * 'Standard_D4', 'Standard_D11', 'Standard_D12', 'Standard_D13',
     * 'Standard_D14', 'Standard_D1_v2', 'Standard_D2_v2', 'Standard_D3_v2',
     * 'Standard_D4_v2', 'Standard_D5_v2', 'Standard_D11_v2', 'Standard_D12_v2',
     * 'Standard_D13_v2', 'Standard_D14_v2', 'Standard_D15_v2', 'Standard_DS1',
     * 'Standard_DS2', 'Standard_DS3', 'Standard_DS4', 'Standard_DS11',
     * 'Standard_DS12', 'Standard_DS13', 'Standard_DS14', 'Standard_DS1_v2',
     * 'Standard_DS2_v2', 'Standard_DS3_v2', 'Standard_DS4_v2', 'Standard_DS5_v2',
     * 'Standard_DS11_v2', 'Standard_DS12_v2', 'Standard_DS13_v2',
     * 'Standard_DS14_v2', 'Standard_DS15_v2', 'Standard_F1', 'Standard_F2',
     * 'Standard_F4', 'Standard_F8', 'Standard_F16', 'Standard_F1s',
     * 'Standard_F2s', 'Standard_F4s', 'Standard_F8s', 'Standard_F16s',
     * 'Standard_G1', 'Standard_G2', 'Standard_G3', 'Standard_G4', 'Standard_G5',
     * 'Standard_GS1', 'Standard_GS2', 'Standard_GS3', 'Standard_GS4',
     * 'Standard_GS5', 'Standard_H8', 'Standard_H16', 'Standard_H8m',
     * 'Standard_H16m', 'Standard_H16r', 'Standard_H16mr', 'Standard_L4s',
     * 'Standard_L8s', 'Standard_L16s', 'Standard_L32s', 'Standard_NC6',
     * 'Standard_NC12', 'Standard_NC24', 'Standard_NC24r', 'Standard_NV6',
     * 'Standard_NV12', 'Standard_NV24'
     *
     * @param {object} [parameters.storageProfile] Specifies the storage settings
     * for the virtual machine disks.
     *
     * @param {object} [parameters.storageProfile.imageReference] Specifies
     * information about the image to use. You can specify information about
     * platform images, marketplace images, or virtual machine images. This element
     * is required when you want to use a platform image, marketplace image, or
     * virtual machine image, but is not used in other creation operations.
     *
     * @param {string} [parameters.storageProfile.imageReference.publisher] The
     * image publisher.
     *
     * @param {string} [parameters.storageProfile.imageReference.offer] Specifies
     * the offer of the platform image or marketplace image used to create the
     * virtual machine.
     *
     * @param {string} [parameters.storageProfile.imageReference.sku] The image
     * SKU.
     *
     * @param {string} [parameters.storageProfile.imageReference.version] Specifies
     * the version of the platform image or marketplace image used to create the
     * virtual machine. The allowed formats are Major.Minor.Build or 'latest'.
     * Major, Minor, and Build are decimal numbers. Specify 'latest' to use the
     * latest version of an image available at deploy time. Even if you use
     * 'latest', the VM image will not automatically update after deploy time even
     * if a new version becomes available.
     *
     * @param {string} [parameters.storageProfile.imageReference.id] Resource Id
     *
     * @param {object} [parameters.storageProfile.osDisk] Specifies information
     * about the operating system disk used by the virtual machine. <br><br> For
     * more information about disks, see [About disks and VHDs for Azure virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     *
     * @param {string} [parameters.storageProfile.osDisk.osType] This property
     * allows you to specify the type of the OS that is included in the disk if
     * creating a VM from user-image or a specialized VHD. <br><br> Possible values
     * are: <br><br> **Windows** <br><br> **Linux**. Possible values include:
     * 'Windows', 'Linux'
     *
     * @param {object} [parameters.storageProfile.osDisk.encryptionSettings]
     * Specifies the encryption settings for the OS Disk. <br><br> Minimum
     * api-version: 2015-06-15
     *
     * @param {object}
     * [parameters.storageProfile.osDisk.encryptionSettings.diskEncryptionKey]
     * Specifies the location of the disk encryption key, which is a Key Vault
     * Secret.
     *
     * @param {string}
     * parameters.storageProfile.osDisk.encryptionSettings.diskEncryptionKey.secretUrl
     * The URL referencing a secret in a Key Vault.
     *
     * @param {object}
     * parameters.storageProfile.osDisk.encryptionSettings.diskEncryptionKey.sourceVault
     * The relative URL of the Key Vault containing the secret.
     *
     * @param {object}
     * [parameters.storageProfile.osDisk.encryptionSettings.keyEncryptionKey]
     * Specifies the location of the key encryption key in Key Vault.
     *
     * @param {string}
     * parameters.storageProfile.osDisk.encryptionSettings.keyEncryptionKey.keyUrl
     * The URL referencing a key encryption key in Key Vault.
     *
     * @param {object}
     * parameters.storageProfile.osDisk.encryptionSettings.keyEncryptionKey.sourceVault
     * The relative URL of the Key Vault containing the key.
     *
     * @param {boolean}
     * [parameters.storageProfile.osDisk.encryptionSettings.enabled] Specifies
     * whether disk encryption should be enabled on the virtual machine.
     *
     * @param {string} [parameters.storageProfile.osDisk.name] The disk name.
     *
     * @param {object} [parameters.storageProfile.osDisk.vhd] The virtual hard
     * disk.
     *
     * @param {object} [parameters.storageProfile.osDisk.image] The source user
     * image virtual hard disk. The virtual hard disk will be copied before being
     * attached to the virtual machine. If SourceImage is provided, the destination
     * virtual hard drive must not exist.
     *
     * @param {string} [parameters.storageProfile.osDisk.image.uri] Specifies the
     * virtual hard disk's uri.
     *
     * @param {string} [parameters.storageProfile.osDisk.caching] Specifies the
     * caching requirements. <br><br> Possible values are: <br><br> **None**
     * <br><br> **ReadOnly** <br><br> **ReadWrite** <br><br> Default: **None for
     * Standard storage. ReadOnly for Premium storage**. Possible values include:
     * 'None', 'ReadOnly', 'ReadWrite'
     *
     * @param {string} parameters.storageProfile.osDisk.createOption Specifies how
     * the virtual machine should be created.<br><br> Possible values are:<br><br>
     * **Attach** \u2013 This value is used when you are using a specialized disk
     * to create the virtual machine.<br><br> **FromImage** \u2013 This value is
     * used when you are using an image to create the virtual machine. If you are
     * using a platform image, you also use the imageReference element described
     * above. If you are using a marketplace image, you  also use the plan element
     * previously described. Possible values include: 'fromImage', 'empty',
     * 'attach'
     *
     * @param {number} [parameters.storageProfile.osDisk.diskSizeGB] Specifies the
     * size of an empty data disk in gigabytes. This element can be used to
     * overwrite the name of the disk in a virtual machine image. <br><br> This
     * value cannot be larger than 1023 GB
     *
     * @param {object} [parameters.storageProfile.osDisk.managedDisk] The managed
     * disk parameters.
     *
     * @param {string}
     * [parameters.storageProfile.osDisk.managedDisk.storageAccountType] Specifies
     * the storage account type for the managed disk. Possible values are:
     * Standard_LRS or Premium_LRS. Possible values include: 'Standard_LRS',
     * 'Premium_LRS'
     *
     * @param {string} [parameters.storageProfile.osDisk.managedDisk.id] Resource
     * Id
     *
     * @param {array} [parameters.storageProfile.dataDisks] Specifies the
     * parameters that are used to add a data disk to a virtual machine. <br><br>
     * For more information about disks, see [About disks and VHDs for Azure
     * virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     *
     * @param {object} [parameters.osProfile] Specifies the operating system
     * settings for the virtual machine.
     *
     * @param {string} [parameters.osProfile.computerName] Specifies the host OS
     * name of the virtual machine. <br><br> **Max-length (Windows):** 15
     * characters <br><br> **Max-length (Linux):** 64 characters. <br><br> For
     * naming conventions and restrictions see [Azure infrastructure services
     * implementation
     * guidelines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-infrastructure-subscription-accounts-guidelines?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#1-naming-conventions).
     *
     * @param {string} [parameters.osProfile.adminUsername] Specifies the name of
     * the administrator account. <br><br> **Windows-only restriction:** Cannot end
     * in "." <br><br> **Disallowed values:** "administrator", "admin", "user",
     * "user1", "test", "user2", "test1", "user3", "admin1", "1", "123", "a",
     * "actuser", "adm", "admin2", "aspnet", "backup", "console", "david", "guest",
     * "john", "owner", "root", "server", "sql", "support", "support_388945a0",
     * "sys", "test2", "test3", "user4", "user5". <br><br> **Minimum-length
     * (Linux):** 1  character <br><br> **Max-length (Linux):** 64 characters
     * <br><br> **Max-length (Windows):** 20 characters  <br><br><li> For root
     * access to the Linux VM, see [Using root privileges on Linux virtual machines
     * in
     * Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-use-root-privileges?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)<br><li>
     * For a list of built-in system users on Linux that should not be used in this
     * field, see [Selecting User Names for Linux on
     * Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-usernames?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)
     *
     * @param {string} [parameters.osProfile.adminPassword] Specifies the password
     * of the administrator account. <br><br> **Minimum-length (Windows):** 8
     * characters <br><br> **Minimum-length (Linux):** 6 characters <br><br>
     * **Max-length (Windows):** 123 characters <br><br> **Max-length (Linux):** 72
     * characters <br><br> **Complexity requirements:** 3 out of 4 conditions below
     * need to be fulfilled <br> Has lower characters <br>Has upper characters <br>
     * Has a digit <br> Has a special character (Regex match [\W_]) <br><br>
     * **Disallowed values:** "abc@123", "P@$$w0rd", "P@ssw0rd", "P@ssword123",
     * "Pa$$word", "pass@word1", "Password!", "Password1", "Password22",
     * "iloveyou!" <br><br> For resetting the password, see [How to reset the
     * Remote Desktop service or its login password in a Windows
     * VM](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-reset-rdp?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json)
     * <br><br> For resetting root password, see [Manage users, SSH, and check or
     * repair disks on Azure Linux VMs using the VMAccess
     * Extension](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-vmaccess-extension?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#reset-root-password)
     *
     * @param {string} [parameters.osProfile.customData] Specifies a base-64
     * encoded string of custom data. The base-64 encoded string is decoded to a
     * binary array that is saved as a file on the Virtual Machine. The maximum
     * length of the binary array is 65535 bytes. <br><br> For using cloud-init for
     * your VM, see [Using cloud-init to customize a Linux VM during
     * creation](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-cloud-init?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)
     *
     * @param {object} [parameters.osProfile.windowsConfiguration] Specifies
     * Windows operating system settings on the virtual machine.
     *
     * @param {boolean}
     * [parameters.osProfile.windowsConfiguration.provisionVMAgent] Indicates
     * whether virtual machine agent should be provisioned on the virtual machine.
     * <br><br> When this property is not specified in the request body, default
     * behavior is to set it to true.  This will ensure that VM Agent is installed
     * on the VM so that extensions can be added to the VM later.
     *
     * @param {boolean}
     * [parameters.osProfile.windowsConfiguration.enableAutomaticUpdates] Indicates
     * whether virtual machine is enabled for automatic updates.
     *
     * @param {string} [parameters.osProfile.windowsConfiguration.timeZone]
     * Specifies the time zone of the virtual machine. e.g. "Pacific Standard Time"
     *
     * @param {array}
     * [parameters.osProfile.windowsConfiguration.additionalUnattendContent]
     * Specifies additional base-64 encoded XML formatted information that can be
     * included in the Unattend.xml file, which is used by Windows Setup.
     *
     * @param {object} [parameters.osProfile.windowsConfiguration.winRM] Specifies
     * the Windows Remote Management listeners. This enables remote Windows
     * PowerShell.
     *
     * @param {array} [parameters.osProfile.windowsConfiguration.winRM.listeners]
     * The list of Windows Remote Management listeners
     *
     * @param {object} [parameters.osProfile.linuxConfiguration] Specifies the
     * Linux operating system settings on the virtual machine. <br><br>For a list
     * of supported Linux distributions, see [Linux on Azure-Endorsed
     * Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-endorsed-distros?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)
     * <br><br> For running non-endorsed distributions, see [Information for
     * Non-Endorsed
     * Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-create-upload-generic?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json).
     *
     * @param {boolean}
     * [parameters.osProfile.linuxConfiguration.disablePasswordAuthentication]
     * Specifies whether password authentication should be disabled.
     *
     * @param {object} [parameters.osProfile.linuxConfiguration.ssh] Specifies the
     * ssh key configuration for a Linux OS.
     *
     * @param {array} [parameters.osProfile.linuxConfiguration.ssh.publicKeys] The
     * list of SSH public keys used to authenticate with linux based VMs.
     *
     * @param {array} [parameters.osProfile.secrets] Specifies set of certificates
     * that should be installed onto the virtual machine.
     *
     * @param {object} [parameters.networkProfile] Specifies the network interfaces
     * of the virtual machine.
     *
     * @param {array} [parameters.networkProfile.networkInterfaces] Specifies the
     * list of resource Ids for the network interfaces associated with the virtual
     * machine.
     *
     * @param {object} [parameters.diagnosticsProfile] Specifies the boot
     * diagnostic settings state. <br><br>Minimum api-version: 2015-06-15.
     *
     * @param {object} [parameters.diagnosticsProfile.bootDiagnostics] Boot
     * Diagnostics is a debugging feature which allows you to view Console Output
     * and Screenshot to diagnose VM status. <br><br> For Linux Virtual Machines,
     * you can easily view the output of your console log. <br><br> For both
     * Windows and Linux virtual machines, Azure also enables you to see a
     * screenshot of the VM from the hypervisor.
     *
     * @param {boolean} [parameters.diagnosticsProfile.bootDiagnostics.enabled]
     * Whether boot diagnostics should be enabled on the Virtual Machine.
     *
     * @param {string} [parameters.diagnosticsProfile.bootDiagnostics.storageUri]
     * Uri of the storage account to use for placing the console output and
     * screenshot.
     *
     * @param {object} [parameters.availabilitySet] Specifies information about the
     * availability set that the virtual machine should be assigned to. Virtual
     * machines specified in the same availability set are allocated to different
     * nodes to maximize availability. For more information about availability
     * sets, see [Manage the availability of virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-manage-availability?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     * <br><br> For more information on Azure planned maintainance, see [Planned
     * maintenance for virtual machines in
     * Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-planned-maintenance?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json)
     * <br><br> Currently, a VM can only be added to availability set at creation
     * time. An existing VM cannot be added to an availability set.
     *
     * @param {string} [parameters.availabilitySet.id] Resource Id
     *
     * @param {string} [parameters.licenseType] Specifies that the image or disk
     * that is being used was licensed on-premises. This element is only used for
     * images that contain the Windows Server operating system. <br><br> Possible
     * values are: <br><br> Windows_Client <br><br> Windows_Server <br><br> If this
     * element is included in a request for an update, the value must match the
     * initial value. This value cannot be updated. <br><br> For more information,
     * see [Azure Hybrid Use Benefit for Windows
     * Server](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-hybrid-use-benefit-licensing?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json)
     * <br><br> Minimum api-version: 2015-06-15
     *
     * @param {object} [parameters.identity] The identity of the virtual machine,
     * if configured.
     *
     * @param {string} [parameters.identity.type] The type of identity used for the
     * virtual machine. Currently, the only supported type is 'SystemAssigned',
     * which implicitly creates an identity. Possible values include:
     * 'SystemAssigned'
     *
     * @param {array} [parameters.zones] The virtual machine zones.
     *
     * @param {string} parameters.location Resource location
     *
     * @param {object} [parameters.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachine} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachine} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachine} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginCreateOrUpdate(resourceGroupName: string, vmName: string, parameters: models.VirtualMachine, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachine>;
    beginCreateOrUpdate(resourceGroupName: string, vmName: string, parameters: models.VirtualMachine, callback: ServiceCallback<models.VirtualMachine>): void;
    beginCreateOrUpdate(resourceGroupName: string, vmName: string, parameters: models.VirtualMachine, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachine>): void;


    /**
     * The operation to delete a virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginDeleteMethodWithHttpOperationResponse(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * The operation to delete a virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginDeleteMethod(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginDeleteMethod(resourceGroupName: string, vmName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginDeleteMethod(resourceGroupName: string, vmName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Converts virtual machine disks from blob-based to managed disks. Virtual
     * machine must be stop-deallocated before invoking this operation.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginConvertToManagedDisksWithHttpOperationResponse(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Converts virtual machine disks from blob-based to managed disks. Virtual
     * machine must be stop-deallocated before invoking this operation.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginConvertToManagedDisks(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginConvertToManagedDisks(resourceGroupName: string, vmName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginConvertToManagedDisks(resourceGroupName: string, vmName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Shuts down the virtual machine and releases the compute resources. You are
     * not billed for the compute resources that this virtual machine uses.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginDeallocateWithHttpOperationResponse(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Shuts down the virtual machine and releases the compute resources. You are
     * not billed for the compute resources that this virtual machine uses.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginDeallocate(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginDeallocate(resourceGroupName: string, vmName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginDeallocate(resourceGroupName: string, vmName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * The operation to power off (stop) a virtual machine. The virtual machine can
     * be restarted with the same provisioned resources. You are still charged for
     * this virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginPowerOffWithHttpOperationResponse(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * The operation to power off (stop) a virtual machine. The virtual machine can
     * be restarted with the same provisioned resources. You are still charged for
     * this virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginPowerOff(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginPowerOff(resourceGroupName: string, vmName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginPowerOff(resourceGroupName: string, vmName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * The operation to restart a virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginRestartWithHttpOperationResponse(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * The operation to restart a virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginRestart(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginRestart(resourceGroupName: string, vmName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginRestart(resourceGroupName: string, vmName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * The operation to start a virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginStartWithHttpOperationResponse(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * The operation to start a virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginStart(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginStart(resourceGroupName: string, vmName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginStart(resourceGroupName: string, vmName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * The operation to redeploy a virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginRedeployWithHttpOperationResponse(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * The operation to redeploy a virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginRedeploy(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginRedeploy(resourceGroupName: string, vmName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginRedeploy(resourceGroupName: string, vmName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * The operation to perform maintenance on a virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginPerformMaintenanceWithHttpOperationResponse(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * The operation to perform maintenance on a virtual machine.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginPerformMaintenance(resourceGroupName: string, vmName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginPerformMaintenance(resourceGroupName: string, vmName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginPerformMaintenance(resourceGroupName: string, vmName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Run command on the VM.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} parameters Parameters supplied to the Run command operation.
     *
     * @param {string} parameters.commandId The run command id.
     *
     * @param {array} [parameters.script] Optional. The script to be executed.
     * When this value is given, the given script will override the default script
     * of the command.
     *
     * @param {array} [parameters.parameters] The run command parameters.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<RunCommandResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginRunCommandWithHttpOperationResponse(resourceGroupName: string, vmName: string, parameters: models.RunCommandInput, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.RunCommandResult>>;

    /**
     * Run command on the VM.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmName The name of the virtual machine.
     *
     * @param {object} parameters Parameters supplied to the Run command operation.
     *
     * @param {string} parameters.commandId The run command id.
     *
     * @param {array} [parameters.script] Optional. The script to be executed.
     * When this value is given, the given script will override the default script
     * of the command.
     *
     * @param {array} [parameters.parameters] The run command parameters.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {RunCommandResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {RunCommandResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link RunCommandResult} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginRunCommand(resourceGroupName: string, vmName: string, parameters: models.RunCommandInput, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.RunCommandResult>;
    beginRunCommand(resourceGroupName: string, vmName: string, parameters: models.RunCommandInput, callback: ServiceCallback<models.RunCommandResult>): void;
    beginRunCommand(resourceGroupName: string, vmName: string, parameters: models.RunCommandInput, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.RunCommandResult>): void;


    /**
     * Lists all of the virtual machines in the specified resource group. Use the
     * nextLink property in the response to get the next page of virtual machines.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineListResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listNextWithHttpOperationResponse(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineListResult>>;

    /**
     * Lists all of the virtual machines in the specified resource group. Use the
     * nextLink property in the response to get the next page of virtual machines.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineListResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineListResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineListResult} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listNext(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineListResult>;
    listNext(nextPageLink: string, callback: ServiceCallback<models.VirtualMachineListResult>): void;
    listNext(nextPageLink: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineListResult>): void;


    /**
     * Lists all of the virtual machines in the specified subscription. Use the
     * nextLink property in the response to get the next page of virtual machines.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineListResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listAllNextWithHttpOperationResponse(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineListResult>>;

    /**
     * Lists all of the virtual machines in the specified subscription. Use the
     * nextLink property in the response to get the next page of virtual machines.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineListResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineListResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineListResult} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listAllNext(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineListResult>;
    listAllNext(nextPageLink: string, callback: ServiceCallback<models.VirtualMachineListResult>): void;
    listAllNext(nextPageLink: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineListResult>): void;
}

/**
 * @class
 * VirtualMachineScaleSets
 * __NOTE__: An instance of this class is automatically created for an
 * instance of the ComputeManagementClient.
 */
export interface VirtualMachineScaleSets {


    /**
     * Create or update a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set to create or
     * update.
     *
     * @param {object} parameters The scale set object.
     *
     * @param {object} [parameters.sku] The virtual machine scale set sku.
     *
     * @param {string} [parameters.sku.name] The sku name.
     *
     * @param {string} [parameters.sku.tier] Specifies the tier of virtual machines
     * in a scale set.<br /><br /> Possible Values:<br /><br /> **Standard**<br
     * /><br /> **Basic**
     *
     * @param {number} [parameters.sku.capacity] Specifies the number of virtual
     * machines in the scale set.
     *
     * @param {object} [parameters.plan] Specifies information about the
     * marketplace image used to create the virtual machine. This element is only
     * used for marketplace images. Before you can use a marketplace image from an
     * API, you must enable the image for programmatic use.  In the Azure portal,
     * find the marketplace image that you want to use and then click **Want to
     * deploy programmatically, Get Started ->**. Enter any required information
     * and then click **Save**.
     *
     * @param {string} [parameters.plan.name] The plan ID.
     *
     * @param {string} [parameters.plan.publisher] The publisher ID.
     *
     * @param {string} [parameters.plan.product] Specifies the product of the image
     * from the marketplace. This is the same value as Offer under the
     * imageReference element.
     *
     * @param {string} [parameters.plan.promotionCode] The promotion code.
     *
     * @param {object} [parameters.upgradePolicy] The upgrade policy.
     *
     * @param {string} [parameters.upgradePolicy.mode] Specifies the mode of an
     * upgrade to virtual machines in the scale set.<br /><br /> Possible values
     * are:<br /><br /> **Manual** - You  control the application of updates to
     * virtual machines in the scale set. You do this by using the manualUpgrade
     * action.<br /><br /> **Automatic** - All virtual machines in the scale set
     * are  automatically updated at the same time. Possible values include:
     * 'Automatic', 'Manual', 'Rolling'
     *
     * @param {object} [parameters.upgradePolicy.rollingUpgradePolicy] The
     * configuration parameters used while performing a rolling upgrade.
     *
     * @param {number}
     * [parameters.upgradePolicy.rollingUpgradePolicy.maxBatchInstancePercent] The
     * maximum percent of total virtual machine instances that will be upgraded
     * simultaneously by the rolling upgrade in one batch. As this is a maximum,
     * unhealthy instances in previous or future batches can cause the percentage
     * of instances in a batch to decrease to ensure higher reliability. The
     * default value for this parameter is 20%.
     *
     * @param {number}
     * [parameters.upgradePolicy.rollingUpgradePolicy.maxUnhealthyInstancePercent]
     * The maximum percentage of the total virtual machine instances in the scale
     * set that can be simultaneously unhealthy, either as a result of being
     * upgraded, or by being found in an unhealthy state by the virtual machine
     * health checks before the rolling upgrade aborts. This constraint will be
     * checked prior to starting any batch. The default value for this parameter is
     * 20%.
     *
     * @param {number}
     * [parameters.upgradePolicy.rollingUpgradePolicy.maxUnhealthyUpgradedInstancePercent]
     * The maximum percentage of upgraded virtual machine instances that can be
     * found to be in an unhealthy state. This check will happen after each batch
     * is upgraded. If this percentage is ever exceeded, the rolling update aborts.
     * The default value for this parameter is 20%.
     *
     * @param {string}
     * [parameters.upgradePolicy.rollingUpgradePolicy.pauseTimeBetweenBatches] The
     * wait time between completing the update for all virtual machines in one
     * batch and starting the next batch. The time duration should be specified in
     * ISO 8601 format. The default value is 0 seconds (PT0S).
     *
     * @param {boolean} [parameters.upgradePolicy.automaticOSUpgrade] Whether OS
     * upgrades should automatically be applied to scale set instances in a rolling
     * fashion when a newer version of the image becomes available.
     *
     * @param {object} [parameters.virtualMachineProfile] The virtual machine
     * profile.
     *
     * @param {object} [parameters.virtualMachineProfile.osProfile] Specifies the
     * operating system settings for the virtual machines in the scale set.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.osProfile.computerNamePrefix] Specifies
     * the computer name prefix for all of the virtual machines in the scale set.
     * Computer name prefixes must be 1 to 15 characters long.
     *
     * @param {string} [parameters.virtualMachineProfile.osProfile.adminUsername]
     * Specifies the name of the administrator account. <br><br> **Windows-only
     * restriction:** Cannot end in "." <br><br> **Disallowed values:**
     * "administrator", "admin", "user", "user1", "test", "user2", "test1",
     * "user3", "admin1", "1", "123", "a", "actuser", "adm", "admin2", "aspnet",
     * "backup", "console", "david", "guest", "john", "owner", "root", "server",
     * "sql", "support", "support_388945a0", "sys", "test2", "test3", "user4",
     * "user5". <br><br> **Minimum-length (Linux):** 1  character <br><br>
     * **Max-length (Linux):** 64 characters <br><br> **Max-length (Windows):** 20
     * characters  <br><br><li> For root access to the Linux VM, see [Using root
     * privileges on Linux virtual machines in
     * Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-use-root-privileges?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)<br><li>
     * For a list of built-in system users on Linux that should not be used in this
     * field, see [Selecting User Names for Linux on
     * Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-usernames?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)
     *
     * @param {string} [parameters.virtualMachineProfile.osProfile.adminPassword]
     * Specifies the password of the administrator account. <br><br>
     * **Minimum-length (Windows):** 8 characters <br><br> **Minimum-length
     * (Linux):** 6 characters <br><br> **Max-length (Windows):** 123 characters
     * <br><br> **Max-length (Linux):** 72 characters <br><br> **Complexity
     * requirements:** 3 out of 4 conditions below need to be fulfilled <br> Has
     * lower characters <br>Has upper characters <br> Has a digit <br> Has a
     * special character (Regex match [\W_]) <br><br> **Disallowed values:**
     * "abc@123", "P@$$w0rd", "P@ssw0rd", "P@ssword123", "Pa$$word", "pass@word1",
     * "Password!", "Password1", "Password22", "iloveyou!" <br><br> For resetting
     * the password, see [How to reset the Remote Desktop service or its login
     * password in a Windows
     * VM](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-reset-rdp?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json)
     * <br><br> For resetting root password, see [Manage users, SSH, and check or
     * repair disks on Azure Linux VMs using the VMAccess
     * Extension](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-vmaccess-extension?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#reset-root-password)
     *
     * @param {string} [parameters.virtualMachineProfile.osProfile.customData]
     * Specifies a base-64 encoded string of custom data. The base-64 encoded
     * string is decoded to a binary array that is saved as a file on the Virtual
     * Machine. The maximum length of the binary array is 65535 bytes. <br><br> For
     * using cloud-init for your VM, see [Using cloud-init to customize a Linux VM
     * during
     * creation](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-cloud-init?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration] Specifies
     * Windows operating system settings on the virtual machine.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.provisionVMAgent]
     * Indicates whether virtual machine agent should be provisioned on the virtual
     * machine. <br><br> When this property is not specified in the request body,
     * default behavior is to set it to true.  This will ensure that VM Agent is
     * installed on the VM so that extensions can be added to the VM later.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.enableAutomaticUpdates]
     * Indicates whether virtual machine is enabled for automatic updates.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.timeZone]
     * Specifies the time zone of the virtual machine. e.g. "Pacific Standard Time"
     *
     * @param {array}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.additionalUnattendContent]
     * Specifies additional base-64 encoded XML formatted information that can be
     * included in the Unattend.xml file, which is used by Windows Setup.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.winRM]
     * Specifies the Windows Remote Management listeners. This enables remote
     * Windows PowerShell.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.winRM.listeners]
     * The list of Windows Remote Management listeners
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration] Specifies
     * the Linux operating system settings on the virtual machine. <br><br>For a
     * list of supported Linux distributions, see [Linux on Azure-Endorsed
     * Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-endorsed-distros?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)
     * <br><br> For running non-endorsed distributions, see [Information for
     * Non-Endorsed
     * Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-create-upload-generic?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json).
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration.disablePasswordAuthentication]
     * Specifies whether password authentication should be disabled.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration.ssh]
     * Specifies the ssh key configuration for a Linux OS.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration.ssh.publicKeys]
     * The list of SSH public keys used to authenticate with linux based VMs.
     *
     * @param {array} [parameters.virtualMachineProfile.osProfile.secrets]
     * Specifies set of certificates that should be installed onto the virtual
     * machines in the scale set.
     *
     * @param {object} [parameters.virtualMachineProfile.storageProfile] Specifies
     * the storage settings for the virtual machine disks.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.storageProfile.imageReference] Specifies
     * information about the image to use. You can specify information about
     * platform images, marketplace images, or virtual machine images. This element
     * is required when you want to use a platform image, marketplace image, or
     * virtual machine image, but is not used in other creation operations.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.publisher]
     * The image publisher.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.offer]
     * Specifies the offer of the platform image or marketplace image used to
     * create the virtual machine.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.sku] The
     * image SKU.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.version]
     * Specifies the version of the platform image or marketplace image used to
     * create the virtual machine. The allowed formats are Major.Minor.Build or
     * 'latest'. Major, Minor, and Build are decimal numbers. Specify 'latest' to
     * use the latest version of an image available at deploy time. Even if you use
     * 'latest', the VM image will not automatically update after deploy time even
     * if a new version becomes available.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.id] Resource
     * Id
     *
     * @param {object} [parameters.virtualMachineProfile.storageProfile.osDisk]
     * Specifies information about the operating system disk used by the virtual
     * machines in the scale set. <br><br> For more information about disks, see
     * [About disks and VHDs for Azure virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.name] The disk name.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.caching] Specifies
     * the caching requirements. <br><br> Possible values are: <br><br> **None**
     * <br><br> **ReadOnly** <br><br> **ReadWrite** <br><br> Default: **None for
     * Standard storage. ReadOnly for Premium storage**. Possible values include:
     * 'None', 'ReadOnly', 'ReadWrite'
     *
     * @param {string}
     * parameters.virtualMachineProfile.storageProfile.osDisk.createOption
     * Specifies how the virtual machines in the scale set should be
     * created.<br><br> The only allowed value is: **FromImage** \u2013 This value
     * is used when you are using an image to create the virtual machine. If you
     * are using a platform image, you also use the imageReference element
     * described above. If you are using a marketplace image, you  also use the
     * plan element previously described. Possible values include: 'fromImage',
     * 'empty', 'attach'
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.osType] This
     * property allows you to specify the type of the OS that is included in the
     * disk if creating a VM from user-image or a specialized VHD. <br><br>
     * Possible values are: <br><br> **Windows** <br><br> **Linux**. Possible
     * values include: 'Windows', 'Linux'
     *
     * @param {object}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.image] Specifies
     * information about the unmanaged user image to base the scale set on.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.image.uri] Specifies
     * the virtual hard disk's uri.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.vhdContainers]
     * Specifies the container urls that are used to store operating system disks
     * for the scale set.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.managedDisk] The
     * managed disk parameters.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.managedDisk.storageAccountType]
     * Specifies the storage account type for the managed disk. Possible values
     * are: Standard_LRS or Premium_LRS. Possible values include: 'Standard_LRS',
     * 'Premium_LRS'
     *
     * @param {array} [parameters.virtualMachineProfile.storageProfile.dataDisks]
     * Specifies the parameters that are used to add data disks to the virtual
     * machines in the scale set. <br><br> For more information about disks, see
     * [About disks and VHDs for Azure virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     *
     * @param {object} [parameters.virtualMachineProfile.networkProfile] Specifies
     * properties of the network interfaces of the virtual machines in the scale
     * set.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.networkProfile.healthProbe] A reference to
     * a load balancer probe used to determine the health of an instance in the
     * virtual machine scale set. The reference will be in the form:
     * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.networkProfile.healthProbe.id] The ARM
     * resource id in the form of
     * /subscriptions/{SubcriptionId}/resourceGroups/{ResourceGroupName}/...
     *
     * @param {array}
     * [parameters.virtualMachineProfile.networkProfile.networkInterfaceConfigurations]
     * The list of network configurations.
     *
     * @param {object} [parameters.virtualMachineProfile.diagnosticsProfile]
     * Specifies the boot diagnostic settings state. <br><br>Minimum api-version:
     * 2015-06-15.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.diagnosticsProfile.bootDiagnostics] Boot
     * Diagnostics is a debugging feature which allows you to view Console Output
     * and Screenshot to diagnose VM status. <br><br> For Linux Virtual Machines,
     * you can easily view the output of your console log. <br><br> For both
     * Windows and Linux virtual machines, Azure also enables you to see a
     * screenshot of the VM from the hypervisor.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.diagnosticsProfile.bootDiagnostics.enabled]
     * Whether boot diagnostics should be enabled on the Virtual Machine.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.diagnosticsProfile.bootDiagnostics.storageUri]
     * Uri of the storage account to use for placing the console output and
     * screenshot.
     *
     * @param {object} [parameters.virtualMachineProfile.extensionProfile]
     * Specifies a collection of settings for extensions installed on virtual
     * machines in the scale set.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.extensionProfile.extensions] The virtual
     * machine scale set child extension resources.
     *
     * @param {string} [parameters.virtualMachineProfile.licenseType] Specifies
     * that the image or disk that is being used was licensed on-premises. This
     * element is only used for images that contain the Windows Server operating
     * system. <br><br> Possible values are: <br><br> Windows_Client <br><br>
     * Windows_Server <br><br> If this element is included in a request for an
     * update, the value must match the initial value. This value cannot be
     * updated. <br><br> For more information, see [Azure Hybrid Use Benefit for
     * Windows
     * Server](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-hybrid-use-benefit-licensing?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json)
     * <br><br> Minimum api-version: 2015-06-15
     *
     * @param {boolean} [parameters.overprovision] Specifies whether the Virtual
     * Machine Scale Set should be overprovisioned.
     *
     * @param {boolean} [parameters.singlePlacementGroup] When true this limits the
     * scale set to a single placement group, of max size 100 virtual machines.
     *
     * @param {object} [parameters.identity] The identity of the virtual machine
     * scale set, if configured.
     *
     * @param {string} [parameters.identity.type] The type of identity used for the
     * virtual machine scale set. Currently, the only supported type is
     * 'SystemAssigned', which implicitly creates an identity. Possible values
     * include: 'SystemAssigned'
     *
     * @param {array} [parameters.zones] The virtual machine scale set zones.
     *
     * @param {string} parameters.location Resource location
     *
     * @param {object} [parameters.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineScaleSet>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    createOrUpdateWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, parameters: models.VirtualMachineScaleSet, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineScaleSet>>;

    /**
     * Create or update a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set to create or
     * update.
     *
     * @param {object} parameters The scale set object.
     *
     * @param {object} [parameters.sku] The virtual machine scale set sku.
     *
     * @param {string} [parameters.sku.name] The sku name.
     *
     * @param {string} [parameters.sku.tier] Specifies the tier of virtual machines
     * in a scale set.<br /><br /> Possible Values:<br /><br /> **Standard**<br
     * /><br /> **Basic**
     *
     * @param {number} [parameters.sku.capacity] Specifies the number of virtual
     * machines in the scale set.
     *
     * @param {object} [parameters.plan] Specifies information about the
     * marketplace image used to create the virtual machine. This element is only
     * used for marketplace images. Before you can use a marketplace image from an
     * API, you must enable the image for programmatic use.  In the Azure portal,
     * find the marketplace image that you want to use and then click **Want to
     * deploy programmatically, Get Started ->**. Enter any required information
     * and then click **Save**.
     *
     * @param {string} [parameters.plan.name] The plan ID.
     *
     * @param {string} [parameters.plan.publisher] The publisher ID.
     *
     * @param {string} [parameters.plan.product] Specifies the product of the image
     * from the marketplace. This is the same value as Offer under the
     * imageReference element.
     *
     * @param {string} [parameters.plan.promotionCode] The promotion code.
     *
     * @param {object} [parameters.upgradePolicy] The upgrade policy.
     *
     * @param {string} [parameters.upgradePolicy.mode] Specifies the mode of an
     * upgrade to virtual machines in the scale set.<br /><br /> Possible values
     * are:<br /><br /> **Manual** - You  control the application of updates to
     * virtual machines in the scale set. You do this by using the manualUpgrade
     * action.<br /><br /> **Automatic** - All virtual machines in the scale set
     * are  automatically updated at the same time. Possible values include:
     * 'Automatic', 'Manual', 'Rolling'
     *
     * @param {object} [parameters.upgradePolicy.rollingUpgradePolicy] The
     * configuration parameters used while performing a rolling upgrade.
     *
     * @param {number}
     * [parameters.upgradePolicy.rollingUpgradePolicy.maxBatchInstancePercent] The
     * maximum percent of total virtual machine instances that will be upgraded
     * simultaneously by the rolling upgrade in one batch. As this is a maximum,
     * unhealthy instances in previous or future batches can cause the percentage
     * of instances in a batch to decrease to ensure higher reliability. The
     * default value for this parameter is 20%.
     *
     * @param {number}
     * [parameters.upgradePolicy.rollingUpgradePolicy.maxUnhealthyInstancePercent]
     * The maximum percentage of the total virtual machine instances in the scale
     * set that can be simultaneously unhealthy, either as a result of being
     * upgraded, or by being found in an unhealthy state by the virtual machine
     * health checks before the rolling upgrade aborts. This constraint will be
     * checked prior to starting any batch. The default value for this parameter is
     * 20%.
     *
     * @param {number}
     * [parameters.upgradePolicy.rollingUpgradePolicy.maxUnhealthyUpgradedInstancePercent]
     * The maximum percentage of upgraded virtual machine instances that can be
     * found to be in an unhealthy state. This check will happen after each batch
     * is upgraded. If this percentage is ever exceeded, the rolling update aborts.
     * The default value for this parameter is 20%.
     *
     * @param {string}
     * [parameters.upgradePolicy.rollingUpgradePolicy.pauseTimeBetweenBatches] The
     * wait time between completing the update for all virtual machines in one
     * batch and starting the next batch. The time duration should be specified in
     * ISO 8601 format. The default value is 0 seconds (PT0S).
     *
     * @param {boolean} [parameters.upgradePolicy.automaticOSUpgrade] Whether OS
     * upgrades should automatically be applied to scale set instances in a rolling
     * fashion when a newer version of the image becomes available.
     *
     * @param {object} [parameters.virtualMachineProfile] The virtual machine
     * profile.
     *
     * @param {object} [parameters.virtualMachineProfile.osProfile] Specifies the
     * operating system settings for the virtual machines in the scale set.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.osProfile.computerNamePrefix] Specifies
     * the computer name prefix for all of the virtual machines in the scale set.
     * Computer name prefixes must be 1 to 15 characters long.
     *
     * @param {string} [parameters.virtualMachineProfile.osProfile.adminUsername]
     * Specifies the name of the administrator account. <br><br> **Windows-only
     * restriction:** Cannot end in "." <br><br> **Disallowed values:**
     * "administrator", "admin", "user", "user1", "test", "user2", "test1",
     * "user3", "admin1", "1", "123", "a", "actuser", "adm", "admin2", "aspnet",
     * "backup", "console", "david", "guest", "john", "owner", "root", "server",
     * "sql", "support", "support_388945a0", "sys", "test2", "test3", "user4",
     * "user5". <br><br> **Minimum-length (Linux):** 1  character <br><br>
     * **Max-length (Linux):** 64 characters <br><br> **Max-length (Windows):** 20
     * characters  <br><br><li> For root access to the Linux VM, see [Using root
     * privileges on Linux virtual machines in
     * Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-use-root-privileges?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)<br><li>
     * For a list of built-in system users on Linux that should not be used in this
     * field, see [Selecting User Names for Linux on
     * Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-usernames?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)
     *
     * @param {string} [parameters.virtualMachineProfile.osProfile.adminPassword]
     * Specifies the password of the administrator account. <br><br>
     * **Minimum-length (Windows):** 8 characters <br><br> **Minimum-length
     * (Linux):** 6 characters <br><br> **Max-length (Windows):** 123 characters
     * <br><br> **Max-length (Linux):** 72 characters <br><br> **Complexity
     * requirements:** 3 out of 4 conditions below need to be fulfilled <br> Has
     * lower characters <br>Has upper characters <br> Has a digit <br> Has a
     * special character (Regex match [\W_]) <br><br> **Disallowed values:**
     * "abc@123", "P@$$w0rd", "P@ssw0rd", "P@ssword123", "Pa$$word", "pass@word1",
     * "Password!", "Password1", "Password22", "iloveyou!" <br><br> For resetting
     * the password, see [How to reset the Remote Desktop service or its login
     * password in a Windows
     * VM](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-reset-rdp?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json)
     * <br><br> For resetting root password, see [Manage users, SSH, and check or
     * repair disks on Azure Linux VMs using the VMAccess
     * Extension](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-vmaccess-extension?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#reset-root-password)
     *
     * @param {string} [parameters.virtualMachineProfile.osProfile.customData]
     * Specifies a base-64 encoded string of custom data. The base-64 encoded
     * string is decoded to a binary array that is saved as a file on the Virtual
     * Machine. The maximum length of the binary array is 65535 bytes. <br><br> For
     * using cloud-init for your VM, see [Using cloud-init to customize a Linux VM
     * during
     * creation](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-cloud-init?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration] Specifies
     * Windows operating system settings on the virtual machine.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.provisionVMAgent]
     * Indicates whether virtual machine agent should be provisioned on the virtual
     * machine. <br><br> When this property is not specified in the request body,
     * default behavior is to set it to true.  This will ensure that VM Agent is
     * installed on the VM so that extensions can be added to the VM later.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.enableAutomaticUpdates]
     * Indicates whether virtual machine is enabled for automatic updates.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.timeZone]
     * Specifies the time zone of the virtual machine. e.g. "Pacific Standard Time"
     *
     * @param {array}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.additionalUnattendContent]
     * Specifies additional base-64 encoded XML formatted information that can be
     * included in the Unattend.xml file, which is used by Windows Setup.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.winRM]
     * Specifies the Windows Remote Management listeners. This enables remote
     * Windows PowerShell.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.winRM.listeners]
     * The list of Windows Remote Management listeners
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration] Specifies
     * the Linux operating system settings on the virtual machine. <br><br>For a
     * list of supported Linux distributions, see [Linux on Azure-Endorsed
     * Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-endorsed-distros?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)
     * <br><br> For running non-endorsed distributions, see [Information for
     * Non-Endorsed
     * Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-create-upload-generic?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json).
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration.disablePasswordAuthentication]
     * Specifies whether password authentication should be disabled.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration.ssh]
     * Specifies the ssh key configuration for a Linux OS.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration.ssh.publicKeys]
     * The list of SSH public keys used to authenticate with linux based VMs.
     *
     * @param {array} [parameters.virtualMachineProfile.osProfile.secrets]
     * Specifies set of certificates that should be installed onto the virtual
     * machines in the scale set.
     *
     * @param {object} [parameters.virtualMachineProfile.storageProfile] Specifies
     * the storage settings for the virtual machine disks.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.storageProfile.imageReference] Specifies
     * information about the image to use. You can specify information about
     * platform images, marketplace images, or virtual machine images. This element
     * is required when you want to use a platform image, marketplace image, or
     * virtual machine image, but is not used in other creation operations.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.publisher]
     * The image publisher.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.offer]
     * Specifies the offer of the platform image or marketplace image used to
     * create the virtual machine.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.sku] The
     * image SKU.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.version]
     * Specifies the version of the platform image or marketplace image used to
     * create the virtual machine. The allowed formats are Major.Minor.Build or
     * 'latest'. Major, Minor, and Build are decimal numbers. Specify 'latest' to
     * use the latest version of an image available at deploy time. Even if you use
     * 'latest', the VM image will not automatically update after deploy time even
     * if a new version becomes available.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.id] Resource
     * Id
     *
     * @param {object} [parameters.virtualMachineProfile.storageProfile.osDisk]
     * Specifies information about the operating system disk used by the virtual
     * machines in the scale set. <br><br> For more information about disks, see
     * [About disks and VHDs for Azure virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.name] The disk name.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.caching] Specifies
     * the caching requirements. <br><br> Possible values are: <br><br> **None**
     * <br><br> **ReadOnly** <br><br> **ReadWrite** <br><br> Default: **None for
     * Standard storage. ReadOnly for Premium storage**. Possible values include:
     * 'None', 'ReadOnly', 'ReadWrite'
     *
     * @param {string}
     * parameters.virtualMachineProfile.storageProfile.osDisk.createOption
     * Specifies how the virtual machines in the scale set should be
     * created.<br><br> The only allowed value is: **FromImage** \u2013 This value
     * is used when you are using an image to create the virtual machine. If you
     * are using a platform image, you also use the imageReference element
     * described above. If you are using a marketplace image, you  also use the
     * plan element previously described. Possible values include: 'fromImage',
     * 'empty', 'attach'
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.osType] This
     * property allows you to specify the type of the OS that is included in the
     * disk if creating a VM from user-image or a specialized VHD. <br><br>
     * Possible values are: <br><br> **Windows** <br><br> **Linux**. Possible
     * values include: 'Windows', 'Linux'
     *
     * @param {object}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.image] Specifies
     * information about the unmanaged user image to base the scale set on.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.image.uri] Specifies
     * the virtual hard disk's uri.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.vhdContainers]
     * Specifies the container urls that are used to store operating system disks
     * for the scale set.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.managedDisk] The
     * managed disk parameters.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.managedDisk.storageAccountType]
     * Specifies the storage account type for the managed disk. Possible values
     * are: Standard_LRS or Premium_LRS. Possible values include: 'Standard_LRS',
     * 'Premium_LRS'
     *
     * @param {array} [parameters.virtualMachineProfile.storageProfile.dataDisks]
     * Specifies the parameters that are used to add data disks to the virtual
     * machines in the scale set. <br><br> For more information about disks, see
     * [About disks and VHDs for Azure virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     *
     * @param {object} [parameters.virtualMachineProfile.networkProfile] Specifies
     * properties of the network interfaces of the virtual machines in the scale
     * set.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.networkProfile.healthProbe] A reference to
     * a load balancer probe used to determine the health of an instance in the
     * virtual machine scale set. The reference will be in the form:
     * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.networkProfile.healthProbe.id] The ARM
     * resource id in the form of
     * /subscriptions/{SubcriptionId}/resourceGroups/{ResourceGroupName}/...
     *
     * @param {array}
     * [parameters.virtualMachineProfile.networkProfile.networkInterfaceConfigurations]
     * The list of network configurations.
     *
     * @param {object} [parameters.virtualMachineProfile.diagnosticsProfile]
     * Specifies the boot diagnostic settings state. <br><br>Minimum api-version:
     * 2015-06-15.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.diagnosticsProfile.bootDiagnostics] Boot
     * Diagnostics is a debugging feature which allows you to view Console Output
     * and Screenshot to diagnose VM status. <br><br> For Linux Virtual Machines,
     * you can easily view the output of your console log. <br><br> For both
     * Windows and Linux virtual machines, Azure also enables you to see a
     * screenshot of the VM from the hypervisor.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.diagnosticsProfile.bootDiagnostics.enabled]
     * Whether boot diagnostics should be enabled on the Virtual Machine.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.diagnosticsProfile.bootDiagnostics.storageUri]
     * Uri of the storage account to use for placing the console output and
     * screenshot.
     *
     * @param {object} [parameters.virtualMachineProfile.extensionProfile]
     * Specifies a collection of settings for extensions installed on virtual
     * machines in the scale set.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.extensionProfile.extensions] The virtual
     * machine scale set child extension resources.
     *
     * @param {string} [parameters.virtualMachineProfile.licenseType] Specifies
     * that the image or disk that is being used was licensed on-premises. This
     * element is only used for images that contain the Windows Server operating
     * system. <br><br> Possible values are: <br><br> Windows_Client <br><br>
     * Windows_Server <br><br> If this element is included in a request for an
     * update, the value must match the initial value. This value cannot be
     * updated. <br><br> For more information, see [Azure Hybrid Use Benefit for
     * Windows
     * Server](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-hybrid-use-benefit-licensing?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json)
     * <br><br> Minimum api-version: 2015-06-15
     *
     * @param {boolean} [parameters.overprovision] Specifies whether the Virtual
     * Machine Scale Set should be overprovisioned.
     *
     * @param {boolean} [parameters.singlePlacementGroup] When true this limits the
     * scale set to a single placement group, of max size 100 virtual machines.
     *
     * @param {object} [parameters.identity] The identity of the virtual machine
     * scale set, if configured.
     *
     * @param {string} [parameters.identity.type] The type of identity used for the
     * virtual machine scale set. Currently, the only supported type is
     * 'SystemAssigned', which implicitly creates an identity. Possible values
     * include: 'SystemAssigned'
     *
     * @param {array} [parameters.zones] The virtual machine scale set zones.
     *
     * @param {string} parameters.location Resource location
     *
     * @param {object} [parameters.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineScaleSet} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineScaleSet} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineScaleSet} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    createOrUpdate(resourceGroupName: string, vmScaleSetName: string, parameters: models.VirtualMachineScaleSet, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineScaleSet>;
    createOrUpdate(resourceGroupName: string, vmScaleSetName: string, parameters: models.VirtualMachineScaleSet, callback: ServiceCallback<models.VirtualMachineScaleSet>): void;
    createOrUpdate(resourceGroupName: string, vmScaleSetName: string, parameters: models.VirtualMachineScaleSet, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineScaleSet>): void;


    /**
     * Update a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set to create or
     * update.
     *
     * @param {object} parameters The scale set object.
     *
     * @param {object} [parameters.sku] The virtual machine scale set sku.
     *
     * @param {string} [parameters.sku.name] The sku name.
     *
     * @param {string} [parameters.sku.tier] Specifies the tier of virtual machines
     * in a scale set.<br /><br /> Possible Values:<br /><br /> **Standard**<br
     * /><br /> **Basic**
     *
     * @param {number} [parameters.sku.capacity] Specifies the number of virtual
     * machines in the scale set.
     *
     * @param {object} [parameters.plan] The purchase plan when deploying a virtual
     * machine scale set from VM Marketplace images.
     *
     * @param {string} [parameters.plan.name] The plan ID.
     *
     * @param {string} [parameters.plan.publisher] The publisher ID.
     *
     * @param {string} [parameters.plan.product] Specifies the product of the image
     * from the marketplace. This is the same value as Offer under the
     * imageReference element.
     *
     * @param {string} [parameters.plan.promotionCode] The promotion code.
     *
     * @param {object} [parameters.upgradePolicy] The upgrade policy.
     *
     * @param {string} [parameters.upgradePolicy.mode] Specifies the mode of an
     * upgrade to virtual machines in the scale set.<br /><br /> Possible values
     * are:<br /><br /> **Manual** - You  control the application of updates to
     * virtual machines in the scale set. You do this by using the manualUpgrade
     * action.<br /><br /> **Automatic** - All virtual machines in the scale set
     * are  automatically updated at the same time. Possible values include:
     * 'Automatic', 'Manual', 'Rolling'
     *
     * @param {object} [parameters.upgradePolicy.rollingUpgradePolicy] The
     * configuration parameters used while performing a rolling upgrade.
     *
     * @param {number}
     * [parameters.upgradePolicy.rollingUpgradePolicy.maxBatchInstancePercent] The
     * maximum percent of total virtual machine instances that will be upgraded
     * simultaneously by the rolling upgrade in one batch. As this is a maximum,
     * unhealthy instances in previous or future batches can cause the percentage
     * of instances in a batch to decrease to ensure higher reliability. The
     * default value for this parameter is 20%.
     *
     * @param {number}
     * [parameters.upgradePolicy.rollingUpgradePolicy.maxUnhealthyInstancePercent]
     * The maximum percentage of the total virtual machine instances in the scale
     * set that can be simultaneously unhealthy, either as a result of being
     * upgraded, or by being found in an unhealthy state by the virtual machine
     * health checks before the rolling upgrade aborts. This constraint will be
     * checked prior to starting any batch. The default value for this parameter is
     * 20%.
     *
     * @param {number}
     * [parameters.upgradePolicy.rollingUpgradePolicy.maxUnhealthyUpgradedInstancePercent]
     * The maximum percentage of upgraded virtual machine instances that can be
     * found to be in an unhealthy state. This check will happen after each batch
     * is upgraded. If this percentage is ever exceeded, the rolling update aborts.
     * The default value for this parameter is 20%.
     *
     * @param {string}
     * [parameters.upgradePolicy.rollingUpgradePolicy.pauseTimeBetweenBatches] The
     * wait time between completing the update for all virtual machines in one
     * batch and starting the next batch. The time duration should be specified in
     * ISO 8601 format. The default value is 0 seconds (PT0S).
     *
     * @param {boolean} [parameters.upgradePolicy.automaticOSUpgrade] Whether OS
     * upgrades should automatically be applied to scale set instances in a rolling
     * fashion when a newer version of the image becomes available.
     *
     * @param {object} [parameters.virtualMachineProfile] The virtual machine
     * profile.
     *
     * @param {object} [parameters.virtualMachineProfile.osProfile] The virtual
     * machine scale set OS profile.
     *
     * @param {string} [parameters.virtualMachineProfile.osProfile.customData] A
     * base-64 encoded string of custom data.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration] The
     * Windows Configuration of the OS profile.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.provisionVMAgent]
     * Indicates whether virtual machine agent should be provisioned on the virtual
     * machine. <br><br> When this property is not specified in the request body,
     * default behavior is to set it to true.  This will ensure that VM Agent is
     * installed on the VM so that extensions can be added to the VM later.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.enableAutomaticUpdates]
     * Indicates whether virtual machine is enabled for automatic updates.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.timeZone]
     * Specifies the time zone of the virtual machine. e.g. "Pacific Standard Time"
     *
     * @param {array}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.additionalUnattendContent]
     * Specifies additional base-64 encoded XML formatted information that can be
     * included in the Unattend.xml file, which is used by Windows Setup.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.winRM]
     * Specifies the Windows Remote Management listeners. This enables remote
     * Windows PowerShell.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.winRM.listeners]
     * The list of Windows Remote Management listeners
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration] The Linux
     * Configuration of the OS profile.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration.disablePasswordAuthentication]
     * Specifies whether password authentication should be disabled.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration.ssh]
     * Specifies the ssh key configuration for a Linux OS.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration.ssh.publicKeys]
     * The list of SSH public keys used to authenticate with linux based VMs.
     *
     * @param {array} [parameters.virtualMachineProfile.osProfile.secrets] The List
     * of certificates for addition to the VM.
     *
     * @param {object} [parameters.virtualMachineProfile.storageProfile] The
     * virtual machine scale set storage profile.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.storageProfile.imageReference] The image
     * reference.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.publisher]
     * The image publisher.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.offer]
     * Specifies the offer of the platform image or marketplace image used to
     * create the virtual machine.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.sku] The
     * image SKU.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.version]
     * Specifies the version of the platform image or marketplace image used to
     * create the virtual machine. The allowed formats are Major.Minor.Build or
     * 'latest'. Major, Minor, and Build are decimal numbers. Specify 'latest' to
     * use the latest version of an image available at deploy time. Even if you use
     * 'latest', the VM image will not automatically update after deploy time even
     * if a new version becomes available.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.id] Resource
     * Id
     *
     * @param {object} [parameters.virtualMachineProfile.storageProfile.osDisk] The
     * OS disk.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.caching] The caching
     * type. Possible values include: 'None', 'ReadOnly', 'ReadWrite'
     *
     * @param {object}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.image] The Source
     * User Image VirtualHardDisk. This VirtualHardDisk will be copied before using
     * it to attach to the Virtual Machine. If SourceImage is provided, the
     * destination VirtualHardDisk should not exist.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.image.uri] Specifies
     * the virtual hard disk's uri.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.vhdContainers] The
     * list of virtual hard disk container uris.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.managedDisk] The
     * managed disk parameters.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.managedDisk.storageAccountType]
     * Specifies the storage account type for the managed disk. Possible values
     * are: Standard_LRS or Premium_LRS. Possible values include: 'Standard_LRS',
     * 'Premium_LRS'
     *
     * @param {array} [parameters.virtualMachineProfile.storageProfile.dataDisks]
     * The data disks.
     *
     * @param {object} [parameters.virtualMachineProfile.networkProfile] The
     * virtual machine scale set network profile.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.networkProfile.networkInterfaceConfigurations]
     * The list of network configurations.
     *
     * @param {object} [parameters.virtualMachineProfile.diagnosticsProfile] The
     * virtual machine scale set diagnostics profile.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.diagnosticsProfile.bootDiagnostics] Boot
     * Diagnostics is a debugging feature which allows you to view Console Output
     * and Screenshot to diagnose VM status. <br><br> For Linux Virtual Machines,
     * you can easily view the output of your console log. <br><br> For both
     * Windows and Linux virtual machines, Azure also enables you to see a
     * screenshot of the VM from the hypervisor.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.diagnosticsProfile.bootDiagnostics.enabled]
     * Whether boot diagnostics should be enabled on the Virtual Machine.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.diagnosticsProfile.bootDiagnostics.storageUri]
     * Uri of the storage account to use for placing the console output and
     * screenshot.
     *
     * @param {object} [parameters.virtualMachineProfile.extensionProfile] The
     * virtual machine scale set extension profile.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.extensionProfile.extensions] The virtual
     * machine scale set child extension resources.
     *
     * @param {string} [parameters.virtualMachineProfile.licenseType] The license
     * type, which is for bring your own license scenario.
     *
     * @param {boolean} [parameters.overprovision] Specifies whether the Virtual
     * Machine Scale Set should be overprovisioned.
     *
     * @param {boolean} [parameters.singlePlacementGroup] When true this limits the
     * scale set to a single placement group, of max size 100 virtual machines.
     *
     * @param {object} [parameters.identity] The identity of the virtual machine
     * scale set, if configured.
     *
     * @param {string} [parameters.identity.type] The type of identity used for the
     * virtual machine scale set. Currently, the only supported type is
     * 'SystemAssigned', which implicitly creates an identity. Possible values
     * include: 'SystemAssigned'
     *
     * @param {object} [parameters.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineScaleSet>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    updateWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, parameters: models.VirtualMachineScaleSetUpdate, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineScaleSet>>;

    /**
     * Update a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set to create or
     * update.
     *
     * @param {object} parameters The scale set object.
     *
     * @param {object} [parameters.sku] The virtual machine scale set sku.
     *
     * @param {string} [parameters.sku.name] The sku name.
     *
     * @param {string} [parameters.sku.tier] Specifies the tier of virtual machines
     * in a scale set.<br /><br /> Possible Values:<br /><br /> **Standard**<br
     * /><br /> **Basic**
     *
     * @param {number} [parameters.sku.capacity] Specifies the number of virtual
     * machines in the scale set.
     *
     * @param {object} [parameters.plan] The purchase plan when deploying a virtual
     * machine scale set from VM Marketplace images.
     *
     * @param {string} [parameters.plan.name] The plan ID.
     *
     * @param {string} [parameters.plan.publisher] The publisher ID.
     *
     * @param {string} [parameters.plan.product] Specifies the product of the image
     * from the marketplace. This is the same value as Offer under the
     * imageReference element.
     *
     * @param {string} [parameters.plan.promotionCode] The promotion code.
     *
     * @param {object} [parameters.upgradePolicy] The upgrade policy.
     *
     * @param {string} [parameters.upgradePolicy.mode] Specifies the mode of an
     * upgrade to virtual machines in the scale set.<br /><br /> Possible values
     * are:<br /><br /> **Manual** - You  control the application of updates to
     * virtual machines in the scale set. You do this by using the manualUpgrade
     * action.<br /><br /> **Automatic** - All virtual machines in the scale set
     * are  automatically updated at the same time. Possible values include:
     * 'Automatic', 'Manual', 'Rolling'
     *
     * @param {object} [parameters.upgradePolicy.rollingUpgradePolicy] The
     * configuration parameters used while performing a rolling upgrade.
     *
     * @param {number}
     * [parameters.upgradePolicy.rollingUpgradePolicy.maxBatchInstancePercent] The
     * maximum percent of total virtual machine instances that will be upgraded
     * simultaneously by the rolling upgrade in one batch. As this is a maximum,
     * unhealthy instances in previous or future batches can cause the percentage
     * of instances in a batch to decrease to ensure higher reliability. The
     * default value for this parameter is 20%.
     *
     * @param {number}
     * [parameters.upgradePolicy.rollingUpgradePolicy.maxUnhealthyInstancePercent]
     * The maximum percentage of the total virtual machine instances in the scale
     * set that can be simultaneously unhealthy, either as a result of being
     * upgraded, or by being found in an unhealthy state by the virtual machine
     * health checks before the rolling upgrade aborts. This constraint will be
     * checked prior to starting any batch. The default value for this parameter is
     * 20%.
     *
     * @param {number}
     * [parameters.upgradePolicy.rollingUpgradePolicy.maxUnhealthyUpgradedInstancePercent]
     * The maximum percentage of upgraded virtual machine instances that can be
     * found to be in an unhealthy state. This check will happen after each batch
     * is upgraded. If this percentage is ever exceeded, the rolling update aborts.
     * The default value for this parameter is 20%.
     *
     * @param {string}
     * [parameters.upgradePolicy.rollingUpgradePolicy.pauseTimeBetweenBatches] The
     * wait time between completing the update for all virtual machines in one
     * batch and starting the next batch. The time duration should be specified in
     * ISO 8601 format. The default value is 0 seconds (PT0S).
     *
     * @param {boolean} [parameters.upgradePolicy.automaticOSUpgrade] Whether OS
     * upgrades should automatically be applied to scale set instances in a rolling
     * fashion when a newer version of the image becomes available.
     *
     * @param {object} [parameters.virtualMachineProfile] The virtual machine
     * profile.
     *
     * @param {object} [parameters.virtualMachineProfile.osProfile] The virtual
     * machine scale set OS profile.
     *
     * @param {string} [parameters.virtualMachineProfile.osProfile.customData] A
     * base-64 encoded string of custom data.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration] The
     * Windows Configuration of the OS profile.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.provisionVMAgent]
     * Indicates whether virtual machine agent should be provisioned on the virtual
     * machine. <br><br> When this property is not specified in the request body,
     * default behavior is to set it to true.  This will ensure that VM Agent is
     * installed on the VM so that extensions can be added to the VM later.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.enableAutomaticUpdates]
     * Indicates whether virtual machine is enabled for automatic updates.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.timeZone]
     * Specifies the time zone of the virtual machine. e.g. "Pacific Standard Time"
     *
     * @param {array}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.additionalUnattendContent]
     * Specifies additional base-64 encoded XML formatted information that can be
     * included in the Unattend.xml file, which is used by Windows Setup.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.winRM]
     * Specifies the Windows Remote Management listeners. This enables remote
     * Windows PowerShell.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.winRM.listeners]
     * The list of Windows Remote Management listeners
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration] The Linux
     * Configuration of the OS profile.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration.disablePasswordAuthentication]
     * Specifies whether password authentication should be disabled.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration.ssh]
     * Specifies the ssh key configuration for a Linux OS.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration.ssh.publicKeys]
     * The list of SSH public keys used to authenticate with linux based VMs.
     *
     * @param {array} [parameters.virtualMachineProfile.osProfile.secrets] The List
     * of certificates for addition to the VM.
     *
     * @param {object} [parameters.virtualMachineProfile.storageProfile] The
     * virtual machine scale set storage profile.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.storageProfile.imageReference] The image
     * reference.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.publisher]
     * The image publisher.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.offer]
     * Specifies the offer of the platform image or marketplace image used to
     * create the virtual machine.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.sku] The
     * image SKU.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.version]
     * Specifies the version of the platform image or marketplace image used to
     * create the virtual machine. The allowed formats are Major.Minor.Build or
     * 'latest'. Major, Minor, and Build are decimal numbers. Specify 'latest' to
     * use the latest version of an image available at deploy time. Even if you use
     * 'latest', the VM image will not automatically update after deploy time even
     * if a new version becomes available.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.id] Resource
     * Id
     *
     * @param {object} [parameters.virtualMachineProfile.storageProfile.osDisk] The
     * OS disk.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.caching] The caching
     * type. Possible values include: 'None', 'ReadOnly', 'ReadWrite'
     *
     * @param {object}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.image] The Source
     * User Image VirtualHardDisk. This VirtualHardDisk will be copied before using
     * it to attach to the Virtual Machine. If SourceImage is provided, the
     * destination VirtualHardDisk should not exist.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.image.uri] Specifies
     * the virtual hard disk's uri.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.vhdContainers] The
     * list of virtual hard disk container uris.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.managedDisk] The
     * managed disk parameters.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.managedDisk.storageAccountType]
     * Specifies the storage account type for the managed disk. Possible values
     * are: Standard_LRS or Premium_LRS. Possible values include: 'Standard_LRS',
     * 'Premium_LRS'
     *
     * @param {array} [parameters.virtualMachineProfile.storageProfile.dataDisks]
     * The data disks.
     *
     * @param {object} [parameters.virtualMachineProfile.networkProfile] The
     * virtual machine scale set network profile.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.networkProfile.networkInterfaceConfigurations]
     * The list of network configurations.
     *
     * @param {object} [parameters.virtualMachineProfile.diagnosticsProfile] The
     * virtual machine scale set diagnostics profile.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.diagnosticsProfile.bootDiagnostics] Boot
     * Diagnostics is a debugging feature which allows you to view Console Output
     * and Screenshot to diagnose VM status. <br><br> For Linux Virtual Machines,
     * you can easily view the output of your console log. <br><br> For both
     * Windows and Linux virtual machines, Azure also enables you to see a
     * screenshot of the VM from the hypervisor.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.diagnosticsProfile.bootDiagnostics.enabled]
     * Whether boot diagnostics should be enabled on the Virtual Machine.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.diagnosticsProfile.bootDiagnostics.storageUri]
     * Uri of the storage account to use for placing the console output and
     * screenshot.
     *
     * @param {object} [parameters.virtualMachineProfile.extensionProfile] The
     * virtual machine scale set extension profile.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.extensionProfile.extensions] The virtual
     * machine scale set child extension resources.
     *
     * @param {string} [parameters.virtualMachineProfile.licenseType] The license
     * type, which is for bring your own license scenario.
     *
     * @param {boolean} [parameters.overprovision] Specifies whether the Virtual
     * Machine Scale Set should be overprovisioned.
     *
     * @param {boolean} [parameters.singlePlacementGroup] When true this limits the
     * scale set to a single placement group, of max size 100 virtual machines.
     *
     * @param {object} [parameters.identity] The identity of the virtual machine
     * scale set, if configured.
     *
     * @param {string} [parameters.identity.type] The type of identity used for the
     * virtual machine scale set. Currently, the only supported type is
     * 'SystemAssigned', which implicitly creates an identity. Possible values
     * include: 'SystemAssigned'
     *
     * @param {object} [parameters.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineScaleSet} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineScaleSet} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineScaleSet} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    update(resourceGroupName: string, vmScaleSetName: string, parameters: models.VirtualMachineScaleSetUpdate, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineScaleSet>;
    update(resourceGroupName: string, vmScaleSetName: string, parameters: models.VirtualMachineScaleSetUpdate, callback: ServiceCallback<models.VirtualMachineScaleSet>): void;
    update(resourceGroupName: string, vmScaleSetName: string, parameters: models.VirtualMachineScaleSetUpdate, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineScaleSet>): void;


    /**
     * Deletes a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    deleteMethodWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Deletes a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    deleteMethod(resourceGroupName: string, vmScaleSetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    deleteMethod(resourceGroupName: string, vmScaleSetName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    deleteMethod(resourceGroupName: string, vmScaleSetName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Display information about a virtual machine scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineScaleSet>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    getWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineScaleSet>>;

    /**
     * Display information about a virtual machine scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineScaleSet} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineScaleSet} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineScaleSet} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    get(resourceGroupName: string, vmScaleSetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineScaleSet>;
    get(resourceGroupName: string, vmScaleSetName: string, callback: ServiceCallback<models.VirtualMachineScaleSet>): void;
    get(resourceGroupName: string, vmScaleSetName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineScaleSet>): void;


    /**
     * Deallocates specific virtual machines in a VM scale set. Shuts down the
     * virtual machines and releases the compute resources. You are not billed for
     * the compute resources that this virtual machine scale set deallocates.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {array} [options.instanceIds] The virtual machine scale set instance
     * ids. Omitting the virtual machine scale set instance ids will result in the
     * operation being performed on all virtual machines in the virtual machine
     * scale set.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    deallocateWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, options?: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Deallocates specific virtual machines in a VM scale set. Shuts down the
     * virtual machines and releases the compute resources. You are not billed for
     * the compute resources that this virtual machine scale set deallocates.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {array} [options.instanceIds] The virtual machine scale set instance
     * ids. Omitting the virtual machine scale set instance ids will result in the
     * operation being performed on all virtual machines in the virtual machine
     * scale set.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    deallocate(resourceGroupName: string, vmScaleSetName: string, options?: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    deallocate(resourceGroupName: string, vmScaleSetName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    deallocate(resourceGroupName: string, vmScaleSetName: string, options: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Deletes virtual machines in a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {array} instanceIds The virtual machine scale set instance ids.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    deleteInstancesWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, instanceIds: string[], options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Deletes virtual machines in a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {array} instanceIds The virtual machine scale set instance ids.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    deleteInstances(resourceGroupName: string, vmScaleSetName: string, instanceIds: string[], options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    deleteInstances(resourceGroupName: string, vmScaleSetName: string, instanceIds: string[], callback: ServiceCallback<models.OperationStatusResponse>): void;
    deleteInstances(resourceGroupName: string, vmScaleSetName: string, instanceIds: string[], options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Gets the status of a VM scale set instance.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineScaleSetInstanceView>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    getInstanceViewWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineScaleSetInstanceView>>;

    /**
     * Gets the status of a VM scale set instance.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineScaleSetInstanceView} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineScaleSetInstanceView} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineScaleSetInstanceView} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    getInstanceView(resourceGroupName: string, vmScaleSetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineScaleSetInstanceView>;
    getInstanceView(resourceGroupName: string, vmScaleSetName: string, callback: ServiceCallback<models.VirtualMachineScaleSetInstanceView>): void;
    getInstanceView(resourceGroupName: string, vmScaleSetName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineScaleSetInstanceView>): void;


    /**
     * Gets a list of all VM scale sets under a resource group.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineScaleSetListResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listWithHttpOperationResponse(resourceGroupName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineScaleSetListResult>>;

    /**
     * Gets a list of all VM scale sets under a resource group.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineScaleSetListResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineScaleSetListResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineScaleSetListResult} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    list(resourceGroupName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineScaleSetListResult>;
    list(resourceGroupName: string, callback: ServiceCallback<models.VirtualMachineScaleSetListResult>): void;
    list(resourceGroupName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineScaleSetListResult>): void;


    /**
     * Gets a list of all VM Scale Sets in the subscription, regardless of the
     * associated resource group. Use nextLink property in the response to get the
     * next page of VM Scale Sets. Do this till nextLink is not null to fetch all
     * the VM Scale Sets.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineScaleSetListWithLinkResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listAllWithHttpOperationResponse(options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineScaleSetListWithLinkResult>>;

    /**
     * Gets a list of all VM Scale Sets in the subscription, regardless of the
     * associated resource group. Use nextLink property in the response to get the
     * next page of VM Scale Sets. Do this till nextLink is not null to fetch all
     * the VM Scale Sets.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineScaleSetListWithLinkResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineScaleSetListWithLinkResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineScaleSetListWithLinkResult}
     *                      for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listAll(options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineScaleSetListWithLinkResult>;
    listAll(callback: ServiceCallback<models.VirtualMachineScaleSetListWithLinkResult>): void;
    listAll(options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineScaleSetListWithLinkResult>): void;


    /**
     * Gets a list of SKUs available for your VM scale set, including the minimum
     * and maximum VM instances allowed for each SKU.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineScaleSetListSkusResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listSkusWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineScaleSetListSkusResult>>;

    /**
     * Gets a list of SKUs available for your VM scale set, including the minimum
     * and maximum VM instances allowed for each SKU.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineScaleSetListSkusResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineScaleSetListSkusResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineScaleSetListSkusResult} for
     *                      more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listSkus(resourceGroupName: string, vmScaleSetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineScaleSetListSkusResult>;
    listSkus(resourceGroupName: string, vmScaleSetName: string, callback: ServiceCallback<models.VirtualMachineScaleSetListSkusResult>): void;
    listSkus(resourceGroupName: string, vmScaleSetName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineScaleSetListSkusResult>): void;


    /**
     * Power off (stop) one or more virtual machines in a VM scale set. Note that
     * resources are still attached and you are getting charged for the resources.
     * Instead, use deallocate to release resources and avoid charges.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {array} [options.instanceIds] The virtual machine scale set instance
     * ids. Omitting the virtual machine scale set instance ids will result in the
     * operation being performed on all virtual machines in the virtual machine
     * scale set.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    powerOffWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, options?: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Power off (stop) one or more virtual machines in a VM scale set. Note that
     * resources are still attached and you are getting charged for the resources.
     * Instead, use deallocate to release resources and avoid charges.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {array} [options.instanceIds] The virtual machine scale set instance
     * ids. Omitting the virtual machine scale set instance ids will result in the
     * operation being performed on all virtual machines in the virtual machine
     * scale set.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    powerOff(resourceGroupName: string, vmScaleSetName: string, options?: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    powerOff(resourceGroupName: string, vmScaleSetName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    powerOff(resourceGroupName: string, vmScaleSetName: string, options: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Restarts one or more virtual machines in a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {array} [options.instanceIds] The virtual machine scale set instance
     * ids. Omitting the virtual machine scale set instance ids will result in the
     * operation being performed on all virtual machines in the virtual machine
     * scale set.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    restartWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, options?: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Restarts one or more virtual machines in a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {array} [options.instanceIds] The virtual machine scale set instance
     * ids. Omitting the virtual machine scale set instance ids will result in the
     * operation being performed on all virtual machines in the virtual machine
     * scale set.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    restart(resourceGroupName: string, vmScaleSetName: string, options?: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    restart(resourceGroupName: string, vmScaleSetName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    restart(resourceGroupName: string, vmScaleSetName: string, options: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Starts one or more virtual machines in a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {array} [options.instanceIds] The virtual machine scale set instance
     * ids. Omitting the virtual machine scale set instance ids will result in the
     * operation being performed on all virtual machines in the virtual machine
     * scale set.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    startWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, options?: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Starts one or more virtual machines in a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {array} [options.instanceIds] The virtual machine scale set instance
     * ids. Omitting the virtual machine scale set instance ids will result in the
     * operation being performed on all virtual machines in the virtual machine
     * scale set.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    start(resourceGroupName: string, vmScaleSetName: string, options?: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    start(resourceGroupName: string, vmScaleSetName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    start(resourceGroupName: string, vmScaleSetName: string, options: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Upgrades one or more virtual machines to the latest SKU set in the VM scale
     * set model.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {array} instanceIds The virtual machine scale set instance ids.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    updateInstancesWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, instanceIds: string[], options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Upgrades one or more virtual machines to the latest SKU set in the VM scale
     * set model.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {array} instanceIds The virtual machine scale set instance ids.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    updateInstances(resourceGroupName: string, vmScaleSetName: string, instanceIds: string[], options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    updateInstances(resourceGroupName: string, vmScaleSetName: string, instanceIds: string[], callback: ServiceCallback<models.OperationStatusResponse>): void;
    updateInstances(resourceGroupName: string, vmScaleSetName: string, instanceIds: string[], options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Reimages (upgrade the operating system) one or more virtual machines in a VM
     * scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {array} [options.instanceIds] The virtual machine scale set instance
     * ids. Omitting the virtual machine scale set instance ids will result in the
     * operation being performed on all virtual machines in the virtual machine
     * scale set.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    reimageWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, options?: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Reimages (upgrade the operating system) one or more virtual machines in a VM
     * scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {array} [options.instanceIds] The virtual machine scale set instance
     * ids. Omitting the virtual machine scale set instance ids will result in the
     * operation being performed on all virtual machines in the virtual machine
     * scale set.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    reimage(resourceGroupName: string, vmScaleSetName: string, options?: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    reimage(resourceGroupName: string, vmScaleSetName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    reimage(resourceGroupName: string, vmScaleSetName: string, options: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Reimages all the disks ( including data disks ) in the virtual machines in a
     * VM scale set. This operation is only supported for managed disks.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {array} [options.instanceIds] The virtual machine scale set instance
     * ids. Omitting the virtual machine scale set instance ids will result in the
     * operation being performed on all virtual machines in the virtual machine
     * scale set.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    reimageAllWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, options?: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Reimages all the disks ( including data disks ) in the virtual machines in a
     * VM scale set. This operation is only supported for managed disks.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {array} [options.instanceIds] The virtual machine scale set instance
     * ids. Omitting the virtual machine scale set instance ids will result in the
     * operation being performed on all virtual machines in the virtual machine
     * scale set.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    reimageAll(resourceGroupName: string, vmScaleSetName: string, options?: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    reimageAll(resourceGroupName: string, vmScaleSetName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    reimageAll(resourceGroupName: string, vmScaleSetName: string, options: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Create or update a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set to create or
     * update.
     *
     * @param {object} parameters The scale set object.
     *
     * @param {object} [parameters.sku] The virtual machine scale set sku.
     *
     * @param {string} [parameters.sku.name] The sku name.
     *
     * @param {string} [parameters.sku.tier] Specifies the tier of virtual machines
     * in a scale set.<br /><br /> Possible Values:<br /><br /> **Standard**<br
     * /><br /> **Basic**
     *
     * @param {number} [parameters.sku.capacity] Specifies the number of virtual
     * machines in the scale set.
     *
     * @param {object} [parameters.plan] Specifies information about the
     * marketplace image used to create the virtual machine. This element is only
     * used for marketplace images. Before you can use a marketplace image from an
     * API, you must enable the image for programmatic use.  In the Azure portal,
     * find the marketplace image that you want to use and then click **Want to
     * deploy programmatically, Get Started ->**. Enter any required information
     * and then click **Save**.
     *
     * @param {string} [parameters.plan.name] The plan ID.
     *
     * @param {string} [parameters.plan.publisher] The publisher ID.
     *
     * @param {string} [parameters.plan.product] Specifies the product of the image
     * from the marketplace. This is the same value as Offer under the
     * imageReference element.
     *
     * @param {string} [parameters.plan.promotionCode] The promotion code.
     *
     * @param {object} [parameters.upgradePolicy] The upgrade policy.
     *
     * @param {string} [parameters.upgradePolicy.mode] Specifies the mode of an
     * upgrade to virtual machines in the scale set.<br /><br /> Possible values
     * are:<br /><br /> **Manual** - You  control the application of updates to
     * virtual machines in the scale set. You do this by using the manualUpgrade
     * action.<br /><br /> **Automatic** - All virtual machines in the scale set
     * are  automatically updated at the same time. Possible values include:
     * 'Automatic', 'Manual', 'Rolling'
     *
     * @param {object} [parameters.upgradePolicy.rollingUpgradePolicy] The
     * configuration parameters used while performing a rolling upgrade.
     *
     * @param {number}
     * [parameters.upgradePolicy.rollingUpgradePolicy.maxBatchInstancePercent] The
     * maximum percent of total virtual machine instances that will be upgraded
     * simultaneously by the rolling upgrade in one batch. As this is a maximum,
     * unhealthy instances in previous or future batches can cause the percentage
     * of instances in a batch to decrease to ensure higher reliability. The
     * default value for this parameter is 20%.
     *
     * @param {number}
     * [parameters.upgradePolicy.rollingUpgradePolicy.maxUnhealthyInstancePercent]
     * The maximum percentage of the total virtual machine instances in the scale
     * set that can be simultaneously unhealthy, either as a result of being
     * upgraded, or by being found in an unhealthy state by the virtual machine
     * health checks before the rolling upgrade aborts. This constraint will be
     * checked prior to starting any batch. The default value for this parameter is
     * 20%.
     *
     * @param {number}
     * [parameters.upgradePolicy.rollingUpgradePolicy.maxUnhealthyUpgradedInstancePercent]
     * The maximum percentage of upgraded virtual machine instances that can be
     * found to be in an unhealthy state. This check will happen after each batch
     * is upgraded. If this percentage is ever exceeded, the rolling update aborts.
     * The default value for this parameter is 20%.
     *
     * @param {string}
     * [parameters.upgradePolicy.rollingUpgradePolicy.pauseTimeBetweenBatches] The
     * wait time between completing the update for all virtual machines in one
     * batch and starting the next batch. The time duration should be specified in
     * ISO 8601 format. The default value is 0 seconds (PT0S).
     *
     * @param {boolean} [parameters.upgradePolicy.automaticOSUpgrade] Whether OS
     * upgrades should automatically be applied to scale set instances in a rolling
     * fashion when a newer version of the image becomes available.
     *
     * @param {object} [parameters.virtualMachineProfile] The virtual machine
     * profile.
     *
     * @param {object} [parameters.virtualMachineProfile.osProfile] Specifies the
     * operating system settings for the virtual machines in the scale set.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.osProfile.computerNamePrefix] Specifies
     * the computer name prefix for all of the virtual machines in the scale set.
     * Computer name prefixes must be 1 to 15 characters long.
     *
     * @param {string} [parameters.virtualMachineProfile.osProfile.adminUsername]
     * Specifies the name of the administrator account. <br><br> **Windows-only
     * restriction:** Cannot end in "." <br><br> **Disallowed values:**
     * "administrator", "admin", "user", "user1", "test", "user2", "test1",
     * "user3", "admin1", "1", "123", "a", "actuser", "adm", "admin2", "aspnet",
     * "backup", "console", "david", "guest", "john", "owner", "root", "server",
     * "sql", "support", "support_388945a0", "sys", "test2", "test3", "user4",
     * "user5". <br><br> **Minimum-length (Linux):** 1  character <br><br>
     * **Max-length (Linux):** 64 characters <br><br> **Max-length (Windows):** 20
     * characters  <br><br><li> For root access to the Linux VM, see [Using root
     * privileges on Linux virtual machines in
     * Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-use-root-privileges?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)<br><li>
     * For a list of built-in system users on Linux that should not be used in this
     * field, see [Selecting User Names for Linux on
     * Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-usernames?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)
     *
     * @param {string} [parameters.virtualMachineProfile.osProfile.adminPassword]
     * Specifies the password of the administrator account. <br><br>
     * **Minimum-length (Windows):** 8 characters <br><br> **Minimum-length
     * (Linux):** 6 characters <br><br> **Max-length (Windows):** 123 characters
     * <br><br> **Max-length (Linux):** 72 characters <br><br> **Complexity
     * requirements:** 3 out of 4 conditions below need to be fulfilled <br> Has
     * lower characters <br>Has upper characters <br> Has a digit <br> Has a
     * special character (Regex match [\W_]) <br><br> **Disallowed values:**
     * "abc@123", "P@$$w0rd", "P@ssw0rd", "P@ssword123", "Pa$$word", "pass@word1",
     * "Password!", "Password1", "Password22", "iloveyou!" <br><br> For resetting
     * the password, see [How to reset the Remote Desktop service or its login
     * password in a Windows
     * VM](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-reset-rdp?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json)
     * <br><br> For resetting root password, see [Manage users, SSH, and check or
     * repair disks on Azure Linux VMs using the VMAccess
     * Extension](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-vmaccess-extension?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#reset-root-password)
     *
     * @param {string} [parameters.virtualMachineProfile.osProfile.customData]
     * Specifies a base-64 encoded string of custom data. The base-64 encoded
     * string is decoded to a binary array that is saved as a file on the Virtual
     * Machine. The maximum length of the binary array is 65535 bytes. <br><br> For
     * using cloud-init for your VM, see [Using cloud-init to customize a Linux VM
     * during
     * creation](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-cloud-init?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration] Specifies
     * Windows operating system settings on the virtual machine.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.provisionVMAgent]
     * Indicates whether virtual machine agent should be provisioned on the virtual
     * machine. <br><br> When this property is not specified in the request body,
     * default behavior is to set it to true.  This will ensure that VM Agent is
     * installed on the VM so that extensions can be added to the VM later.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.enableAutomaticUpdates]
     * Indicates whether virtual machine is enabled for automatic updates.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.timeZone]
     * Specifies the time zone of the virtual machine. e.g. "Pacific Standard Time"
     *
     * @param {array}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.additionalUnattendContent]
     * Specifies additional base-64 encoded XML formatted information that can be
     * included in the Unattend.xml file, which is used by Windows Setup.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.winRM]
     * Specifies the Windows Remote Management listeners. This enables remote
     * Windows PowerShell.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.winRM.listeners]
     * The list of Windows Remote Management listeners
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration] Specifies
     * the Linux operating system settings on the virtual machine. <br><br>For a
     * list of supported Linux distributions, see [Linux on Azure-Endorsed
     * Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-endorsed-distros?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)
     * <br><br> For running non-endorsed distributions, see [Information for
     * Non-Endorsed
     * Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-create-upload-generic?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json).
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration.disablePasswordAuthentication]
     * Specifies whether password authentication should be disabled.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration.ssh]
     * Specifies the ssh key configuration for a Linux OS.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration.ssh.publicKeys]
     * The list of SSH public keys used to authenticate with linux based VMs.
     *
     * @param {array} [parameters.virtualMachineProfile.osProfile.secrets]
     * Specifies set of certificates that should be installed onto the virtual
     * machines in the scale set.
     *
     * @param {object} [parameters.virtualMachineProfile.storageProfile] Specifies
     * the storage settings for the virtual machine disks.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.storageProfile.imageReference] Specifies
     * information about the image to use. You can specify information about
     * platform images, marketplace images, or virtual machine images. This element
     * is required when you want to use a platform image, marketplace image, or
     * virtual machine image, but is not used in other creation operations.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.publisher]
     * The image publisher.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.offer]
     * Specifies the offer of the platform image or marketplace image used to
     * create the virtual machine.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.sku] The
     * image SKU.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.version]
     * Specifies the version of the platform image or marketplace image used to
     * create the virtual machine. The allowed formats are Major.Minor.Build or
     * 'latest'. Major, Minor, and Build are decimal numbers. Specify 'latest' to
     * use the latest version of an image available at deploy time. Even if you use
     * 'latest', the VM image will not automatically update after deploy time even
     * if a new version becomes available.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.id] Resource
     * Id
     *
     * @param {object} [parameters.virtualMachineProfile.storageProfile.osDisk]
     * Specifies information about the operating system disk used by the virtual
     * machines in the scale set. <br><br> For more information about disks, see
     * [About disks and VHDs for Azure virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.name] The disk name.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.caching] Specifies
     * the caching requirements. <br><br> Possible values are: <br><br> **None**
     * <br><br> **ReadOnly** <br><br> **ReadWrite** <br><br> Default: **None for
     * Standard storage. ReadOnly for Premium storage**. Possible values include:
     * 'None', 'ReadOnly', 'ReadWrite'
     *
     * @param {string}
     * parameters.virtualMachineProfile.storageProfile.osDisk.createOption
     * Specifies how the virtual machines in the scale set should be
     * created.<br><br> The only allowed value is: **FromImage** \u2013 This value
     * is used when you are using an image to create the virtual machine. If you
     * are using a platform image, you also use the imageReference element
     * described above. If you are using a marketplace image, you  also use the
     * plan element previously described. Possible values include: 'fromImage',
     * 'empty', 'attach'
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.osType] This
     * property allows you to specify the type of the OS that is included in the
     * disk if creating a VM from user-image or a specialized VHD. <br><br>
     * Possible values are: <br><br> **Windows** <br><br> **Linux**. Possible
     * values include: 'Windows', 'Linux'
     *
     * @param {object}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.image] Specifies
     * information about the unmanaged user image to base the scale set on.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.image.uri] Specifies
     * the virtual hard disk's uri.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.vhdContainers]
     * Specifies the container urls that are used to store operating system disks
     * for the scale set.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.managedDisk] The
     * managed disk parameters.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.managedDisk.storageAccountType]
     * Specifies the storage account type for the managed disk. Possible values
     * are: Standard_LRS or Premium_LRS. Possible values include: 'Standard_LRS',
     * 'Premium_LRS'
     *
     * @param {array} [parameters.virtualMachineProfile.storageProfile.dataDisks]
     * Specifies the parameters that are used to add data disks to the virtual
     * machines in the scale set. <br><br> For more information about disks, see
     * [About disks and VHDs for Azure virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     *
     * @param {object} [parameters.virtualMachineProfile.networkProfile] Specifies
     * properties of the network interfaces of the virtual machines in the scale
     * set.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.networkProfile.healthProbe] A reference to
     * a load balancer probe used to determine the health of an instance in the
     * virtual machine scale set. The reference will be in the form:
     * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.networkProfile.healthProbe.id] The ARM
     * resource id in the form of
     * /subscriptions/{SubcriptionId}/resourceGroups/{ResourceGroupName}/...
     *
     * @param {array}
     * [parameters.virtualMachineProfile.networkProfile.networkInterfaceConfigurations]
     * The list of network configurations.
     *
     * @param {object} [parameters.virtualMachineProfile.diagnosticsProfile]
     * Specifies the boot diagnostic settings state. <br><br>Minimum api-version:
     * 2015-06-15.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.diagnosticsProfile.bootDiagnostics] Boot
     * Diagnostics is a debugging feature which allows you to view Console Output
     * and Screenshot to diagnose VM status. <br><br> For Linux Virtual Machines,
     * you can easily view the output of your console log. <br><br> For both
     * Windows and Linux virtual machines, Azure also enables you to see a
     * screenshot of the VM from the hypervisor.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.diagnosticsProfile.bootDiagnostics.enabled]
     * Whether boot diagnostics should be enabled on the Virtual Machine.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.diagnosticsProfile.bootDiagnostics.storageUri]
     * Uri of the storage account to use for placing the console output and
     * screenshot.
     *
     * @param {object} [parameters.virtualMachineProfile.extensionProfile]
     * Specifies a collection of settings for extensions installed on virtual
     * machines in the scale set.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.extensionProfile.extensions] The virtual
     * machine scale set child extension resources.
     *
     * @param {string} [parameters.virtualMachineProfile.licenseType] Specifies
     * that the image or disk that is being used was licensed on-premises. This
     * element is only used for images that contain the Windows Server operating
     * system. <br><br> Possible values are: <br><br> Windows_Client <br><br>
     * Windows_Server <br><br> If this element is included in a request for an
     * update, the value must match the initial value. This value cannot be
     * updated. <br><br> For more information, see [Azure Hybrid Use Benefit for
     * Windows
     * Server](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-hybrid-use-benefit-licensing?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json)
     * <br><br> Minimum api-version: 2015-06-15
     *
     * @param {boolean} [parameters.overprovision] Specifies whether the Virtual
     * Machine Scale Set should be overprovisioned.
     *
     * @param {boolean} [parameters.singlePlacementGroup] When true this limits the
     * scale set to a single placement group, of max size 100 virtual machines.
     *
     * @param {object} [parameters.identity] The identity of the virtual machine
     * scale set, if configured.
     *
     * @param {string} [parameters.identity.type] The type of identity used for the
     * virtual machine scale set. Currently, the only supported type is
     * 'SystemAssigned', which implicitly creates an identity. Possible values
     * include: 'SystemAssigned'
     *
     * @param {array} [parameters.zones] The virtual machine scale set zones.
     *
     * @param {string} parameters.location Resource location
     *
     * @param {object} [parameters.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineScaleSet>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginCreateOrUpdateWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, parameters: models.VirtualMachineScaleSet, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineScaleSet>>;

    /**
     * Create or update a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set to create or
     * update.
     *
     * @param {object} parameters The scale set object.
     *
     * @param {object} [parameters.sku] The virtual machine scale set sku.
     *
     * @param {string} [parameters.sku.name] The sku name.
     *
     * @param {string} [parameters.sku.tier] Specifies the tier of virtual machines
     * in a scale set.<br /><br /> Possible Values:<br /><br /> **Standard**<br
     * /><br /> **Basic**
     *
     * @param {number} [parameters.sku.capacity] Specifies the number of virtual
     * machines in the scale set.
     *
     * @param {object} [parameters.plan] Specifies information about the
     * marketplace image used to create the virtual machine. This element is only
     * used for marketplace images. Before you can use a marketplace image from an
     * API, you must enable the image for programmatic use.  In the Azure portal,
     * find the marketplace image that you want to use and then click **Want to
     * deploy programmatically, Get Started ->**. Enter any required information
     * and then click **Save**.
     *
     * @param {string} [parameters.plan.name] The plan ID.
     *
     * @param {string} [parameters.plan.publisher] The publisher ID.
     *
     * @param {string} [parameters.plan.product] Specifies the product of the image
     * from the marketplace. This is the same value as Offer under the
     * imageReference element.
     *
     * @param {string} [parameters.plan.promotionCode] The promotion code.
     *
     * @param {object} [parameters.upgradePolicy] The upgrade policy.
     *
     * @param {string} [parameters.upgradePolicy.mode] Specifies the mode of an
     * upgrade to virtual machines in the scale set.<br /><br /> Possible values
     * are:<br /><br /> **Manual** - You  control the application of updates to
     * virtual machines in the scale set. You do this by using the manualUpgrade
     * action.<br /><br /> **Automatic** - All virtual machines in the scale set
     * are  automatically updated at the same time. Possible values include:
     * 'Automatic', 'Manual', 'Rolling'
     *
     * @param {object} [parameters.upgradePolicy.rollingUpgradePolicy] The
     * configuration parameters used while performing a rolling upgrade.
     *
     * @param {number}
     * [parameters.upgradePolicy.rollingUpgradePolicy.maxBatchInstancePercent] The
     * maximum percent of total virtual machine instances that will be upgraded
     * simultaneously by the rolling upgrade in one batch. As this is a maximum,
     * unhealthy instances in previous or future batches can cause the percentage
     * of instances in a batch to decrease to ensure higher reliability. The
     * default value for this parameter is 20%.
     *
     * @param {number}
     * [parameters.upgradePolicy.rollingUpgradePolicy.maxUnhealthyInstancePercent]
     * The maximum percentage of the total virtual machine instances in the scale
     * set that can be simultaneously unhealthy, either as a result of being
     * upgraded, or by being found in an unhealthy state by the virtual machine
     * health checks before the rolling upgrade aborts. This constraint will be
     * checked prior to starting any batch. The default value for this parameter is
     * 20%.
     *
     * @param {number}
     * [parameters.upgradePolicy.rollingUpgradePolicy.maxUnhealthyUpgradedInstancePercent]
     * The maximum percentage of upgraded virtual machine instances that can be
     * found to be in an unhealthy state. This check will happen after each batch
     * is upgraded. If this percentage is ever exceeded, the rolling update aborts.
     * The default value for this parameter is 20%.
     *
     * @param {string}
     * [parameters.upgradePolicy.rollingUpgradePolicy.pauseTimeBetweenBatches] The
     * wait time between completing the update for all virtual machines in one
     * batch and starting the next batch. The time duration should be specified in
     * ISO 8601 format. The default value is 0 seconds (PT0S).
     *
     * @param {boolean} [parameters.upgradePolicy.automaticOSUpgrade] Whether OS
     * upgrades should automatically be applied to scale set instances in a rolling
     * fashion when a newer version of the image becomes available.
     *
     * @param {object} [parameters.virtualMachineProfile] The virtual machine
     * profile.
     *
     * @param {object} [parameters.virtualMachineProfile.osProfile] Specifies the
     * operating system settings for the virtual machines in the scale set.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.osProfile.computerNamePrefix] Specifies
     * the computer name prefix for all of the virtual machines in the scale set.
     * Computer name prefixes must be 1 to 15 characters long.
     *
     * @param {string} [parameters.virtualMachineProfile.osProfile.adminUsername]
     * Specifies the name of the administrator account. <br><br> **Windows-only
     * restriction:** Cannot end in "." <br><br> **Disallowed values:**
     * "administrator", "admin", "user", "user1", "test", "user2", "test1",
     * "user3", "admin1", "1", "123", "a", "actuser", "adm", "admin2", "aspnet",
     * "backup", "console", "david", "guest", "john", "owner", "root", "server",
     * "sql", "support", "support_388945a0", "sys", "test2", "test3", "user4",
     * "user5". <br><br> **Minimum-length (Linux):** 1  character <br><br>
     * **Max-length (Linux):** 64 characters <br><br> **Max-length (Windows):** 20
     * characters  <br><br><li> For root access to the Linux VM, see [Using root
     * privileges on Linux virtual machines in
     * Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-use-root-privileges?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)<br><li>
     * For a list of built-in system users on Linux that should not be used in this
     * field, see [Selecting User Names for Linux on
     * Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-usernames?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)
     *
     * @param {string} [parameters.virtualMachineProfile.osProfile.adminPassword]
     * Specifies the password of the administrator account. <br><br>
     * **Minimum-length (Windows):** 8 characters <br><br> **Minimum-length
     * (Linux):** 6 characters <br><br> **Max-length (Windows):** 123 characters
     * <br><br> **Max-length (Linux):** 72 characters <br><br> **Complexity
     * requirements:** 3 out of 4 conditions below need to be fulfilled <br> Has
     * lower characters <br>Has upper characters <br> Has a digit <br> Has a
     * special character (Regex match [\W_]) <br><br> **Disallowed values:**
     * "abc@123", "P@$$w0rd", "P@ssw0rd", "P@ssword123", "Pa$$word", "pass@word1",
     * "Password!", "Password1", "Password22", "iloveyou!" <br><br> For resetting
     * the password, see [How to reset the Remote Desktop service or its login
     * password in a Windows
     * VM](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-reset-rdp?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json)
     * <br><br> For resetting root password, see [Manage users, SSH, and check or
     * repair disks on Azure Linux VMs using the VMAccess
     * Extension](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-vmaccess-extension?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#reset-root-password)
     *
     * @param {string} [parameters.virtualMachineProfile.osProfile.customData]
     * Specifies a base-64 encoded string of custom data. The base-64 encoded
     * string is decoded to a binary array that is saved as a file on the Virtual
     * Machine. The maximum length of the binary array is 65535 bytes. <br><br> For
     * using cloud-init for your VM, see [Using cloud-init to customize a Linux VM
     * during
     * creation](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-cloud-init?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration] Specifies
     * Windows operating system settings on the virtual machine.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.provisionVMAgent]
     * Indicates whether virtual machine agent should be provisioned on the virtual
     * machine. <br><br> When this property is not specified in the request body,
     * default behavior is to set it to true.  This will ensure that VM Agent is
     * installed on the VM so that extensions can be added to the VM later.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.enableAutomaticUpdates]
     * Indicates whether virtual machine is enabled for automatic updates.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.timeZone]
     * Specifies the time zone of the virtual machine. e.g. "Pacific Standard Time"
     *
     * @param {array}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.additionalUnattendContent]
     * Specifies additional base-64 encoded XML formatted information that can be
     * included in the Unattend.xml file, which is used by Windows Setup.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.winRM]
     * Specifies the Windows Remote Management listeners. This enables remote
     * Windows PowerShell.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.winRM.listeners]
     * The list of Windows Remote Management listeners
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration] Specifies
     * the Linux operating system settings on the virtual machine. <br><br>For a
     * list of supported Linux distributions, see [Linux on Azure-Endorsed
     * Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-endorsed-distros?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)
     * <br><br> For running non-endorsed distributions, see [Information for
     * Non-Endorsed
     * Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-create-upload-generic?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json).
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration.disablePasswordAuthentication]
     * Specifies whether password authentication should be disabled.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration.ssh]
     * Specifies the ssh key configuration for a Linux OS.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration.ssh.publicKeys]
     * The list of SSH public keys used to authenticate with linux based VMs.
     *
     * @param {array} [parameters.virtualMachineProfile.osProfile.secrets]
     * Specifies set of certificates that should be installed onto the virtual
     * machines in the scale set.
     *
     * @param {object} [parameters.virtualMachineProfile.storageProfile] Specifies
     * the storage settings for the virtual machine disks.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.storageProfile.imageReference] Specifies
     * information about the image to use. You can specify information about
     * platform images, marketplace images, or virtual machine images. This element
     * is required when you want to use a platform image, marketplace image, or
     * virtual machine image, but is not used in other creation operations.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.publisher]
     * The image publisher.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.offer]
     * Specifies the offer of the platform image or marketplace image used to
     * create the virtual machine.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.sku] The
     * image SKU.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.version]
     * Specifies the version of the platform image or marketplace image used to
     * create the virtual machine. The allowed formats are Major.Minor.Build or
     * 'latest'. Major, Minor, and Build are decimal numbers. Specify 'latest' to
     * use the latest version of an image available at deploy time. Even if you use
     * 'latest', the VM image will not automatically update after deploy time even
     * if a new version becomes available.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.id] Resource
     * Id
     *
     * @param {object} [parameters.virtualMachineProfile.storageProfile.osDisk]
     * Specifies information about the operating system disk used by the virtual
     * machines in the scale set. <br><br> For more information about disks, see
     * [About disks and VHDs for Azure virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.name] The disk name.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.caching] Specifies
     * the caching requirements. <br><br> Possible values are: <br><br> **None**
     * <br><br> **ReadOnly** <br><br> **ReadWrite** <br><br> Default: **None for
     * Standard storage. ReadOnly for Premium storage**. Possible values include:
     * 'None', 'ReadOnly', 'ReadWrite'
     *
     * @param {string}
     * parameters.virtualMachineProfile.storageProfile.osDisk.createOption
     * Specifies how the virtual machines in the scale set should be
     * created.<br><br> The only allowed value is: **FromImage** \u2013 This value
     * is used when you are using an image to create the virtual machine. If you
     * are using a platform image, you also use the imageReference element
     * described above. If you are using a marketplace image, you  also use the
     * plan element previously described. Possible values include: 'fromImage',
     * 'empty', 'attach'
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.osType] This
     * property allows you to specify the type of the OS that is included in the
     * disk if creating a VM from user-image or a specialized VHD. <br><br>
     * Possible values are: <br><br> **Windows** <br><br> **Linux**. Possible
     * values include: 'Windows', 'Linux'
     *
     * @param {object}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.image] Specifies
     * information about the unmanaged user image to base the scale set on.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.image.uri] Specifies
     * the virtual hard disk's uri.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.vhdContainers]
     * Specifies the container urls that are used to store operating system disks
     * for the scale set.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.managedDisk] The
     * managed disk parameters.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.managedDisk.storageAccountType]
     * Specifies the storage account type for the managed disk. Possible values
     * are: Standard_LRS or Premium_LRS. Possible values include: 'Standard_LRS',
     * 'Premium_LRS'
     *
     * @param {array} [parameters.virtualMachineProfile.storageProfile.dataDisks]
     * Specifies the parameters that are used to add data disks to the virtual
     * machines in the scale set. <br><br> For more information about disks, see
     * [About disks and VHDs for Azure virtual
     * machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).
     *
     * @param {object} [parameters.virtualMachineProfile.networkProfile] Specifies
     * properties of the network interfaces of the virtual machines in the scale
     * set.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.networkProfile.healthProbe] A reference to
     * a load balancer probe used to determine the health of an instance in the
     * virtual machine scale set. The reference will be in the form:
     * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.networkProfile.healthProbe.id] The ARM
     * resource id in the form of
     * /subscriptions/{SubcriptionId}/resourceGroups/{ResourceGroupName}/...
     *
     * @param {array}
     * [parameters.virtualMachineProfile.networkProfile.networkInterfaceConfigurations]
     * The list of network configurations.
     *
     * @param {object} [parameters.virtualMachineProfile.diagnosticsProfile]
     * Specifies the boot diagnostic settings state. <br><br>Minimum api-version:
     * 2015-06-15.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.diagnosticsProfile.bootDiagnostics] Boot
     * Diagnostics is a debugging feature which allows you to view Console Output
     * and Screenshot to diagnose VM status. <br><br> For Linux Virtual Machines,
     * you can easily view the output of your console log. <br><br> For both
     * Windows and Linux virtual machines, Azure also enables you to see a
     * screenshot of the VM from the hypervisor.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.diagnosticsProfile.bootDiagnostics.enabled]
     * Whether boot diagnostics should be enabled on the Virtual Machine.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.diagnosticsProfile.bootDiagnostics.storageUri]
     * Uri of the storage account to use for placing the console output and
     * screenshot.
     *
     * @param {object} [parameters.virtualMachineProfile.extensionProfile]
     * Specifies a collection of settings for extensions installed on virtual
     * machines in the scale set.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.extensionProfile.extensions] The virtual
     * machine scale set child extension resources.
     *
     * @param {string} [parameters.virtualMachineProfile.licenseType] Specifies
     * that the image or disk that is being used was licensed on-premises. This
     * element is only used for images that contain the Windows Server operating
     * system. <br><br> Possible values are: <br><br> Windows_Client <br><br>
     * Windows_Server <br><br> If this element is included in a request for an
     * update, the value must match the initial value. This value cannot be
     * updated. <br><br> For more information, see [Azure Hybrid Use Benefit for
     * Windows
     * Server](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-hybrid-use-benefit-licensing?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json)
     * <br><br> Minimum api-version: 2015-06-15
     *
     * @param {boolean} [parameters.overprovision] Specifies whether the Virtual
     * Machine Scale Set should be overprovisioned.
     *
     * @param {boolean} [parameters.singlePlacementGroup] When true this limits the
     * scale set to a single placement group, of max size 100 virtual machines.
     *
     * @param {object} [parameters.identity] The identity of the virtual machine
     * scale set, if configured.
     *
     * @param {string} [parameters.identity.type] The type of identity used for the
     * virtual machine scale set. Currently, the only supported type is
     * 'SystemAssigned', which implicitly creates an identity. Possible values
     * include: 'SystemAssigned'
     *
     * @param {array} [parameters.zones] The virtual machine scale set zones.
     *
     * @param {string} parameters.location Resource location
     *
     * @param {object} [parameters.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineScaleSet} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineScaleSet} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineScaleSet} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginCreateOrUpdate(resourceGroupName: string, vmScaleSetName: string, parameters: models.VirtualMachineScaleSet, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineScaleSet>;
    beginCreateOrUpdate(resourceGroupName: string, vmScaleSetName: string, parameters: models.VirtualMachineScaleSet, callback: ServiceCallback<models.VirtualMachineScaleSet>): void;
    beginCreateOrUpdate(resourceGroupName: string, vmScaleSetName: string, parameters: models.VirtualMachineScaleSet, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineScaleSet>): void;


    /**
     * Update a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set to create or
     * update.
     *
     * @param {object} parameters The scale set object.
     *
     * @param {object} [parameters.sku] The virtual machine scale set sku.
     *
     * @param {string} [parameters.sku.name] The sku name.
     *
     * @param {string} [parameters.sku.tier] Specifies the tier of virtual machines
     * in a scale set.<br /><br /> Possible Values:<br /><br /> **Standard**<br
     * /><br /> **Basic**
     *
     * @param {number} [parameters.sku.capacity] Specifies the number of virtual
     * machines in the scale set.
     *
     * @param {object} [parameters.plan] The purchase plan when deploying a virtual
     * machine scale set from VM Marketplace images.
     *
     * @param {string} [parameters.plan.name] The plan ID.
     *
     * @param {string} [parameters.plan.publisher] The publisher ID.
     *
     * @param {string} [parameters.plan.product] Specifies the product of the image
     * from the marketplace. This is the same value as Offer under the
     * imageReference element.
     *
     * @param {string} [parameters.plan.promotionCode] The promotion code.
     *
     * @param {object} [parameters.upgradePolicy] The upgrade policy.
     *
     * @param {string} [parameters.upgradePolicy.mode] Specifies the mode of an
     * upgrade to virtual machines in the scale set.<br /><br /> Possible values
     * are:<br /><br /> **Manual** - You  control the application of updates to
     * virtual machines in the scale set. You do this by using the manualUpgrade
     * action.<br /><br /> **Automatic** - All virtual machines in the scale set
     * are  automatically updated at the same time. Possible values include:
     * 'Automatic', 'Manual', 'Rolling'
     *
     * @param {object} [parameters.upgradePolicy.rollingUpgradePolicy] The
     * configuration parameters used while performing a rolling upgrade.
     *
     * @param {number}
     * [parameters.upgradePolicy.rollingUpgradePolicy.maxBatchInstancePercent] The
     * maximum percent of total virtual machine instances that will be upgraded
     * simultaneously by the rolling upgrade in one batch. As this is a maximum,
     * unhealthy instances in previous or future batches can cause the percentage
     * of instances in a batch to decrease to ensure higher reliability. The
     * default value for this parameter is 20%.
     *
     * @param {number}
     * [parameters.upgradePolicy.rollingUpgradePolicy.maxUnhealthyInstancePercent]
     * The maximum percentage of the total virtual machine instances in the scale
     * set that can be simultaneously unhealthy, either as a result of being
     * upgraded, or by being found in an unhealthy state by the virtual machine
     * health checks before the rolling upgrade aborts. This constraint will be
     * checked prior to starting any batch. The default value for this parameter is
     * 20%.
     *
     * @param {number}
     * [parameters.upgradePolicy.rollingUpgradePolicy.maxUnhealthyUpgradedInstancePercent]
     * The maximum percentage of upgraded virtual machine instances that can be
     * found to be in an unhealthy state. This check will happen after each batch
     * is upgraded. If this percentage is ever exceeded, the rolling update aborts.
     * The default value for this parameter is 20%.
     *
     * @param {string}
     * [parameters.upgradePolicy.rollingUpgradePolicy.pauseTimeBetweenBatches] The
     * wait time between completing the update for all virtual machines in one
     * batch and starting the next batch. The time duration should be specified in
     * ISO 8601 format. The default value is 0 seconds (PT0S).
     *
     * @param {boolean} [parameters.upgradePolicy.automaticOSUpgrade] Whether OS
     * upgrades should automatically be applied to scale set instances in a rolling
     * fashion when a newer version of the image becomes available.
     *
     * @param {object} [parameters.virtualMachineProfile] The virtual machine
     * profile.
     *
     * @param {object} [parameters.virtualMachineProfile.osProfile] The virtual
     * machine scale set OS profile.
     *
     * @param {string} [parameters.virtualMachineProfile.osProfile.customData] A
     * base-64 encoded string of custom data.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration] The
     * Windows Configuration of the OS profile.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.provisionVMAgent]
     * Indicates whether virtual machine agent should be provisioned on the virtual
     * machine. <br><br> When this property is not specified in the request body,
     * default behavior is to set it to true.  This will ensure that VM Agent is
     * installed on the VM so that extensions can be added to the VM later.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.enableAutomaticUpdates]
     * Indicates whether virtual machine is enabled for automatic updates.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.timeZone]
     * Specifies the time zone of the virtual machine. e.g. "Pacific Standard Time"
     *
     * @param {array}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.additionalUnattendContent]
     * Specifies additional base-64 encoded XML formatted information that can be
     * included in the Unattend.xml file, which is used by Windows Setup.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.winRM]
     * Specifies the Windows Remote Management listeners. This enables remote
     * Windows PowerShell.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.winRM.listeners]
     * The list of Windows Remote Management listeners
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration] The Linux
     * Configuration of the OS profile.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration.disablePasswordAuthentication]
     * Specifies whether password authentication should be disabled.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration.ssh]
     * Specifies the ssh key configuration for a Linux OS.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration.ssh.publicKeys]
     * The list of SSH public keys used to authenticate with linux based VMs.
     *
     * @param {array} [parameters.virtualMachineProfile.osProfile.secrets] The List
     * of certificates for addition to the VM.
     *
     * @param {object} [parameters.virtualMachineProfile.storageProfile] The
     * virtual machine scale set storage profile.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.storageProfile.imageReference] The image
     * reference.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.publisher]
     * The image publisher.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.offer]
     * Specifies the offer of the platform image or marketplace image used to
     * create the virtual machine.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.sku] The
     * image SKU.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.version]
     * Specifies the version of the platform image or marketplace image used to
     * create the virtual machine. The allowed formats are Major.Minor.Build or
     * 'latest'. Major, Minor, and Build are decimal numbers. Specify 'latest' to
     * use the latest version of an image available at deploy time. Even if you use
     * 'latest', the VM image will not automatically update after deploy time even
     * if a new version becomes available.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.id] Resource
     * Id
     *
     * @param {object} [parameters.virtualMachineProfile.storageProfile.osDisk] The
     * OS disk.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.caching] The caching
     * type. Possible values include: 'None', 'ReadOnly', 'ReadWrite'
     *
     * @param {object}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.image] The Source
     * User Image VirtualHardDisk. This VirtualHardDisk will be copied before using
     * it to attach to the Virtual Machine. If SourceImage is provided, the
     * destination VirtualHardDisk should not exist.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.image.uri] Specifies
     * the virtual hard disk's uri.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.vhdContainers] The
     * list of virtual hard disk container uris.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.managedDisk] The
     * managed disk parameters.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.managedDisk.storageAccountType]
     * Specifies the storage account type for the managed disk. Possible values
     * are: Standard_LRS or Premium_LRS. Possible values include: 'Standard_LRS',
     * 'Premium_LRS'
     *
     * @param {array} [parameters.virtualMachineProfile.storageProfile.dataDisks]
     * The data disks.
     *
     * @param {object} [parameters.virtualMachineProfile.networkProfile] The
     * virtual machine scale set network profile.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.networkProfile.networkInterfaceConfigurations]
     * The list of network configurations.
     *
     * @param {object} [parameters.virtualMachineProfile.diagnosticsProfile] The
     * virtual machine scale set diagnostics profile.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.diagnosticsProfile.bootDiagnostics] Boot
     * Diagnostics is a debugging feature which allows you to view Console Output
     * and Screenshot to diagnose VM status. <br><br> For Linux Virtual Machines,
     * you can easily view the output of your console log. <br><br> For both
     * Windows and Linux virtual machines, Azure also enables you to see a
     * screenshot of the VM from the hypervisor.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.diagnosticsProfile.bootDiagnostics.enabled]
     * Whether boot diagnostics should be enabled on the Virtual Machine.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.diagnosticsProfile.bootDiagnostics.storageUri]
     * Uri of the storage account to use for placing the console output and
     * screenshot.
     *
     * @param {object} [parameters.virtualMachineProfile.extensionProfile] The
     * virtual machine scale set extension profile.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.extensionProfile.extensions] The virtual
     * machine scale set child extension resources.
     *
     * @param {string} [parameters.virtualMachineProfile.licenseType] The license
     * type, which is for bring your own license scenario.
     *
     * @param {boolean} [parameters.overprovision] Specifies whether the Virtual
     * Machine Scale Set should be overprovisioned.
     *
     * @param {boolean} [parameters.singlePlacementGroup] When true this limits the
     * scale set to a single placement group, of max size 100 virtual machines.
     *
     * @param {object} [parameters.identity] The identity of the virtual machine
     * scale set, if configured.
     *
     * @param {string} [parameters.identity.type] The type of identity used for the
     * virtual machine scale set. Currently, the only supported type is
     * 'SystemAssigned', which implicitly creates an identity. Possible values
     * include: 'SystemAssigned'
     *
     * @param {object} [parameters.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineScaleSet>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginUpdateWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, parameters: models.VirtualMachineScaleSetUpdate, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineScaleSet>>;

    /**
     * Update a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set to create or
     * update.
     *
     * @param {object} parameters The scale set object.
     *
     * @param {object} [parameters.sku] The virtual machine scale set sku.
     *
     * @param {string} [parameters.sku.name] The sku name.
     *
     * @param {string} [parameters.sku.tier] Specifies the tier of virtual machines
     * in a scale set.<br /><br /> Possible Values:<br /><br /> **Standard**<br
     * /><br /> **Basic**
     *
     * @param {number} [parameters.sku.capacity] Specifies the number of virtual
     * machines in the scale set.
     *
     * @param {object} [parameters.plan] The purchase plan when deploying a virtual
     * machine scale set from VM Marketplace images.
     *
     * @param {string} [parameters.plan.name] The plan ID.
     *
     * @param {string} [parameters.plan.publisher] The publisher ID.
     *
     * @param {string} [parameters.plan.product] Specifies the product of the image
     * from the marketplace. This is the same value as Offer under the
     * imageReference element.
     *
     * @param {string} [parameters.plan.promotionCode] The promotion code.
     *
     * @param {object} [parameters.upgradePolicy] The upgrade policy.
     *
     * @param {string} [parameters.upgradePolicy.mode] Specifies the mode of an
     * upgrade to virtual machines in the scale set.<br /><br /> Possible values
     * are:<br /><br /> **Manual** - You  control the application of updates to
     * virtual machines in the scale set. You do this by using the manualUpgrade
     * action.<br /><br /> **Automatic** - All virtual machines in the scale set
     * are  automatically updated at the same time. Possible values include:
     * 'Automatic', 'Manual', 'Rolling'
     *
     * @param {object} [parameters.upgradePolicy.rollingUpgradePolicy] The
     * configuration parameters used while performing a rolling upgrade.
     *
     * @param {number}
     * [parameters.upgradePolicy.rollingUpgradePolicy.maxBatchInstancePercent] The
     * maximum percent of total virtual machine instances that will be upgraded
     * simultaneously by the rolling upgrade in one batch. As this is a maximum,
     * unhealthy instances in previous or future batches can cause the percentage
     * of instances in a batch to decrease to ensure higher reliability. The
     * default value for this parameter is 20%.
     *
     * @param {number}
     * [parameters.upgradePolicy.rollingUpgradePolicy.maxUnhealthyInstancePercent]
     * The maximum percentage of the total virtual machine instances in the scale
     * set that can be simultaneously unhealthy, either as a result of being
     * upgraded, or by being found in an unhealthy state by the virtual machine
     * health checks before the rolling upgrade aborts. This constraint will be
     * checked prior to starting any batch. The default value for this parameter is
     * 20%.
     *
     * @param {number}
     * [parameters.upgradePolicy.rollingUpgradePolicy.maxUnhealthyUpgradedInstancePercent]
     * The maximum percentage of upgraded virtual machine instances that can be
     * found to be in an unhealthy state. This check will happen after each batch
     * is upgraded. If this percentage is ever exceeded, the rolling update aborts.
     * The default value for this parameter is 20%.
     *
     * @param {string}
     * [parameters.upgradePolicy.rollingUpgradePolicy.pauseTimeBetweenBatches] The
     * wait time between completing the update for all virtual machines in one
     * batch and starting the next batch. The time duration should be specified in
     * ISO 8601 format. The default value is 0 seconds (PT0S).
     *
     * @param {boolean} [parameters.upgradePolicy.automaticOSUpgrade] Whether OS
     * upgrades should automatically be applied to scale set instances in a rolling
     * fashion when a newer version of the image becomes available.
     *
     * @param {object} [parameters.virtualMachineProfile] The virtual machine
     * profile.
     *
     * @param {object} [parameters.virtualMachineProfile.osProfile] The virtual
     * machine scale set OS profile.
     *
     * @param {string} [parameters.virtualMachineProfile.osProfile.customData] A
     * base-64 encoded string of custom data.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration] The
     * Windows Configuration of the OS profile.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.provisionVMAgent]
     * Indicates whether virtual machine agent should be provisioned on the virtual
     * machine. <br><br> When this property is not specified in the request body,
     * default behavior is to set it to true.  This will ensure that VM Agent is
     * installed on the VM so that extensions can be added to the VM later.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.enableAutomaticUpdates]
     * Indicates whether virtual machine is enabled for automatic updates.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.timeZone]
     * Specifies the time zone of the virtual machine. e.g. "Pacific Standard Time"
     *
     * @param {array}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.additionalUnattendContent]
     * Specifies additional base-64 encoded XML formatted information that can be
     * included in the Unattend.xml file, which is used by Windows Setup.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.winRM]
     * Specifies the Windows Remote Management listeners. This enables remote
     * Windows PowerShell.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.osProfile.windowsConfiguration.winRM.listeners]
     * The list of Windows Remote Management listeners
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration] The Linux
     * Configuration of the OS profile.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration.disablePasswordAuthentication]
     * Specifies whether password authentication should be disabled.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration.ssh]
     * Specifies the ssh key configuration for a Linux OS.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.osProfile.linuxConfiguration.ssh.publicKeys]
     * The list of SSH public keys used to authenticate with linux based VMs.
     *
     * @param {array} [parameters.virtualMachineProfile.osProfile.secrets] The List
     * of certificates for addition to the VM.
     *
     * @param {object} [parameters.virtualMachineProfile.storageProfile] The
     * virtual machine scale set storage profile.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.storageProfile.imageReference] The image
     * reference.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.publisher]
     * The image publisher.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.offer]
     * Specifies the offer of the platform image or marketplace image used to
     * create the virtual machine.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.sku] The
     * image SKU.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.version]
     * Specifies the version of the platform image or marketplace image used to
     * create the virtual machine. The allowed formats are Major.Minor.Build or
     * 'latest'. Major, Minor, and Build are decimal numbers. Specify 'latest' to
     * use the latest version of an image available at deploy time. Even if you use
     * 'latest', the VM image will not automatically update after deploy time even
     * if a new version becomes available.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.imageReference.id] Resource
     * Id
     *
     * @param {object} [parameters.virtualMachineProfile.storageProfile.osDisk] The
     * OS disk.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.caching] The caching
     * type. Possible values include: 'None', 'ReadOnly', 'ReadWrite'
     *
     * @param {object}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.image] The Source
     * User Image VirtualHardDisk. This VirtualHardDisk will be copied before using
     * it to attach to the Virtual Machine. If SourceImage is provided, the
     * destination VirtualHardDisk should not exist.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.image.uri] Specifies
     * the virtual hard disk's uri.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.vhdContainers] The
     * list of virtual hard disk container uris.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.managedDisk] The
     * managed disk parameters.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.storageProfile.osDisk.managedDisk.storageAccountType]
     * Specifies the storage account type for the managed disk. Possible values
     * are: Standard_LRS or Premium_LRS. Possible values include: 'Standard_LRS',
     * 'Premium_LRS'
     *
     * @param {array} [parameters.virtualMachineProfile.storageProfile.dataDisks]
     * The data disks.
     *
     * @param {object} [parameters.virtualMachineProfile.networkProfile] The
     * virtual machine scale set network profile.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.networkProfile.networkInterfaceConfigurations]
     * The list of network configurations.
     *
     * @param {object} [parameters.virtualMachineProfile.diagnosticsProfile] The
     * virtual machine scale set diagnostics profile.
     *
     * @param {object}
     * [parameters.virtualMachineProfile.diagnosticsProfile.bootDiagnostics] Boot
     * Diagnostics is a debugging feature which allows you to view Console Output
     * and Screenshot to diagnose VM status. <br><br> For Linux Virtual Machines,
     * you can easily view the output of your console log. <br><br> For both
     * Windows and Linux virtual machines, Azure also enables you to see a
     * screenshot of the VM from the hypervisor.
     *
     * @param {boolean}
     * [parameters.virtualMachineProfile.diagnosticsProfile.bootDiagnostics.enabled]
     * Whether boot diagnostics should be enabled on the Virtual Machine.
     *
     * @param {string}
     * [parameters.virtualMachineProfile.diagnosticsProfile.bootDiagnostics.storageUri]
     * Uri of the storage account to use for placing the console output and
     * screenshot.
     *
     * @param {object} [parameters.virtualMachineProfile.extensionProfile] The
     * virtual machine scale set extension profile.
     *
     * @param {array}
     * [parameters.virtualMachineProfile.extensionProfile.extensions] The virtual
     * machine scale set child extension resources.
     *
     * @param {string} [parameters.virtualMachineProfile.licenseType] The license
     * type, which is for bring your own license scenario.
     *
     * @param {boolean} [parameters.overprovision] Specifies whether the Virtual
     * Machine Scale Set should be overprovisioned.
     *
     * @param {boolean} [parameters.singlePlacementGroup] When true this limits the
     * scale set to a single placement group, of max size 100 virtual machines.
     *
     * @param {object} [parameters.identity] The identity of the virtual machine
     * scale set, if configured.
     *
     * @param {string} [parameters.identity.type] The type of identity used for the
     * virtual machine scale set. Currently, the only supported type is
     * 'SystemAssigned', which implicitly creates an identity. Possible values
     * include: 'SystemAssigned'
     *
     * @param {object} [parameters.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineScaleSet} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineScaleSet} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineScaleSet} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginUpdate(resourceGroupName: string, vmScaleSetName: string, parameters: models.VirtualMachineScaleSetUpdate, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineScaleSet>;
    beginUpdate(resourceGroupName: string, vmScaleSetName: string, parameters: models.VirtualMachineScaleSetUpdate, callback: ServiceCallback<models.VirtualMachineScaleSet>): void;
    beginUpdate(resourceGroupName: string, vmScaleSetName: string, parameters: models.VirtualMachineScaleSetUpdate, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineScaleSet>): void;


    /**
     * Deletes a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginDeleteMethodWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Deletes a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginDeleteMethod(resourceGroupName: string, vmScaleSetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginDeleteMethod(resourceGroupName: string, vmScaleSetName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginDeleteMethod(resourceGroupName: string, vmScaleSetName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Deallocates specific virtual machines in a VM scale set. Shuts down the
     * virtual machines and releases the compute resources. You are not billed for
     * the compute resources that this virtual machine scale set deallocates.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {array} [options.instanceIds] The virtual machine scale set instance
     * ids. Omitting the virtual machine scale set instance ids will result in the
     * operation being performed on all virtual machines in the virtual machine
     * scale set.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginDeallocateWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, options?: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Deallocates specific virtual machines in a VM scale set. Shuts down the
     * virtual machines and releases the compute resources. You are not billed for
     * the compute resources that this virtual machine scale set deallocates.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {array} [options.instanceIds] The virtual machine scale set instance
     * ids. Omitting the virtual machine scale set instance ids will result in the
     * operation being performed on all virtual machines in the virtual machine
     * scale set.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginDeallocate(resourceGroupName: string, vmScaleSetName: string, options?: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginDeallocate(resourceGroupName: string, vmScaleSetName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginDeallocate(resourceGroupName: string, vmScaleSetName: string, options: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Deletes virtual machines in a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {array} instanceIds The virtual machine scale set instance ids.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginDeleteInstancesWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, instanceIds: string[], options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Deletes virtual machines in a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {array} instanceIds The virtual machine scale set instance ids.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginDeleteInstances(resourceGroupName: string, vmScaleSetName: string, instanceIds: string[], options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginDeleteInstances(resourceGroupName: string, vmScaleSetName: string, instanceIds: string[], callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginDeleteInstances(resourceGroupName: string, vmScaleSetName: string, instanceIds: string[], options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Power off (stop) one or more virtual machines in a VM scale set. Note that
     * resources are still attached and you are getting charged for the resources.
     * Instead, use deallocate to release resources and avoid charges.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {array} [options.instanceIds] The virtual machine scale set instance
     * ids. Omitting the virtual machine scale set instance ids will result in the
     * operation being performed on all virtual machines in the virtual machine
     * scale set.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginPowerOffWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, options?: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Power off (stop) one or more virtual machines in a VM scale set. Note that
     * resources are still attached and you are getting charged for the resources.
     * Instead, use deallocate to release resources and avoid charges.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {array} [options.instanceIds] The virtual machine scale set instance
     * ids. Omitting the virtual machine scale set instance ids will result in the
     * operation being performed on all virtual machines in the virtual machine
     * scale set.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginPowerOff(resourceGroupName: string, vmScaleSetName: string, options?: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginPowerOff(resourceGroupName: string, vmScaleSetName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginPowerOff(resourceGroupName: string, vmScaleSetName: string, options: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Restarts one or more virtual machines in a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {array} [options.instanceIds] The virtual machine scale set instance
     * ids. Omitting the virtual machine scale set instance ids will result in the
     * operation being performed on all virtual machines in the virtual machine
     * scale set.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginRestartWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, options?: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Restarts one or more virtual machines in a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {array} [options.instanceIds] The virtual machine scale set instance
     * ids. Omitting the virtual machine scale set instance ids will result in the
     * operation being performed on all virtual machines in the virtual machine
     * scale set.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginRestart(resourceGroupName: string, vmScaleSetName: string, options?: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginRestart(resourceGroupName: string, vmScaleSetName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginRestart(resourceGroupName: string, vmScaleSetName: string, options: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Starts one or more virtual machines in a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {array} [options.instanceIds] The virtual machine scale set instance
     * ids. Omitting the virtual machine scale set instance ids will result in the
     * operation being performed on all virtual machines in the virtual machine
     * scale set.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginStartWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, options?: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Starts one or more virtual machines in a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {array} [options.instanceIds] The virtual machine scale set instance
     * ids. Omitting the virtual machine scale set instance ids will result in the
     * operation being performed on all virtual machines in the virtual machine
     * scale set.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginStart(resourceGroupName: string, vmScaleSetName: string, options?: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginStart(resourceGroupName: string, vmScaleSetName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginStart(resourceGroupName: string, vmScaleSetName: string, options: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Upgrades one or more virtual machines to the latest SKU set in the VM scale
     * set model.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {array} instanceIds The virtual machine scale set instance ids.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginUpdateInstancesWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, instanceIds: string[], options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Upgrades one or more virtual machines to the latest SKU set in the VM scale
     * set model.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {array} instanceIds The virtual machine scale set instance ids.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginUpdateInstances(resourceGroupName: string, vmScaleSetName: string, instanceIds: string[], options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginUpdateInstances(resourceGroupName: string, vmScaleSetName: string, instanceIds: string[], callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginUpdateInstances(resourceGroupName: string, vmScaleSetName: string, instanceIds: string[], options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Reimages (upgrade the operating system) one or more virtual machines in a VM
     * scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {array} [options.instanceIds] The virtual machine scale set instance
     * ids. Omitting the virtual machine scale set instance ids will result in the
     * operation being performed on all virtual machines in the virtual machine
     * scale set.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginReimageWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, options?: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Reimages (upgrade the operating system) one or more virtual machines in a VM
     * scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {array} [options.instanceIds] The virtual machine scale set instance
     * ids. Omitting the virtual machine scale set instance ids will result in the
     * operation being performed on all virtual machines in the virtual machine
     * scale set.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginReimage(resourceGroupName: string, vmScaleSetName: string, options?: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginReimage(resourceGroupName: string, vmScaleSetName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginReimage(resourceGroupName: string, vmScaleSetName: string, options: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Reimages all the disks ( including data disks ) in the virtual machines in a
     * VM scale set. This operation is only supported for managed disks.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {array} [options.instanceIds] The virtual machine scale set instance
     * ids. Omitting the virtual machine scale set instance ids will result in the
     * operation being performed on all virtual machines in the virtual machine
     * scale set.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginReimageAllWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, options?: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Reimages all the disks ( including data disks ) in the virtual machines in a
     * VM scale set. This operation is only supported for managed disks.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {array} [options.instanceIds] The virtual machine scale set instance
     * ids. Omitting the virtual machine scale set instance ids will result in the
     * operation being performed on all virtual machines in the virtual machine
     * scale set.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginReimageAll(resourceGroupName: string, vmScaleSetName: string, options?: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginReimageAll(resourceGroupName: string, vmScaleSetName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginReimageAll(resourceGroupName: string, vmScaleSetName: string, options: { instanceIds? : string[], customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Gets a list of all VM scale sets under a resource group.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineScaleSetListResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listNextWithHttpOperationResponse(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineScaleSetListResult>>;

    /**
     * Gets a list of all VM scale sets under a resource group.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineScaleSetListResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineScaleSetListResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineScaleSetListResult} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listNext(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineScaleSetListResult>;
    listNext(nextPageLink: string, callback: ServiceCallback<models.VirtualMachineScaleSetListResult>): void;
    listNext(nextPageLink: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineScaleSetListResult>): void;


    /**
     * Gets a list of all VM Scale Sets in the subscription, regardless of the
     * associated resource group. Use nextLink property in the response to get the
     * next page of VM Scale Sets. Do this till nextLink is not null to fetch all
     * the VM Scale Sets.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineScaleSetListWithLinkResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listAllNextWithHttpOperationResponse(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineScaleSetListWithLinkResult>>;

    /**
     * Gets a list of all VM Scale Sets in the subscription, regardless of the
     * associated resource group. Use nextLink property in the response to get the
     * next page of VM Scale Sets. Do this till nextLink is not null to fetch all
     * the VM Scale Sets.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineScaleSetListWithLinkResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineScaleSetListWithLinkResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineScaleSetListWithLinkResult}
     *                      for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listAllNext(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineScaleSetListWithLinkResult>;
    listAllNext(nextPageLink: string, callback: ServiceCallback<models.VirtualMachineScaleSetListWithLinkResult>): void;
    listAllNext(nextPageLink: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineScaleSetListWithLinkResult>): void;


    /**
     * Gets a list of SKUs available for your VM scale set, including the minimum
     * and maximum VM instances allowed for each SKU.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineScaleSetListSkusResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listSkusNextWithHttpOperationResponse(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineScaleSetListSkusResult>>;

    /**
     * Gets a list of SKUs available for your VM scale set, including the minimum
     * and maximum VM instances allowed for each SKU.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineScaleSetListSkusResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineScaleSetListSkusResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineScaleSetListSkusResult} for
     *                      more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listSkusNext(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineScaleSetListSkusResult>;
    listSkusNext(nextPageLink: string, callback: ServiceCallback<models.VirtualMachineScaleSetListSkusResult>): void;
    listSkusNext(nextPageLink: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineScaleSetListSkusResult>): void;
}

/**
 * @class
 * VirtualMachineScaleSetExtensions
 * __NOTE__: An instance of this class is automatically created for an
 * instance of the ComputeManagementClient.
 */
export interface VirtualMachineScaleSetExtensions {


    /**
     * The operation to create or update an extension.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set where the
     * extension should be create or updated.
     *
     * @param {string} vmssExtensionName The name of the VM scale set extension.
     *
     * @param {object} extensionParameters Parameters supplied to the Create VM
     * scale set Extension operation.
     *
     * @param {string} [extensionParameters.name] The name of the extension.
     *
     * @param {string} [extensionParameters.forceUpdateTag] If a value is provided
     * and is different from the previous value, the extension handler will be
     * forced to update even if the extension configuration has not changed.
     *
     * @param {string} [extensionParameters.publisher] The name of the extension
     * handler publisher.
     *
     * @param {string} [extensionParameters.type] Specifies the type of the
     * extension; an example is "CustomScriptExtension".
     *
     * @param {string} [extensionParameters.typeHandlerVersion] Specifies the
     * version of the script handler.
     *
     * @param {boolean} [extensionParameters.autoUpgradeMinorVersion] Indicates
     * whether the extension should use a newer minor version if one is available
     * at deployment time. Once deployed, however, the extension will not upgrade
     * minor versions unless redeployed, even with this property set to true.
     *
     * @param {object} [extensionParameters.settings] Json formatted public
     * settings for the extension.
     *
     * @param {object} [extensionParameters.protectedSettings] The extension can
     * contain either protectedSettings or protectedSettingsFromKeyVault or no
     * protected settings at all.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineScaleSetExtension>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    createOrUpdateWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, vmssExtensionName: string, extensionParameters: models.VirtualMachineScaleSetExtension, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineScaleSetExtension>>;

    /**
     * The operation to create or update an extension.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set where the
     * extension should be create or updated.
     *
     * @param {string} vmssExtensionName The name of the VM scale set extension.
     *
     * @param {object} extensionParameters Parameters supplied to the Create VM
     * scale set Extension operation.
     *
     * @param {string} [extensionParameters.name] The name of the extension.
     *
     * @param {string} [extensionParameters.forceUpdateTag] If a value is provided
     * and is different from the previous value, the extension handler will be
     * forced to update even if the extension configuration has not changed.
     *
     * @param {string} [extensionParameters.publisher] The name of the extension
     * handler publisher.
     *
     * @param {string} [extensionParameters.type] Specifies the type of the
     * extension; an example is "CustomScriptExtension".
     *
     * @param {string} [extensionParameters.typeHandlerVersion] Specifies the
     * version of the script handler.
     *
     * @param {boolean} [extensionParameters.autoUpgradeMinorVersion] Indicates
     * whether the extension should use a newer minor version if one is available
     * at deployment time. Once deployed, however, the extension will not upgrade
     * minor versions unless redeployed, even with this property set to true.
     *
     * @param {object} [extensionParameters.settings] Json formatted public
     * settings for the extension.
     *
     * @param {object} [extensionParameters.protectedSettings] The extension can
     * contain either protectedSettings or protectedSettingsFromKeyVault or no
     * protected settings at all.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineScaleSetExtension} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineScaleSetExtension} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineScaleSetExtension} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    createOrUpdate(resourceGroupName: string, vmScaleSetName: string, vmssExtensionName: string, extensionParameters: models.VirtualMachineScaleSetExtension, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineScaleSetExtension>;
    createOrUpdate(resourceGroupName: string, vmScaleSetName: string, vmssExtensionName: string, extensionParameters: models.VirtualMachineScaleSetExtension, callback: ServiceCallback<models.VirtualMachineScaleSetExtension>): void;
    createOrUpdate(resourceGroupName: string, vmScaleSetName: string, vmssExtensionName: string, extensionParameters: models.VirtualMachineScaleSetExtension, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineScaleSetExtension>): void;


    /**
     * The operation to delete the extension.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set where the
     * extension should be deleted.
     *
     * @param {string} vmssExtensionName The name of the VM scale set extension.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    deleteMethodWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, vmssExtensionName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * The operation to delete the extension.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set where the
     * extension should be deleted.
     *
     * @param {string} vmssExtensionName The name of the VM scale set extension.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    deleteMethod(resourceGroupName: string, vmScaleSetName: string, vmssExtensionName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    deleteMethod(resourceGroupName: string, vmScaleSetName: string, vmssExtensionName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    deleteMethod(resourceGroupName: string, vmScaleSetName: string, vmssExtensionName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * The operation to get the extension.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set containing the
     * extension.
     *
     * @param {string} vmssExtensionName The name of the VM scale set extension.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {string} [options.expand] The expand expression to apply on the
     * operation.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineScaleSetExtension>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    getWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, vmssExtensionName: string, options?: { expand? : string, customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineScaleSetExtension>>;

    /**
     * The operation to get the extension.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set containing the
     * extension.
     *
     * @param {string} vmssExtensionName The name of the VM scale set extension.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {string} [options.expand] The expand expression to apply on the
     * operation.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineScaleSetExtension} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineScaleSetExtension} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineScaleSetExtension} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    get(resourceGroupName: string, vmScaleSetName: string, vmssExtensionName: string, options?: { expand? : string, customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineScaleSetExtension>;
    get(resourceGroupName: string, vmScaleSetName: string, vmssExtensionName: string, callback: ServiceCallback<models.VirtualMachineScaleSetExtension>): void;
    get(resourceGroupName: string, vmScaleSetName: string, vmssExtensionName: string, options: { expand? : string, customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineScaleSetExtension>): void;


    /**
     * Gets a list of all extensions in a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set containing the
     * extension.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineScaleSetExtensionListResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineScaleSetExtensionListResult>>;

    /**
     * Gets a list of all extensions in a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set containing the
     * extension.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineScaleSetExtensionListResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineScaleSetExtensionListResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineScaleSetExtensionListResult}
     *                      for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    list(resourceGroupName: string, vmScaleSetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineScaleSetExtensionListResult>;
    list(resourceGroupName: string, vmScaleSetName: string, callback: ServiceCallback<models.VirtualMachineScaleSetExtensionListResult>): void;
    list(resourceGroupName: string, vmScaleSetName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineScaleSetExtensionListResult>): void;


    /**
     * The operation to create or update an extension.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set where the
     * extension should be create or updated.
     *
     * @param {string} vmssExtensionName The name of the VM scale set extension.
     *
     * @param {object} extensionParameters Parameters supplied to the Create VM
     * scale set Extension operation.
     *
     * @param {string} [extensionParameters.name] The name of the extension.
     *
     * @param {string} [extensionParameters.forceUpdateTag] If a value is provided
     * and is different from the previous value, the extension handler will be
     * forced to update even if the extension configuration has not changed.
     *
     * @param {string} [extensionParameters.publisher] The name of the extension
     * handler publisher.
     *
     * @param {string} [extensionParameters.type] Specifies the type of the
     * extension; an example is "CustomScriptExtension".
     *
     * @param {string} [extensionParameters.typeHandlerVersion] Specifies the
     * version of the script handler.
     *
     * @param {boolean} [extensionParameters.autoUpgradeMinorVersion] Indicates
     * whether the extension should use a newer minor version if one is available
     * at deployment time. Once deployed, however, the extension will not upgrade
     * minor versions unless redeployed, even with this property set to true.
     *
     * @param {object} [extensionParameters.settings] Json formatted public
     * settings for the extension.
     *
     * @param {object} [extensionParameters.protectedSettings] The extension can
     * contain either protectedSettings or protectedSettingsFromKeyVault or no
     * protected settings at all.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineScaleSetExtension>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginCreateOrUpdateWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, vmssExtensionName: string, extensionParameters: models.VirtualMachineScaleSetExtension, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineScaleSetExtension>>;

    /**
     * The operation to create or update an extension.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set where the
     * extension should be create or updated.
     *
     * @param {string} vmssExtensionName The name of the VM scale set extension.
     *
     * @param {object} extensionParameters Parameters supplied to the Create VM
     * scale set Extension operation.
     *
     * @param {string} [extensionParameters.name] The name of the extension.
     *
     * @param {string} [extensionParameters.forceUpdateTag] If a value is provided
     * and is different from the previous value, the extension handler will be
     * forced to update even if the extension configuration has not changed.
     *
     * @param {string} [extensionParameters.publisher] The name of the extension
     * handler publisher.
     *
     * @param {string} [extensionParameters.type] Specifies the type of the
     * extension; an example is "CustomScriptExtension".
     *
     * @param {string} [extensionParameters.typeHandlerVersion] Specifies the
     * version of the script handler.
     *
     * @param {boolean} [extensionParameters.autoUpgradeMinorVersion] Indicates
     * whether the extension should use a newer minor version if one is available
     * at deployment time. Once deployed, however, the extension will not upgrade
     * minor versions unless redeployed, even with this property set to true.
     *
     * @param {object} [extensionParameters.settings] Json formatted public
     * settings for the extension.
     *
     * @param {object} [extensionParameters.protectedSettings] The extension can
     * contain either protectedSettings or protectedSettingsFromKeyVault or no
     * protected settings at all.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineScaleSetExtension} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineScaleSetExtension} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineScaleSetExtension} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginCreateOrUpdate(resourceGroupName: string, vmScaleSetName: string, vmssExtensionName: string, extensionParameters: models.VirtualMachineScaleSetExtension, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineScaleSetExtension>;
    beginCreateOrUpdate(resourceGroupName: string, vmScaleSetName: string, vmssExtensionName: string, extensionParameters: models.VirtualMachineScaleSetExtension, callback: ServiceCallback<models.VirtualMachineScaleSetExtension>): void;
    beginCreateOrUpdate(resourceGroupName: string, vmScaleSetName: string, vmssExtensionName: string, extensionParameters: models.VirtualMachineScaleSetExtension, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineScaleSetExtension>): void;


    /**
     * The operation to delete the extension.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set where the
     * extension should be deleted.
     *
     * @param {string} vmssExtensionName The name of the VM scale set extension.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginDeleteMethodWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, vmssExtensionName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * The operation to delete the extension.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set where the
     * extension should be deleted.
     *
     * @param {string} vmssExtensionName The name of the VM scale set extension.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginDeleteMethod(resourceGroupName: string, vmScaleSetName: string, vmssExtensionName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginDeleteMethod(resourceGroupName: string, vmScaleSetName: string, vmssExtensionName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginDeleteMethod(resourceGroupName: string, vmScaleSetName: string, vmssExtensionName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Gets a list of all extensions in a VM scale set.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineScaleSetExtensionListResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listNextWithHttpOperationResponse(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineScaleSetExtensionListResult>>;

    /**
     * Gets a list of all extensions in a VM scale set.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineScaleSetExtensionListResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineScaleSetExtensionListResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineScaleSetExtensionListResult}
     *                      for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listNext(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineScaleSetExtensionListResult>;
    listNext(nextPageLink: string, callback: ServiceCallback<models.VirtualMachineScaleSetExtensionListResult>): void;
    listNext(nextPageLink: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineScaleSetExtensionListResult>): void;
}

/**
 * @class
 * VirtualMachineScaleSetRollingUpgrades
 * __NOTE__: An instance of this class is automatically created for an
 * instance of the ComputeManagementClient.
 */
export interface VirtualMachineScaleSetRollingUpgrades {


    /**
     * Cancels the current virtual machine scale set rolling upgrade.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    cancelWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Cancels the current virtual machine scale set rolling upgrade.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    cancel(resourceGroupName: string, vmScaleSetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    cancel(resourceGroupName: string, vmScaleSetName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    cancel(resourceGroupName: string, vmScaleSetName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Starts a rolling upgrade to move all virtual machine scale set instances to
     * the latest available Platform Image OS version. Instances which are already
     * running the latest available OS version are not affected.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    startOSUpgradeWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Starts a rolling upgrade to move all virtual machine scale set instances to
     * the latest available Platform Image OS version. Instances which are already
     * running the latest available OS version are not affected.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    startOSUpgrade(resourceGroupName: string, vmScaleSetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    startOSUpgrade(resourceGroupName: string, vmScaleSetName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    startOSUpgrade(resourceGroupName: string, vmScaleSetName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Gets the status of the latest virtual machine scale set rolling upgrade.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<RollingUpgradeStatusInfo>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    getLatestWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.RollingUpgradeStatusInfo>>;

    /**
     * Gets the status of the latest virtual machine scale set rolling upgrade.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {RollingUpgradeStatusInfo} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {RollingUpgradeStatusInfo} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link RollingUpgradeStatusInfo} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    getLatest(resourceGroupName: string, vmScaleSetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.RollingUpgradeStatusInfo>;
    getLatest(resourceGroupName: string, vmScaleSetName: string, callback: ServiceCallback<models.RollingUpgradeStatusInfo>): void;
    getLatest(resourceGroupName: string, vmScaleSetName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.RollingUpgradeStatusInfo>): void;


    /**
     * Cancels the current virtual machine scale set rolling upgrade.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginCancelWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Cancels the current virtual machine scale set rolling upgrade.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginCancel(resourceGroupName: string, vmScaleSetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginCancel(resourceGroupName: string, vmScaleSetName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginCancel(resourceGroupName: string, vmScaleSetName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Starts a rolling upgrade to move all virtual machine scale set instances to
     * the latest available Platform Image OS version. Instances which are already
     * running the latest available OS version are not affected.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginStartOSUpgradeWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Starts a rolling upgrade to move all virtual machine scale set instances to
     * the latest available Platform Image OS version. Instances which are already
     * running the latest available OS version are not affected.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginStartOSUpgrade(resourceGroupName: string, vmScaleSetName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginStartOSUpgrade(resourceGroupName: string, vmScaleSetName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginStartOSUpgrade(resourceGroupName: string, vmScaleSetName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;
}

/**
 * @class
 * VirtualMachineScaleSetVMs
 * __NOTE__: An instance of this class is automatically created for an
 * instance of the ComputeManagementClient.
 */
export interface VirtualMachineScaleSetVMs {


    /**
     * Reimages (upgrade the operating system) a specific virtual machine in a VM
     * scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    reimageWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Reimages (upgrade the operating system) a specific virtual machine in a VM
     * scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    reimage(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    reimage(resourceGroupName: string, vmScaleSetName: string, instanceId: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    reimage(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Allows you to re-image all the disks ( including data disks ) in the a VM
     * scale set instance. This operation is only supported for managed disks.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    reimageAllWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Allows you to re-image all the disks ( including data disks ) in the a VM
     * scale set instance. This operation is only supported for managed disks.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    reimageAll(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    reimageAll(resourceGroupName: string, vmScaleSetName: string, instanceId: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    reimageAll(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Deallocates a specific virtual machine in a VM scale set. Shuts down the
     * virtual machine and releases the compute resources it uses. You are not
     * billed for the compute resources of this virtual machine once it is
     * deallocated.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    deallocateWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Deallocates a specific virtual machine in a VM scale set. Shuts down the
     * virtual machine and releases the compute resources it uses. You are not
     * billed for the compute resources of this virtual machine once it is
     * deallocated.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    deallocate(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    deallocate(resourceGroupName: string, vmScaleSetName: string, instanceId: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    deallocate(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Deletes a virtual machine from a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    deleteMethodWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Deletes a virtual machine from a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    deleteMethod(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    deleteMethod(resourceGroupName: string, vmScaleSetName: string, instanceId: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    deleteMethod(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Gets a virtual machine from a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineScaleSetVM>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    getWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineScaleSetVM>>;

    /**
     * Gets a virtual machine from a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineScaleSetVM} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineScaleSetVM} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineScaleSetVM} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    get(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineScaleSetVM>;
    get(resourceGroupName: string, vmScaleSetName: string, instanceId: string, callback: ServiceCallback<models.VirtualMachineScaleSetVM>): void;
    get(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineScaleSetVM>): void;


    /**
     * Gets the status of a virtual machine from a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineScaleSetVMInstanceView>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    getInstanceViewWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineScaleSetVMInstanceView>>;

    /**
     * Gets the status of a virtual machine from a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineScaleSetVMInstanceView} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineScaleSetVMInstanceView} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineScaleSetVMInstanceView} for
     *                      more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    getInstanceView(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineScaleSetVMInstanceView>;
    getInstanceView(resourceGroupName: string, vmScaleSetName: string, instanceId: string, callback: ServiceCallback<models.VirtualMachineScaleSetVMInstanceView>): void;
    getInstanceView(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineScaleSetVMInstanceView>): void;


    /**
     * Gets a list of all virtual machines in a VM scale sets.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} virtualMachineScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {string} [options.filter] The filter to apply to the operation.
     *
     * @param {string} [options.select] The list parameters.
     *
     * @param {string} [options.expand] The expand expression to apply to the
     * operation.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineScaleSetVMListResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listWithHttpOperationResponse(resourceGroupName: string, virtualMachineScaleSetName: string, options?: { filter? : string, select? : string, expand? : string, customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineScaleSetVMListResult>>;

    /**
     * Gets a list of all virtual machines in a VM scale sets.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} virtualMachineScaleSetName The name of the VM scale set.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {string} [options.filter] The filter to apply to the operation.
     *
     * @param {string} [options.select] The list parameters.
     *
     * @param {string} [options.expand] The expand expression to apply to the
     * operation.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineScaleSetVMListResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineScaleSetVMListResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineScaleSetVMListResult} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    list(resourceGroupName: string, virtualMachineScaleSetName: string, options?: { filter? : string, select? : string, expand? : string, customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineScaleSetVMListResult>;
    list(resourceGroupName: string, virtualMachineScaleSetName: string, callback: ServiceCallback<models.VirtualMachineScaleSetVMListResult>): void;
    list(resourceGroupName: string, virtualMachineScaleSetName: string, options: { filter? : string, select? : string, expand? : string, customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineScaleSetVMListResult>): void;


    /**
     * Power off (stop) a virtual machine in a VM scale set. Note that resources
     * are still attached and you are getting charged for the resources. Instead,
     * use deallocate to release resources and avoid charges.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    powerOffWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Power off (stop) a virtual machine in a VM scale set. Note that resources
     * are still attached and you are getting charged for the resources. Instead,
     * use deallocate to release resources and avoid charges.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    powerOff(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    powerOff(resourceGroupName: string, vmScaleSetName: string, instanceId: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    powerOff(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Restarts a virtual machine in a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    restartWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Restarts a virtual machine in a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    restart(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    restart(resourceGroupName: string, vmScaleSetName: string, instanceId: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    restart(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Starts a virtual machine in a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    startWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Starts a virtual machine in a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    start(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    start(resourceGroupName: string, vmScaleSetName: string, instanceId: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    start(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Reimages (upgrade the operating system) a specific virtual machine in a VM
     * scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginReimageWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Reimages (upgrade the operating system) a specific virtual machine in a VM
     * scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginReimage(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginReimage(resourceGroupName: string, vmScaleSetName: string, instanceId: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginReimage(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Allows you to re-image all the disks ( including data disks ) in the a VM
     * scale set instance. This operation is only supported for managed disks.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginReimageAllWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Allows you to re-image all the disks ( including data disks ) in the a VM
     * scale set instance. This operation is only supported for managed disks.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginReimageAll(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginReimageAll(resourceGroupName: string, vmScaleSetName: string, instanceId: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginReimageAll(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Deallocates a specific virtual machine in a VM scale set. Shuts down the
     * virtual machine and releases the compute resources it uses. You are not
     * billed for the compute resources of this virtual machine once it is
     * deallocated.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginDeallocateWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Deallocates a specific virtual machine in a VM scale set. Shuts down the
     * virtual machine and releases the compute resources it uses. You are not
     * billed for the compute resources of this virtual machine once it is
     * deallocated.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginDeallocate(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginDeallocate(resourceGroupName: string, vmScaleSetName: string, instanceId: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginDeallocate(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Deletes a virtual machine from a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginDeleteMethodWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Deletes a virtual machine from a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginDeleteMethod(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginDeleteMethod(resourceGroupName: string, vmScaleSetName: string, instanceId: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginDeleteMethod(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Power off (stop) a virtual machine in a VM scale set. Note that resources
     * are still attached and you are getting charged for the resources. Instead,
     * use deallocate to release resources and avoid charges.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginPowerOffWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Power off (stop) a virtual machine in a VM scale set. Note that resources
     * are still attached and you are getting charged for the resources. Instead,
     * use deallocate to release resources and avoid charges.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginPowerOff(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginPowerOff(resourceGroupName: string, vmScaleSetName: string, instanceId: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginPowerOff(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Restarts a virtual machine in a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginRestartWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Restarts a virtual machine in a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginRestart(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginRestart(resourceGroupName: string, vmScaleSetName: string, instanceId: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginRestart(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Starts a virtual machine in a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginStartWithHttpOperationResponse(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Starts a virtual machine in a VM scale set.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} vmScaleSetName The name of the VM scale set.
     *
     * @param {string} instanceId The instance ID of the virtual machine.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginStart(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginStart(resourceGroupName: string, vmScaleSetName: string, instanceId: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginStart(resourceGroupName: string, vmScaleSetName: string, instanceId: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Gets a list of all virtual machines in a VM scale sets.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<VirtualMachineScaleSetVMListResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listNextWithHttpOperationResponse(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.VirtualMachineScaleSetVMListResult>>;

    /**
     * Gets a list of all virtual machines in a VM scale sets.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {VirtualMachineScaleSetVMListResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {VirtualMachineScaleSetVMListResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link VirtualMachineScaleSetVMListResult} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listNext(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.VirtualMachineScaleSetVMListResult>;
    listNext(nextPageLink: string, callback: ServiceCallback<models.VirtualMachineScaleSetVMListResult>): void;
    listNext(nextPageLink: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.VirtualMachineScaleSetVMListResult>): void;
}

/**
 * @class
 * Disks
 * __NOTE__: An instance of this class is automatically created for an
 * instance of the ComputeManagementClient.
 */
export interface Disks {


    /**
     * Creates or updates a disk.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} diskName The name of the disk within the given subscription
     * and resource group.
     *
     * @param {object} disk Disk object supplied in the body of the Put disk
     * operation.
     *
     * @param {object} [disk.sku]
     *
     * @param {string} [disk.sku.name] The sku name. Possible values include:
     * 'Standard_LRS', 'Premium_LRS'
     *
     * @param {array} [disk.zones] The Logical zone list for Disk.
     *
     * @param {string} [disk.osType] The Operating System type. Possible values
     * include: 'Windows', 'Linux'
     *
     * @param {object} disk.creationData Disk source information. CreationData
     * information cannot be changed after the disk has been created.
     *
     * @param {string} disk.creationData.createOption This enumerates the possible
     * sources of a disk's creation. Possible values include: 'Empty', 'Attach',
     * 'FromImage', 'Import', 'Copy'
     *
     * @param {string} [disk.creationData.storageAccountId] If createOption is
     * Import, the Azure Resource Manager identifier of the storage account
     * containing the blob to import as a disk. Required only if the blob is in a
     * different subscription
     *
     * @param {object} [disk.creationData.imageReference] Disk source information.
     *
     * @param {string} disk.creationData.imageReference.id A relative uri
     * containing either a Platform Imgage Repository or user image reference.
     *
     * @param {number} [disk.creationData.imageReference.lun] If the disk is
     * created from an image's data disk, this is an index that indicates which of
     * the data disks in the image to use. For OS disks, this field is null.
     *
     * @param {string} [disk.creationData.sourceUri] If creationOption is Import,
     * this is the URI of a blob to be imported into a managed disk.
     *
     * @param {string} [disk.creationData.sourceResourceId] If createOption is
     * Copy, this is the ARM id of the source snapshot or disk.
     *
     * @param {number} [disk.diskSizeGB] If creationData.createOption is Empty,
     * this field is mandatory and it indicates the size of the VHD to create. If
     * this field is present for updates or creation with other options, it
     * indicates a resize. Resizes are only allowed if the disk is not attached to
     * a running VM, and can only increase the disk's size.
     *
     * @param {object} [disk.encryptionSettings] Encryption settings for disk or
     * snapshot
     *
     * @param {boolean} [disk.encryptionSettings.enabled] Set this flag to true and
     * provide DiskEncryptionKey and optional KeyEncryptionKey to enable
     * encryption. Set this flag to false and remove DiskEncryptionKey and
     * KeyEncryptionKey to disable encryption. If EncryptionSettings is null in the
     * request object, the existing settings remain unchanged.
     *
     * @param {object} [disk.encryptionSettings.diskEncryptionKey] Key Vault Secret
     * Url and vault id of the disk encryption key
     *
     * @param {object} disk.encryptionSettings.diskEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string} disk.encryptionSettings.diskEncryptionKey.secretUrl Url
     * pointing to a key or secret in KeyVault
     *
     * @param {object} [disk.encryptionSettings.keyEncryptionKey] Key Vault Key Url
     * and vault id of the key encryption key
     *
     * @param {object} disk.encryptionSettings.keyEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string} [disk.encryptionSettings.keyEncryptionKey.sourceVault.id]
     * Resource Id
     *
     * @param {string} disk.encryptionSettings.keyEncryptionKey.keyUrl Url pointing
     * to a key or secret in KeyVault
     *
     * @param {string} disk.location Resource location
     *
     * @param {object} [disk.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<Disk>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    createOrUpdateWithHttpOperationResponse(resourceGroupName: string, diskName: string, disk: models.Disk, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.Disk>>;

    /**
     * Creates or updates a disk.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} diskName The name of the disk within the given subscription
     * and resource group.
     *
     * @param {object} disk Disk object supplied in the body of the Put disk
     * operation.
     *
     * @param {object} [disk.sku]
     *
     * @param {string} [disk.sku.name] The sku name. Possible values include:
     * 'Standard_LRS', 'Premium_LRS'
     *
     * @param {array} [disk.zones] The Logical zone list for Disk.
     *
     * @param {string} [disk.osType] The Operating System type. Possible values
     * include: 'Windows', 'Linux'
     *
     * @param {object} disk.creationData Disk source information. CreationData
     * information cannot be changed after the disk has been created.
     *
     * @param {string} disk.creationData.createOption This enumerates the possible
     * sources of a disk's creation. Possible values include: 'Empty', 'Attach',
     * 'FromImage', 'Import', 'Copy'
     *
     * @param {string} [disk.creationData.storageAccountId] If createOption is
     * Import, the Azure Resource Manager identifier of the storage account
     * containing the blob to import as a disk. Required only if the blob is in a
     * different subscription
     *
     * @param {object} [disk.creationData.imageReference] Disk source information.
     *
     * @param {string} disk.creationData.imageReference.id A relative uri
     * containing either a Platform Imgage Repository or user image reference.
     *
     * @param {number} [disk.creationData.imageReference.lun] If the disk is
     * created from an image's data disk, this is an index that indicates which of
     * the data disks in the image to use. For OS disks, this field is null.
     *
     * @param {string} [disk.creationData.sourceUri] If creationOption is Import,
     * this is the URI of a blob to be imported into a managed disk.
     *
     * @param {string} [disk.creationData.sourceResourceId] If createOption is
     * Copy, this is the ARM id of the source snapshot or disk.
     *
     * @param {number} [disk.diskSizeGB] If creationData.createOption is Empty,
     * this field is mandatory and it indicates the size of the VHD to create. If
     * this field is present for updates or creation with other options, it
     * indicates a resize. Resizes are only allowed if the disk is not attached to
     * a running VM, and can only increase the disk's size.
     *
     * @param {object} [disk.encryptionSettings] Encryption settings for disk or
     * snapshot
     *
     * @param {boolean} [disk.encryptionSettings.enabled] Set this flag to true and
     * provide DiskEncryptionKey and optional KeyEncryptionKey to enable
     * encryption. Set this flag to false and remove DiskEncryptionKey and
     * KeyEncryptionKey to disable encryption. If EncryptionSettings is null in the
     * request object, the existing settings remain unchanged.
     *
     * @param {object} [disk.encryptionSettings.diskEncryptionKey] Key Vault Secret
     * Url and vault id of the disk encryption key
     *
     * @param {object} disk.encryptionSettings.diskEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string} disk.encryptionSettings.diskEncryptionKey.secretUrl Url
     * pointing to a key or secret in KeyVault
     *
     * @param {object} [disk.encryptionSettings.keyEncryptionKey] Key Vault Key Url
     * and vault id of the key encryption key
     *
     * @param {object} disk.encryptionSettings.keyEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string} [disk.encryptionSettings.keyEncryptionKey.sourceVault.id]
     * Resource Id
     *
     * @param {string} disk.encryptionSettings.keyEncryptionKey.keyUrl Url pointing
     * to a key or secret in KeyVault
     *
     * @param {string} disk.location Resource location
     *
     * @param {object} [disk.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {Disk} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {Disk} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link Disk} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    createOrUpdate(resourceGroupName: string, diskName: string, disk: models.Disk, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.Disk>;
    createOrUpdate(resourceGroupName: string, diskName: string, disk: models.Disk, callback: ServiceCallback<models.Disk>): void;
    createOrUpdate(resourceGroupName: string, diskName: string, disk: models.Disk, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.Disk>): void;


    /**
     * Updates (patches) a disk.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} diskName The name of the disk within the given subscription
     * and resource group.
     *
     * @param {object} disk Disk object supplied in the body of the Patch disk
     * operation.
     *
     * @param {string} [disk.osType] the Operating System type. Possible values
     * include: 'Windows', 'Linux'
     *
     * @param {number} [disk.diskSizeGB] If creationData.createOption is Empty,
     * this field is mandatory and it indicates the size of the VHD to create. If
     * this field is present for updates or creation with other options, it
     * indicates a resize. Resizes are only allowed if the disk is not attached to
     * a running VM, and can only increase the disk's size.
     *
     * @param {object} [disk.encryptionSettings] Encryption settings for disk or
     * snapshot
     *
     * @param {boolean} [disk.encryptionSettings.enabled] Set this flag to true and
     * provide DiskEncryptionKey and optional KeyEncryptionKey to enable
     * encryption. Set this flag to false and remove DiskEncryptionKey and
     * KeyEncryptionKey to disable encryption. If EncryptionSettings is null in the
     * request object, the existing settings remain unchanged.
     *
     * @param {object} [disk.encryptionSettings.diskEncryptionKey] Key Vault Secret
     * Url and vault id of the disk encryption key
     *
     * @param {object} disk.encryptionSettings.diskEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string} disk.encryptionSettings.diskEncryptionKey.secretUrl Url
     * pointing to a key or secret in KeyVault
     *
     * @param {object} [disk.encryptionSettings.keyEncryptionKey] Key Vault Key Url
     * and vault id of the key encryption key
     *
     * @param {object} disk.encryptionSettings.keyEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string} [disk.encryptionSettings.keyEncryptionKey.sourceVault.id]
     * Resource Id
     *
     * @param {string} disk.encryptionSettings.keyEncryptionKey.keyUrl Url pointing
     * to a key or secret in KeyVault
     *
     * @param {object} [disk.tags] Resource tags
     *
     * @param {object} [disk.sku]
     *
     * @param {string} [disk.sku.name] The sku name. Possible values include:
     * 'Standard_LRS', 'Premium_LRS'
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<Disk>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    updateWithHttpOperationResponse(resourceGroupName: string, diskName: string, disk: models.DiskUpdate, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.Disk>>;

    /**
     * Updates (patches) a disk.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} diskName The name of the disk within the given subscription
     * and resource group.
     *
     * @param {object} disk Disk object supplied in the body of the Patch disk
     * operation.
     *
     * @param {string} [disk.osType] the Operating System type. Possible values
     * include: 'Windows', 'Linux'
     *
     * @param {number} [disk.diskSizeGB] If creationData.createOption is Empty,
     * this field is mandatory and it indicates the size of the VHD to create. If
     * this field is present for updates or creation with other options, it
     * indicates a resize. Resizes are only allowed if the disk is not attached to
     * a running VM, and can only increase the disk's size.
     *
     * @param {object} [disk.encryptionSettings] Encryption settings for disk or
     * snapshot
     *
     * @param {boolean} [disk.encryptionSettings.enabled] Set this flag to true and
     * provide DiskEncryptionKey and optional KeyEncryptionKey to enable
     * encryption. Set this flag to false and remove DiskEncryptionKey and
     * KeyEncryptionKey to disable encryption. If EncryptionSettings is null in the
     * request object, the existing settings remain unchanged.
     *
     * @param {object} [disk.encryptionSettings.diskEncryptionKey] Key Vault Secret
     * Url and vault id of the disk encryption key
     *
     * @param {object} disk.encryptionSettings.diskEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string} disk.encryptionSettings.diskEncryptionKey.secretUrl Url
     * pointing to a key or secret in KeyVault
     *
     * @param {object} [disk.encryptionSettings.keyEncryptionKey] Key Vault Key Url
     * and vault id of the key encryption key
     *
     * @param {object} disk.encryptionSettings.keyEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string} [disk.encryptionSettings.keyEncryptionKey.sourceVault.id]
     * Resource Id
     *
     * @param {string} disk.encryptionSettings.keyEncryptionKey.keyUrl Url pointing
     * to a key or secret in KeyVault
     *
     * @param {object} [disk.tags] Resource tags
     *
     * @param {object} [disk.sku]
     *
     * @param {string} [disk.sku.name] The sku name. Possible values include:
     * 'Standard_LRS', 'Premium_LRS'
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {Disk} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {Disk} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link Disk} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    update(resourceGroupName: string, diskName: string, disk: models.DiskUpdate, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.Disk>;
    update(resourceGroupName: string, diskName: string, disk: models.DiskUpdate, callback: ServiceCallback<models.Disk>): void;
    update(resourceGroupName: string, diskName: string, disk: models.DiskUpdate, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.Disk>): void;


    /**
     * Gets information about a disk.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} diskName The name of the disk within the given subscription
     * and resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<Disk>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    getWithHttpOperationResponse(resourceGroupName: string, diskName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.Disk>>;

    /**
     * Gets information about a disk.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} diskName The name of the disk within the given subscription
     * and resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {Disk} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {Disk} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link Disk} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    get(resourceGroupName: string, diskName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.Disk>;
    get(resourceGroupName: string, diskName: string, callback: ServiceCallback<models.Disk>): void;
    get(resourceGroupName: string, diskName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.Disk>): void;


    /**
     * Deletes a disk.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} diskName The name of the disk within the given subscription
     * and resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    deleteMethodWithHttpOperationResponse(resourceGroupName: string, diskName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Deletes a disk.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} diskName The name of the disk within the given subscription
     * and resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    deleteMethod(resourceGroupName: string, diskName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    deleteMethod(resourceGroupName: string, diskName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    deleteMethod(resourceGroupName: string, diskName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Lists all the disks under a resource group.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<DiskList>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listByResourceGroupWithHttpOperationResponse(resourceGroupName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.DiskList>>;

    /**
     * Lists all the disks under a resource group.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {DiskList} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {DiskList} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link DiskList} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listByResourceGroup(resourceGroupName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.DiskList>;
    listByResourceGroup(resourceGroupName: string, callback: ServiceCallback<models.DiskList>): void;
    listByResourceGroup(resourceGroupName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.DiskList>): void;


    /**
     * Lists all the disks under a subscription.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<DiskList>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listWithHttpOperationResponse(options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.DiskList>>;

    /**
     * Lists all the disks under a subscription.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {DiskList} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {DiskList} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link DiskList} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    list(options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.DiskList>;
    list(callback: ServiceCallback<models.DiskList>): void;
    list(options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.DiskList>): void;


    /**
     * Grants access to a disk.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} diskName The name of the disk within the given subscription
     * and resource group.
     *
     * @param {object} grantAccessData Access data object supplied in the body of
     * the get disk access operation.
     *
     * @param {string} grantAccessData.access Possible values include: 'None',
     * 'Read'
     *
     * @param {number} grantAccessData.durationInSeconds Time duration in seconds
     * until the SAS access expires.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<AccessUri>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    grantAccessWithHttpOperationResponse(resourceGroupName: string, diskName: string, grantAccessData: models.GrantAccessData, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.AccessUri>>;

    /**
     * Grants access to a disk.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} diskName The name of the disk within the given subscription
     * and resource group.
     *
     * @param {object} grantAccessData Access data object supplied in the body of
     * the get disk access operation.
     *
     * @param {string} grantAccessData.access Possible values include: 'None',
     * 'Read'
     *
     * @param {number} grantAccessData.durationInSeconds Time duration in seconds
     * until the SAS access expires.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {AccessUri} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {AccessUri} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link AccessUri} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    grantAccess(resourceGroupName: string, diskName: string, grantAccessData: models.GrantAccessData, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.AccessUri>;
    grantAccess(resourceGroupName: string, diskName: string, grantAccessData: models.GrantAccessData, callback: ServiceCallback<models.AccessUri>): void;
    grantAccess(resourceGroupName: string, diskName: string, grantAccessData: models.GrantAccessData, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.AccessUri>): void;


    /**
     * Revokes access to a disk.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} diskName The name of the disk within the given subscription
     * and resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    revokeAccessWithHttpOperationResponse(resourceGroupName: string, diskName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Revokes access to a disk.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} diskName The name of the disk within the given subscription
     * and resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    revokeAccess(resourceGroupName: string, diskName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    revokeAccess(resourceGroupName: string, diskName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    revokeAccess(resourceGroupName: string, diskName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Creates or updates a disk.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} diskName The name of the disk within the given subscription
     * and resource group.
     *
     * @param {object} disk Disk object supplied in the body of the Put disk
     * operation.
     *
     * @param {object} [disk.sku]
     *
     * @param {string} [disk.sku.name] The sku name. Possible values include:
     * 'Standard_LRS', 'Premium_LRS'
     *
     * @param {array} [disk.zones] The Logical zone list for Disk.
     *
     * @param {string} [disk.osType] The Operating System type. Possible values
     * include: 'Windows', 'Linux'
     *
     * @param {object} disk.creationData Disk source information. CreationData
     * information cannot be changed after the disk has been created.
     *
     * @param {string} disk.creationData.createOption This enumerates the possible
     * sources of a disk's creation. Possible values include: 'Empty', 'Attach',
     * 'FromImage', 'Import', 'Copy'
     *
     * @param {string} [disk.creationData.storageAccountId] If createOption is
     * Import, the Azure Resource Manager identifier of the storage account
     * containing the blob to import as a disk. Required only if the blob is in a
     * different subscription
     *
     * @param {object} [disk.creationData.imageReference] Disk source information.
     *
     * @param {string} disk.creationData.imageReference.id A relative uri
     * containing either a Platform Imgage Repository or user image reference.
     *
     * @param {number} [disk.creationData.imageReference.lun] If the disk is
     * created from an image's data disk, this is an index that indicates which of
     * the data disks in the image to use. For OS disks, this field is null.
     *
     * @param {string} [disk.creationData.sourceUri] If creationOption is Import,
     * this is the URI of a blob to be imported into a managed disk.
     *
     * @param {string} [disk.creationData.sourceResourceId] If createOption is
     * Copy, this is the ARM id of the source snapshot or disk.
     *
     * @param {number} [disk.diskSizeGB] If creationData.createOption is Empty,
     * this field is mandatory and it indicates the size of the VHD to create. If
     * this field is present for updates or creation with other options, it
     * indicates a resize. Resizes are only allowed if the disk is not attached to
     * a running VM, and can only increase the disk's size.
     *
     * @param {object} [disk.encryptionSettings] Encryption settings for disk or
     * snapshot
     *
     * @param {boolean} [disk.encryptionSettings.enabled] Set this flag to true and
     * provide DiskEncryptionKey and optional KeyEncryptionKey to enable
     * encryption. Set this flag to false and remove DiskEncryptionKey and
     * KeyEncryptionKey to disable encryption. If EncryptionSettings is null in the
     * request object, the existing settings remain unchanged.
     *
     * @param {object} [disk.encryptionSettings.diskEncryptionKey] Key Vault Secret
     * Url and vault id of the disk encryption key
     *
     * @param {object} disk.encryptionSettings.diskEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string} disk.encryptionSettings.diskEncryptionKey.secretUrl Url
     * pointing to a key or secret in KeyVault
     *
     * @param {object} [disk.encryptionSettings.keyEncryptionKey] Key Vault Key Url
     * and vault id of the key encryption key
     *
     * @param {object} disk.encryptionSettings.keyEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string} [disk.encryptionSettings.keyEncryptionKey.sourceVault.id]
     * Resource Id
     *
     * @param {string} disk.encryptionSettings.keyEncryptionKey.keyUrl Url pointing
     * to a key or secret in KeyVault
     *
     * @param {string} disk.location Resource location
     *
     * @param {object} [disk.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<Disk>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginCreateOrUpdateWithHttpOperationResponse(resourceGroupName: string, diskName: string, disk: models.Disk, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.Disk>>;

    /**
     * Creates or updates a disk.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} diskName The name of the disk within the given subscription
     * and resource group.
     *
     * @param {object} disk Disk object supplied in the body of the Put disk
     * operation.
     *
     * @param {object} [disk.sku]
     *
     * @param {string} [disk.sku.name] The sku name. Possible values include:
     * 'Standard_LRS', 'Premium_LRS'
     *
     * @param {array} [disk.zones] The Logical zone list for Disk.
     *
     * @param {string} [disk.osType] The Operating System type. Possible values
     * include: 'Windows', 'Linux'
     *
     * @param {object} disk.creationData Disk source information. CreationData
     * information cannot be changed after the disk has been created.
     *
     * @param {string} disk.creationData.createOption This enumerates the possible
     * sources of a disk's creation. Possible values include: 'Empty', 'Attach',
     * 'FromImage', 'Import', 'Copy'
     *
     * @param {string} [disk.creationData.storageAccountId] If createOption is
     * Import, the Azure Resource Manager identifier of the storage account
     * containing the blob to import as a disk. Required only if the blob is in a
     * different subscription
     *
     * @param {object} [disk.creationData.imageReference] Disk source information.
     *
     * @param {string} disk.creationData.imageReference.id A relative uri
     * containing either a Platform Imgage Repository or user image reference.
     *
     * @param {number} [disk.creationData.imageReference.lun] If the disk is
     * created from an image's data disk, this is an index that indicates which of
     * the data disks in the image to use. For OS disks, this field is null.
     *
     * @param {string} [disk.creationData.sourceUri] If creationOption is Import,
     * this is the URI of a blob to be imported into a managed disk.
     *
     * @param {string} [disk.creationData.sourceResourceId] If createOption is
     * Copy, this is the ARM id of the source snapshot or disk.
     *
     * @param {number} [disk.diskSizeGB] If creationData.createOption is Empty,
     * this field is mandatory and it indicates the size of the VHD to create. If
     * this field is present for updates or creation with other options, it
     * indicates a resize. Resizes are only allowed if the disk is not attached to
     * a running VM, and can only increase the disk's size.
     *
     * @param {object} [disk.encryptionSettings] Encryption settings for disk or
     * snapshot
     *
     * @param {boolean} [disk.encryptionSettings.enabled] Set this flag to true and
     * provide DiskEncryptionKey and optional KeyEncryptionKey to enable
     * encryption. Set this flag to false and remove DiskEncryptionKey and
     * KeyEncryptionKey to disable encryption. If EncryptionSettings is null in the
     * request object, the existing settings remain unchanged.
     *
     * @param {object} [disk.encryptionSettings.diskEncryptionKey] Key Vault Secret
     * Url and vault id of the disk encryption key
     *
     * @param {object} disk.encryptionSettings.diskEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string} disk.encryptionSettings.diskEncryptionKey.secretUrl Url
     * pointing to a key or secret in KeyVault
     *
     * @param {object} [disk.encryptionSettings.keyEncryptionKey] Key Vault Key Url
     * and vault id of the key encryption key
     *
     * @param {object} disk.encryptionSettings.keyEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string} [disk.encryptionSettings.keyEncryptionKey.sourceVault.id]
     * Resource Id
     *
     * @param {string} disk.encryptionSettings.keyEncryptionKey.keyUrl Url pointing
     * to a key or secret in KeyVault
     *
     * @param {string} disk.location Resource location
     *
     * @param {object} [disk.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {Disk} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {Disk} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link Disk} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginCreateOrUpdate(resourceGroupName: string, diskName: string, disk: models.Disk, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.Disk>;
    beginCreateOrUpdate(resourceGroupName: string, diskName: string, disk: models.Disk, callback: ServiceCallback<models.Disk>): void;
    beginCreateOrUpdate(resourceGroupName: string, diskName: string, disk: models.Disk, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.Disk>): void;


    /**
     * Updates (patches) a disk.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} diskName The name of the disk within the given subscription
     * and resource group.
     *
     * @param {object} disk Disk object supplied in the body of the Patch disk
     * operation.
     *
     * @param {string} [disk.osType] the Operating System type. Possible values
     * include: 'Windows', 'Linux'
     *
     * @param {number} [disk.diskSizeGB] If creationData.createOption is Empty,
     * this field is mandatory and it indicates the size of the VHD to create. If
     * this field is present for updates or creation with other options, it
     * indicates a resize. Resizes are only allowed if the disk is not attached to
     * a running VM, and can only increase the disk's size.
     *
     * @param {object} [disk.encryptionSettings] Encryption settings for disk or
     * snapshot
     *
     * @param {boolean} [disk.encryptionSettings.enabled] Set this flag to true and
     * provide DiskEncryptionKey and optional KeyEncryptionKey to enable
     * encryption. Set this flag to false and remove DiskEncryptionKey and
     * KeyEncryptionKey to disable encryption. If EncryptionSettings is null in the
     * request object, the existing settings remain unchanged.
     *
     * @param {object} [disk.encryptionSettings.diskEncryptionKey] Key Vault Secret
     * Url and vault id of the disk encryption key
     *
     * @param {object} disk.encryptionSettings.diskEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string} disk.encryptionSettings.diskEncryptionKey.secretUrl Url
     * pointing to a key or secret in KeyVault
     *
     * @param {object} [disk.encryptionSettings.keyEncryptionKey] Key Vault Key Url
     * and vault id of the key encryption key
     *
     * @param {object} disk.encryptionSettings.keyEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string} [disk.encryptionSettings.keyEncryptionKey.sourceVault.id]
     * Resource Id
     *
     * @param {string} disk.encryptionSettings.keyEncryptionKey.keyUrl Url pointing
     * to a key or secret in KeyVault
     *
     * @param {object} [disk.tags] Resource tags
     *
     * @param {object} [disk.sku]
     *
     * @param {string} [disk.sku.name] The sku name. Possible values include:
     * 'Standard_LRS', 'Premium_LRS'
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<Disk>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginUpdateWithHttpOperationResponse(resourceGroupName: string, diskName: string, disk: models.DiskUpdate, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.Disk>>;

    /**
     * Updates (patches) a disk.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} diskName The name of the disk within the given subscription
     * and resource group.
     *
     * @param {object} disk Disk object supplied in the body of the Patch disk
     * operation.
     *
     * @param {string} [disk.osType] the Operating System type. Possible values
     * include: 'Windows', 'Linux'
     *
     * @param {number} [disk.diskSizeGB] If creationData.createOption is Empty,
     * this field is mandatory and it indicates the size of the VHD to create. If
     * this field is present for updates or creation with other options, it
     * indicates a resize. Resizes are only allowed if the disk is not attached to
     * a running VM, and can only increase the disk's size.
     *
     * @param {object} [disk.encryptionSettings] Encryption settings for disk or
     * snapshot
     *
     * @param {boolean} [disk.encryptionSettings.enabled] Set this flag to true and
     * provide DiskEncryptionKey and optional KeyEncryptionKey to enable
     * encryption. Set this flag to false and remove DiskEncryptionKey and
     * KeyEncryptionKey to disable encryption. If EncryptionSettings is null in the
     * request object, the existing settings remain unchanged.
     *
     * @param {object} [disk.encryptionSettings.diskEncryptionKey] Key Vault Secret
     * Url and vault id of the disk encryption key
     *
     * @param {object} disk.encryptionSettings.diskEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string} disk.encryptionSettings.diskEncryptionKey.secretUrl Url
     * pointing to a key or secret in KeyVault
     *
     * @param {object} [disk.encryptionSettings.keyEncryptionKey] Key Vault Key Url
     * and vault id of the key encryption key
     *
     * @param {object} disk.encryptionSettings.keyEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string} [disk.encryptionSettings.keyEncryptionKey.sourceVault.id]
     * Resource Id
     *
     * @param {string} disk.encryptionSettings.keyEncryptionKey.keyUrl Url pointing
     * to a key or secret in KeyVault
     *
     * @param {object} [disk.tags] Resource tags
     *
     * @param {object} [disk.sku]
     *
     * @param {string} [disk.sku.name] The sku name. Possible values include:
     * 'Standard_LRS', 'Premium_LRS'
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {Disk} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {Disk} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link Disk} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginUpdate(resourceGroupName: string, diskName: string, disk: models.DiskUpdate, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.Disk>;
    beginUpdate(resourceGroupName: string, diskName: string, disk: models.DiskUpdate, callback: ServiceCallback<models.Disk>): void;
    beginUpdate(resourceGroupName: string, diskName: string, disk: models.DiskUpdate, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.Disk>): void;


    /**
     * Deletes a disk.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} diskName The name of the disk within the given subscription
     * and resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginDeleteMethodWithHttpOperationResponse(resourceGroupName: string, diskName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Deletes a disk.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} diskName The name of the disk within the given subscription
     * and resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginDeleteMethod(resourceGroupName: string, diskName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginDeleteMethod(resourceGroupName: string, diskName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginDeleteMethod(resourceGroupName: string, diskName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Grants access to a disk.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} diskName The name of the disk within the given subscription
     * and resource group.
     *
     * @param {object} grantAccessData Access data object supplied in the body of
     * the get disk access operation.
     *
     * @param {string} grantAccessData.access Possible values include: 'None',
     * 'Read'
     *
     * @param {number} grantAccessData.durationInSeconds Time duration in seconds
     * until the SAS access expires.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<AccessUri>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginGrantAccessWithHttpOperationResponse(resourceGroupName: string, diskName: string, grantAccessData: models.GrantAccessData, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.AccessUri>>;

    /**
     * Grants access to a disk.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} diskName The name of the disk within the given subscription
     * and resource group.
     *
     * @param {object} grantAccessData Access data object supplied in the body of
     * the get disk access operation.
     *
     * @param {string} grantAccessData.access Possible values include: 'None',
     * 'Read'
     *
     * @param {number} grantAccessData.durationInSeconds Time duration in seconds
     * until the SAS access expires.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {AccessUri} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {AccessUri} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link AccessUri} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginGrantAccess(resourceGroupName: string, diskName: string, grantAccessData: models.GrantAccessData, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.AccessUri>;
    beginGrantAccess(resourceGroupName: string, diskName: string, grantAccessData: models.GrantAccessData, callback: ServiceCallback<models.AccessUri>): void;
    beginGrantAccess(resourceGroupName: string, diskName: string, grantAccessData: models.GrantAccessData, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.AccessUri>): void;


    /**
     * Revokes access to a disk.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} diskName The name of the disk within the given subscription
     * and resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginRevokeAccessWithHttpOperationResponse(resourceGroupName: string, diskName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Revokes access to a disk.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} diskName The name of the disk within the given subscription
     * and resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginRevokeAccess(resourceGroupName: string, diskName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginRevokeAccess(resourceGroupName: string, diskName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginRevokeAccess(resourceGroupName: string, diskName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Lists all the disks under a resource group.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<DiskList>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listByResourceGroupNextWithHttpOperationResponse(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.DiskList>>;

    /**
     * Lists all the disks under a resource group.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {DiskList} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {DiskList} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link DiskList} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listByResourceGroupNext(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.DiskList>;
    listByResourceGroupNext(nextPageLink: string, callback: ServiceCallback<models.DiskList>): void;
    listByResourceGroupNext(nextPageLink: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.DiskList>): void;


    /**
     * Lists all the disks under a subscription.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<DiskList>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listNextWithHttpOperationResponse(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.DiskList>>;

    /**
     * Lists all the disks under a subscription.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {DiskList} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {DiskList} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link DiskList} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listNext(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.DiskList>;
    listNext(nextPageLink: string, callback: ServiceCallback<models.DiskList>): void;
    listNext(nextPageLink: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.DiskList>): void;
}

/**
 * @class
 * Snapshots
 * __NOTE__: An instance of this class is automatically created for an
 * instance of the ComputeManagementClient.
 */
export interface Snapshots {


    /**
     * Creates or updates a snapshot.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} snapshotName The name of the snapshot within the given
     * subscription and resource group.
     *
     * @param {object} snapshot Snapshot object supplied in the body of the Put
     * disk operation.
     *
     * @param {object} [snapshot.sku]
     *
     * @param {string} [snapshot.sku.name] The sku name. Possible values include:
     * 'Standard_LRS', 'Premium_LRS'
     *
     * @param {string} [snapshot.osType] The Operating System type. Possible values
     * include: 'Windows', 'Linux'
     *
     * @param {object} snapshot.creationData Disk source information. CreationData
     * information cannot be changed after the disk has been created.
     *
     * @param {string} snapshot.creationData.createOption This enumerates the
     * possible sources of a disk's creation. Possible values include: 'Empty',
     * 'Attach', 'FromImage', 'Import', 'Copy'
     *
     * @param {string} [snapshot.creationData.storageAccountId] If createOption is
     * Import, the Azure Resource Manager identifier of the storage account
     * containing the blob to import as a disk. Required only if the blob is in a
     * different subscription
     *
     * @param {object} [snapshot.creationData.imageReference] Disk source
     * information.
     *
     * @param {string} snapshot.creationData.imageReference.id A relative uri
     * containing either a Platform Imgage Repository or user image reference.
     *
     * @param {number} [snapshot.creationData.imageReference.lun] If the disk is
     * created from an image's data disk, this is an index that indicates which of
     * the data disks in the image to use. For OS disks, this field is null.
     *
     * @param {string} [snapshot.creationData.sourceUri] If creationOption is
     * Import, this is the URI of a blob to be imported into a managed disk.
     *
     * @param {string} [snapshot.creationData.sourceResourceId] If createOption is
     * Copy, this is the ARM id of the source snapshot or disk.
     *
     * @param {number} [snapshot.diskSizeGB] If creationData.createOption is Empty,
     * this field is mandatory and it indicates the size of the VHD to create. If
     * this field is present for updates or creation with other options, it
     * indicates a resize. Resizes are only allowed if the disk is not attached to
     * a running VM, and can only increase the disk's size.
     *
     * @param {object} [snapshot.encryptionSettings] Encryption settings for disk
     * or snapshot
     *
     * @param {boolean} [snapshot.encryptionSettings.enabled] Set this flag to true
     * and provide DiskEncryptionKey and optional KeyEncryptionKey to enable
     * encryption. Set this flag to false and remove DiskEncryptionKey and
     * KeyEncryptionKey to disable encryption. If EncryptionSettings is null in the
     * request object, the existing settings remain unchanged.
     *
     * @param {object} [snapshot.encryptionSettings.diskEncryptionKey] Key Vault
     * Secret Url and vault id of the disk encryption key
     *
     * @param {object} snapshot.encryptionSettings.diskEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string} snapshot.encryptionSettings.diskEncryptionKey.secretUrl Url
     * pointing to a key or secret in KeyVault
     *
     * @param {object} [snapshot.encryptionSettings.keyEncryptionKey] Key Vault Key
     * Url and vault id of the key encryption key
     *
     * @param {object} snapshot.encryptionSettings.keyEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string}
     * [snapshot.encryptionSettings.keyEncryptionKey.sourceVault.id] Resource Id
     *
     * @param {string} snapshot.encryptionSettings.keyEncryptionKey.keyUrl Url
     * pointing to a key or secret in KeyVault
     *
     * @param {string} snapshot.location Resource location
     *
     * @param {object} [snapshot.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<Snapshot>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    createOrUpdateWithHttpOperationResponse(resourceGroupName: string, snapshotName: string, snapshot: models.Snapshot, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.Snapshot>>;

    /**
     * Creates or updates a snapshot.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} snapshotName The name of the snapshot within the given
     * subscription and resource group.
     *
     * @param {object} snapshot Snapshot object supplied in the body of the Put
     * disk operation.
     *
     * @param {object} [snapshot.sku]
     *
     * @param {string} [snapshot.sku.name] The sku name. Possible values include:
     * 'Standard_LRS', 'Premium_LRS'
     *
     * @param {string} [snapshot.osType] The Operating System type. Possible values
     * include: 'Windows', 'Linux'
     *
     * @param {object} snapshot.creationData Disk source information. CreationData
     * information cannot be changed after the disk has been created.
     *
     * @param {string} snapshot.creationData.createOption This enumerates the
     * possible sources of a disk's creation. Possible values include: 'Empty',
     * 'Attach', 'FromImage', 'Import', 'Copy'
     *
     * @param {string} [snapshot.creationData.storageAccountId] If createOption is
     * Import, the Azure Resource Manager identifier of the storage account
     * containing the blob to import as a disk. Required only if the blob is in a
     * different subscription
     *
     * @param {object} [snapshot.creationData.imageReference] Disk source
     * information.
     *
     * @param {string} snapshot.creationData.imageReference.id A relative uri
     * containing either a Platform Imgage Repository or user image reference.
     *
     * @param {number} [snapshot.creationData.imageReference.lun] If the disk is
     * created from an image's data disk, this is an index that indicates which of
     * the data disks in the image to use. For OS disks, this field is null.
     *
     * @param {string} [snapshot.creationData.sourceUri] If creationOption is
     * Import, this is the URI of a blob to be imported into a managed disk.
     *
     * @param {string} [snapshot.creationData.sourceResourceId] If createOption is
     * Copy, this is the ARM id of the source snapshot or disk.
     *
     * @param {number} [snapshot.diskSizeGB] If creationData.createOption is Empty,
     * this field is mandatory and it indicates the size of the VHD to create. If
     * this field is present for updates or creation with other options, it
     * indicates a resize. Resizes are only allowed if the disk is not attached to
     * a running VM, and can only increase the disk's size.
     *
     * @param {object} [snapshot.encryptionSettings] Encryption settings for disk
     * or snapshot
     *
     * @param {boolean} [snapshot.encryptionSettings.enabled] Set this flag to true
     * and provide DiskEncryptionKey and optional KeyEncryptionKey to enable
     * encryption. Set this flag to false and remove DiskEncryptionKey and
     * KeyEncryptionKey to disable encryption. If EncryptionSettings is null in the
     * request object, the existing settings remain unchanged.
     *
     * @param {object} [snapshot.encryptionSettings.diskEncryptionKey] Key Vault
     * Secret Url and vault id of the disk encryption key
     *
     * @param {object} snapshot.encryptionSettings.diskEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string} snapshot.encryptionSettings.diskEncryptionKey.secretUrl Url
     * pointing to a key or secret in KeyVault
     *
     * @param {object} [snapshot.encryptionSettings.keyEncryptionKey] Key Vault Key
     * Url and vault id of the key encryption key
     *
     * @param {object} snapshot.encryptionSettings.keyEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string}
     * [snapshot.encryptionSettings.keyEncryptionKey.sourceVault.id] Resource Id
     *
     * @param {string} snapshot.encryptionSettings.keyEncryptionKey.keyUrl Url
     * pointing to a key or secret in KeyVault
     *
     * @param {string} snapshot.location Resource location
     *
     * @param {object} [snapshot.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {Snapshot} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {Snapshot} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link Snapshot} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    createOrUpdate(resourceGroupName: string, snapshotName: string, snapshot: models.Snapshot, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.Snapshot>;
    createOrUpdate(resourceGroupName: string, snapshotName: string, snapshot: models.Snapshot, callback: ServiceCallback<models.Snapshot>): void;
    createOrUpdate(resourceGroupName: string, snapshotName: string, snapshot: models.Snapshot, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.Snapshot>): void;


    /**
     * Updates (patches) a snapshot.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} snapshotName The name of the snapshot within the given
     * subscription and resource group.
     *
     * @param {object} snapshot Snapshot object supplied in the body of the Patch
     * snapshot operation.
     *
     * @param {string} [snapshot.osType] the Operating System type. Possible values
     * include: 'Windows', 'Linux'
     *
     * @param {number} [snapshot.diskSizeGB] If creationData.createOption is Empty,
     * this field is mandatory and it indicates the size of the VHD to create. If
     * this field is present for updates or creation with other options, it
     * indicates a resize. Resizes are only allowed if the disk is not attached to
     * a running VM, and can only increase the disk's size.
     *
     * @param {object} [snapshot.encryptionSettings] Encryption settings for disk
     * or snapshot
     *
     * @param {boolean} [snapshot.encryptionSettings.enabled] Set this flag to true
     * and provide DiskEncryptionKey and optional KeyEncryptionKey to enable
     * encryption. Set this flag to false and remove DiskEncryptionKey and
     * KeyEncryptionKey to disable encryption. If EncryptionSettings is null in the
     * request object, the existing settings remain unchanged.
     *
     * @param {object} [snapshot.encryptionSettings.diskEncryptionKey] Key Vault
     * Secret Url and vault id of the disk encryption key
     *
     * @param {object} snapshot.encryptionSettings.diskEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string} snapshot.encryptionSettings.diskEncryptionKey.secretUrl Url
     * pointing to a key or secret in KeyVault
     *
     * @param {object} [snapshot.encryptionSettings.keyEncryptionKey] Key Vault Key
     * Url and vault id of the key encryption key
     *
     * @param {object} snapshot.encryptionSettings.keyEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string}
     * [snapshot.encryptionSettings.keyEncryptionKey.sourceVault.id] Resource Id
     *
     * @param {string} snapshot.encryptionSettings.keyEncryptionKey.keyUrl Url
     * pointing to a key or secret in KeyVault
     *
     * @param {object} [snapshot.tags] Resource tags
     *
     * @param {object} [snapshot.sku]
     *
     * @param {string} [snapshot.sku.name] The sku name. Possible values include:
     * 'Standard_LRS', 'Premium_LRS'
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<Snapshot>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    updateWithHttpOperationResponse(resourceGroupName: string, snapshotName: string, snapshot: models.SnapshotUpdate, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.Snapshot>>;

    /**
     * Updates (patches) a snapshot.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} snapshotName The name of the snapshot within the given
     * subscription and resource group.
     *
     * @param {object} snapshot Snapshot object supplied in the body of the Patch
     * snapshot operation.
     *
     * @param {string} [snapshot.osType] the Operating System type. Possible values
     * include: 'Windows', 'Linux'
     *
     * @param {number} [snapshot.diskSizeGB] If creationData.createOption is Empty,
     * this field is mandatory and it indicates the size of the VHD to create. If
     * this field is present for updates or creation with other options, it
     * indicates a resize. Resizes are only allowed if the disk is not attached to
     * a running VM, and can only increase the disk's size.
     *
     * @param {object} [snapshot.encryptionSettings] Encryption settings for disk
     * or snapshot
     *
     * @param {boolean} [snapshot.encryptionSettings.enabled] Set this flag to true
     * and provide DiskEncryptionKey and optional KeyEncryptionKey to enable
     * encryption. Set this flag to false and remove DiskEncryptionKey and
     * KeyEncryptionKey to disable encryption. If EncryptionSettings is null in the
     * request object, the existing settings remain unchanged.
     *
     * @param {object} [snapshot.encryptionSettings.diskEncryptionKey] Key Vault
     * Secret Url and vault id of the disk encryption key
     *
     * @param {object} snapshot.encryptionSettings.diskEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string} snapshot.encryptionSettings.diskEncryptionKey.secretUrl Url
     * pointing to a key or secret in KeyVault
     *
     * @param {object} [snapshot.encryptionSettings.keyEncryptionKey] Key Vault Key
     * Url and vault id of the key encryption key
     *
     * @param {object} snapshot.encryptionSettings.keyEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string}
     * [snapshot.encryptionSettings.keyEncryptionKey.sourceVault.id] Resource Id
     *
     * @param {string} snapshot.encryptionSettings.keyEncryptionKey.keyUrl Url
     * pointing to a key or secret in KeyVault
     *
     * @param {object} [snapshot.tags] Resource tags
     *
     * @param {object} [snapshot.sku]
     *
     * @param {string} [snapshot.sku.name] The sku name. Possible values include:
     * 'Standard_LRS', 'Premium_LRS'
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {Snapshot} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {Snapshot} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link Snapshot} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    update(resourceGroupName: string, snapshotName: string, snapshot: models.SnapshotUpdate, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.Snapshot>;
    update(resourceGroupName: string, snapshotName: string, snapshot: models.SnapshotUpdate, callback: ServiceCallback<models.Snapshot>): void;
    update(resourceGroupName: string, snapshotName: string, snapshot: models.SnapshotUpdate, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.Snapshot>): void;


    /**
     * Gets information about a snapshot.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} snapshotName The name of the snapshot within the given
     * subscription and resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<Snapshot>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    getWithHttpOperationResponse(resourceGroupName: string, snapshotName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.Snapshot>>;

    /**
     * Gets information about a snapshot.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} snapshotName The name of the snapshot within the given
     * subscription and resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {Snapshot} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {Snapshot} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link Snapshot} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    get(resourceGroupName: string, snapshotName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.Snapshot>;
    get(resourceGroupName: string, snapshotName: string, callback: ServiceCallback<models.Snapshot>): void;
    get(resourceGroupName: string, snapshotName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.Snapshot>): void;


    /**
     * Deletes a snapshot.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} snapshotName The name of the snapshot within the given
     * subscription and resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    deleteMethodWithHttpOperationResponse(resourceGroupName: string, snapshotName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Deletes a snapshot.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} snapshotName The name of the snapshot within the given
     * subscription and resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    deleteMethod(resourceGroupName: string, snapshotName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    deleteMethod(resourceGroupName: string, snapshotName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    deleteMethod(resourceGroupName: string, snapshotName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Lists snapshots under a resource group.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<SnapshotList>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listByResourceGroupWithHttpOperationResponse(resourceGroupName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.SnapshotList>>;

    /**
     * Lists snapshots under a resource group.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {SnapshotList} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {SnapshotList} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link SnapshotList} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listByResourceGroup(resourceGroupName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.SnapshotList>;
    listByResourceGroup(resourceGroupName: string, callback: ServiceCallback<models.SnapshotList>): void;
    listByResourceGroup(resourceGroupName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.SnapshotList>): void;


    /**
     * Lists snapshots under a subscription.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<SnapshotList>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listWithHttpOperationResponse(options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.SnapshotList>>;

    /**
     * Lists snapshots under a subscription.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {SnapshotList} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {SnapshotList} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link SnapshotList} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    list(options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.SnapshotList>;
    list(callback: ServiceCallback<models.SnapshotList>): void;
    list(options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.SnapshotList>): void;


    /**
     * Grants access to a snapshot.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} snapshotName The name of the snapshot within the given
     * subscription and resource group.
     *
     * @param {object} grantAccessData Access data object supplied in the body of
     * the get snapshot access operation.
     *
     * @param {string} grantAccessData.access Possible values include: 'None',
     * 'Read'
     *
     * @param {number} grantAccessData.durationInSeconds Time duration in seconds
     * until the SAS access expires.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<AccessUri>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    grantAccessWithHttpOperationResponse(resourceGroupName: string, snapshotName: string, grantAccessData: models.GrantAccessData, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.AccessUri>>;

    /**
     * Grants access to a snapshot.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} snapshotName The name of the snapshot within the given
     * subscription and resource group.
     *
     * @param {object} grantAccessData Access data object supplied in the body of
     * the get snapshot access operation.
     *
     * @param {string} grantAccessData.access Possible values include: 'None',
     * 'Read'
     *
     * @param {number} grantAccessData.durationInSeconds Time duration in seconds
     * until the SAS access expires.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {AccessUri} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {AccessUri} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link AccessUri} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    grantAccess(resourceGroupName: string, snapshotName: string, grantAccessData: models.GrantAccessData, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.AccessUri>;
    grantAccess(resourceGroupName: string, snapshotName: string, grantAccessData: models.GrantAccessData, callback: ServiceCallback<models.AccessUri>): void;
    grantAccess(resourceGroupName: string, snapshotName: string, grantAccessData: models.GrantAccessData, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.AccessUri>): void;


    /**
     * Revokes access to a snapshot.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} snapshotName The name of the snapshot within the given
     * subscription and resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    revokeAccessWithHttpOperationResponse(resourceGroupName: string, snapshotName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Revokes access to a snapshot.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} snapshotName The name of the snapshot within the given
     * subscription and resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    revokeAccess(resourceGroupName: string, snapshotName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    revokeAccess(resourceGroupName: string, snapshotName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    revokeAccess(resourceGroupName: string, snapshotName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Creates or updates a snapshot.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} snapshotName The name of the snapshot within the given
     * subscription and resource group.
     *
     * @param {object} snapshot Snapshot object supplied in the body of the Put
     * disk operation.
     *
     * @param {object} [snapshot.sku]
     *
     * @param {string} [snapshot.sku.name] The sku name. Possible values include:
     * 'Standard_LRS', 'Premium_LRS'
     *
     * @param {string} [snapshot.osType] The Operating System type. Possible values
     * include: 'Windows', 'Linux'
     *
     * @param {object} snapshot.creationData Disk source information. CreationData
     * information cannot be changed after the disk has been created.
     *
     * @param {string} snapshot.creationData.createOption This enumerates the
     * possible sources of a disk's creation. Possible values include: 'Empty',
     * 'Attach', 'FromImage', 'Import', 'Copy'
     *
     * @param {string} [snapshot.creationData.storageAccountId] If createOption is
     * Import, the Azure Resource Manager identifier of the storage account
     * containing the blob to import as a disk. Required only if the blob is in a
     * different subscription
     *
     * @param {object} [snapshot.creationData.imageReference] Disk source
     * information.
     *
     * @param {string} snapshot.creationData.imageReference.id A relative uri
     * containing either a Platform Imgage Repository or user image reference.
     *
     * @param {number} [snapshot.creationData.imageReference.lun] If the disk is
     * created from an image's data disk, this is an index that indicates which of
     * the data disks in the image to use. For OS disks, this field is null.
     *
     * @param {string} [snapshot.creationData.sourceUri] If creationOption is
     * Import, this is the URI of a blob to be imported into a managed disk.
     *
     * @param {string} [snapshot.creationData.sourceResourceId] If createOption is
     * Copy, this is the ARM id of the source snapshot or disk.
     *
     * @param {number} [snapshot.diskSizeGB] If creationData.createOption is Empty,
     * this field is mandatory and it indicates the size of the VHD to create. If
     * this field is present for updates or creation with other options, it
     * indicates a resize. Resizes are only allowed if the disk is not attached to
     * a running VM, and can only increase the disk's size.
     *
     * @param {object} [snapshot.encryptionSettings] Encryption settings for disk
     * or snapshot
     *
     * @param {boolean} [snapshot.encryptionSettings.enabled] Set this flag to true
     * and provide DiskEncryptionKey and optional KeyEncryptionKey to enable
     * encryption. Set this flag to false and remove DiskEncryptionKey and
     * KeyEncryptionKey to disable encryption. If EncryptionSettings is null in the
     * request object, the existing settings remain unchanged.
     *
     * @param {object} [snapshot.encryptionSettings.diskEncryptionKey] Key Vault
     * Secret Url and vault id of the disk encryption key
     *
     * @param {object} snapshot.encryptionSettings.diskEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string} snapshot.encryptionSettings.diskEncryptionKey.secretUrl Url
     * pointing to a key or secret in KeyVault
     *
     * @param {object} [snapshot.encryptionSettings.keyEncryptionKey] Key Vault Key
     * Url and vault id of the key encryption key
     *
     * @param {object} snapshot.encryptionSettings.keyEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string}
     * [snapshot.encryptionSettings.keyEncryptionKey.sourceVault.id] Resource Id
     *
     * @param {string} snapshot.encryptionSettings.keyEncryptionKey.keyUrl Url
     * pointing to a key or secret in KeyVault
     *
     * @param {string} snapshot.location Resource location
     *
     * @param {object} [snapshot.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<Snapshot>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginCreateOrUpdateWithHttpOperationResponse(resourceGroupName: string, snapshotName: string, snapshot: models.Snapshot, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.Snapshot>>;

    /**
     * Creates or updates a snapshot.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} snapshotName The name of the snapshot within the given
     * subscription and resource group.
     *
     * @param {object} snapshot Snapshot object supplied in the body of the Put
     * disk operation.
     *
     * @param {object} [snapshot.sku]
     *
     * @param {string} [snapshot.sku.name] The sku name. Possible values include:
     * 'Standard_LRS', 'Premium_LRS'
     *
     * @param {string} [snapshot.osType] The Operating System type. Possible values
     * include: 'Windows', 'Linux'
     *
     * @param {object} snapshot.creationData Disk source information. CreationData
     * information cannot be changed after the disk has been created.
     *
     * @param {string} snapshot.creationData.createOption This enumerates the
     * possible sources of a disk's creation. Possible values include: 'Empty',
     * 'Attach', 'FromImage', 'Import', 'Copy'
     *
     * @param {string} [snapshot.creationData.storageAccountId] If createOption is
     * Import, the Azure Resource Manager identifier of the storage account
     * containing the blob to import as a disk. Required only if the blob is in a
     * different subscription
     *
     * @param {object} [snapshot.creationData.imageReference] Disk source
     * information.
     *
     * @param {string} snapshot.creationData.imageReference.id A relative uri
     * containing either a Platform Imgage Repository or user image reference.
     *
     * @param {number} [snapshot.creationData.imageReference.lun] If the disk is
     * created from an image's data disk, this is an index that indicates which of
     * the data disks in the image to use. For OS disks, this field is null.
     *
     * @param {string} [snapshot.creationData.sourceUri] If creationOption is
     * Import, this is the URI of a blob to be imported into a managed disk.
     *
     * @param {string} [snapshot.creationData.sourceResourceId] If createOption is
     * Copy, this is the ARM id of the source snapshot or disk.
     *
     * @param {number} [snapshot.diskSizeGB] If creationData.createOption is Empty,
     * this field is mandatory and it indicates the size of the VHD to create. If
     * this field is present for updates or creation with other options, it
     * indicates a resize. Resizes are only allowed if the disk is not attached to
     * a running VM, and can only increase the disk's size.
     *
     * @param {object} [snapshot.encryptionSettings] Encryption settings for disk
     * or snapshot
     *
     * @param {boolean} [snapshot.encryptionSettings.enabled] Set this flag to true
     * and provide DiskEncryptionKey and optional KeyEncryptionKey to enable
     * encryption. Set this flag to false and remove DiskEncryptionKey and
     * KeyEncryptionKey to disable encryption. If EncryptionSettings is null in the
     * request object, the existing settings remain unchanged.
     *
     * @param {object} [snapshot.encryptionSettings.diskEncryptionKey] Key Vault
     * Secret Url and vault id of the disk encryption key
     *
     * @param {object} snapshot.encryptionSettings.diskEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string} snapshot.encryptionSettings.diskEncryptionKey.secretUrl Url
     * pointing to a key or secret in KeyVault
     *
     * @param {object} [snapshot.encryptionSettings.keyEncryptionKey] Key Vault Key
     * Url and vault id of the key encryption key
     *
     * @param {object} snapshot.encryptionSettings.keyEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string}
     * [snapshot.encryptionSettings.keyEncryptionKey.sourceVault.id] Resource Id
     *
     * @param {string} snapshot.encryptionSettings.keyEncryptionKey.keyUrl Url
     * pointing to a key or secret in KeyVault
     *
     * @param {string} snapshot.location Resource location
     *
     * @param {object} [snapshot.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {Snapshot} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {Snapshot} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link Snapshot} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginCreateOrUpdate(resourceGroupName: string, snapshotName: string, snapshot: models.Snapshot, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.Snapshot>;
    beginCreateOrUpdate(resourceGroupName: string, snapshotName: string, snapshot: models.Snapshot, callback: ServiceCallback<models.Snapshot>): void;
    beginCreateOrUpdate(resourceGroupName: string, snapshotName: string, snapshot: models.Snapshot, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.Snapshot>): void;


    /**
     * Updates (patches) a snapshot.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} snapshotName The name of the snapshot within the given
     * subscription and resource group.
     *
     * @param {object} snapshot Snapshot object supplied in the body of the Patch
     * snapshot operation.
     *
     * @param {string} [snapshot.osType] the Operating System type. Possible values
     * include: 'Windows', 'Linux'
     *
     * @param {number} [snapshot.diskSizeGB] If creationData.createOption is Empty,
     * this field is mandatory and it indicates the size of the VHD to create. If
     * this field is present for updates or creation with other options, it
     * indicates a resize. Resizes are only allowed if the disk is not attached to
     * a running VM, and can only increase the disk's size.
     *
     * @param {object} [snapshot.encryptionSettings] Encryption settings for disk
     * or snapshot
     *
     * @param {boolean} [snapshot.encryptionSettings.enabled] Set this flag to true
     * and provide DiskEncryptionKey and optional KeyEncryptionKey to enable
     * encryption. Set this flag to false and remove DiskEncryptionKey and
     * KeyEncryptionKey to disable encryption. If EncryptionSettings is null in the
     * request object, the existing settings remain unchanged.
     *
     * @param {object} [snapshot.encryptionSettings.diskEncryptionKey] Key Vault
     * Secret Url and vault id of the disk encryption key
     *
     * @param {object} snapshot.encryptionSettings.diskEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string} snapshot.encryptionSettings.diskEncryptionKey.secretUrl Url
     * pointing to a key or secret in KeyVault
     *
     * @param {object} [snapshot.encryptionSettings.keyEncryptionKey] Key Vault Key
     * Url and vault id of the key encryption key
     *
     * @param {object} snapshot.encryptionSettings.keyEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string}
     * [snapshot.encryptionSettings.keyEncryptionKey.sourceVault.id] Resource Id
     *
     * @param {string} snapshot.encryptionSettings.keyEncryptionKey.keyUrl Url
     * pointing to a key or secret in KeyVault
     *
     * @param {object} [snapshot.tags] Resource tags
     *
     * @param {object} [snapshot.sku]
     *
     * @param {string} [snapshot.sku.name] The sku name. Possible values include:
     * 'Standard_LRS', 'Premium_LRS'
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<Snapshot>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginUpdateWithHttpOperationResponse(resourceGroupName: string, snapshotName: string, snapshot: models.SnapshotUpdate, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.Snapshot>>;

    /**
     * Updates (patches) a snapshot.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} snapshotName The name of the snapshot within the given
     * subscription and resource group.
     *
     * @param {object} snapshot Snapshot object supplied in the body of the Patch
     * snapshot operation.
     *
     * @param {string} [snapshot.osType] the Operating System type. Possible values
     * include: 'Windows', 'Linux'
     *
     * @param {number} [snapshot.diskSizeGB] If creationData.createOption is Empty,
     * this field is mandatory and it indicates the size of the VHD to create. If
     * this field is present for updates or creation with other options, it
     * indicates a resize. Resizes are only allowed if the disk is not attached to
     * a running VM, and can only increase the disk's size.
     *
     * @param {object} [snapshot.encryptionSettings] Encryption settings for disk
     * or snapshot
     *
     * @param {boolean} [snapshot.encryptionSettings.enabled] Set this flag to true
     * and provide DiskEncryptionKey and optional KeyEncryptionKey to enable
     * encryption. Set this flag to false and remove DiskEncryptionKey and
     * KeyEncryptionKey to disable encryption. If EncryptionSettings is null in the
     * request object, the existing settings remain unchanged.
     *
     * @param {object} [snapshot.encryptionSettings.diskEncryptionKey] Key Vault
     * Secret Url and vault id of the disk encryption key
     *
     * @param {object} snapshot.encryptionSettings.diskEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string} snapshot.encryptionSettings.diskEncryptionKey.secretUrl Url
     * pointing to a key or secret in KeyVault
     *
     * @param {object} [snapshot.encryptionSettings.keyEncryptionKey] Key Vault Key
     * Url and vault id of the key encryption key
     *
     * @param {object} snapshot.encryptionSettings.keyEncryptionKey.sourceVault
     * Resource id of the KeyVault containing the key or secret
     *
     * @param {string}
     * [snapshot.encryptionSettings.keyEncryptionKey.sourceVault.id] Resource Id
     *
     * @param {string} snapshot.encryptionSettings.keyEncryptionKey.keyUrl Url
     * pointing to a key or secret in KeyVault
     *
     * @param {object} [snapshot.tags] Resource tags
     *
     * @param {object} [snapshot.sku]
     *
     * @param {string} [snapshot.sku.name] The sku name. Possible values include:
     * 'Standard_LRS', 'Premium_LRS'
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {Snapshot} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {Snapshot} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link Snapshot} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginUpdate(resourceGroupName: string, snapshotName: string, snapshot: models.SnapshotUpdate, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.Snapshot>;
    beginUpdate(resourceGroupName: string, snapshotName: string, snapshot: models.SnapshotUpdate, callback: ServiceCallback<models.Snapshot>): void;
    beginUpdate(resourceGroupName: string, snapshotName: string, snapshot: models.SnapshotUpdate, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.Snapshot>): void;


    /**
     * Deletes a snapshot.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} snapshotName The name of the snapshot within the given
     * subscription and resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginDeleteMethodWithHttpOperationResponse(resourceGroupName: string, snapshotName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Deletes a snapshot.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} snapshotName The name of the snapshot within the given
     * subscription and resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginDeleteMethod(resourceGroupName: string, snapshotName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginDeleteMethod(resourceGroupName: string, snapshotName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginDeleteMethod(resourceGroupName: string, snapshotName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Grants access to a snapshot.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} snapshotName The name of the snapshot within the given
     * subscription and resource group.
     *
     * @param {object} grantAccessData Access data object supplied in the body of
     * the get snapshot access operation.
     *
     * @param {string} grantAccessData.access Possible values include: 'None',
     * 'Read'
     *
     * @param {number} grantAccessData.durationInSeconds Time duration in seconds
     * until the SAS access expires.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<AccessUri>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginGrantAccessWithHttpOperationResponse(resourceGroupName: string, snapshotName: string, grantAccessData: models.GrantAccessData, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.AccessUri>>;

    /**
     * Grants access to a snapshot.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} snapshotName The name of the snapshot within the given
     * subscription and resource group.
     *
     * @param {object} grantAccessData Access data object supplied in the body of
     * the get snapshot access operation.
     *
     * @param {string} grantAccessData.access Possible values include: 'None',
     * 'Read'
     *
     * @param {number} grantAccessData.durationInSeconds Time duration in seconds
     * until the SAS access expires.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {AccessUri} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {AccessUri} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link AccessUri} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginGrantAccess(resourceGroupName: string, snapshotName: string, grantAccessData: models.GrantAccessData, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.AccessUri>;
    beginGrantAccess(resourceGroupName: string, snapshotName: string, grantAccessData: models.GrantAccessData, callback: ServiceCallback<models.AccessUri>): void;
    beginGrantAccess(resourceGroupName: string, snapshotName: string, grantAccessData: models.GrantAccessData, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.AccessUri>): void;


    /**
     * Revokes access to a snapshot.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} snapshotName The name of the snapshot within the given
     * subscription and resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<OperationStatusResponse>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginRevokeAccessWithHttpOperationResponse(resourceGroupName: string, snapshotName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.OperationStatusResponse>>;

    /**
     * Revokes access to a snapshot.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} snapshotName The name of the snapshot within the given
     * subscription and resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {OperationStatusResponse} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {OperationStatusResponse} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link OperationStatusResponse} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginRevokeAccess(resourceGroupName: string, snapshotName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.OperationStatusResponse>;
    beginRevokeAccess(resourceGroupName: string, snapshotName: string, callback: ServiceCallback<models.OperationStatusResponse>): void;
    beginRevokeAccess(resourceGroupName: string, snapshotName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.OperationStatusResponse>): void;


    /**
     * Lists snapshots under a resource group.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<SnapshotList>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listByResourceGroupNextWithHttpOperationResponse(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.SnapshotList>>;

    /**
     * Lists snapshots under a resource group.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {SnapshotList} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {SnapshotList} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link SnapshotList} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listByResourceGroupNext(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.SnapshotList>;
    listByResourceGroupNext(nextPageLink: string, callback: ServiceCallback<models.SnapshotList>): void;
    listByResourceGroupNext(nextPageLink: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.SnapshotList>): void;


    /**
     * Lists snapshots under a subscription.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<SnapshotList>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listNextWithHttpOperationResponse(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.SnapshotList>>;

    /**
     * Lists snapshots under a subscription.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {SnapshotList} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {SnapshotList} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link SnapshotList} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listNext(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.SnapshotList>;
    listNext(nextPageLink: string, callback: ServiceCallback<models.SnapshotList>): void;
    listNext(nextPageLink: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.SnapshotList>): void;
}

/**
 * @class
 * VirtualMachineRunCommands
 * __NOTE__: An instance of this class is automatically created for an
 * instance of the ComputeManagementClient.
 */
export interface VirtualMachineRunCommands {


    /**
     * Lists all available run commands for a subscription in a location.
     *
     * @param {string} location The location upon which run commands is queried.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<RunCommandListResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listWithHttpOperationResponse(location: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.RunCommandListResult>>;

    /**
     * Lists all available run commands for a subscription in a location.
     *
     * @param {string} location The location upon which run commands is queried.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {RunCommandListResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {RunCommandListResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link RunCommandListResult} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    list(location: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.RunCommandListResult>;
    list(location: string, callback: ServiceCallback<models.RunCommandListResult>): void;
    list(location: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.RunCommandListResult>): void;


    /**
     * Gets specific run command for a subscription in a location.
     *
     * @param {string} location The location upon which run commands is queried.
     *
     * @param {string} commandId The command id.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<RunCommandDocument>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    getWithHttpOperationResponse(location: string, commandId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.RunCommandDocument>>;

    /**
     * Gets specific run command for a subscription in a location.
     *
     * @param {string} location The location upon which run commands is queried.
     *
     * @param {string} commandId The command id.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {RunCommandDocument} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {RunCommandDocument} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link RunCommandDocument} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    get(location: string, commandId: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.RunCommandDocument>;
    get(location: string, commandId: string, callback: ServiceCallback<models.RunCommandDocument>): void;
    get(location: string, commandId: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.RunCommandDocument>): void;


    /**
     * Lists all available run commands for a subscription in a location.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<RunCommandListResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listNextWithHttpOperationResponse(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.RunCommandListResult>>;

    /**
     * Lists all available run commands for a subscription in a location.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {RunCommandListResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {RunCommandListResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link RunCommandListResult} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listNext(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.RunCommandListResult>;
    listNext(nextPageLink: string, callback: ServiceCallback<models.RunCommandListResult>): void;
    listNext(nextPageLink: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.RunCommandListResult>): void;
}

/**
 * @class
 * ContainerServices
 * __NOTE__: An instance of this class is automatically created for an
 * instance of the ComputeManagementClient.
 */
export interface ContainerServices {


    /**
     * @summary Gets a list of container services in the specified subscription.
     *
     * Gets a list of container services in the specified subscription. The
     * operation returns properties of each container service including state,
     * orchestrator, number of masters and agents, and FQDNs of masters and agents.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<ContainerServiceListResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listWithHttpOperationResponse(options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.ContainerServiceListResult>>;

    /**
     * @summary Gets a list of container services in the specified subscription.
     *
     * Gets a list of container services in the specified subscription. The
     * operation returns properties of each container service including state,
     * orchestrator, number of masters and agents, and FQDNs of masters and agents.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {ContainerServiceListResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {ContainerServiceListResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link ContainerServiceListResult} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    list(options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.ContainerServiceListResult>;
    list(callback: ServiceCallback<models.ContainerServiceListResult>): void;
    list(options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.ContainerServiceListResult>): void;


    /**
     * @summary Creates or updates a container service.
     *
     * Creates or updates a container service with the specified configuration of
     * orchestrator, masters, and agents.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} containerServiceName The name of the container service in
     * the specified subscription and resource group.
     *
     * @param {object} parameters Parameters supplied to the Create or Update a
     * Container Service operation.
     *
     * @param {object} [parameters.orchestratorProfile] Properties of the
     * orchestrator.
     *
     * @param {string} parameters.orchestratorProfile.orchestratorType The
     * orchestrator to use to manage container service cluster resources. Valid
     * values are Swarm, DCOS, and Custom. Possible values include: 'Swarm',
     * 'DCOS', 'Custom', 'Kubernetes'
     *
     * @param {object} [parameters.customProfile] Properties for custom clusters.
     *
     * @param {string} parameters.customProfile.orchestrator The name of the custom
     * orchestrator to use.
     *
     * @param {object} [parameters.servicePrincipalProfile] Properties for cluster
     * service principals.
     *
     * @param {string} parameters.servicePrincipalProfile.clientId The ID for the
     * service principal.
     *
     * @param {string} parameters.servicePrincipalProfile.secret The secret
     * password associated with the service principal.
     *
     * @param {object} parameters.masterProfile Properties of master agents.
     *
     * @param {number} [parameters.masterProfile.count] Number of masters (VMs) in
     * the container service cluster. Allowed values are 1, 3, and 5. The default
     * value is 1.
     *
     * @param {string} parameters.masterProfile.dnsPrefix DNS prefix to be used to
     * create the FQDN for master.
     *
     * @param {array} parameters.agentPoolProfiles Properties of the agent pool.
     *
     * @param {object} [parameters.windowsProfile] Properties of Windows VMs.
     *
     * @param {string} parameters.windowsProfile.adminUsername The administrator
     * username to use for Windows VMs.
     *
     * @param {string} parameters.windowsProfile.adminPassword The administrator
     * password to use for Windows VMs.
     *
     * @param {object} parameters.linuxProfile Properties of Linux VMs.
     *
     * @param {string} parameters.linuxProfile.adminUsername The administrator
     * username to use for Linux VMs.
     *
     * @param {object} parameters.linuxProfile.ssh The ssh key configuration for
     * Linux VMs.
     *
     * @param {array} parameters.linuxProfile.ssh.publicKeys the list of SSH public
     * keys used to authenticate with Linux-based VMs.
     *
     * @param {object} [parameters.diagnosticsProfile] Properties of the diagnostic
     * agent.
     *
     * @param {object} parameters.diagnosticsProfile.vmDiagnostics Profile for the
     * container service VM diagnostic agent.
     *
     * @param {boolean} parameters.diagnosticsProfile.vmDiagnostics.enabled Whether
     * the VM diagnostic agent is provisioned on the VM.
     *
     * @param {string} parameters.location Resource location
     *
     * @param {object} [parameters.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<ContainerService>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    createOrUpdateWithHttpOperationResponse(resourceGroupName: string, containerServiceName: string, parameters: models.ContainerService, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.ContainerService>>;

    /**
     * @summary Creates or updates a container service.
     *
     * Creates or updates a container service with the specified configuration of
     * orchestrator, masters, and agents.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} containerServiceName The name of the container service in
     * the specified subscription and resource group.
     *
     * @param {object} parameters Parameters supplied to the Create or Update a
     * Container Service operation.
     *
     * @param {object} [parameters.orchestratorProfile] Properties of the
     * orchestrator.
     *
     * @param {string} parameters.orchestratorProfile.orchestratorType The
     * orchestrator to use to manage container service cluster resources. Valid
     * values are Swarm, DCOS, and Custom. Possible values include: 'Swarm',
     * 'DCOS', 'Custom', 'Kubernetes'
     *
     * @param {object} [parameters.customProfile] Properties for custom clusters.
     *
     * @param {string} parameters.customProfile.orchestrator The name of the custom
     * orchestrator to use.
     *
     * @param {object} [parameters.servicePrincipalProfile] Properties for cluster
     * service principals.
     *
     * @param {string} parameters.servicePrincipalProfile.clientId The ID for the
     * service principal.
     *
     * @param {string} parameters.servicePrincipalProfile.secret The secret
     * password associated with the service principal.
     *
     * @param {object} parameters.masterProfile Properties of master agents.
     *
     * @param {number} [parameters.masterProfile.count] Number of masters (VMs) in
     * the container service cluster. Allowed values are 1, 3, and 5. The default
     * value is 1.
     *
     * @param {string} parameters.masterProfile.dnsPrefix DNS prefix to be used to
     * create the FQDN for master.
     *
     * @param {array} parameters.agentPoolProfiles Properties of the agent pool.
     *
     * @param {object} [parameters.windowsProfile] Properties of Windows VMs.
     *
     * @param {string} parameters.windowsProfile.adminUsername The administrator
     * username to use for Windows VMs.
     *
     * @param {string} parameters.windowsProfile.adminPassword The administrator
     * password to use for Windows VMs.
     *
     * @param {object} parameters.linuxProfile Properties of Linux VMs.
     *
     * @param {string} parameters.linuxProfile.adminUsername The administrator
     * username to use for Linux VMs.
     *
     * @param {object} parameters.linuxProfile.ssh The ssh key configuration for
     * Linux VMs.
     *
     * @param {array} parameters.linuxProfile.ssh.publicKeys the list of SSH public
     * keys used to authenticate with Linux-based VMs.
     *
     * @param {object} [parameters.diagnosticsProfile] Properties of the diagnostic
     * agent.
     *
     * @param {object} parameters.diagnosticsProfile.vmDiagnostics Profile for the
     * container service VM diagnostic agent.
     *
     * @param {boolean} parameters.diagnosticsProfile.vmDiagnostics.enabled Whether
     * the VM diagnostic agent is provisioned on the VM.
     *
     * @param {string} parameters.location Resource location
     *
     * @param {object} [parameters.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {ContainerService} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {ContainerService} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link ContainerService} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    createOrUpdate(resourceGroupName: string, containerServiceName: string, parameters: models.ContainerService, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.ContainerService>;
    createOrUpdate(resourceGroupName: string, containerServiceName: string, parameters: models.ContainerService, callback: ServiceCallback<models.ContainerService>): void;
    createOrUpdate(resourceGroupName: string, containerServiceName: string, parameters: models.ContainerService, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.ContainerService>): void;


    /**
     * @summary Gets the properties of the specified container service.
     *
     * Gets the properties of the specified container service in the specified
     * subscription and resource group. The operation returns the properties
     * including state, orchestrator, number of masters and agents, and FQDNs of
     * masters and agents.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} containerServiceName The name of the container service in
     * the specified subscription and resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<ContainerService>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    getWithHttpOperationResponse(resourceGroupName: string, containerServiceName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.ContainerService>>;

    /**
     * @summary Gets the properties of the specified container service.
     *
     * Gets the properties of the specified container service in the specified
     * subscription and resource group. The operation returns the properties
     * including state, orchestrator, number of masters and agents, and FQDNs of
     * masters and agents.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} containerServiceName The name of the container service in
     * the specified subscription and resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {ContainerService} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {ContainerService} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link ContainerService} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    get(resourceGroupName: string, containerServiceName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.ContainerService>;
    get(resourceGroupName: string, containerServiceName: string, callback: ServiceCallback<models.ContainerService>): void;
    get(resourceGroupName: string, containerServiceName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.ContainerService>): void;


    /**
     * @summary Deletes the specified container service.
     *
     * Deletes the specified container service in the specified subscription and
     * resource group. The operation does not delete other resources created as
     * part of creating a container service, including storage accounts, VMs, and
     * availability sets. All the other resources created with the container
     * service are part of the same resource group and can be deleted individually.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} containerServiceName The name of the container service in
     * the specified subscription and resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<null>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    deleteMethodWithHttpOperationResponse(resourceGroupName: string, containerServiceName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<void>>;

    /**
     * @summary Deletes the specified container service.
     *
     * Deletes the specified container service in the specified subscription and
     * resource group. The operation does not delete other resources created as
     * part of creating a container service, including storage accounts, VMs, and
     * availability sets. All the other resources created with the container
     * service are part of the same resource group and can be deleted individually.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} containerServiceName The name of the container service in
     * the specified subscription and resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {null} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {null} [result]   - The deserialized result object if an error did not occur.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    deleteMethod(resourceGroupName: string, containerServiceName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<void>;
    deleteMethod(resourceGroupName: string, containerServiceName: string, callback: ServiceCallback<void>): void;
    deleteMethod(resourceGroupName: string, containerServiceName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<void>): void;


    /**
     * @summary Gets a list of container services in the specified resource group.
     *
     * Gets a list of container services in the specified subscription and resource
     * group. The operation returns properties of each container service including
     * state, orchestrator, number of masters and agents, and FQDNs of masters and
     * agents.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<ContainerServiceListResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listByResourceGroupWithHttpOperationResponse(resourceGroupName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.ContainerServiceListResult>>;

    /**
     * @summary Gets a list of container services in the specified resource group.
     *
     * Gets a list of container services in the specified subscription and resource
     * group. The operation returns properties of each container service including
     * state, orchestrator, number of masters and agents, and FQDNs of masters and
     * agents.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {ContainerServiceListResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {ContainerServiceListResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link ContainerServiceListResult} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listByResourceGroup(resourceGroupName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.ContainerServiceListResult>;
    listByResourceGroup(resourceGroupName: string, callback: ServiceCallback<models.ContainerServiceListResult>): void;
    listByResourceGroup(resourceGroupName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.ContainerServiceListResult>): void;


    /**
     * @summary Creates or updates a container service.
     *
     * Creates or updates a container service with the specified configuration of
     * orchestrator, masters, and agents.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} containerServiceName The name of the container service in
     * the specified subscription and resource group.
     *
     * @param {object} parameters Parameters supplied to the Create or Update a
     * Container Service operation.
     *
     * @param {object} [parameters.orchestratorProfile] Properties of the
     * orchestrator.
     *
     * @param {string} parameters.orchestratorProfile.orchestratorType The
     * orchestrator to use to manage container service cluster resources. Valid
     * values are Swarm, DCOS, and Custom. Possible values include: 'Swarm',
     * 'DCOS', 'Custom', 'Kubernetes'
     *
     * @param {object} [parameters.customProfile] Properties for custom clusters.
     *
     * @param {string} parameters.customProfile.orchestrator The name of the custom
     * orchestrator to use.
     *
     * @param {object} [parameters.servicePrincipalProfile] Properties for cluster
     * service principals.
     *
     * @param {string} parameters.servicePrincipalProfile.clientId The ID for the
     * service principal.
     *
     * @param {string} parameters.servicePrincipalProfile.secret The secret
     * password associated with the service principal.
     *
     * @param {object} parameters.masterProfile Properties of master agents.
     *
     * @param {number} [parameters.masterProfile.count] Number of masters (VMs) in
     * the container service cluster. Allowed values are 1, 3, and 5. The default
     * value is 1.
     *
     * @param {string} parameters.masterProfile.dnsPrefix DNS prefix to be used to
     * create the FQDN for master.
     *
     * @param {array} parameters.agentPoolProfiles Properties of the agent pool.
     *
     * @param {object} [parameters.windowsProfile] Properties of Windows VMs.
     *
     * @param {string} parameters.windowsProfile.adminUsername The administrator
     * username to use for Windows VMs.
     *
     * @param {string} parameters.windowsProfile.adminPassword The administrator
     * password to use for Windows VMs.
     *
     * @param {object} parameters.linuxProfile Properties of Linux VMs.
     *
     * @param {string} parameters.linuxProfile.adminUsername The administrator
     * username to use for Linux VMs.
     *
     * @param {object} parameters.linuxProfile.ssh The ssh key configuration for
     * Linux VMs.
     *
     * @param {array} parameters.linuxProfile.ssh.publicKeys the list of SSH public
     * keys used to authenticate with Linux-based VMs.
     *
     * @param {object} [parameters.diagnosticsProfile] Properties of the diagnostic
     * agent.
     *
     * @param {object} parameters.diagnosticsProfile.vmDiagnostics Profile for the
     * container service VM diagnostic agent.
     *
     * @param {boolean} parameters.diagnosticsProfile.vmDiagnostics.enabled Whether
     * the VM diagnostic agent is provisioned on the VM.
     *
     * @param {string} parameters.location Resource location
     *
     * @param {object} [parameters.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<ContainerService>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginCreateOrUpdateWithHttpOperationResponse(resourceGroupName: string, containerServiceName: string, parameters: models.ContainerService, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.ContainerService>>;

    /**
     * @summary Creates or updates a container service.
     *
     * Creates or updates a container service with the specified configuration of
     * orchestrator, masters, and agents.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} containerServiceName The name of the container service in
     * the specified subscription and resource group.
     *
     * @param {object} parameters Parameters supplied to the Create or Update a
     * Container Service operation.
     *
     * @param {object} [parameters.orchestratorProfile] Properties of the
     * orchestrator.
     *
     * @param {string} parameters.orchestratorProfile.orchestratorType The
     * orchestrator to use to manage container service cluster resources. Valid
     * values are Swarm, DCOS, and Custom. Possible values include: 'Swarm',
     * 'DCOS', 'Custom', 'Kubernetes'
     *
     * @param {object} [parameters.customProfile] Properties for custom clusters.
     *
     * @param {string} parameters.customProfile.orchestrator The name of the custom
     * orchestrator to use.
     *
     * @param {object} [parameters.servicePrincipalProfile] Properties for cluster
     * service principals.
     *
     * @param {string} parameters.servicePrincipalProfile.clientId The ID for the
     * service principal.
     *
     * @param {string} parameters.servicePrincipalProfile.secret The secret
     * password associated with the service principal.
     *
     * @param {object} parameters.masterProfile Properties of master agents.
     *
     * @param {number} [parameters.masterProfile.count] Number of masters (VMs) in
     * the container service cluster. Allowed values are 1, 3, and 5. The default
     * value is 1.
     *
     * @param {string} parameters.masterProfile.dnsPrefix DNS prefix to be used to
     * create the FQDN for master.
     *
     * @param {array} parameters.agentPoolProfiles Properties of the agent pool.
     *
     * @param {object} [parameters.windowsProfile] Properties of Windows VMs.
     *
     * @param {string} parameters.windowsProfile.adminUsername The administrator
     * username to use for Windows VMs.
     *
     * @param {string} parameters.windowsProfile.adminPassword The administrator
     * password to use for Windows VMs.
     *
     * @param {object} parameters.linuxProfile Properties of Linux VMs.
     *
     * @param {string} parameters.linuxProfile.adminUsername The administrator
     * username to use for Linux VMs.
     *
     * @param {object} parameters.linuxProfile.ssh The ssh key configuration for
     * Linux VMs.
     *
     * @param {array} parameters.linuxProfile.ssh.publicKeys the list of SSH public
     * keys used to authenticate with Linux-based VMs.
     *
     * @param {object} [parameters.diagnosticsProfile] Properties of the diagnostic
     * agent.
     *
     * @param {object} parameters.diagnosticsProfile.vmDiagnostics Profile for the
     * container service VM diagnostic agent.
     *
     * @param {boolean} parameters.diagnosticsProfile.vmDiagnostics.enabled Whether
     * the VM diagnostic agent is provisioned on the VM.
     *
     * @param {string} parameters.location Resource location
     *
     * @param {object} [parameters.tags] Resource tags
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {ContainerService} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {ContainerService} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link ContainerService} for more information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginCreateOrUpdate(resourceGroupName: string, containerServiceName: string, parameters: models.ContainerService, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.ContainerService>;
    beginCreateOrUpdate(resourceGroupName: string, containerServiceName: string, parameters: models.ContainerService, callback: ServiceCallback<models.ContainerService>): void;
    beginCreateOrUpdate(resourceGroupName: string, containerServiceName: string, parameters: models.ContainerService, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.ContainerService>): void;


    /**
     * @summary Deletes the specified container service.
     *
     * Deletes the specified container service in the specified subscription and
     * resource group. The operation does not delete other resources created as
     * part of creating a container service, including storage accounts, VMs, and
     * availability sets. All the other resources created with the container
     * service are part of the same resource group and can be deleted individually.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} containerServiceName The name of the container service in
     * the specified subscription and resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<null>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    beginDeleteMethodWithHttpOperationResponse(resourceGroupName: string, containerServiceName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<void>>;

    /**
     * @summary Deletes the specified container service.
     *
     * Deletes the specified container service in the specified subscription and
     * resource group. The operation does not delete other resources created as
     * part of creating a container service, including storage accounts, VMs, and
     * availability sets. All the other resources created with the container
     * service are part of the same resource group and can be deleted individually.
     *
     * @param {string} resourceGroupName The name of the resource group.
     *
     * @param {string} containerServiceName The name of the container service in
     * the specified subscription and resource group.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {null} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {null} [result]   - The deserialized result object if an error did not occur.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    beginDeleteMethod(resourceGroupName: string, containerServiceName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<void>;
    beginDeleteMethod(resourceGroupName: string, containerServiceName: string, callback: ServiceCallback<void>): void;
    beginDeleteMethod(resourceGroupName: string, containerServiceName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<void>): void;


    /**
     * @summary Gets a list of container services in the specified subscription.
     *
     * Gets a list of container services in the specified subscription. The
     * operation returns properties of each container service including state,
     * orchestrator, number of masters and agents, and FQDNs of masters and agents.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<ContainerServiceListResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listNextWithHttpOperationResponse(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.ContainerServiceListResult>>;

    /**
     * @summary Gets a list of container services in the specified subscription.
     *
     * Gets a list of container services in the specified subscription. The
     * operation returns properties of each container service including state,
     * orchestrator, number of masters and agents, and FQDNs of masters and agents.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {ContainerServiceListResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {ContainerServiceListResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link ContainerServiceListResult} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listNext(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.ContainerServiceListResult>;
    listNext(nextPageLink: string, callback: ServiceCallback<models.ContainerServiceListResult>): void;
    listNext(nextPageLink: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.ContainerServiceListResult>): void;


    /**
     * @summary Gets a list of container services in the specified resource group.
     *
     * Gets a list of container services in the specified subscription and resource
     * group. The operation returns properties of each container service including
     * state, orchestrator, number of masters and agents, and FQDNs of masters and
     * agents.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<ContainerServiceListResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listByResourceGroupNextWithHttpOperationResponse(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.ContainerServiceListResult>>;

    /**
     * @summary Gets a list of container services in the specified resource group.
     *
     * Gets a list of container services in the specified subscription and resource
     * group. The operation returns properties of each container service including
     * state, orchestrator, number of masters and agents, and FQDNs of masters and
     * agents.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {ContainerServiceListResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {ContainerServiceListResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link ContainerServiceListResult} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    listByResourceGroupNext(nextPageLink: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.ContainerServiceListResult>;
    listByResourceGroupNext(nextPageLink: string, callback: ServiceCallback<models.ContainerServiceListResult>): void;
    listByResourceGroupNext(nextPageLink: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.ContainerServiceListResult>): void;
}
