api/v1/adxcluster_types.go (48 lines of code) (raw):

package v1 import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) // ADXClusterSpec defines the desired state of ADXCluster type ADXClusterSpec struct { //+kubebuilder:validation:Required //+kubebuilder:validation:Pattern=^[a-zA-Z0-9-]+$ //+kubebuilder:validation:MaxLength=100 // ClusterName is the unique, valid name for the ADX cluster. Must match ^[a-zA-Z0-9-]+$ and be at most 100 characters. Used for resource identification and naming in Azure. ClusterName string `json:"clusterName"` //+kubebuilder:validation:Format=uri // Endpoint is the URI of an existing ADX cluster. If set, the operator will use this cluster instead of provisioning a new one. Example: "https://mycluster.kusto.windows.net" Endpoint string `json:"endpoint,omitempty"` //+kubebuilder:validation:Optional // Databases is an array of ADXClusterDatabaseSpec objects. Each object defines a database to be created in the ADX cluster. If not specified, no databases will be created. Databases []ADXClusterDatabaseSpec `json:"databases,omitempty"` //+kubebuilder:validation:Optional // Provision contains optional Azure provisioning details for the ADX cluster. If omitted, the operator will attempt zero-config provisioning using Azure IMDS. Provision *ADXClusterProvisionSpec `json:"provision,omitempty"` } type ADXClusterProvisionSpec struct { //+kubebuilder:validation:Optional // SubscriptionId is the Azure subscription ID to use for provisioning. Optional. If omitted, will be auto-detected in zero-config mode. SubscriptionId string `json:"subscriptionId,omitempty"` //+kubebuilder:validation:Optional // ResourceGroup is the Azure resource group for the ADX cluster. Optional. If omitted, will be auto-created or detected. ResourceGroup string `json:"resourceGroup,omitempty"` //+kubebuilder:validation:Optional // Location is the Azure region for the ADX cluster (e.g., "eastus2"). Optional. If omitted, will be auto-detected. Location string `json:"location,omitempty"` //+kubebuilder:validation:Optional // SkuName is the Azure SKU for the ADX cluster (e.g., "Standard_L8as_v3"). Optional. The operator will select a default if not specified. SkuName string `json:"skuName,omitempty"` //+kubebuilder:validation:Optional // Tier is the Azure ADX tier (e.g., "Standard"). Optional. Defaults to "Standard" if not specified. Tier string `json:"tier,omitempty"` //+kubebuilder:validation:Optional // ManagedIdentityClientId is the client ID of a user-assigned managed identity to use for the cluster. Optional. If omitted, system-assigned identity will be used. ManagedIdentityClientId string `json:"managedIdentityClientId,omitempty"` } type ADXClusterDatabaseSpec struct { //+kubebuilder:validation:Required //+kubebuilder:validation:Pattern=^[a-zA-Z0-9_]+$ //+kubebuilder:validation:MaxLength=64 //+kubebuilder:validation:MinLength=1 // ADX valid database name, required DatabaseName string `json:"databaseName"` //+kubebuilder:validation:Optional //+kubebuilder:default=30 // default 30, optional RetentionInDays int `json:"retentionInDays,omitempty"` //+kubebuilder:validation:Optional // ADX retention policy, optional RetentionPolicy string `json:"retentionPolicy,omitempty"` //+kubebuilder:validation:Required //+kubebuilder:validation:Enum=Metrics;Logs;Traces // TelemetryType: Required TelemtryType DatabaseTelemetryType `json:"telemetryType"` } type DatabaseTelemetryType string const ( DatabaseTelemetryMetrics DatabaseTelemetryType = "Metrics" DatabaseTelemetryLogs DatabaseTelemetryType = "Logs" DatabaseTelemetryTraces DatabaseTelemetryType = "Traces" ADXClusterConditionOwner = "adxcluster.adx-mon.azure.com" ) // ADXClusterStatus defines the observed state of ADXCluster type ADXClusterStatus struct { //+kubebuilder:validation:Optional Conditions []metav1.Condition `json:"conditions,omitempty"` } //+kubebuilder:object:root=true //+kubebuilder:subresource:status // ADXCluster is the Schema for the adxclusters API type ADXCluster struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` Spec ADXClusterSpec `json:"spec,omitempty"` Status ADXClusterStatus `json:"status,omitempty"` } //+kubebuilder:object:root=true // ADXClusterList contains a list of ADXCluster type ADXClusterList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty"` Items []ADXCluster `json:"items"` } func init() { SchemeBuilder.Register(&ADXCluster{}, &ADXClusterList{}) }