Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT License. See License.txt in the project root for license information.
/** * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for * license information. */
package com.microsoft.azure.management.network.implementation; import com.microsoft.azure.management.apigeneration.LangDefinition; import com.microsoft.azure.management.network.ApplicationGateway; import com.microsoft.azure.management.network.ApplicationGatewayBackendAddressPool; import com.microsoft.azure.management.network.IPAllocationMethod; import com.microsoft.azure.management.network.IPVersion; import com.microsoft.azure.management.network.LoadBalancer; import com.microsoft.azure.management.network.Network; import com.microsoft.azure.management.network.NetworkInterface; import com.microsoft.azure.management.network.NicIPConfiguration; import com.microsoft.azure.management.network.PublicIPAddress; import com.microsoft.azure.management.resources.fluentcore.model.Creatable; import java.util.ArrayList; import java.util.Collection; import java.util.List;
Implementation for NicIPConfiguration and its create and update interfaces.
/** * Implementation for NicIPConfiguration and its create and update interfaces. */
@LangDefinition class NicIPConfigurationImpl extends NicIPConfigurationBaseImpl<NetworkInterfaceImpl, NetworkInterface> implements NicIPConfiguration, NicIPConfiguration.Definition<NetworkInterface.DefinitionStages.WithCreate>, NicIPConfiguration.UpdateDefinition<NetworkInterface.Update>, NicIPConfiguration.Update {
the network client.
/** * the network client. */
private final NetworkManager networkManager;
flag indicating whether IP configuration is in create or update mode.
/** * flag indicating whether IP configuration is in create or update mode. */
private final boolean isInCreateMode;
unique key of a creatable virtual network to be associated with the ip configuration.
/** * unique key of a creatable virtual network to be associated with the ip configuration. */
private String creatableVirtualNetworkKey;
unique key of a creatable public IP to be associated with the ip configuration.
/** * unique key of a creatable public IP to be associated with the ip configuration. */
private String creatablePublicIPKey;
reference to an existing virtual network to be associated with the ip configuration.
/** * reference to an existing virtual network to be associated with the ip configuration. */
private Network existingVirtualNetworkToAssociate;
reference to an existing public IP to be associated with the ip configuration.
/** * reference to an existing public IP to be associated with the ip configuration. */
private String existingPublicIPAddressIdToAssociate;
name of an existing subnet to be associated with a new or existing IP configuration.
/** * name of an existing subnet to be associated with a new or existing IP configuration. */
private String subnetToAssociate;
flag indicating to remove public IP association from the ip configuration during update.
/** * flag indicating to remove public IP association from the ip configuration during update. */
private boolean removePrimaryPublicIPAssociation; protected NicIPConfigurationImpl(NetworkInterfaceIPConfigurationInner inner, NetworkInterfaceImpl parent, NetworkManager networkManager, final boolean isInCreateModel) { super(inner, parent, networkManager); this.isInCreateMode = isInCreateModel; this.networkManager = networkManager; } protected static NicIPConfigurationImpl prepareNicIPConfiguration( String name, NetworkInterfaceImpl parent, final NetworkManager networkManager) { NetworkInterfaceIPConfigurationInner ipConfigurationInner = new NetworkInterfaceIPConfigurationInner(); ipConfigurationInner.withName(name); return new NicIPConfigurationImpl(ipConfigurationInner, parent, networkManager, true); } @Override public String publicIPAddressId() { if (this.inner().publicIPAddress() == null) { return null; } return this.inner().publicIPAddress().id(); } @Override public PublicIPAddress getPublicIPAddress() { String id = publicIPAddressId(); if (id == null) { return null; } return this.networkManager.publicIPAddresses().getById(id); } @Override public NetworkInterfaceImpl attach() { return parent().withIPConfiguration(this); } @Override public NicIPConfigurationImpl withNewNetwork(Creatable<Network> creatable) { this.creatableVirtualNetworkKey = creatable.key(); this.parent().addToCreatableDependencies(creatable); return this; } @Override public NicIPConfigurationImpl withNewNetwork(String name, String addressSpaceCidr) { Network.DefinitionStages.WithGroup definitionWithGroup = this.networkManager.networks() .define(name) .withRegion(this.parent().regionName()); Network.DefinitionStages.WithCreate definitionAfterGroup; if (this.parent().newGroup() != null) { definitionAfterGroup = definitionWithGroup.withNewResourceGroup(this.parent().newGroup()); } else { definitionAfterGroup = definitionWithGroup.withExistingResourceGroup(this.parent().resourceGroupName()); } return withNewNetwork(definitionAfterGroup.withAddressSpace(addressSpaceCidr)); } @Override public NicIPConfigurationImpl withNewNetwork(String addressSpaceCidr) { return withNewNetwork(this.parent().namer.randomName("vnet", 20), addressSpaceCidr); } @Override public NicIPConfigurationImpl withExistingNetwork(Network network) { this.existingVirtualNetworkToAssociate = network; return this; } @Override public NicIPConfigurationImpl withPrivateIPAddressDynamic() { this.inner().withPrivateIPAllocationMethod(IPAllocationMethod.DYNAMIC); this.inner().withPrivateIPAddress(null); return this; } @Override public NicIPConfigurationImpl withPrivateIPAddressStatic(String staticPrivateIPAddress) { this.inner().withPrivateIPAllocationMethod(IPAllocationMethod.STATIC); this.inner().withPrivateIPAddress(staticPrivateIPAddress); return this; } @Override public NicIPConfigurationImpl withNewPublicIPAddress(Creatable<PublicIPAddress> creatable) { if (this.creatablePublicIPKey == null) { this.creatablePublicIPKey = creatable.key(); this.parent().addToCreatableDependencies(creatable); } return this; } @Override public NicIPConfigurationImpl withNewPublicIPAddress() { String name = this.parent().namer.randomName("pip", 15); return withNewPublicIPAddress(prepareCreatablePublicIP(name, name)); } @Override public NicIPConfigurationImpl withNewPublicIPAddress(String leafDnsLabel) { return withNewPublicIPAddress(prepareCreatablePublicIP(this.parent().namer.randomName("pip", 15), leafDnsLabel)); } @Override public NicIPConfigurationImpl withExistingPublicIPAddress(PublicIPAddress publicIPAddress) { return this.withExistingPublicIPAddress(publicIPAddress.id()); } @Override public NicIPConfigurationImpl withExistingPublicIPAddress(String resourceId) { this.existingPublicIPAddressIdToAssociate = resourceId; return this; } @Override public NicIPConfigurationImpl withoutPublicIPAddress() { this.removePrimaryPublicIPAssociation = true; return this; } @Override public NicIPConfigurationImpl withSubnet(String name) { this.subnetToAssociate = name; return this; } @Override public NicIPConfigurationImpl withExistingLoadBalancerBackend(LoadBalancer loadBalancer, String backendName) { if (loadBalancer != null) { for (BackendAddressPoolInner pool : loadBalancer.inner().backendAddressPools()) { if (pool.name().equalsIgnoreCase(backendName)) { ensureLoadBalancerBackendAddressPools().add(pool); return this; } } } return null; } @Override public NicIPConfigurationImpl withExistingApplicationGatewayBackend(ApplicationGateway appGateway, String backendName) { if (appGateway != null) { for (ApplicationGatewayBackendAddressPool pool : appGateway.inner().backendAddressPools()) { if (pool.name().equalsIgnoreCase(backendName)) { ensureAppGatewayBackendAddressPools().add(pool); return this; } } } return null; } @Override public NicIPConfigurationImpl withExistingLoadBalancerInboundNatRule(LoadBalancer loadBalancer, String inboundNatRuleName) { if (loadBalancer != null) { for (InboundNatRuleInner rule : loadBalancer.inner().inboundNatRules()) { if (rule.name().equalsIgnoreCase(inboundNatRuleName)) { ensureInboundNatRules().add(rule); return this; } } } return null; } private List<ApplicationGatewayBackendAddressPool> ensureAppGatewayBackendAddressPools() { List<ApplicationGatewayBackendAddressPool> poolRefs = this.inner().applicationGatewayBackendAddressPools(); if (poolRefs == null) { poolRefs = new ArrayList<>(); this.inner().withApplicationGatewayBackendAddressPools(poolRefs); } return poolRefs; } private List<BackendAddressPoolInner> ensureLoadBalancerBackendAddressPools() { List<BackendAddressPoolInner> poolRefs = this.inner().loadBalancerBackendAddressPools(); if (poolRefs == null) { poolRefs = new ArrayList<>(); this.inner().withLoadBalancerBackendAddressPools(poolRefs); } return poolRefs; } private List<InboundNatRuleInner> ensureInboundNatRules() { List<InboundNatRuleInner> natRefs = this.inner().loadBalancerInboundNatRules(); if (natRefs == null) { natRefs = new ArrayList<>(); this.inner().withLoadBalancerInboundNatRules(natRefs); } return natRefs; } protected static void ensureConfigurations(Collection<NicIPConfiguration> nicIPConfigurations) { for (NicIPConfiguration nicIPConfiguration : nicIPConfigurations) { NicIPConfigurationImpl config = (NicIPConfigurationImpl) nicIPConfiguration; config.inner().withSubnet(config.subnetToAssociate()); config.inner().withPublicIPAddress(config.publicIPToAssociate()); } } // Creates a creatable public IP address definition with the given name and DNS label. private Creatable<PublicIPAddress> prepareCreatablePublicIP(String name, String leafDnsLabel) { PublicIPAddress.DefinitionStages.WithGroup definitionWithGroup = this.networkManager.publicIPAddresses() .define(name) .withRegion(this.parent().regionName()); PublicIPAddress.DefinitionStages.WithCreate definitionAfterGroup; if (this.parent().newGroup() != null) { definitionAfterGroup = definitionWithGroup.withNewResourceGroup(this.parent().newGroup()); } else { definitionAfterGroup = definitionWithGroup.withExistingResourceGroup(this.parent().resourceGroupName()); } return definitionAfterGroup.withLeafDomainLabel(leafDnsLabel); }
Gets the subnet to associate with the IP configuration.

This method will never return null as subnet is required for a IP configuration, in case of update mode if user didn't choose to change the subnet then existing subnet will be returned. Updating the nic subnet has a restriction, the new subnet must reside in the same virtual network as the current one.

Returns:the subnet resource
/** * Gets the subnet to associate with the IP configuration. * <p> * This method will never return null as subnet is required for a IP configuration, in case of * update mode if user didn't choose to change the subnet then existing subnet will be returned. * Updating the nic subnet has a restriction, the new subnet must reside in the same virtual network * as the current one. * * @return the subnet resource */
private SubnetInner subnetToAssociate() { SubnetInner subnetInner = new SubnetInner(); if (this.isInCreateMode) { if (this.creatableVirtualNetworkKey != null) { Network network = (Network) parent().createdDependencyResource(this.creatableVirtualNetworkKey); subnetInner.withId(network.inner().subnets().get(0).id()); return subnetInner; } for (SubnetInner subnet : this.existingVirtualNetworkToAssociate.inner().subnets()) { if (subnet.name().equalsIgnoreCase(this.subnetToAssociate)) { subnetInner.withId(subnet.id()); return subnetInner; } } throw new RuntimeException("A subnet with name '" + subnetToAssociate + "' not found under the network '" + this.existingVirtualNetworkToAssociate.name() + "'"); } else { if (subnetToAssociate != null) { int idx = this.inner().subnet().id().lastIndexOf('/'); subnetInner.withId(this.inner().subnet().id().substring(0, idx + 1) + subnetToAssociate); } else { subnetInner.withId(this.inner().subnet().id()); } return subnetInner; } }
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.

Returns:public IP SubResource
/** * 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. * @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.inner().publicIPAddress(); } else { return null; } } @Override public NicIPConfigurationImpl withPrivateIPVersion(IPVersion ipVersion) { this.inner().withPrivateIPAddressVersion(ipVersion); return this; } @Override public NicIPConfigurationImpl withoutApplicationGatewayBackends() { this.inner().withApplicationGatewayBackendAddressPools(null); return this; } @Override public NicIPConfigurationImpl withoutLoadBalancerBackends() { this.inner().withLoadBalancerBackendAddressPools(null); return this; } @Override public NicIPConfigurationImpl withoutLoadBalancerInboundNatRules() { this.inner().withLoadBalancerInboundNatRules(null); return this; } }