/*
 * 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 cluster create parameters.
 *
 */
class ClusterCreateProperties {
  /**
   * Create a ClusterCreateProperties.
   * @property {string} [clusterVersion] The version of the cluster.
   * @property {string} [osType] The type of operating system. Possible values
   * include: 'Windows', 'Linux'
   * @property {string} [tier] The cluster tier. Possible values include:
   * 'Standard', 'Premium'
   * @property {object} [clusterDefinition] The cluster definition.
   * @property {string} [clusterDefinition.blueprint] The link to the
   * blueprint.
   * @property {string} [clusterDefinition.kind] The type of cluster.
   * @property {object} [clusterDefinition.componentVersion] The versions of
   * different services in the cluster.
   * @property {object} [clusterDefinition.configurations] The cluster
   * configurations.
   * @property {object} [securityProfile] The security profile.
   * @property {string} [securityProfile.directoryType] The directory type.
   * Possible values include: 'ActiveDirectory'
   * @property {string} [securityProfile.domain] The organization's active
   * directory domain.
   * @property {string} [securityProfile.organizationalUnitDN] The
   * organizational unit within the Active Directory to place the cluster and
   * service accounts.
   * @property {array} [securityProfile.ldapsUrls] The LDAPS protocol URLs to
   * communicate with the Active Directory.
   * @property {string} [securityProfile.domainUsername] The domain user
   * account that will have admin privileges on the cluster.
   * @property {string} [securityProfile.domainUserPassword] The domain admin
   * password.
   * @property {array} [securityProfile.clusterUsersGroupDNs] Optional. The
   * Distinguished Names for cluster user groups
   * @property {string} [securityProfile.aaddsResourceId] The resource ID of
   * the user's Azure Active Directory Domain Service.
   * @property {string} [securityProfile.msiResourceId] User assigned identity
   * that has permissions to read and create cluster-related artifacts in the
   * user's AADDS.
   * @property {object} [computeProfile] The compute profile.
   * @property {array} [computeProfile.roles] The list of roles in the cluster.
   * @property {object} [storageProfile] The storage profile.
   * @property {array} [storageProfile.storageaccounts] The list of storage
   * accounts in the cluster.
   * @property {object} [diskEncryptionProperties] The disk encryption
   * properties.
   * @property {string} [diskEncryptionProperties.vaultUri] Base key vault URI
   * where the customers key is located eg. https://myvault.vault.azure.net
   * @property {string} [diskEncryptionProperties.keyName] Key name that is
   * used for enabling disk encryption.
   * @property {string} [diskEncryptionProperties.keyVersion] Specific key
   * version that is used for enabling disk encryption.
   * @property {string} [diskEncryptionProperties.encryptionAlgorithm]
   * Algorithm identifier for encryption, default RSA-OAEP. Possible values
   * include: 'RSA-OAEP', 'RSA-OAEP-256', 'RSA1_5'
   * @property {string} [diskEncryptionProperties.msiResourceId] Resource ID of
   * Managed Identity that is used to access the key vault.
   */
  constructor() {
  }

  /**
   * Defines the metadata of ClusterCreateProperties
   *
   * @returns {object} metadata of ClusterCreateProperties
   *
   */
  mapper() {
    return {
      required: false,
      serializedName: 'ClusterCreateProperties',
      type: {
        name: 'Composite',
        className: 'ClusterCreateProperties',
        modelProperties: {
          clusterVersion: {
            required: false,
            serializedName: 'clusterVersion',
            type: {
              name: 'String'
            }
          },
          osType: {
            required: false,
            serializedName: 'osType',
            type: {
              name: 'Enum',
              allowedValues: [ 'Windows', 'Linux' ]
            }
          },
          tier: {
            required: false,
            serializedName: 'tier',
            type: {
              name: 'Enum',
              allowedValues: [ 'Standard', 'Premium' ]
            }
          },
          clusterDefinition: {
            required: false,
            serializedName: 'clusterDefinition',
            type: {
              name: 'Composite',
              className: 'ClusterDefinition'
            }
          },
          securityProfile: {
            required: false,
            serializedName: 'securityProfile',
            type: {
              name: 'Composite',
              className: 'SecurityProfile'
            }
          },
          computeProfile: {
            required: false,
            serializedName: 'computeProfile',
            type: {
              name: 'Composite',
              className: 'ComputeProfile'
            }
          },
          storageProfile: {
            required: false,
            serializedName: 'storageProfile',
            type: {
              name: 'Composite',
              className: 'StorageProfile'
            }
          },
          diskEncryptionProperties: {
            required: false,
            serializedName: 'diskEncryptionProperties',
            type: {
              name: 'Composite',
              className: 'DiskEncryptionProperties'
            }
          }
        }
      }
    };
  }
}

module.exports = ClusterCreateProperties;
