Skip to content

Commit

Permalink
Fix DeleteOptions on Public Ip Address (issue#38806 NetworkInterface …
Browse files Browse the repository at this point in the history
…fix only)
  • Loading branch information
v-hongli1 committed Mar 27, 2024
1 parent 980b799 commit 84e8bf9
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 86 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
"AssetsRepo": "Azure/azure-sdk-assets",
"AssetsRepoPrefixPath": "java",
"TagPrefix": "java/resourcemanager/azure-resourcemanager-network",
"Tag": "java/resourcemanager/azure-resourcemanager-network_8aa60d1370"
"Tag": "java/resourcemanager/azure-resourcemanager-network_03b4909e5e"
}
Original file line number Diff line number Diff line change
Expand Up @@ -263,14 +263,7 @@ protected static void ensureConfigurations(Collection<NicIpConfiguration> nicIPC
for (NicIpConfiguration nicIPConfiguration : nicIPConfigurations) {
NicIpConfigurationImpl config = (NicIpConfigurationImpl) nicIPConfiguration;
config.innerModel().withSubnet(config.subnetToAssociate());
PublicIpAddressInner publicIpAddressInner = config.publicIPToAssociate();
for (Map.Entry<String, DeleteOptions> entry : specifiedIpConfigNames.entrySet()) {
if (entry.getKey().equalsIgnoreCase(nicIPConfiguration.name())) {
publicIpAddressInner = config.publicIPToAssociate(entry.getValue());
break;
}
}
config.innerModel().withPublicIpAddress(publicIpAddressInner);
config.innerModel().withPublicIpAddress(config.publicIPToAssociate(specifiedIpConfigNames.getOrDefault(config.name(), null)));
}
}

Expand Down Expand Up @@ -340,33 +333,6 @@ private SubnetInner subnetToAssociate() {
* public IP in create fluent chain. In case of update chain, if withoutPublicIP(..) is not specified then existing
* associated (if any) public IP will be returned.
*
* @return public IP SubResource
*/
private PublicIpAddressInner publicIPToAssociate() {
String pipId = null;
if (this.removePrimaryPublicIPAssociation) {
return null;
} else if (this.creatablePublicIPKey != null) {
pipId = ((PublicIpAddress) this.parent().createdDependencyResource(this.creatablePublicIPKey)).id();
} else if (this.existingPublicIPAddressIdToAssociate != null) {
pipId = this.existingPublicIPAddressIdToAssociate;
}

if (pipId != null) {
return new PublicIpAddressInner().withId(pipId);
} else if (!this.isInCreateMode) {
return this.innerModel().publicIpAddress();
} else {
return null;
}
}

/**
* Get the SubResource instance representing a public IP that needs to be associated with the IP configuration.
*
* <p>null will be returned if withoutPublicIP() is specified in the update fluent chain or user did't opt for
* public IP in create fluent chain. In case of update chain, if withoutPublicIP(..) is not specified then existing
* associated (if any) public IP will be returned.
* @param deleteOptions what happens to the public IP address when the VM using it is deleted
* @return public IP SubResource
*/
Expand All @@ -381,9 +347,12 @@ private PublicIpAddressInner publicIPToAssociate(DeleteOptions deleteOptions) {
}

if (pipId != null) {
return new PublicIpAddressInner().withId(pipId).withDeleteOption(deleteOptions);
if (Objects.nonNull(deleteOptions)) {
return new PublicIpAddressInner().withId(pipId).withDeleteOption(deleteOptions);
}
return new PublicIpAddressInner().withId(pipId);
} else if (!this.isInCreateMode) {
if (Objects.nonNull(this.innerModel().publicIpAddress())) {
if (Objects.nonNull(this.innerModel().publicIpAddress()) && Objects.nonNull(deleteOptions)) {
return this.innerModel().publicIpAddress().withDeleteOption(deleteOptions);
}
return this.innerModel().publicIpAddress();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

import com.azure.core.management.Region;
import com.azure.resourcemanager.network.fluent.models.NatGatewayInner;
import com.azure.resourcemanager.network.fluent.models.NetworkInterfaceIpConfigurationInner;
import com.azure.resourcemanager.network.models.ApplicationSecurityGroup;
import com.azure.resourcemanager.network.models.DeleteOptions;
import com.azure.resourcemanager.network.models.NatGatewaySku;
Expand Down Expand Up @@ -512,45 +511,7 @@ public void canAssociateNatGateway() {
}

@Test
public void canCreateNicWithMultipleDeleteOptions() {
String subnetName = generateRandomResourceName("subnet-", 15);
resourceManager.resourceGroups().define(rgName).withRegion(Region.US_EAST).create();
Network vnet = networkManager.networks()
.define(generateRandomResourceName("vnet-", 15))
.withRegion(Region.US_EAST)
.withExistingResourceGroup(rgName)
.withAddressSpace("10.0.0.0/28")
.withSubnet(subnetName, "10.0.0.0/28")
.create();

NetworkInterface nic = networkManager.networkInterfaces()
.define(generateRandomResourceName("nic-", 15))
.withRegion(Region.US_EAST)
.withExistingResourceGroup(rgName)
.withExistingPrimaryNetwork(vnet)
.withSubnet(subnetName)
.withPrimaryPrivateIPAddressDynamic()
.withNewPrimaryPublicIPAddress()
.defineSecondaryIPConfiguration("secondary")
.withExistingNetwork(vnet)
.withSubnet(subnetName)
.withPrivateIpAddressDynamic()
.withNewPublicIpAddress()
.withPublicIPAddressDeleteOptions(DeleteOptions.DELETE)
.attach()
.withPrimaryPublicIPAddressDeleteOptions(DeleteOptions.DELETE)
.create();

nic.refresh();
List<NetworkInterfaceIpConfigurationInner> ipConfigurationInnerList = nic.innerModel().ipConfigurations()
.stream().filter(ipConfig -> DeleteOptions.DELETE.equals(ipConfig.publicIpAddress().deleteOption()))
.collect(Collectors.toList());

Assertions.assertEquals(2, ipConfigurationInnerList.size());
}

@Test
public void canUpdateNicWithMultipleDeleteOptions() {
public void canCreateAndUpdateNicWithMultipleDeleteOptions() {
String subnetName = generateRandomResourceName("subnet-", 15);
resourceManager.resourceGroups().define(rgName).withRegion(Region.US_EAST).create();
Network vnet = networkManager.networks()
Expand Down Expand Up @@ -587,13 +548,17 @@ public void canUpdateNicWithMultipleDeleteOptions() {
.create();

nic.refresh();
Assertions.assertEquals(DeleteOptions.DELETE, nic.primaryIPConfiguration().innerModel().publicIpAddress().deleteOption());
Assertions.assertEquals(DeleteOptions.DETACH, nic.ipConfigurations().get("secondary1").innerModel().publicIpAddress().deleteOption());
Assertions.assertEquals(DeleteOptions.DETACH, nic.ipConfigurations().get("secondary2").innerModel().publicIpAddress().deleteOption());

String existingPrimaryIpAddressId = nic.primaryIPConfiguration().publicIpAddressId();
nic.update().withNewPrimaryPublicIPAddress().withPrimaryPublicIPAddressDeleteOptions(DeleteOptions.DETACH).apply();
nic.refresh();
List<NetworkInterfaceIpConfigurationInner> ipConfigurationInnerList = nic.innerModel().ipConfigurations()
.stream().filter(ipConfigurationInner -> DeleteOptions.DETACH.equals(ipConfigurationInner.publicIpAddress().deleteOption()))
.collect(Collectors.toList());
Assertions.assertEquals(3, ipConfigurationInnerList.size());
Assertions.assertFalse(existingPrimaryIpAddressId.equalsIgnoreCase(nic.primaryIPConfiguration().publicIpAddressId()));
Assertions.assertEquals(DeleteOptions.DETACH, nic.primaryIPConfiguration().innerModel().publicIpAddress().deleteOption());

String existingSecondary1IpAddressId = nic.ipConfigurations().get("secondary1").publicIpAddressId();
nic.update()
.withPrimaryPublicIPAddressDeleteOptions(DeleteOptions.DELETE)
.updateIPConfiguration("secondary1")
Expand All @@ -612,10 +577,11 @@ public void canUpdateNicWithMultipleDeleteOptions() {
.attach()
.apply();
nic.refresh();
ipConfigurationInnerList = nic.innerModel().ipConfigurations()
.stream().filter(ipConfigurationInner -> DeleteOptions.DELETE.equals(ipConfigurationInner.publicIpAddress().deleteOption()))
.collect(Collectors.toList());
Assertions.assertEquals(4, ipConfigurationInnerList.size());
Assertions.assertFalse(existingSecondary1IpAddressId.equalsIgnoreCase(nic.ipConfigurations().get("secondary1").publicIpAddressId()));
Assertions.assertEquals(DeleteOptions.DELETE, nic.primaryIPConfiguration().innerModel().publicIpAddress().deleteOption());
Assertions.assertEquals(DeleteOptions.DELETE, nic.ipConfigurations().get("secondary1").innerModel().publicIpAddress().deleteOption());
Assertions.assertEquals(DeleteOptions.DELETE, nic.ipConfigurations().get("secondary2").innerModel().publicIpAddress().deleteOption());
Assertions.assertEquals(DeleteOptions.DELETE, nic.ipConfigurations().get("secondary3").innerModel().publicIpAddress().deleteOption());
}

private NatGatewayInner createNatGateway() {
Expand Down

0 comments on commit 84e8bf9

Please sign in to comment.