@@ -19,24 +19,27 @@ package availabilitysets
1919import (
2020 "context"
2121 "strconv"
22+ "strings"
2223
2324 "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5"
2425 "github.com/pkg/errors"
2526 "k8s.io/utils/ptr"
2627
2728 infrav1 "sigs.k8s.io/cluster-api-provider-azure/api/v1beta1"
29+ "sigs.k8s.io/cluster-api-provider-azure/azure"
2830 "sigs.k8s.io/cluster-api-provider-azure/azure/converters"
2931 "sigs.k8s.io/cluster-api-provider-azure/azure/services/resourceskus"
3032)
3133
3234// AvailabilitySetSpec defines the specification for an availability set.
3335type AvailabilitySetSpec struct {
34- Name string
35- ResourceGroup string
36- ClusterName string
37- Location string
38- SKU * resourceskus.SKU
39- AdditionalTags infrav1.Tags
36+ Name string
37+ ResourceGroup string
38+ ClusterName string
39+ Location string
40+ CloudEnvironment string
41+ SKU * resourceskus.SKU
42+ AdditionalTags infrav1.Tags
4043}
4144
4245// ResourceName returns the name of the availability set.
@@ -64,20 +67,10 @@ func (s *AvailabilitySetSpec) Parameters(_ context.Context, existing interface{}
6467 return nil , nil
6568 }
6669
67- if s .SKU == nil {
68- return nil , errors .New ("unable to get required availability set SKU from machine cache" )
69- }
70-
71- var faultDomainCount * int32
72- faultDomainCountStr , ok := s .SKU .GetCapability (resourceskus .MaximumPlatformFaultDomainCount )
73- if ! ok {
74- return nil , errors .Errorf ("unable to get required availability set SKU capability %s" , resourceskus .MaximumPlatformFaultDomainCount )
75- }
76- count , err := strconv .ParseInt (faultDomainCountStr , 10 , 32 )
70+ faultDomainCount , err := getFaultDomainCount (s .SKU , s .CloudEnvironment )
7771 if err != nil {
78- return nil , errors . Wrapf ( err , "unable to parse availability set fault domain count" )
72+ return nil , err
7973 }
80- faultDomainCount = ptr.To [int32 ](int32 (count ))
8174
8275 asParams := armcompute.AvailabilitySet {
8376 SKU : & armcompute.SKU {
@@ -98,3 +91,27 @@ func (s *AvailabilitySetSpec) Parameters(_ context.Context, existing interface{}
9891
9992 return asParams , nil
10093}
94+
95+ func getFaultDomainCount (SKU * resourceskus.SKU , cloudEnvironment string ) (* int32 , error ) {
96+ // Azure Stack environments may not implement the resource SKU API
97+ // for availability sets. Use a default value instead.
98+ if strings .EqualFold (cloudEnvironment , azure .StackCloudName ) {
99+ return ptr .To (int32 (2 )), nil
100+ }
101+
102+ if SKU == nil {
103+ return nil , errors .New ("unable to get required availability set SKU from machine cache" )
104+ }
105+
106+ var faultDomainCount * int32
107+ faultDomainCountStr , ok := SKU .GetCapability (resourceskus .MaximumPlatformFaultDomainCount )
108+ if ! ok {
109+ return nil , errors .Errorf ("unable to get required availability set SKU capability %s" , resourceskus .MaximumPlatformFaultDomainCount )
110+ }
111+ count , err := strconv .ParseInt (faultDomainCountStr , 10 , 32 )
112+ if err != nil {
113+ return nil , errors .Wrapf (err , "unable to parse availability set fault domain count" )
114+ }
115+ faultDomainCount = ptr.To [int32 ](int32 (count ))
116+ return faultDomainCount , nil
117+ }
0 commit comments