Skip to content

Commit 1c554c3

Browse files
mgmt, aks, bug fix on KubernetesCluster update (Azure#27228)
1 parent 986a79c commit 1c554c3

File tree

8 files changed

+917
-606
lines changed

8 files changed

+917
-606
lines changed

sdk/resourcemanager/azure-resourcemanager-cdn/pom.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
<javaModulesSurefireArgLine>
4444
--add-opens com.azure.resourcemanager.cdn/com.azure.resourcemanager.cdn=ALL-UNNAMED
4545
</javaModulesSurefireArgLine>
46-
<revapi.skip>true</revapi.skip>
4746
</properties>
4847

4948
<developers>

sdk/resourcemanager/azure-resourcemanager-containerservice/CHANGELOG.md

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,9 @@
22

33
## 2.13.0-beta.1 (Unreleased)
44

5-
### Features Added
6-
7-
### Breaking Changes
8-
95
### Bugs Fixed
106

11-
### Other Changes
7+
- Fixed a bug that osDiskType on new agent pool is not set during `KubernetesCluster` update.
128

139
## 2.12.0 (2022-02-14)
1410

sdk/resourcemanager/azure-resourcemanager-containerservice/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
<!-- Configures the Java 9+ run to perform the required module exports, opens, and reads that are necessary for testing but shouldn't be part of the module-info. -->
3939
<javaModulesSurefireArgLine>
4040
--add-opens com.azure.resourcemanager.containerservice/com.azure.resourcemanager.containerservice=ALL-UNNAMED
41+
--add-opens com.azure.resourcemanager.containerservice/com.azure.resourcemanager.containerservice.implementation=ALL-UNNAMED
4142
</javaModulesSurefireArgLine>
4243
</properties>
4344

sdk/resourcemanager/azure-resourcemanager-containerservice/src/main/java/com/azure/resourcemanager/containerservice/implementation/KubernetesClusterAgentPoolImpl.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -228,25 +228,32 @@ public KubernetesClusterImpl attach() {
228228
return this.parent().addNewAgentPool(this);
229229
}
230230

231-
public AgentPoolInner getAgentPoolInner() {
231+
AgentPoolInner getAgentPoolInner() {
232232
AgentPoolInner agentPoolInner = new AgentPoolInner();
233233
agentPoolInner.withCount(innerModel().count());
234234
agentPoolInner.withVmSize(innerModel().vmSize());
235235
agentPoolInner.withOsDiskSizeGB(innerModel().osDiskSizeGB());
236+
agentPoolInner.withOsDiskType(innerModel().osDiskType());
237+
agentPoolInner.withKubeletDiskType(innerModel().kubeletDiskType());
238+
agentPoolInner.withWorkloadRuntime(innerModel().workloadRuntime());
236239
agentPoolInner.withVnetSubnetId(innerModel().vnetSubnetId());
240+
agentPoolInner.withPodSubnetId(innerModel().podSubnetId());
237241
agentPoolInner.withMaxPods(innerModel().maxPods());
238242
agentPoolInner.withOsType(innerModel().osType());
243+
agentPoolInner.withOsSku(innerModel().osSku());
239244
agentPoolInner.withMaxCount(innerModel().maxCount());
240245
agentPoolInner.withMinCount(innerModel().minCount());
241246
agentPoolInner.withEnableAutoScaling(innerModel().enableAutoScaling());
247+
agentPoolInner.withScaleDownMode(innerModel().scaleDownMode());
242248
agentPoolInner.withTypePropertiesType(innerModel().type());
243249
agentPoolInner.withMode(innerModel().mode());
244250
agentPoolInner.withOrchestratorVersion(innerModel().orchestratorVersion());
245-
// nodeImageVersion is readOnly now
246-
// agentPoolInner.withNodeImageVersion(innerModel().nodeImageVersion());
251+
// agentPoolInner.withNodeImageVersion(innerModel().nodeImageVersion()); // nodeImageVersion is readOnly now
247252
agentPoolInner.withUpgradeSettings(innerModel().upgradeSettings());
253+
agentPoolInner.withPowerState(innerModel().powerState());
248254
agentPoolInner.withAvailabilityZones(innerModel().availabilityZones());
249255
agentPoolInner.withEnableNodePublicIp(innerModel().enableNodePublicIp());
256+
agentPoolInner.withNodePublicIpPrefixId(innerModel().nodePublicIpPrefixId());
250257
agentPoolInner.withScaleSetPriority(innerModel().scaleSetPriority());
251258
agentPoolInner.withScaleSetEvictionPolicy(innerModel().scaleSetEvictionPolicy());
252259
agentPoolInner.withSpotMaxPrice(innerModel().spotMaxPrice());
@@ -260,7 +267,6 @@ public AgentPoolInner getAgentPoolInner() {
260267
agentPoolInner.withEnableUltraSsd(innerModel().enableUltraSsd());
261268
agentPoolInner.withEnableFips(innerModel().enableFips());
262269
agentPoolInner.withGpuInstanceProfile(innerModel().gpuInstanceProfile());
263-
agentPoolInner.withPowerState(innerModel().powerState());
264270
return agentPoolInner;
265271
}
266272

sdk/resourcemanager/azure-resourcemanager-containerservice/src/test/java/com/azure/resourcemanager/containerservice/KubernetesClustersTests.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,13 @@ public void canCRUDKubernetesCluster() throws Exception {
140140
kubernetesCluster.refresh();
141141
Assertions.assertEquals(Code.RUNNING, kubernetesCluster.powerState().code());
142142

143+
Map<String, String> nodeLables = new HashMap<>(2);
144+
nodeLables.put("environment", "dev");
145+
nodeLables.put("app.1", "spring");
146+
147+
List<String> nodeTaints = new ArrayList<>(1);
148+
nodeTaints.add("key=value:NoSchedule");
149+
143150
// update
144151
kubernetesCluster =
145152
kubernetesCluster
@@ -152,8 +159,15 @@ public void canCRUDKubernetesCluster() throws Exception {
152159
.withTags(Collections.singletonMap("state", "updated"))
153160
.parent()
154161
.defineAgentPool(agentPoolName2)
155-
.withVirtualMachineSize(ContainerServiceVMSizeTypes.STANDARD_A2_V2)
162+
.withVirtualMachineSize(ContainerServiceVMSizeTypes.STANDARD_F4S_V2)
156163
.withAgentPoolVirtualMachineCount(1)
164+
.withOSDiskSizeInGB(30)
165+
.withAgentPoolMode(AgentPoolMode.USER)
166+
.withOSDiskType(OSDiskType.MANAGED)
167+
.withKubeletDiskType(KubeletDiskType.TEMPORARY)
168+
.withAgentPoolType(AgentPoolType.VIRTUAL_MACHINE_SCALE_SETS)
169+
.withNodeLabels(Collections.unmodifiableMap(nodeLables))
170+
.withNodeTaints(Collections.unmodifiableList(nodeTaints))
157171
.withTags(Collections.singletonMap("state", "created"))
158172
.attach()
159173
.withTag("tag2", "value2")
@@ -171,9 +185,14 @@ public void canCRUDKubernetesCluster() throws Exception {
171185

172186
agentPool = kubernetesCluster.agentPools().get(agentPoolName2);
173187
Assertions.assertNotNull(agentPool);
174-
Assertions.assertEquals(ContainerServiceVMSizeTypes.STANDARD_A2_V2, agentPool.vmSize());
188+
Assertions.assertEquals(ContainerServiceVMSizeTypes.STANDARD_F4S_V2, agentPool.vmSize());
175189
Assertions.assertEquals(1, agentPool.count());
190+
Assertions.assertEquals(OSDiskType.MANAGED, agentPool.osDiskType());
191+
Assertions.assertEquals(30, agentPool.osDiskSizeInGB());
192+
Assertions.assertEquals(KubeletDiskType.TEMPORARY, agentPool.kubeletDiskType());
176193
Assertions.assertEquals(Collections.singletonMap("state", "created"), agentPool.tags());
194+
Assertions.assertEquals(Collections.unmodifiableMap(nodeLables), agentPool.nodeLabels());
195+
Assertions.assertEquals("key=value:NoSchedule", agentPool.nodeTaints().iterator().next());
177196

178197
Assertions.assertEquals("value2", kubernetesCluster.tags().get("tag2"));
179198
Assertions.assertFalse(kubernetesCluster.tags().containsKey("tag1"));
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
package com.azure.resourcemanager.containerservice.implementation;
5+
6+
import com.azure.core.util.ExpandableStringEnum;
7+
import com.azure.resourcemanager.containerservice.fluent.models.AgentPoolInner;
8+
import com.azure.resourcemanager.containerservice.models.ManagedClusterAgentPoolProfile;
9+
import org.junit.jupiter.api.Assertions;
10+
import org.junit.jupiter.api.Test;
11+
12+
import java.lang.reflect.Method;
13+
import java.util.Arrays;
14+
import java.util.HashMap;
15+
import java.util.HashSet;
16+
import java.util.Map;
17+
import java.util.Random;
18+
import java.util.Set;
19+
20+
public class KubernetesClusterAgentPoolImplTests {
21+
22+
private static final Random RANDOM = new Random();
23+
24+
@Test
25+
void testGetAgentPoolInner() throws Exception {
26+
// test case for the manual conversion of ManagedClusterAgentPoolProfile to AgentPoolInner
27+
28+
Set<String> excludeMethods = new HashSet<>(Arrays.asList(
29+
"name",
30+
"type",
31+
"vnetSubnetId" // skip because this had to be a well-formed resource ID
32+
));
33+
34+
Map<String, Object> mockValues = new HashMap<>();
35+
ManagedClusterAgentPoolProfile managedClusterAgentPoolProfile = new ManagedClusterAgentPoolProfile();
36+
for (Method method : managedClusterAgentPoolProfile.getClass().getDeclaredMethods()) {
37+
String name = method.getName();
38+
if (name.startsWith("with") && method.getParameterTypes().length > 0) {
39+
Class<?> parameterType = method.getParameterTypes()[0];
40+
Object value = null;
41+
if (parameterType.equals(Integer.class)) {
42+
value = RANDOM.nextInt() & Integer.MAX_VALUE;
43+
} else if (parameterType.equals(Long.class)) {
44+
value = RANDOM.nextLong() & Long.MAX_VALUE;
45+
} else if (parameterType.equals(String.class)) {
46+
value = randomString();
47+
} else if (ExpandableStringEnum.class.isAssignableFrom(parameterType)) {
48+
String valueStr = randomString();
49+
value = parameterType.getDeclaredMethod("fromString", String.class).invoke(null, valueStr);
50+
}
51+
if (value != null) {
52+
name = name.substring(4);
53+
name = Character.toLowerCase(name.charAt(0)) + name.substring(1);
54+
if (!excludeMethods.contains(name)) {
55+
mockValues.put(name, value);
56+
method.invoke(managedClusterAgentPoolProfile, value);
57+
}
58+
}
59+
}
60+
}
61+
KubernetesClusterAgentPoolImpl impl = new KubernetesClusterAgentPoolImpl(managedClusterAgentPoolProfile, null);
62+
AgentPoolInner agentPoolInner = impl.getAgentPoolInner();
63+
for (Method method : agentPoolInner.getClass().getDeclaredMethods()) {
64+
String name = method.getName();
65+
if (mockValues.containsKey(name)) {
66+
Object value = method.invoke(agentPoolInner);
67+
Assertions.assertEquals(mockValues.get(name), value, String.format("Field %s mismatch", name));
68+
}
69+
}
70+
}
71+
72+
private static String randomString() {
73+
int leftLimit = 97; // letter 'a'
74+
int rightLimit = 122; // letter 'z'
75+
int targetStringLength = 10;
76+
77+
return RANDOM.ints(leftLimit, rightLimit + 1)
78+
.filter(i -> (i <= 57 || i >= 65) && (i <= 90 || i >= 97))
79+
.limit(targetStringLength)
80+
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
81+
.toString();
82+
}
83+
}

0 commit comments

Comments
 (0)