@@ -19,24 +19,27 @@ package availabilitysets
19
19
import (
20
20
"context"
21
21
"strconv"
22
+ "strings"
22
23
23
24
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5"
24
25
"github.com/pkg/errors"
25
26
"k8s.io/utils/ptr"
26
27
27
28
infrav1 "sigs.k8s.io/cluster-api-provider-azure/api/v1beta1"
29
+ "sigs.k8s.io/cluster-api-provider-azure/azure"
28
30
"sigs.k8s.io/cluster-api-provider-azure/azure/converters"
29
31
"sigs.k8s.io/cluster-api-provider-azure/azure/services/resourceskus"
30
32
)
31
33
32
34
// AvailabilitySetSpec defines the specification for an availability set.
33
35
type 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
40
43
}
41
44
42
45
// ResourceName returns the name of the availability set.
@@ -64,20 +67,10 @@ func (s *AvailabilitySetSpec) Parameters(_ context.Context, existing interface{}
64
67
return nil , nil
65
68
}
66
69
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 )
77
71
if err != nil {
78
- return nil , errors . Wrapf ( err , "unable to parse availability set fault domain count" )
72
+ return nil , err
79
73
}
80
- faultDomainCount = ptr.To [int32 ](int32 (count ))
81
74
82
75
asParams := armcompute.AvailabilitySet {
83
76
SKU : & armcompute.SKU {
@@ -98,3 +91,27 @@ func (s *AvailabilitySetSpec) Parameters(_ context.Context, existing interface{}
98
91
99
92
return asParams , nil
100
93
}
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