mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
CLOUDSTACK-9751: Fix public ip not applied, when added while VR is starting. (#1925)
Public IP state wasn't passed to the vsp client, making it ignore the apply public ip. Reported-By: Raf Smeets <raf.smeets@nuagenetworks.net>
This commit is contained in:
parent
28bc99565b
commit
0ead11e8f1
@ -19,6 +19,22 @@
|
||||
|
||||
package com.cloud.network.guru;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import net.nuage.vsp.acs.client.api.model.VspNetwork;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNic;
|
||||
import net.nuage.vsp.acs.client.api.model.VspStaticNat;
|
||||
import net.nuage.vsp.acs.client.api.model.VspVm;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.google.common.base.Strings;
|
||||
|
||||
import org.apache.cloudstack.resourcedetail.VpcDetailVO;
|
||||
import org.apache.cloudstack.resourcedetail.dao.VpcDetailsDao;
|
||||
|
||||
import com.cloud.agent.AgentManager;
|
||||
import com.cloud.agent.api.Answer;
|
||||
import com.cloud.agent.api.guru.DeallocateVmVspCommand;
|
||||
@ -59,6 +75,7 @@ import com.cloud.offerings.dao.NetworkOfferingServiceMapDao;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.user.AccountVO;
|
||||
import com.cloud.user.dao.AccountDao;
|
||||
import com.cloud.util.NuageVspEntityBuilder;
|
||||
import com.cloud.utils.StringUtils;
|
||||
import com.cloud.utils.db.DB;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
@ -66,18 +83,6 @@ import com.cloud.vm.NicProfile;
|
||||
import com.cloud.vm.NicVO;
|
||||
import com.cloud.vm.ReservationContext;
|
||||
import com.cloud.vm.VirtualMachineProfile;
|
||||
import com.google.common.base.Strings;
|
||||
import com.cloud.util.NuageVspEntityBuilder;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNetwork;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNic;
|
||||
import net.nuage.vsp.acs.client.api.model.VspStaticNat;
|
||||
import net.nuage.vsp.acs.client.api.model.VspVm;
|
||||
import org.apache.cloudstack.resourcedetail.VpcDetailVO;
|
||||
import org.apache.cloudstack.resourcedetail.dao.VpcDetailsDao;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.List;
|
||||
|
||||
public class NuageVspGuestNetworkGuru extends GuestNetworkGuru {
|
||||
public static final Logger s_logger = Logger.getLogger(NuageVspGuestNetworkGuru.class);
|
||||
@ -256,7 +261,7 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru {
|
||||
VspStaticNat vspStaticNat = null;
|
||||
if (staticNatIp != null) {
|
||||
VlanVO staticNatVlan = _vlanDao.findById(staticNatIp.getVlanId());
|
||||
vspStaticNat = _nuageVspEntityBuilder.buildVspStaticNat(null, staticNatIp, staticNatVlan, null);
|
||||
vspStaticNat = _nuageVspEntityBuilder.buildVspStaticNat(null, staticNatIp, staticNatVlan, vspNic);
|
||||
}
|
||||
|
||||
HostVO nuageVspHost = getNuageVspHost(network.getPhysicalNetworkId());
|
||||
|
||||
@ -19,6 +19,30 @@
|
||||
|
||||
package com.cloud.util;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import net.nuage.vsp.acs.client.api.model.VspAclRule;
|
||||
import net.nuage.vsp.acs.client.api.model.VspDomain;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNetwork;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNic;
|
||||
import net.nuage.vsp.acs.client.api.model.VspStaticNat;
|
||||
import net.nuage.vsp.acs.client.api.model.VspVm;
|
||||
import net.nuage.vsp.acs.client.common.model.Pair;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
|
||||
|
||||
import com.cloud.dc.VlanVO;
|
||||
import com.cloud.dc.dao.VlanDao;
|
||||
import com.cloud.domain.Domain;
|
||||
@ -44,25 +68,6 @@ import com.cloud.utils.net.NetUtils;
|
||||
import com.cloud.vm.NicProfile;
|
||||
import com.cloud.vm.NicVO;
|
||||
import com.cloud.vm.VirtualMachine;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import net.nuage.vsp.acs.client.api.model.VspAclRule;
|
||||
import net.nuage.vsp.acs.client.api.model.VspDomain;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNetwork;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNic;
|
||||
import net.nuage.vsp.acs.client.api.model.VspStaticNat;
|
||||
import net.nuage.vsp.acs.client.api.model.VspVm;
|
||||
import net.nuage.vsp.acs.client.common.model.Pair;
|
||||
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
|
||||
public class NuageVspEntityBuilder {
|
||||
private static final Logger s_logger = Logger.getLogger(NuageVspEntityBuilder.class);
|
||||
@ -270,24 +275,29 @@ public class NuageVspEntityBuilder {
|
||||
return vspNicBuilder.build();
|
||||
}
|
||||
|
||||
public VspStaticNat buildVspStaticNat(Boolean forRevoke, IPAddressVO staticNatIp, VlanVO staticNatVlan, NicVO nic) {
|
||||
public VspStaticNat buildVspStaticNat(Boolean forRevoke, IPAddressVO staticNatIp, VlanVO staticNatVlan, VspNic vspNic) {
|
||||
VspStaticNat.Builder vspStaticNatBuilder = new VspStaticNat.Builder()
|
||||
.ipUuid(staticNatIp.getUuid())
|
||||
.ipAddress(staticNatIp.getAddress().addr())
|
||||
.revoke(forRevoke)
|
||||
.oneToOneNat(staticNatIp.isOneToOneNat())
|
||||
.state(getEnumValue(staticNatIp.getState(), VspStaticNat.State.class))
|
||||
.vlanUuid(staticNatVlan.getUuid())
|
||||
.vlanGateway(staticNatVlan.getVlanGateway())
|
||||
.vlanNetmask(staticNatVlan.getVlanNetmask());
|
||||
|
||||
if (nic != null) {
|
||||
VspNic vspNic = buildVspNic(nic);
|
||||
if (vspNic != null) {
|
||||
vspStaticNatBuilder.nic(vspNic);
|
||||
}
|
||||
|
||||
return vspStaticNatBuilder.build();
|
||||
}
|
||||
|
||||
public VspStaticNat buildVspStaticNat(Boolean forRevoke, IPAddressVO staticNatIp, VlanVO staticNatVlan, NicVO nic) {
|
||||
VspNic vspNic = (nic != null) ?buildVspNic(nic) : null;
|
||||
return buildVspStaticNat(forRevoke, staticNatIp, staticNatVlan, vspNic);
|
||||
}
|
||||
|
||||
public VspAclRule buildVspAclRule(FirewallRule firewallRule, Network network) {
|
||||
VspAclRule.Builder vspAclRuleBuilder = new VspAclRule.Builder()
|
||||
.uuid(firewallRule.getUuid())
|
||||
@ -367,4 +377,20 @@ public class NuageVspEntityBuilder {
|
||||
|
||||
return vspAclRuleBuilder.build();
|
||||
}
|
||||
|
||||
private <E extends Enum<E>> E getEnumValue(Enum cloudstackValue, Class<E> target) {
|
||||
try {
|
||||
return Enum.valueOf(target, cloudstackValue.name());
|
||||
} catch (IllegalArgumentException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private <E extends Enum<E>> E getEnumValue(Enum cloudstackValue, E defaultValue) {
|
||||
try {
|
||||
return Enum.valueOf(defaultValue.getDeclaringClass(), cloudstackValue.name());
|
||||
} catch (IllegalArgumentException e) {
|
||||
return defaultValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -24,6 +24,7 @@ import com.cloud.dc.VlanVO;
|
||||
import com.cloud.dc.dao.VlanDao;
|
||||
import com.cloud.domain.DomainVO;
|
||||
import com.cloud.domain.dao.DomainDao;
|
||||
import com.cloud.network.IpAddress;
|
||||
import com.cloud.network.Network;
|
||||
import com.cloud.network.dao.IPAddressDao;
|
||||
import com.cloud.network.dao.IPAddressVO;
|
||||
@ -359,6 +360,7 @@ public class NuageVspEntityBuilderTest extends NuageTest {
|
||||
when(_mockedStaticNatIp.getAddress()).thenReturn(new Ip("10.10.10.2"));
|
||||
when(_mockedStaticNatIp.isOneToOneNat()).thenReturn(true);
|
||||
when(_mockedStaticNatIp.getVmIp()).thenReturn("192.168.0.24");
|
||||
when(_mockedStaticNatIp.getState()).thenReturn(IpAddress.State.Allocated);
|
||||
}
|
||||
|
||||
private void setUpMockedStaticNatVlan() {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user