Skip to content

Commit e57fb13

Browse files
committed
test commit
1 parent 6a927e3 commit e57fb13

File tree

2 files changed

+25
-278
lines changed

2 files changed

+25
-278
lines changed

pkg/controller/machinepool/azureactuator.go

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@ package machinepool
22

33
import (
44
"context"
5-
"fmt"
65
"strings"
76
"time"
87

9-
"github.com/blang/semver/v4"
8+
"github.com/davecgh/go-spew/spew"
109

1110
"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-12-01/compute"
1211
"github.com/Azure/go-autorest/autorest/azure"
@@ -28,8 +27,6 @@ import (
2827
controllerutils "github.com/openshift/hive/pkg/controller/utils"
2928
)
3029

31-
var versionsSupportingAzureImageGallery = semver.MustParseRange(">=4.12.0")
32-
3330
// AzureActuator encapsulates the pieces necessary to be able to generate
3431
// a list of MachineSets to sync to the remote cluster.
3532
type AzureActuator struct {
@@ -186,9 +183,29 @@ func (a *AzureActuator) GenerateMachineSets(cd *hivev1.ClusterDeployment, pool *
186183
session,
187184
// TODO: support adding userTags? https://issues.redhat.com/browse/HIVE-2143
188185
)
186+
187+
for _, i := range installerMachineSets {
188+
p := i.Spec.Template.Spec.ProviderSpec.Value.Object.(*machineapi.AzureMachineProviderSpec).DeepCopy()
189+
if len(p.Image.ResourceID) > 0 {
190+
p.Image.ResourceID = p.Image.ResourceID + "/versions/latest"
191+
}
192+
i.Spec.Template.Spec.ProviderSpec.Value.Object = p
193+
}
194+
195+
pretty := prettifyMSets(installerMachineSets)
196+
a.logger.WithField("pretty", pretty).Error("FIND ME: here are your machines bro")
189197
return installerMachineSets, err == nil, errors.Wrap(err, "failed to generate machinesets")
190198
}
191199

200+
func prettifyMSets(msets []*machineapi.MachineSet) string {
201+
var providerSpecs []*machineapi.AzureMachineProviderSpec
202+
for _, i := range msets {
203+
p := i.Spec.Template.Spec.ProviderSpec.Value.Object.(*machineapi.AzureMachineProviderSpec)
204+
providerSpecs = append(providerSpecs, p)
205+
}
206+
return spew.Sdump(providerSpecs)
207+
}
208+
192209
func (a *AzureActuator) getZones(region string, instanceType string) ([]string, error) {
193210
ctx, cancel := context.WithTimeout(context.TODO(), 30*time.Second)
194211
defer cancel()
@@ -236,17 +253,3 @@ func (a *AzureActuator) gen2ImageExists(resourceGroupName string) (bool, error)
236253
}
237254
return false, nil
238255
}
239-
240-
func shouldUseImageGallery(cd *hivev1.ClusterDeployment) (bool, error) {
241-
versionString, err := getClusterVersion(cd)
242-
if err != nil {
243-
return true, fmt.Errorf("failed to get cluster semver: %w", err)
244-
}
245-
246-
version, err := semver.ParseTolerant(versionString)
247-
if err != nil {
248-
return true, fmt.Errorf("failed to parse cluster semver: %w", err)
249-
}
250-
251-
return versionsSupportingAzureImageGallery(version), nil
252-
}

pkg/controller/machinepool/azureactuator_test.go

Lines changed: 4 additions & 260 deletions
Original file line numberDiff line numberDiff line change
@@ -35,262 +35,6 @@ func TestAzureActuator(t *testing.T) {
3535
expectedErr bool
3636
expectedLogs []string
3737
}{
38-
// < 4.12
39-
{
40-
name: "generate single machineset for single zone",
41-
clusterDeployment: testAzureClusterDeployment(),
42-
pool: testAzurePool(),
43-
mockAzureClient: func(mockCtrl *gomock.Controller, client *mockazure.MockClient) {
44-
mockListResourceSKUs(mockCtrl, client, []string{"zone1"})
45-
mockGetVMCapabilities(client, "V1,V2")
46-
mockListImagesByResourceGroup(client, []compute.Image{testAzureImage(compute.HyperVGenerationTypesV1)})
47-
},
48-
expectedMachineSetReplicas: map[string]int64{
49-
generateAzureMachineSetName("zone1"): 3,
50-
},
51-
},
52-
{
53-
name: "generate machinesets across zones",
54-
clusterDeployment: testAzureClusterDeployment(),
55-
pool: testAzurePool(),
56-
mockAzureClient: func(mockCtrl *gomock.Controller, client *mockazure.MockClient) {
57-
mockListResourceSKUs(mockCtrl, client, []string{"zone1", "zone2", "zone3"})
58-
mockGetVMCapabilities(client, "V1,V2")
59-
mockListImagesByResourceGroup(client, []compute.Image{testAzureImage(compute.HyperVGenerationTypesV1)})
60-
},
61-
expectedMachineSetReplicas: map[string]int64{
62-
generateAzureMachineSetName("zone1"): 1,
63-
generateAzureMachineSetName("zone2"): 1,
64-
generateAzureMachineSetName("zone3"): 1,
65-
},
66-
},
67-
{
68-
name: "generate machinesets for specified zones",
69-
clusterDeployment: testAzureClusterDeployment(),
70-
pool: func() *hivev1.MachinePool {
71-
pool := testAzurePool()
72-
pool.Spec.Platform.Azure.Zones = []string{"zone1", "zone2", "zone3"}
73-
return pool
74-
}(),
75-
mockAzureClient: func(mockCtrl *gomock.Controller, client *mockazure.MockClient) {
76-
mockGetVMCapabilities(client, "V1,V2")
77-
mockListImagesByResourceGroup(client, []compute.Image{testAzureImage(compute.HyperVGenerationTypesV1)})
78-
},
79-
expectedMachineSetReplicas: map[string]int64{
80-
generateAzureMachineSetName("zone1"): 1,
81-
generateAzureMachineSetName("zone2"): 1,
82-
generateAzureMachineSetName("zone3"): 1,
83-
},
84-
},
85-
{
86-
name: "default network fields",
87-
clusterDeployment: testAzureClusterDeployment(),
88-
pool: testAzurePool(),
89-
mockAzureClient: func(mockCtrl *gomock.Controller, client *mockazure.MockClient) {
90-
mockListResourceSKUs(mockCtrl, client, []string{"zone1", "zone2", "zone3"})
91-
mockGetVMCapabilities(client, "V1,V2")
92-
mockListImagesByResourceGroup(client, []compute.Image{testAzureImage(compute.HyperVGenerationTypesV1)})
93-
},
94-
expectedMachineSetReplicas: map[string]int64{
95-
generateAzureMachineSetName("zone1"): 1,
96-
generateAzureMachineSetName("zone2"): 1,
97-
generateAzureMachineSetName("zone3"): 1,
98-
},
99-
extraProviderSpecValidation: func(t *testing.T, providerSpec *machineapi.AzureMachineProviderSpec) {
100-
assert.Equal(t, testInfraID+"-rg", providerSpec.NetworkResourceGroup, "unexpected ComputeSubnet => Subnet")
101-
assert.Equal(t, testInfraID+"-worker-subnet", providerSpec.Subnet, "unexpected ComputeSubnet => Subnet")
102-
assert.Equal(t, testInfraID+"-vnet", providerSpec.Vnet, "unexpected VirtualNetwork => Vnet")
103-
assert.False(t, providerSpec.AcceleratedNetworking, "expected basic networking")
104-
assert.Equal(t, providerSpec.PublicLoadBalancer, testInfraID, "expected default (clusterID) public load balancer")
105-
},
106-
},
107-
{
108-
name: "set custom network fields",
109-
clusterDeployment: testAzureClusterDeployment(),
110-
pool: func() *hivev1.MachinePool {
111-
pool := testAzurePool()
112-
pool.Spec.Platform.Azure.NetworkResourceGroupName = "some-rg"
113-
pool.Spec.Platform.Azure.ComputeSubnet = "some-subnet"
114-
pool.Spec.Platform.Azure.VirtualNetwork = "some-vnet"
115-
pool.Spec.Platform.Azure.VMNetworkingType = "Accelerated"
116-
pool.Spec.Platform.Azure.OutboundType = "UserDefinedRouting"
117-
return pool
118-
}(),
119-
mockAzureClient: func(mockCtrl *gomock.Controller, client *mockazure.MockClient) {
120-
mockListResourceSKUs(mockCtrl, client, []string{"zone1", "zone2", "zone3"})
121-
mockGetVMCapabilities(client, "V1,V2")
122-
mockListImagesByResourceGroup(client, []compute.Image{testAzureImage(compute.HyperVGenerationTypesV1)})
123-
},
124-
expectedMachineSetReplicas: map[string]int64{
125-
generateAzureMachineSetName("zone1"): 1,
126-
generateAzureMachineSetName("zone2"): 1,
127-
generateAzureMachineSetName("zone3"): 1,
128-
},
129-
extraProviderSpecValidation: func(t *testing.T, providerSpec *machineapi.AzureMachineProviderSpec) {
130-
assert.Equal(t, "some-rg", providerSpec.NetworkResourceGroup, "unexpected ComputeSubnet => Subnet")
131-
assert.Equal(t, "some-subnet", providerSpec.Subnet, "unexpected ComputeSubnet => Subnet")
132-
assert.Equal(t, "some-vnet", providerSpec.Vnet, "unexpected VirtualNetwork => Vnet")
133-
assert.True(t, providerSpec.AcceleratedNetworking, "expected accelerated networking")
134-
assert.Equal(t, providerSpec.PublicLoadBalancer, "", "expected empty public load balancer with UserDefinedRouting")
135-
},
136-
},
137-
{
138-
name: "more replicas than zones",
139-
clusterDeployment: testAzureClusterDeployment(),
140-
pool: func() *hivev1.MachinePool {
141-
p := testAzurePool()
142-
p.Spec.Replicas = ptr.To(int64(5))
143-
return p
144-
}(),
145-
mockAzureClient: func(mockCtrl *gomock.Controller, client *mockazure.MockClient) {
146-
mockListResourceSKUs(mockCtrl, client, []string{"zone1", "zone2", "zone3"})
147-
mockGetVMCapabilities(client, "V1,V2")
148-
mockListImagesByResourceGroup(client, []compute.Image{testAzureImage(compute.HyperVGenerationTypesV1)})
149-
},
150-
expectedMachineSetReplicas: map[string]int64{
151-
generateAzureMachineSetName("zone1"): 2,
152-
generateAzureMachineSetName("zone2"): 2,
153-
generateAzureMachineSetName("zone3"): 1,
154-
},
155-
},
156-
{
157-
name: "more zones than replicas",
158-
clusterDeployment: testAzureClusterDeployment(),
159-
pool: testAzurePool(),
160-
mockAzureClient: func(mockCtrl *gomock.Controller, client *mockazure.MockClient) {
161-
mockListResourceSKUs(mockCtrl, client, []string{"zone1", "zone2", "zone3", "zone4", "zone5"})
162-
mockGetVMCapabilities(client, "V1,V2")
163-
mockListImagesByResourceGroup(client, []compute.Image{testAzureImage(compute.HyperVGenerationTypesV1)})
164-
},
165-
expectedMachineSetReplicas: map[string]int64{
166-
generateAzureMachineSetName("zone1"): 1,
167-
generateAzureMachineSetName("zone2"): 1,
168-
generateAzureMachineSetName("zone3"): 1,
169-
generateAzureMachineSetName("zone4"): 0,
170-
generateAzureMachineSetName("zone5"): 0,
171-
},
172-
},
173-
{
174-
name: "list zones returns zero",
175-
clusterDeployment: testAzureClusterDeployment(),
176-
pool: testAzurePool(),
177-
mockAzureClient: func(mockCtrl *gomock.Controller, client *mockazure.MockClient) {
178-
mockListResourceSKUs(mockCtrl, client, []string{})
179-
mockGetVMCapabilities(client, "V1,V2")
180-
mockListImagesByResourceGroup(client, []compute.Image{testAzureImage(compute.HyperVGenerationTypesV1)})
181-
},
182-
expectedMachineSetReplicas: map[string]int64{
183-
generateAzureMachineSetName(""): 3, // Non-zoned deployment
184-
},
185-
expectedLogs: []string{"No availability zones detected for region. Using non-zoned deployment."},
186-
},
187-
{
188-
name: "default V1 image exists and instance supports V1 images",
189-
clusterDeployment: testAzureClusterDeployment(),
190-
pool: testAzurePool(),
191-
mockAzureClient: func(mockCtrl *gomock.Controller, client *mockazure.MockClient) {
192-
mockListResourceSKUs(mockCtrl, client, []string{"zone1", "zone2", "zone3"})
193-
mockGetVMCapabilities(client, "V1,V2")
194-
mockListImagesByResourceGroup(client, []compute.Image{testAzureImage(compute.HyperVGenerationTypesV1)})
195-
},
196-
expectedMachineSetReplicas: map[string]int64{
197-
generateAzureMachineSetName("zone1"): 1,
198-
generateAzureMachineSetName("zone2"): 1,
199-
generateAzureMachineSetName("zone3"): 1,
200-
},
201-
// V1 image is chosen for machinepool
202-
expectedImage: &machineapi.Image{
203-
ResourceID: "/resourceGroups/foo-12345-rg/providers/Microsoft.Compute/galleries/gallery_foo_12345/images/foo-12345",
204-
},
205-
},
206-
{
207-
name: "default V1 and V2 images exist but instance only supports V1 images",
208-
clusterDeployment: testAzureClusterDeployment(),
209-
pool: testAzurePool(),
210-
mockAzureClient: func(mockCtrl *gomock.Controller, client *mockazure.MockClient) {
211-
mockListResourceSKUs(mockCtrl, client, []string{"zone1", "zone2", "zone3"})
212-
mockGetVMCapabilities(client, "V1")
213-
mockListImagesByResourceGroup(client, []compute.Image{testAzureImage(compute.HyperVGenerationTypesV1), testAzureImage(compute.HyperVGenerationTypesV2)})
214-
},
215-
expectedMachineSetReplicas: map[string]int64{
216-
generateAzureMachineSetName("zone1"): 1,
217-
generateAzureMachineSetName("zone2"): 1,
218-
generateAzureMachineSetName("zone3"): 1,
219-
},
220-
// V1 image is chosen for machinepool
221-
expectedImage: &machineapi.Image{
222-
ResourceID: "/resourceGroups/foo-12345-rg/providers/Microsoft.Compute/galleries/gallery_foo_12345/images/foo-12345",
223-
},
224-
},
225-
{
226-
name: "default V1 and V2 images exist and instance supports V1 and V2 images",
227-
clusterDeployment: testAzureClusterDeployment(),
228-
pool: testAzurePool(),
229-
mockAzureClient: func(mockCtrl *gomock.Controller, client *mockazure.MockClient) {
230-
mockListResourceSKUs(mockCtrl, client, []string{"zone1", "zone2", "zone3"})
231-
mockGetVMCapabilities(client, "V1,V2")
232-
mockListImagesByResourceGroup(client, []compute.Image{testAzureImage(compute.HyperVGenerationTypesV1), testAzureImage(compute.HyperVGenerationTypesV2)})
233-
},
234-
expectedMachineSetReplicas: map[string]int64{
235-
generateAzureMachineSetName("zone1"): 1,
236-
generateAzureMachineSetName("zone2"): 1,
237-
generateAzureMachineSetName("zone3"): 1,
238-
},
239-
// V2 ("-gen2") image is chosen for machinepool
240-
expectedImage: &machineapi.Image{
241-
ResourceID: "/resourceGroups/foo-12345-rg/providers/Microsoft.Compute/galleries/gallery_foo_12345/images/foo-12345-gen2",
242-
},
243-
},
244-
{
245-
name: "default V1 and V2 images exist but instance only supports V2 images",
246-
clusterDeployment: testAzureClusterDeployment(),
247-
pool: testAzurePool(),
248-
mockAzureClient: func(mockCtrl *gomock.Controller, client *mockazure.MockClient) {
249-
mockListResourceSKUs(mockCtrl, client, []string{"zone1", "zone2", "zone3"})
250-
mockGetVMCapabilities(client, "V2")
251-
mockListImagesByResourceGroup(client, []compute.Image{testAzureImage(compute.HyperVGenerationTypesV1), testAzureImage(compute.HyperVGenerationTypesV2)})
252-
},
253-
expectedMachineSetReplicas: map[string]int64{
254-
generateAzureMachineSetName("zone1"): 1,
255-
generateAzureMachineSetName("zone2"): 1,
256-
generateAzureMachineSetName("zone3"): 1,
257-
},
258-
// V2 ("-gen2") image is chosen for machinepool
259-
expectedImage: &machineapi.Image{
260-
ResourceID: "/resourceGroups/foo-12345-rg/providers/Microsoft.Compute/galleries/gallery_foo_12345/images/foo-12345-gen2",
261-
},
262-
},
263-
{
264-
name: "machinepool provides osImage",
265-
clusterDeployment: testAzureClusterDeployment(),
266-
pool: func() *hivev1.MachinePool {
267-
mp := testAzurePool()
268-
mp.Spec.Platform.Azure.OSImage = &hivev1azure.OSImage{
269-
Publisher: "testpublisher",
270-
Offer: "testoffer",
271-
SKU: "testsku",
272-
Version: "testversion",
273-
}
274-
return mp
275-
}(),
276-
mockAzureClient: func(mockCtrl *gomock.Controller, client *mockazure.MockClient) {
277-
mockGetVMCapabilities(client, "V1,V2")
278-
mockListResourceSKUs(mockCtrl, client, []string{"zone1", "zone2", "zone3"})
279-
},
280-
expectedMachineSetReplicas: map[string]int64{
281-
generateAzureMachineSetName("zone1"): 1,
282-
generateAzureMachineSetName("zone2"): 1,
283-
generateAzureMachineSetName("zone3"): 1,
284-
},
285-
expectedImage: &machineapi.Image{
286-
Publisher: "testpublisher",
287-
Offer: "testoffer",
288-
SKU: "testsku",
289-
Version: "testversion",
290-
Type: "MarketplaceWithPlan",
291-
},
292-
},
293-
// >= 4.12
29438
{
29539
name: "generate single machineset for single zone (4.12+)",
29640
clusterDeployment: testAzureClusterDeployment412(),
@@ -403,7 +147,7 @@ func TestAzureActuator(t *testing.T) {
403147
},
404148
// V1 image is chosen for machinepool
405149
expectedImage: &machineapi.Image{
406-
ResourceID: "/resourceGroups/foo-12345-rg/providers/Microsoft.Compute/galleries/gallery_foo_12345/images/foo-12345",
150+
ResourceID: "/resourceGroups/foo-12345-rg/providers/Microsoft.Compute/galleries/gallery_foo_12345/images/foo-12345/versions/latest",
407151
},
408152
},
409153
{
@@ -422,7 +166,7 @@ func TestAzureActuator(t *testing.T) {
422166
},
423167
// V1 image is chosen for machinepool
424168
expectedImage: &machineapi.Image{
425-
ResourceID: "/resourceGroups/foo-12345-rg/providers/Microsoft.Compute/galleries/gallery_foo_12345/images/foo-12345",
169+
ResourceID: "/resourceGroups/foo-12345-rg/providers/Microsoft.Compute/galleries/gallery_foo_12345/images/foo-12345/versions/latest",
426170
},
427171
},
428172
{
@@ -441,7 +185,7 @@ func TestAzureActuator(t *testing.T) {
441185
},
442186
// V2 ("-gen2") image is chosen for machinepool
443187
expectedImage: &machineapi.Image{
444-
ResourceID: "/resourceGroups/foo-12345-rg/providers/Microsoft.Compute/galleries/gallery_foo_12345/images/foo-12345-gen2",
188+
ResourceID: "/resourceGroups/foo-12345-rg/providers/Microsoft.Compute/galleries/gallery_foo_12345/images/foo-12345-gen2/versions/latest",
445189
},
446190
},
447191
{
@@ -460,7 +204,7 @@ func TestAzureActuator(t *testing.T) {
460204
},
461205
// V2 ("-gen2") image is chosen for machinepool
462206
expectedImage: &machineapi.Image{
463-
ResourceID: "/resourceGroups/foo-12345-rg/providers/Microsoft.Compute/galleries/gallery_foo_12345/images/foo-12345-gen2",
207+
ResourceID: "/resourceGroups/foo-12345-rg/providers/Microsoft.Compute/galleries/gallery_foo_12345/images/foo-12345-gen2/versions/latest",
464208
},
465209
},
466210
{

0 commit comments

Comments
 (0)