diff --git a/sdk/resourcemanager/azure-resourcemanager-network/assets.json b/sdk/resourcemanager/azure-resourcemanager-network/assets.json index d18d92ee146e6..96a791f5acf73 100644 --- a/sdk/resourcemanager/azure-resourcemanager-network/assets.json +++ b/sdk/resourcemanager/azure-resourcemanager-network/assets.json @@ -2,5 +2,5 @@ "AssetsRepo": "Azure/azure-sdk-assets", "AssetsRepoPrefixPath": "java", "TagPrefix": "java/resourcemanager/azure-resourcemanager-network", - "Tag": "java/resourcemanager/azure-resourcemanager-network_258ece270f" + "Tag": "java/resourcemanager/azure-resourcemanager-network_3b15fe745d" } diff --git a/sdk/resourcemanager/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/NetworkInterfaceImpl.java b/sdk/resourcemanager/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/NetworkInterfaceImpl.java index c3f341b1294c4..ec2f10056d7cf 100644 --- a/sdk/resourcemanager/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/NetworkInterfaceImpl.java +++ b/sdk/resourcemanager/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/NetworkInterfaceImpl.java @@ -30,13 +30,18 @@ import com.azure.resourcemanager.resources.fluentcore.arm.models.Resource; import com.azure.resourcemanager.resources.fluentcore.model.Creatable; +import java.util.Arrays; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Objects; import java.util.TreeMap; +import java.util.Set; +import java.util.stream.Collectors; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -63,6 +68,9 @@ class NetworkInterfaceImpl private NetworkSecurityGroup networkSecurityGroup; /** the delete option of public ip address */ private DeleteOptions publicIpAddressDeleteOption; + /** the name of specified ip config name */ + private Map> specifiedIpConfigNames; + private boolean isInUpdateIpConfigMode = false; NetworkInterfaceImpl(String name, NetworkInterfaceInner innerModel, final NetworkManager networkManager) { super(name, innerModel, networkManager); @@ -144,18 +152,21 @@ public NetworkInterfaceImpl withExistingPrimaryNetwork(Network network) { @Override public NetworkInterfaceImpl withNewPrimaryPublicIPAddress(Creatable creatable) { + this.isInUpdateIpConfigMode = true; this.primaryIPConfiguration().withNewPublicIpAddress(creatable); return this; } @Override public NetworkInterfaceImpl withNewPrimaryPublicIPAddress() { + this.isInUpdateIpConfigMode = true; this.primaryIPConfiguration().withNewPublicIpAddress(); return this; } @Override public NetworkInterfaceImpl withNewPrimaryPublicIPAddress(String leafDnsLabel) { + this.isInUpdateIpConfigMode = true; this.primaryIPConfiguration().withNewPublicIpAddress(leafDnsLabel); return this; } @@ -199,6 +210,7 @@ public NetworkInterfaceImpl withoutPrimaryPublicIPAddress() { public NetworkInterfaceImpl withExistingPrimaryPublicIPAddress(PublicIpAddress publicIPAddress) { this.primaryIPConfiguration().withExistingPublicIpAddress(publicIPAddress); this.primaryIPConfiguration().withPrivateIpVersion(publicIPAddress.version()); + this.isInUpdateIpConfigMode = true; return this; } @@ -255,6 +267,7 @@ public NetworkInterfaceImpl withoutApplicationSecurityGroup(String applicationSe @Override public NicIpConfigurationImpl defineSecondaryIPConfiguration(String name) { + this.isInUpdateIpConfigMode = true; NicIpConfigurationImpl nicIpConfiguration = prepareNewNicIPConfiguration(name); // copy application security group from primary to secondary, @@ -271,6 +284,7 @@ public NicIpConfigurationImpl defineSecondaryIPConfiguration(String name) { @Override public NicIpConfigurationImpl updateIPConfiguration(String name) { + this.isInUpdateIpConfigMode = true; return (NicIpConfigurationImpl) this.nicIPConfigurations.get(name); } @@ -566,15 +580,45 @@ protected void beforeCreating() { .withNetworkSecurityGroup(new NetworkSecurityGroupInner().withId(networkSecurityGroup.id())); } - NicIpConfigurationImpl.ensureConfigurations(this.nicIPConfigurations.values(), this.publicIpAddressDeleteOption); + NicIpConfigurationImpl.ensureConfigurations(this.nicIPConfigurations.values()); + + if (Objects.nonNull(this.specifiedIpConfigNames)) { + NicIpConfigurationImpl.deleteOptionConfigurations(this.nicIPConfigurations.values(), this.specifiedIpConfigNames); + this.isInUpdateIpConfigMode = false; + } // Reset and update IP configs this.innerModel().withIpConfigurations(innersFromWrappers(this.nicIPConfigurations.values())); } @Override - public NetworkInterfaceImpl withPublicIPAddressDeleteOptions(DeleteOptions deleteOptions) { - this.publicIpAddressDeleteOption = deleteOptions; + public NetworkInterfaceImpl withPublicIPAddressDeleteOptions(DeleteOptions deleteOptions, String... ipConfigNames) { + Set ipConfigNameSet = Arrays.stream(ipConfigNames).map(ipConfigName -> ipConfigName.toLowerCase(Locale.ROOT)).collect(Collectors.toSet()); + if (!isInCreateMode() && !isInUpdateIpConfigMode) { + this.nicIPConfigurations.values() + .stream().filter(nicIpConfiguration -> + (ipConfigNameSet.isEmpty() || ipConfigNameSet.contains(nicIpConfiguration.name().toLowerCase(Locale.ROOT))) + && Objects.nonNull(nicIpConfiguration.innerModel().publicIpAddress())) + .forEach(nicIpConfiguration -> { + nicIpConfiguration.innerModel().publicIpAddress().withDeleteOption(deleteOptions); + }); + } else { + if (Objects.isNull(this.specifiedIpConfigNames)) { + this.specifiedIpConfigNames = new LinkedHashMap<>(); + } + if (this.specifiedIpConfigNames.containsKey(deleteOptions)) { + this.specifiedIpConfigNames.get(deleteOptions).addAll(ipConfigNameSet); + } else { + this.specifiedIpConfigNames.put(deleteOptions, ipConfigNameSet); + } + } return this; } + + @Override + public NetworkInterfaceImpl update() { + this.specifiedIpConfigNames = new LinkedHashMap<>(); + this.isInUpdateIpConfigMode = false; + return super.update(); + } } diff --git a/sdk/resourcemanager/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/NicIpConfigurationImpl.java b/sdk/resourcemanager/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/NicIpConfigurationImpl.java index 9b90ab26d2185..3579c3c824854 100644 --- a/sdk/resourcemanager/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/NicIpConfigurationImpl.java +++ b/sdk/resourcemanager/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/NicIpConfigurationImpl.java @@ -28,8 +28,11 @@ import java.util.ArrayList; import java.util.Collection; +import java.util.Locale; import java.util.List; +import java.util.Map; import java.util.Objects; +import java.util.Set; /** Implementation for NicIPConfiguration and its create and update interfaces. */ class NicIpConfigurationImpl extends NicIpConfigurationBaseImpl @@ -266,11 +269,20 @@ protected static void ensureConfigurations(Collection nicIPC } } - protected static void ensureConfigurations(Collection nicIPConfigurations, DeleteOptions deleteOptions) { - for (NicIpConfiguration nicIPConfiguration : nicIPConfigurations) { - NicIpConfigurationImpl config = (NicIpConfigurationImpl) nicIPConfiguration; - config.innerModel().withSubnet(config.subnetToAssociate()); - config.innerModel().withPublicIpAddress(config.publicIPToAssociate(deleteOptions)); + protected static void deleteOptionConfigurations(Collection nicIPConfigurations, Map> specifiedIpConfigNames) { + if (!specifiedIpConfigNames.isEmpty()) { + specifiedIpConfigNames.keySet().forEach(deleteOptions -> { + Set ipConfigNameSet = specifiedIpConfigNames.get(deleteOptions); + if (!ipConfigNameSet.isEmpty()) { + nicIPConfigurations + .stream().filter(nicIpConfig -> ipConfigNameSet.contains(nicIpConfig.name().toLowerCase(Locale.ROOT)) + && Objects.nonNull(nicIpConfig.innerModel().publicIpAddress())) + .forEach(nicIpConfig -> nicIpConfig.innerModel().publicIpAddress().withDeleteOption(deleteOptions)); + } else { + nicIPConfigurations.stream().filter(nicIpConfig -> Objects.nonNull(nicIpConfig.innerModel().publicIpAddress())) + .forEach(nicIpConfig -> nicIpConfig.innerModel().publicIpAddress().withDeleteOption(deleteOptions)); + } + }); } } @@ -361,37 +373,6 @@ private PublicIpAddressInner publicIPToAssociate() { } } - /** - * Get the SubResource instance representing a public IP that needs to be associated with the IP configuration. - * - *

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. - * - * @return public IP SubResource - */ - private PublicIpAddressInner publicIPToAssociate(DeleteOptions deleteOptions) { - 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).withDeleteOption(deleteOptions); - } else if (!this.isInCreateMode) { - if (Objects.nonNull(this.innerModel().publicIpAddress())) { - return this.innerModel().publicIpAddress().withDeleteOption(deleteOptions); - } - return this.innerModel().publicIpAddress(); - } else { - return null; - } - } - @Override public NicIpConfigurationImpl withPrivateIpVersion(IpVersion ipVersion) { this.innerModel().withPrivateIpAddressVersion(ipVersion); diff --git a/sdk/resourcemanager/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/models/NetworkInterface.java b/sdk/resourcemanager/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/models/NetworkInterface.java index 871b9d84e5820..14684c9bed38f 100644 --- a/sdk/resourcemanager/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/models/NetworkInterface.java +++ b/sdk/resourcemanager/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/models/NetworkInterface.java @@ -262,9 +262,10 @@ interface WithPublicIPAddressDeleteOptions { * Sets delete options for public ip address. * * @param deleteOptions the delete options for primary network interfaces - * @return the next stage of the definition + * @param ipConfigNames the names of specified ip configurations + * @return the next stage of the update */ - WithCreate withPublicIPAddressDeleteOptions(DeleteOptions deleteOptions); + WithCreate withPublicIPAddressDeleteOptions(DeleteOptions deleteOptions, String... ipConfigNames); } /** @@ -595,9 +596,10 @@ interface WithPublicIPAddressDeleteOptions { * Sets delete options for public ip address. * * @param deleteOptions the delete options for primary network interfaces + * @param ipConfigNames the names of specified ip configurations * @return the next stage of the update */ - Update withPublicIPAddressDeleteOptions(DeleteOptions deleteOptions); + Update withPublicIPAddressDeleteOptions(DeleteOptions deleteOptions, String... ipConfigNames); } } diff --git a/sdk/resourcemanager/azure-resourcemanager-network/src/test/java/com/azure/resourcemanager/network/NetworkInterfaceOperationsTests.java b/sdk/resourcemanager/azure-resourcemanager-network/src/test/java/com/azure/resourcemanager/network/NetworkInterfaceOperationsTests.java index 7b98da720d821..909483e884c94 100644 --- a/sdk/resourcemanager/azure-resourcemanager-network/src/test/java/com/azure/resourcemanager/network/NetworkInterfaceOperationsTests.java +++ b/sdk/resourcemanager/azure-resourcemanager-network/src/test/java/com/azure/resourcemanager/network/NetworkInterfaceOperationsTests.java @@ -5,6 +5,7 @@ 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; @@ -27,7 +28,6 @@ import reactor.core.publisher.Mono; import java.util.Arrays; -import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; @@ -512,12 +512,13 @@ public void canAssociateNatGateway() { } @Test - public void canCreateMultipleIpConfigurationsWithDeleteOption() { + public void canCreateMultipleIpConfigurationsWithAllDeleteOption() { 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) - .withNewResourceGroup(rgName) + .withExistingResourceGroup(rgName) .withAddressSpace("10.0.0.0/28") .withSubnet(subnetName, "10.0.0.0/28") .create(); @@ -525,7 +526,7 @@ public void canCreateMultipleIpConfigurationsWithDeleteOption() { NetworkInterface nic = networkManager.networkInterfaces() .define(generateRandomResourceName("nic-", 15)) .withRegion(Region.US_EAST) - .withNewResourceGroup(rgName) + .withExistingResourceGroup(rgName) .withExistingPrimaryNetwork(vnet) .withSubnet(subnetName) .withPrimaryPrivateIPAddressDynamic() @@ -540,20 +541,21 @@ public void canCreateMultipleIpConfigurationsWithDeleteOption() { .create(); nic.refresh(); - List deleteOptionsList = new ArrayList<>(); - nic.innerModel().ipConfigurations().forEach(ipConfig -> deleteOptionsList.add(ipConfig.publicIpAddress().deleteOption())); + List ipConfigurationInnerList = nic.innerModel().ipConfigurations() + .stream().filter(ipConfig -> DeleteOptions.DELETE.equals(ipConfig.publicIpAddress().deleteOption())) + .collect(Collectors.toList()); - Assertions.assertEquals(2, deleteOptionsList.size()); - deleteOptionsList.forEach(deleteOptions -> Assertions.assertEquals(DeleteOptions.DELETE, deleteOptions)); + Assertions.assertEquals(2, ipConfigurationInnerList.size()); } @Test - public void canUpdateDeleteOptionWithDefineSecondaryIpConfiguration() { + public void canCreateMultipleIpConfigurationsWithSingleDeleteOption() { 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) - .withNewResourceGroup(rgName) + .withExistingResourceGroup(rgName) .withAddressSpace("10.0.0.0/28") .withSubnet(subnetName, "10.0.0.0/28") .create(); @@ -561,7 +563,120 @@ public void canUpdateDeleteOptionWithDefineSecondaryIpConfiguration() { NetworkInterface nic = networkManager.networkInterfaces() .define(generateRandomResourceName("nic-", 15)) .withRegion(Region.US_EAST) - .withNewResourceGroup(rgName) + .withExistingResourceGroup(rgName) + .withExistingPrimaryNetwork(vnet) + .withSubnet(subnetName) + .withPrimaryPrivateIPAddressDynamic() + .withNewPrimaryPublicIPAddress() + .defineSecondaryIPConfiguration("secondary") + .withExistingNetwork(vnet) + .withSubnet(subnetName) + .withPrivateIpAddressDynamic() + .withNewPublicIpAddress() + .attach() + .withPublicIPAddressDeleteOptions(DeleteOptions.DELETE, "secondary") + .create(); + + nic.refresh(); + List ipConfigurationInnerList = nic.innerModel().ipConfigurations() + .stream().filter(ipConfig -> DeleteOptions.DELETE.equals(ipConfig.publicIpAddress().deleteOption())) + .collect(Collectors.toList()); + + Assertions.assertEquals(1, ipConfigurationInnerList.size()); + ipConfigurationInnerList.forEach(ipConfigurationInner -> Assertions.assertEquals("secondary", ipConfigurationInner.name())); + } + + @Test + public void canUpdateAllDeleteOption() { + 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() + .attach() + .withPublicIPAddressDeleteOptions(DeleteOptions.DETACH) + .create(); + + nic.update().withPublicIPAddressDeleteOptions(DeleteOptions.DELETE).apply(); + nic.refresh(); + List ipConfigurationInnerList = nic.innerModel().ipConfigurations() + .stream().filter(ipConfigurationInner -> DeleteOptions.DELETE.equals(ipConfigurationInner.publicIpAddress().deleteOption())) + .collect(Collectors.toList()); + Assertions.assertEquals(2, ipConfigurationInnerList.size()); + } + + @Test + public void canUpdateSingleDeleteOption() { + 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() + .attach() + .withPublicIPAddressDeleteOptions(DeleteOptions.DETACH) + .create(); + + nic.update().withPublicIPAddressDeleteOptions(DeleteOptions.DELETE, "primary").apply(); + nic.refresh(); + List ipConfigurationInnerList = nic.innerModel().ipConfigurations() + .stream().filter(ipConfigurationInner -> DeleteOptions.DELETE.equals(ipConfigurationInner.publicIpAddress().deleteOption())) + .collect(Collectors.toList()); + Assertions.assertEquals(1, ipConfigurationInnerList.size()); + ipConfigurationInnerList.forEach(ipConfigurationInner -> Assertions.assertEquals("primary", ipConfigurationInner.name())); + } + + @Test + public void canUpdateAllDeleteOptionAndDefineSecondaryIpConfiguration() { + 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() @@ -579,21 +694,21 @@ public void canUpdateDeleteOptionWithDefineSecondaryIpConfiguration() { .apply(); nic.refresh(); - List deleteOptionsList = new ArrayList<>(); - nic.innerModel().ipConfigurations().stream().filter(ipConfig -> "secondary".equalsIgnoreCase(ipConfig.name())) - .forEach(ipConfig -> deleteOptionsList.add(ipConfig.publicIpAddress().deleteOption())); + List ipConfigurationInnerList = nic.innerModel().ipConfigurations() + .stream().filter(ipConfig -> DeleteOptions.DELETE.equals(ipConfig.publicIpAddress().deleteOption())) + .collect(Collectors.toList()); - Assertions.assertEquals(1, deleteOptionsList.size()); - deleteOptionsList.forEach(deleteOptions -> Assertions.assertEquals(DeleteOptions.DELETE, deleteOptions)); + Assertions.assertEquals(2, ipConfigurationInnerList.size()); } @Test - public void canUpdateDeleteOptionWithPrimaryIpConfig() { + public void canUpdateSingleDeleteOptionAndDefineSecondaryIpConfiguration() { 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) - .withNewResourceGroup(rgName) + .withExistingResourceGroup(rgName) .withAddressSpace("10.0.0.0/28") .withSubnet(subnetName, "10.0.0.0/28") .create(); @@ -601,25 +716,40 @@ public void canUpdateDeleteOptionWithPrimaryIpConfig() { NetworkInterface nic = networkManager.networkInterfaces() .define(generateRandomResourceName("nic-", 15)) .withRegion(Region.US_EAST) - .withNewResourceGroup(rgName) + .withExistingResourceGroup(rgName) .withExistingPrimaryNetwork(vnet) .withSubnet(subnetName) .withPrimaryPrivateIPAddressDynamic() .withNewPrimaryPublicIPAddress() .create(); - nic.update().withNewPrimaryPublicIPAddress().withPublicIPAddressDeleteOptions(DeleteOptions.DELETE).apply(); + nic.update() + .defineSecondaryIPConfiguration("secondary") + .withExistingNetwork(vnet) + .withSubnet(subnetName) + .withPrivateIpAddressDynamic() + .withNewPublicIpAddress() + .attach() + .withPublicIPAddressDeleteOptions(DeleteOptions.DELETE, "secondary") + .apply(); + nic.refresh(); - Assertions.assertEquals(DeleteOptions.DELETE, nic.primaryIPConfiguration().innerModel().publicIpAddress().deleteOption()); + List ipConfigurationInnerList = nic.innerModel().ipConfigurations() + .stream().filter(ipConfig -> DeleteOptions.DELETE.equals(ipConfig.publicIpAddress().deleteOption())) + .collect(Collectors.toList()); + + Assertions.assertEquals(1, ipConfigurationInnerList.size()); + ipConfigurationInnerList.forEach(ipConfig -> Assertions.assertEquals("secondary", ipConfig.name())); } @Test - public void canUpdateDeleteOptionWithUpdateIPConfiguration() { + public void canUpdateAllDeleteOptionAndUpdateIPConfiguration() { 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) - .withNewResourceGroup(rgName) + .withExistingResourceGroup(rgName) .withAddressSpace("10.0.0.0/28") .withSubnet(subnetName, "10.0.0.0/28") .create(); @@ -627,7 +757,7 @@ public void canUpdateDeleteOptionWithUpdateIPConfiguration() { NetworkInterface nic = networkManager.networkInterfaces() .define(generateRandomResourceName("nic-", 15)) .withRegion(Region.US_EAST) - .withNewResourceGroup(rgName) + .withExistingResourceGroup(rgName) .withExistingPrimaryNetwork(vnet) .withSubnet(subnetName) .withPrimaryPrivateIPAddressDynamic() @@ -646,11 +776,138 @@ public void canUpdateDeleteOptionWithUpdateIPConfiguration() { .apply(); nic.refresh(); - List deleteOptionsList = new ArrayList<>(); - nic.innerModel().ipConfigurations().stream().filter(ipConfig -> "secondary".equalsIgnoreCase(ipConfig.name())) - .forEach(ipConfig -> deleteOptionsList.add(ipConfig.publicIpAddress().deleteOption())); - Assertions.assertEquals(1, deleteOptionsList.size()); - deleteOptionsList.forEach(deleteOptions -> Assertions.assertEquals(DeleteOptions.DELETE, deleteOptions)); + List ipConfigurationInnerList = nic.innerModel().ipConfigurations() + .stream().filter(ipConfig -> DeleteOptions.DELETE.equals(ipConfig.publicIpAddress().deleteOption())) + .collect(Collectors.toList()); + Assertions.assertEquals(2, ipConfigurationInnerList.size()); + } + + @Test + public void canUpdateSingleDeleteOptionAndUpdateIPConfiguration() { + 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() + .attach() + .create(); + + nic.update().updateIPConfiguration("secondary") + .withNewPublicIpAddress().parent() + .withPublicIPAddressDeleteOptions(DeleteOptions.DELETE, "secondary") + .apply(); + nic.refresh(); + + List ipConfigurationInnerList = nic.innerModel().ipConfigurations() + .stream().filter(ipConfig -> DeleteOptions.DELETE.equals(ipConfig.publicIpAddress().deleteOption())) + .collect(Collectors.toList()); + Assertions.assertEquals(1, ipConfigurationInnerList.size()); + ipConfigurationInnerList.forEach(ipConfig -> Assertions.assertEquals("secondary", ipConfig.name())); + } + + @Test + public void canUpdateMultipleDeleteOptionWithDefineSecondaryIPConfiguration() { + 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() + .create(); + + nic.update() + .withPublicIPAddressDeleteOptions(DeleteOptions.DELETE, "primary") + .defineSecondaryIPConfiguration("secondary") + .withExistingNetwork(vnet) + .withSubnet(subnetName) + .withPrivateIpAddressDynamic() + .withNewPublicIpAddress() + .attach() + .withPublicIPAddressDeleteOptions(DeleteOptions.DETACH, "secondary") + .apply(); + + nic.refresh(); + Assertions.assertEquals(DeleteOptions.DELETE, nic.primaryIPConfiguration().innerModel().publicIpAddress().deleteOption()); + List ipConfigurationInnerList = nic.ipConfigurations().values() + .stream().filter(ipConfig -> DeleteOptions.DETACH.equals(ipConfig.innerModel().publicIpAddress().deleteOption())) + .collect(Collectors.toList()); + Assertions.assertEquals(1, ipConfigurationInnerList.size()); + ipConfigurationInnerList.forEach(ipConfig -> Assertions.assertEquals("secondary", ipConfig.name())); + } + + @Test + public void canUpdateMultipleDeleteOptionWithUpdateIPConfiguration() { + 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() + .attach() + .create(); + + nic.update() + .withPublicIPAddressDeleteOptions(DeleteOptions.DELETE, "primary") + .updateIPConfiguration("secondary") + .withNewPublicIpAddress() + .parent() + .withPublicIPAddressDeleteOptions(DeleteOptions.DETACH, "secondary") + .apply(); + + nic.refresh(); + Assertions.assertEquals(DeleteOptions.DELETE, nic.primaryIPConfiguration().innerModel().publicIpAddress().deleteOption()); + List ipConfigurationInnerList = nic.ipConfigurations().values() + .stream().filter(ipConfig -> DeleteOptions.DETACH.equals(ipConfig.innerModel().publicIpAddress().deleteOption())) + .collect(Collectors.toList()); + Assertions.assertEquals(1, ipConfigurationInnerList.size()); + ipConfigurationInnerList.forEach(ipConfig -> Assertions.assertEquals("secondary", ipConfig.name())); } private NatGatewayInner createNatGateway() {