// Code generated by azure-service-operator-codegen. DO NOT EDIT.
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
package arm

import "github.com/Azure/azure-service-operator/v2/pkg/genruntime"

type RedisEnterprise_Spec struct {
	// Identity: The identity of the resource.
	Identity *ManagedServiceIdentity `json:"identity,omitempty"`

	// Kind: Distinguishes the kind of cluster. Read-only.
	Kind *Kind `json:"kind,omitempty"`

	// Location: The geo-location where the resource lives
	Location *string `json:"location,omitempty"`
	Name     string  `json:"name,omitempty"`

	// Properties: Other properties of the cluster.
	Properties *ClusterProperties `json:"properties,omitempty"`

	// Sku: The SKU to create, which affects price, performance, and features.
	Sku *Sku `json:"sku,omitempty"`

	// Tags: Resource tags.
	Tags map[string]string `json:"tags,omitempty"`

	// Zones: The Availability Zones where this cluster will be deployed.
	Zones []string `json:"zones,omitempty"`
}

var _ genruntime.ARMResourceSpec = &RedisEnterprise_Spec{}

// GetAPIVersion returns the ARM API version of the resource. This is always "2025-04-01"
func (enterprise RedisEnterprise_Spec) GetAPIVersion() string {
	return "2025-04-01"
}

// GetName returns the Name of the resource
func (enterprise *RedisEnterprise_Spec) GetName() string {
	return enterprise.Name
}

// GetType returns the ARM Type of the resource. This is always "Microsoft.Cache/redisEnterprise"
func (enterprise *RedisEnterprise_Spec) GetType() string {
	return "Microsoft.Cache/redisEnterprise"
}

// Properties of Redis Enterprise clusters, as opposed to general resource properties like location, tags
type ClusterProperties struct {
	// Encryption: Encryption-at-rest configuration for the cluster.
	Encryption *ClusterProperties_Encryption `json:"encryption,omitempty"`

	// HighAvailability: Enabled by default. If highAvailability is disabled, the data set is not replicated. This affects the
	// availability SLA, and increases the risk of data loss.
	HighAvailability *ClusterProperties_HighAvailability `json:"highAvailability,omitempty"`

	// MinimumTlsVersion: The minimum TLS version for the cluster to support, e.g. '1.2'. Newer versions can be added in the
	// future. Note that TLS 1.0 and TLS 1.1 are now completely obsolete -- you cannot use them. They are mentioned only for
	// the sake of consistency with old API versions.
	MinimumTlsVersion *ClusterProperties_MinimumTlsVersion `json:"minimumTlsVersion,omitempty"`
}

// Distinguishes the kind of cluster. Read-only.
// +kubebuilder:validation:Enum={"v1","v2"}
type Kind string

const (
	Kind_V1 = Kind("v1")
	Kind_V2 = Kind("v2")
)

// Mapping from string to Kind
var kind_Values = map[string]Kind{
	"v1": Kind_V1,
	"v2": Kind_V2,
}

// Managed service identity (system assigned and/or user assigned identities)
type ManagedServiceIdentity struct {
	// Type: Type of managed service identity (where both SystemAssigned and UserAssigned types are allowed).
	Type                   *ManagedServiceIdentityType            `json:"type,omitempty"`
	UserAssignedIdentities map[string]UserAssignedIdentityDetails `json:"userAssignedIdentities,omitempty"`
}

// SKU parameters supplied to the create Redis Enterprise cluster operation.
type Sku struct {
	// Capacity: This property is only used with Enterprise and EnterpriseFlash SKUs. Determines the size of the cluster. Valid
	// values are (2, 4, 6, ...) for Enterprise SKUs and (3, 9, 15, ...) for EnterpriseFlash SKUs.
	Capacity *int `json:"capacity,omitempty"`

	// Name: The level of Redis Enterprise cluster to deploy. Possible values: ('Balanced_B5', 'MemoryOptimized_M10',
	// 'ComputeOptimized_X5', etc.). For more information on SKUs see the latest pricing documentation. Note that additional
	// SKUs may become supported in the future.
	Name *Sku_Name `json:"name,omitempty"`
}

type ClusterProperties_Encryption struct {
	// CustomerManagedKeyEncryption: All Customer-managed key encryption properties for the resource. Set this to an empty
	// object to use Microsoft-managed key encryption.
	CustomerManagedKeyEncryption *ClusterProperties_Encryption_CustomerManagedKeyEncryption `json:"customerManagedKeyEncryption,omitempty"`
}

// +kubebuilder:validation:Enum={"Disabled","Enabled"}
type ClusterProperties_HighAvailability string

const (
	ClusterProperties_HighAvailability_Disabled = ClusterProperties_HighAvailability("Disabled")
	ClusterProperties_HighAvailability_Enabled  = ClusterProperties_HighAvailability("Enabled")
)

// Mapping from string to ClusterProperties_HighAvailability
var clusterProperties_HighAvailability_Values = map[string]ClusterProperties_HighAvailability{
	"disabled": ClusterProperties_HighAvailability_Disabled,
	"enabled":  ClusterProperties_HighAvailability_Enabled,
}

// +kubebuilder:validation:Enum={"1.0","1.1","1.2"}
type ClusterProperties_MinimumTlsVersion string

const (
	ClusterProperties_MinimumTlsVersion_10 = ClusterProperties_MinimumTlsVersion("1.0")
	ClusterProperties_MinimumTlsVersion_11 = ClusterProperties_MinimumTlsVersion("1.1")
	ClusterProperties_MinimumTlsVersion_12 = ClusterProperties_MinimumTlsVersion("1.2")
)

// Mapping from string to ClusterProperties_MinimumTlsVersion
var clusterProperties_MinimumTlsVersion_Values = map[string]ClusterProperties_MinimumTlsVersion{
	"1.0": ClusterProperties_MinimumTlsVersion_10,
	"1.1": ClusterProperties_MinimumTlsVersion_11,
	"1.2": ClusterProperties_MinimumTlsVersion_12,
}

// Type of managed service identity (where both SystemAssigned and UserAssigned types are allowed).
// +kubebuilder:validation:Enum={"None","SystemAssigned","SystemAssigned, UserAssigned","UserAssigned"}
type ManagedServiceIdentityType string

const (
	ManagedServiceIdentityType_None                       = ManagedServiceIdentityType("None")
	ManagedServiceIdentityType_SystemAssigned             = ManagedServiceIdentityType("SystemAssigned")
	ManagedServiceIdentityType_SystemAssignedUserAssigned = ManagedServiceIdentityType("SystemAssigned, UserAssigned")
	ManagedServiceIdentityType_UserAssigned               = ManagedServiceIdentityType("UserAssigned")
)

// Mapping from string to ManagedServiceIdentityType
var managedServiceIdentityType_Values = map[string]ManagedServiceIdentityType{
	"none":                         ManagedServiceIdentityType_None,
	"systemassigned":               ManagedServiceIdentityType_SystemAssigned,
	"systemassigned, userassigned": ManagedServiceIdentityType_SystemAssignedUserAssigned,
	"userassigned":                 ManagedServiceIdentityType_UserAssigned,
}

// +kubebuilder:validation:Enum={"Balanced_B0","Balanced_B1","Balanced_B10","Balanced_B100","Balanced_B1000","Balanced_B150","Balanced_B20","Balanced_B250","Balanced_B3","Balanced_B350","Balanced_B5","Balanced_B50","Balanced_B500","Balanced_B700","ComputeOptimized_X10","ComputeOptimized_X100","ComputeOptimized_X150","ComputeOptimized_X20","ComputeOptimized_X250","ComputeOptimized_X3","ComputeOptimized_X350","ComputeOptimized_X5","ComputeOptimized_X50","ComputeOptimized_X500","ComputeOptimized_X700","EnterpriseFlash_F1500","EnterpriseFlash_F300","EnterpriseFlash_F700","Enterprise_E1","Enterprise_E10","Enterprise_E100","Enterprise_E20","Enterprise_E200","Enterprise_E400","Enterprise_E5","Enterprise_E50","FlashOptimized_A1000","FlashOptimized_A1500","FlashOptimized_A2000","FlashOptimized_A250","FlashOptimized_A4500","FlashOptimized_A500","FlashOptimized_A700","MemoryOptimized_M10","MemoryOptimized_M100","MemoryOptimized_M1000","MemoryOptimized_M150","MemoryOptimized_M1500","MemoryOptimized_M20","MemoryOptimized_M2000","MemoryOptimized_M250","MemoryOptimized_M350","MemoryOptimized_M50","MemoryOptimized_M500","MemoryOptimized_M700"}
type Sku_Name string

const (
	Sku_Name_Balanced_B0           = Sku_Name("Balanced_B0")
	Sku_Name_Balanced_B1           = Sku_Name("Balanced_B1")
	Sku_Name_Balanced_B10          = Sku_Name("Balanced_B10")
	Sku_Name_Balanced_B100         = Sku_Name("Balanced_B100")
	Sku_Name_Balanced_B1000        = Sku_Name("Balanced_B1000")
	Sku_Name_Balanced_B150         = Sku_Name("Balanced_B150")
	Sku_Name_Balanced_B20          = Sku_Name("Balanced_B20")
	Sku_Name_Balanced_B250         = Sku_Name("Balanced_B250")
	Sku_Name_Balanced_B3           = Sku_Name("Balanced_B3")
	Sku_Name_Balanced_B350         = Sku_Name("Balanced_B350")
	Sku_Name_Balanced_B5           = Sku_Name("Balanced_B5")
	Sku_Name_Balanced_B50          = Sku_Name("Balanced_B50")
	Sku_Name_Balanced_B500         = Sku_Name("Balanced_B500")
	Sku_Name_Balanced_B700         = Sku_Name("Balanced_B700")
	Sku_Name_ComputeOptimized_X10  = Sku_Name("ComputeOptimized_X10")
	Sku_Name_ComputeOptimized_X100 = Sku_Name("ComputeOptimized_X100")
	Sku_Name_ComputeOptimized_X150 = Sku_Name("ComputeOptimized_X150")
	Sku_Name_ComputeOptimized_X20  = Sku_Name("ComputeOptimized_X20")
	Sku_Name_ComputeOptimized_X250 = Sku_Name("ComputeOptimized_X250")
	Sku_Name_ComputeOptimized_X3   = Sku_Name("ComputeOptimized_X3")
	Sku_Name_ComputeOptimized_X350 = Sku_Name("ComputeOptimized_X350")
	Sku_Name_ComputeOptimized_X5   = Sku_Name("ComputeOptimized_X5")
	Sku_Name_ComputeOptimized_X50  = Sku_Name("ComputeOptimized_X50")
	Sku_Name_ComputeOptimized_X500 = Sku_Name("ComputeOptimized_X500")
	Sku_Name_ComputeOptimized_X700 = Sku_Name("ComputeOptimized_X700")
	Sku_Name_EnterpriseFlash_F1500 = Sku_Name("EnterpriseFlash_F1500")
	Sku_Name_EnterpriseFlash_F300  = Sku_Name("EnterpriseFlash_F300")
	Sku_Name_EnterpriseFlash_F700  = Sku_Name("EnterpriseFlash_F700")
	Sku_Name_Enterprise_E1         = Sku_Name("Enterprise_E1")
	Sku_Name_Enterprise_E10        = Sku_Name("Enterprise_E10")
	Sku_Name_Enterprise_E100       = Sku_Name("Enterprise_E100")
	Sku_Name_Enterprise_E20        = Sku_Name("Enterprise_E20")
	Sku_Name_Enterprise_E200       = Sku_Name("Enterprise_E200")
	Sku_Name_Enterprise_E400       = Sku_Name("Enterprise_E400")
	Sku_Name_Enterprise_E5         = Sku_Name("Enterprise_E5")
	Sku_Name_Enterprise_E50        = Sku_Name("Enterprise_E50")
	Sku_Name_FlashOptimized_A1000  = Sku_Name("FlashOptimized_A1000")
	Sku_Name_FlashOptimized_A1500  = Sku_Name("FlashOptimized_A1500")
	Sku_Name_FlashOptimized_A2000  = Sku_Name("FlashOptimized_A2000")
	Sku_Name_FlashOptimized_A250   = Sku_Name("FlashOptimized_A250")
	Sku_Name_FlashOptimized_A4500  = Sku_Name("FlashOptimized_A4500")
	Sku_Name_FlashOptimized_A500   = Sku_Name("FlashOptimized_A500")
	Sku_Name_FlashOptimized_A700   = Sku_Name("FlashOptimized_A700")
	Sku_Name_MemoryOptimized_M10   = Sku_Name("MemoryOptimized_M10")
	Sku_Name_MemoryOptimized_M100  = Sku_Name("MemoryOptimized_M100")
	Sku_Name_MemoryOptimized_M1000 = Sku_Name("MemoryOptimized_M1000")
	Sku_Name_MemoryOptimized_M150  = Sku_Name("MemoryOptimized_M150")
	Sku_Name_MemoryOptimized_M1500 = Sku_Name("MemoryOptimized_M1500")
	Sku_Name_MemoryOptimized_M20   = Sku_Name("MemoryOptimized_M20")
	Sku_Name_MemoryOptimized_M2000 = Sku_Name("MemoryOptimized_M2000")
	Sku_Name_MemoryOptimized_M250  = Sku_Name("MemoryOptimized_M250")
	Sku_Name_MemoryOptimized_M350  = Sku_Name("MemoryOptimized_M350")
	Sku_Name_MemoryOptimized_M50   = Sku_Name("MemoryOptimized_M50")
	Sku_Name_MemoryOptimized_M500  = Sku_Name("MemoryOptimized_M500")
	Sku_Name_MemoryOptimized_M700  = Sku_Name("MemoryOptimized_M700")
)

// Mapping from string to Sku_Name
var sku_Name_Values = map[string]Sku_Name{
	"balanced_b0":           Sku_Name_Balanced_B0,
	"balanced_b1":           Sku_Name_Balanced_B1,
	"balanced_b10":          Sku_Name_Balanced_B10,
	"balanced_b100":         Sku_Name_Balanced_B100,
	"balanced_b1000":        Sku_Name_Balanced_B1000,
	"balanced_b150":         Sku_Name_Balanced_B150,
	"balanced_b20":          Sku_Name_Balanced_B20,
	"balanced_b250":         Sku_Name_Balanced_B250,
	"balanced_b3":           Sku_Name_Balanced_B3,
	"balanced_b350":         Sku_Name_Balanced_B350,
	"balanced_b5":           Sku_Name_Balanced_B5,
	"balanced_b50":          Sku_Name_Balanced_B50,
	"balanced_b500":         Sku_Name_Balanced_B500,
	"balanced_b700":         Sku_Name_Balanced_B700,
	"computeoptimized_x10":  Sku_Name_ComputeOptimized_X10,
	"computeoptimized_x100": Sku_Name_ComputeOptimized_X100,
	"computeoptimized_x150": Sku_Name_ComputeOptimized_X150,
	"computeoptimized_x20":  Sku_Name_ComputeOptimized_X20,
	"computeoptimized_x250": Sku_Name_ComputeOptimized_X250,
	"computeoptimized_x3":   Sku_Name_ComputeOptimized_X3,
	"computeoptimized_x350": Sku_Name_ComputeOptimized_X350,
	"computeoptimized_x5":   Sku_Name_ComputeOptimized_X5,
	"computeoptimized_x50":  Sku_Name_ComputeOptimized_X50,
	"computeoptimized_x500": Sku_Name_ComputeOptimized_X500,
	"computeoptimized_x700": Sku_Name_ComputeOptimized_X700,
	"enterpriseflash_f1500": Sku_Name_EnterpriseFlash_F1500,
	"enterpriseflash_f300":  Sku_Name_EnterpriseFlash_F300,
	"enterpriseflash_f700":  Sku_Name_EnterpriseFlash_F700,
	"enterprise_e1":         Sku_Name_Enterprise_E1,
	"enterprise_e10":        Sku_Name_Enterprise_E10,
	"enterprise_e100":       Sku_Name_Enterprise_E100,
	"enterprise_e20":        Sku_Name_Enterprise_E20,
	"enterprise_e200":       Sku_Name_Enterprise_E200,
	"enterprise_e400":       Sku_Name_Enterprise_E400,
	"enterprise_e5":         Sku_Name_Enterprise_E5,
	"enterprise_e50":        Sku_Name_Enterprise_E50,
	"flashoptimized_a1000":  Sku_Name_FlashOptimized_A1000,
	"flashoptimized_a1500":  Sku_Name_FlashOptimized_A1500,
	"flashoptimized_a2000":  Sku_Name_FlashOptimized_A2000,
	"flashoptimized_a250":   Sku_Name_FlashOptimized_A250,
	"flashoptimized_a4500":  Sku_Name_FlashOptimized_A4500,
	"flashoptimized_a500":   Sku_Name_FlashOptimized_A500,
	"flashoptimized_a700":   Sku_Name_FlashOptimized_A700,
	"memoryoptimized_m10":   Sku_Name_MemoryOptimized_M10,
	"memoryoptimized_m100":  Sku_Name_MemoryOptimized_M100,
	"memoryoptimized_m1000": Sku_Name_MemoryOptimized_M1000,
	"memoryoptimized_m150":  Sku_Name_MemoryOptimized_M150,
	"memoryoptimized_m1500": Sku_Name_MemoryOptimized_M1500,
	"memoryoptimized_m20":   Sku_Name_MemoryOptimized_M20,
	"memoryoptimized_m2000": Sku_Name_MemoryOptimized_M2000,
	"memoryoptimized_m250":  Sku_Name_MemoryOptimized_M250,
	"memoryoptimized_m350":  Sku_Name_MemoryOptimized_M350,
	"memoryoptimized_m50":   Sku_Name_MemoryOptimized_M50,
	"memoryoptimized_m500":  Sku_Name_MemoryOptimized_M500,
	"memoryoptimized_m700":  Sku_Name_MemoryOptimized_M700,
}

// Information about the user assigned identity for the resource
type UserAssignedIdentityDetails struct {
}

type ClusterProperties_Encryption_CustomerManagedKeyEncryption struct {
	// KeyEncryptionKeyIdentity: All identity configuration for Customer-managed key settings defining which identity should be
	// used to auth to Key Vault.
	KeyEncryptionKeyIdentity *ClusterProperties_Encryption_CustomerManagedKeyEncryption_KeyEncryptionKeyIdentity `json:"keyEncryptionKeyIdentity,omitempty"`

	// KeyEncryptionKeyUrl: Key encryption key Url, versioned only. Ex:
	// https://contosovault.vault.azure.net/keys/contosokek/562a4bb76b524a1493a6afe8e536ee78
	KeyEncryptionKeyUrl *string `json:"keyEncryptionKeyUrl,omitempty"`
}

type ClusterProperties_Encryption_CustomerManagedKeyEncryption_KeyEncryptionKeyIdentity struct {
	// IdentityType: Only userAssignedIdentity is supported in this API version; other types may be supported in the future
	IdentityType *ClusterProperties_Encryption_CustomerManagedKeyEncryption_KeyEncryptionKeyIdentity_IdentityType `json:"identityType,omitempty"`

	// UserAssignedIdentityResourceId: User assigned identity to use for accessing key encryption key Url. Ex:
	// /subscriptions/<sub uuid>/resourceGroups/<resource
	// group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myId.
	UserAssignedIdentityResourceId *string `json:"userAssignedIdentityResourceId,omitempty"`
}

// +kubebuilder:validation:Enum={"systemAssignedIdentity","userAssignedIdentity"}
type ClusterProperties_Encryption_CustomerManagedKeyEncryption_KeyEncryptionKeyIdentity_IdentityType string

const (
	ClusterProperties_Encryption_CustomerManagedKeyEncryption_KeyEncryptionKeyIdentity_IdentityType_SystemAssignedIdentity = ClusterProperties_Encryption_CustomerManagedKeyEncryption_KeyEncryptionKeyIdentity_IdentityType("systemAssignedIdentity")
	ClusterProperties_Encryption_CustomerManagedKeyEncryption_KeyEncryptionKeyIdentity_IdentityType_UserAssignedIdentity   = ClusterProperties_Encryption_CustomerManagedKeyEncryption_KeyEncryptionKeyIdentity_IdentityType("userAssignedIdentity")
)

// Mapping from string to ClusterProperties_Encryption_CustomerManagedKeyEncryption_KeyEncryptionKeyIdentity_IdentityType
var clusterProperties_Encryption_CustomerManagedKeyEncryption_KeyEncryptionKeyIdentity_IdentityType_Values = map[string]ClusterProperties_Encryption_CustomerManagedKeyEncryption_KeyEncryptionKeyIdentity_IdentityType{
	"systemassignedidentity": ClusterProperties_Encryption_CustomerManagedKeyEncryption_KeyEncryptionKeyIdentity_IdentityType_SystemAssignedIdentity,
	"userassignedidentity":   ClusterProperties_Encryption_CustomerManagedKeyEncryption_KeyEncryptionKeyIdentity_IdentityType_UserAssignedIdentity,
}
