/*
 * 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.
 */

'use strict';

/**
 * The CreateCluster request parameters.
 *
 */
class ClusterCreateParametersExtended {
  /**
   * Create a ClusterCreateParametersExtended.
   * @property {string} [location] The location of the cluster.
   * @property {object} [tags] The resource tags.
   * @property {object} [properties] The cluster create parameters.
   * @property {string} [properties.clusterVersion] The version of the cluster.
   * @property {string} [properties.osType] The type of operating system.
   * Possible values include: 'Windows', 'Linux'
   * @property {string} [properties.tier] The cluster tier. Possible values
   * include: 'Standard', 'Premium'
   * @property {object} [properties.clusterDefinition] The cluster definition.
   * @property {string} [properties.clusterDefinition.blueprint] The link to
   * the blueprint.
   * @property {string} [properties.clusterDefinition.kind] The type of
   * cluster.
   * @property {object} [properties.clusterDefinition.componentVersion] The
   * versions of different services in the cluster.
   * @property {object} [properties.clusterDefinition.configurations] The
   * cluster configurations.
   * @property {object} [properties.securityProfile] The security profile.
   * @property {string} [properties.securityProfile.directoryType] The
   * directory type. Possible values include: 'ActiveDirectory'
   * @property {string} [properties.securityProfile.domain] The organization's
   * active directory domain.
   * @property {string} [properties.securityProfile.organizationalUnitDN] The
   * organizational unit within the Active Directory to place the cluster and
   * service accounts.
   * @property {array} [properties.securityProfile.ldapsUrls] The LDAPS
   * protocol URLs to communicate with the Active Directory.
   * @property {string} [properties.securityProfile.domainUsername] The domain
   * user account that will have admin privileges on the cluster.
   * @property {string} [properties.securityProfile.domainUserPassword] The
   * domain admin password.
   * @property {array} [properties.securityProfile.clusterUsersGroupDNs]
   * Optional. The Distinguished Names for cluster user groups
   * @property {string} [properties.securityProfile.aaddsResourceId] The
   * resource ID of the user's Azure Active Directory Domain Service.
   * @property {string} [properties.securityProfile.msiResourceId] User
   * assigned identity that has permissions to read and create cluster-related
   * artifacts in the user's AADDS.
   * @property {object} [properties.computeProfile] The compute profile.
   * @property {array} [properties.computeProfile.roles] The list of roles in
   * the cluster.
   * @property {object} [properties.storageProfile] The storage profile.
   * @property {array} [properties.storageProfile.storageaccounts] The list of
   * storage accounts in the cluster.
   * @property {object} [properties.diskEncryptionProperties] The disk
   * encryption properties.
   * @property {string} [properties.diskEncryptionProperties.vaultUri] Base key
   * vault URI where the customers key is located eg.
   * https://myvault.vault.azure.net
   * @property {string} [properties.diskEncryptionProperties.keyName] Key name
   * that is used for enabling disk encryption.
   * @property {string} [properties.diskEncryptionProperties.keyVersion]
   * Specific key version that is used for enabling disk encryption.
   * @property {string}
   * [properties.diskEncryptionProperties.encryptionAlgorithm] Algorithm
   * identifier for encryption, default RSA-OAEP. Possible values include:
   * 'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
   * @property {string} [properties.diskEncryptionProperties.msiResourceId]
   * Resource ID of Managed Identity that is used to access the key vault.
   * @property {object} [identity] The identity of the cluster, if configured.
   * @property {string} [identity.principalId] The principal id of cluster
   * identity. This property will only be provided for a system assigned
   * identity.
   * @property {string} [identity.tenantId] The tenant id associated with the
   * cluster. This property will only be provided for a system assigned
   * identity.
   * @property {string} [identity.type] The type of identity used for the
   * cluster. The type 'SystemAssigned, UserAssigned' includes both an
   * implicitly created identity and a set of user assigned identities.
   * Possible values include: 'SystemAssigned', 'UserAssigned',
   * 'SystemAssigned, UserAssigned', 'None'
   * @property {object} [identity.userAssignedIdentities] The list of user
   * identities associated with the cluster. The user identity dictionary key
   * references will be ARM resource ids in the form:
   * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'.
   */
  constructor() {
  }

  /**
   * Defines the metadata of ClusterCreateParametersExtended
   *
   * @returns {object} metadata of ClusterCreateParametersExtended
   *
   */
  mapper() {
    return {
      required: false,
      serializedName: 'ClusterCreateParametersExtended',
      type: {
        name: 'Composite',
        className: 'ClusterCreateParametersExtended',
        modelProperties: {
          location: {
            required: false,
            serializedName: 'location',
            type: {
              name: 'String'
            }
          },
          tags: {
            required: false,
            serializedName: 'tags',
            type: {
              name: 'Dictionary',
              value: {
                  required: false,
                  serializedName: 'StringElementType',
                  type: {
                    name: 'String'
                  }
              }
            }
          },
          properties: {
            required: false,
            serializedName: 'properties',
            type: {
              name: 'Composite',
              className: 'ClusterCreateProperties'
            }
          },
          identity: {
            required: false,
            serializedName: 'identity',
            type: {
              name: 'Composite',
              className: 'ClusterIdentity'
            }
          }
        }
      }
    };
  }
}

module.exports = ClusterCreateParametersExtended;
