sigs.k8s.io/cluster-api-provider-azure@v1.14.3/azure/converters/resourcehealth.go (about) 1 /* 2 Copyright 2022 The Kubernetes Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package converters 18 19 import ( 20 "strings" 21 22 "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcehealth/armresourcehealth" 23 "k8s.io/utils/ptr" 24 infrav1 "sigs.k8s.io/cluster-api-provider-azure/api/v1beta1" 25 clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" 26 "sigs.k8s.io/cluster-api/util/conditions" 27 ) 28 29 // SDKAvailabilityStatusToCondition converts an Azure Resource Health availability status to a status condition. 30 func SDKAvailabilityStatusToCondition(availStatus armresourcehealth.AvailabilityStatus) *clusterv1.Condition { 31 if availStatus.Properties == nil { 32 return conditions.FalseCondition(infrav1.AzureResourceAvailableCondition, "", "", "") 33 } 34 35 state := availStatus.Properties.AvailabilityState 36 37 if ptr.Deref(state, "") == armresourcehealth.AvailabilityStateValuesAvailable { 38 return conditions.TrueCondition(infrav1.AzureResourceAvailableCondition) 39 } 40 41 var reason strings.Builder 42 if availStatus.Properties.ReasonType != nil { 43 // CAPI specifies Reason should be CamelCase, though the Azure API 44 // response may include spaces (e.g. "Customer Initiated") 45 words := strings.Split(*availStatus.Properties.ReasonType, " ") 46 for _, word := range words { 47 if len(word) > 0 { 48 reason.WriteString(strings.ToTitle(word[:1])) 49 } 50 if len(word) > 1 { 51 reason.WriteString(word[1:]) 52 } 53 } 54 } 55 56 var severity clusterv1.ConditionSeverity 57 switch ptr.Deref(availStatus.Properties.AvailabilityState, "") { 58 case armresourcehealth.AvailabilityStateValuesUnavailable: 59 severity = clusterv1.ConditionSeverityError 60 case armresourcehealth.AvailabilityStateValuesDegraded, armresourcehealth.AvailabilityStateValuesUnknown: 61 severity = clusterv1.ConditionSeverityWarning 62 } 63 64 var message string 65 if availStatus.Properties.Summary != nil { 66 message = *availStatus.Properties.Summary 67 } 68 69 return conditions.FalseCondition(infrav1.AzureResourceAvailableCondition, reason.String(), severity, message) 70 }