Skip to content

Commit 0ead11e

Browse files
fmaximusRohit Yadav
authored andcommitted
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>
1 parent 28bc995 commit 0ead11e

3 files changed

Lines changed: 68 additions & 35 deletions

File tree

plugins/network-elements/nuage-vsp/src/com/cloud/network/guru/NuageVspGuestNetworkGuru.java

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,22 @@
1919

2020
package com.cloud.network.guru;
2121

22+
import java.util.List;
23+
24+
import javax.inject.Inject;
25+
26+
import net.nuage.vsp.acs.client.api.model.VspNetwork;
27+
import net.nuage.vsp.acs.client.api.model.VspNic;
28+
import net.nuage.vsp.acs.client.api.model.VspStaticNat;
29+
import net.nuage.vsp.acs.client.api.model.VspVm;
30+
31+
import org.apache.log4j.Logger;
32+
33+
import com.google.common.base.Strings;
34+
35+
import org.apache.cloudstack.resourcedetail.VpcDetailVO;
36+
import org.apache.cloudstack.resourcedetail.dao.VpcDetailsDao;
37+
2238
import com.cloud.agent.AgentManager;
2339
import com.cloud.agent.api.Answer;
2440
import com.cloud.agent.api.guru.DeallocateVmVspCommand;
@@ -59,25 +75,14 @@
5975
import com.cloud.user.Account;
6076
import com.cloud.user.AccountVO;
6177
import com.cloud.user.dao.AccountDao;
78+
import com.cloud.util.NuageVspEntityBuilder;
6279
import com.cloud.utils.StringUtils;
6380
import com.cloud.utils.db.DB;
6481
import com.cloud.utils.exception.CloudRuntimeException;
6582
import com.cloud.vm.NicProfile;
6683
import com.cloud.vm.NicVO;
6784
import com.cloud.vm.ReservationContext;
6885
import com.cloud.vm.VirtualMachineProfile;
69-
import com.google.common.base.Strings;
70-
import com.cloud.util.NuageVspEntityBuilder;
71-
import net.nuage.vsp.acs.client.api.model.VspNetwork;
72-
import net.nuage.vsp.acs.client.api.model.VspNic;
73-
import net.nuage.vsp.acs.client.api.model.VspStaticNat;
74-
import net.nuage.vsp.acs.client.api.model.VspVm;
75-
import org.apache.cloudstack.resourcedetail.VpcDetailVO;
76-
import org.apache.cloudstack.resourcedetail.dao.VpcDetailsDao;
77-
import org.apache.log4j.Logger;
78-
79-
import javax.inject.Inject;
80-
import java.util.List;
8186

8287
public class NuageVspGuestNetworkGuru extends GuestNetworkGuru {
8388
public static final Logger s_logger = Logger.getLogger(NuageVspGuestNetworkGuru.class);
@@ -256,7 +261,7 @@ public void reserve(NicProfile nic, Network network, VirtualMachineProfile vm, D
256261
VspStaticNat vspStaticNat = null;
257262
if (staticNatIp != null) {
258263
VlanVO staticNatVlan = _vlanDao.findById(staticNatIp.getVlanId());
259-
vspStaticNat = _nuageVspEntityBuilder.buildVspStaticNat(null, staticNatIp, staticNatVlan, null);
264+
vspStaticNat = _nuageVspEntityBuilder.buildVspStaticNat(null, staticNatIp, staticNatVlan, vspNic);
260265
}
261266

262267
HostVO nuageVspHost = getNuageVspHost(network.getPhysicalNetworkId());

plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspEntityBuilder.java

Lines changed: 48 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,30 @@
1919

2020
package com.cloud.util;
2121

22+
import java.util.HashSet;
23+
import java.util.Iterator;
24+
import java.util.List;
25+
import java.util.Set;
26+
import java.util.TreeSet;
27+
28+
import javax.inject.Inject;
29+
30+
import net.nuage.vsp.acs.client.api.model.VspAclRule;
31+
import net.nuage.vsp.acs.client.api.model.VspDomain;
32+
import net.nuage.vsp.acs.client.api.model.VspNetwork;
33+
import net.nuage.vsp.acs.client.api.model.VspNic;
34+
import net.nuage.vsp.acs.client.api.model.VspStaticNat;
35+
import net.nuage.vsp.acs.client.api.model.VspVm;
36+
import net.nuage.vsp.acs.client.common.model.Pair;
37+
38+
import org.apache.commons.lang.StringUtils;
39+
import org.apache.log4j.Logger;
40+
41+
import com.google.common.collect.Iterables;
42+
import com.google.common.collect.Lists;
43+
44+
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
45+
2246
import com.cloud.dc.VlanVO;
2347
import com.cloud.dc.dao.VlanDao;
2448
import com.cloud.domain.Domain;
@@ -44,25 +68,6 @@
4468
import com.cloud.vm.NicProfile;
4569
import com.cloud.vm.NicVO;
4670
import com.cloud.vm.VirtualMachine;
47-
import com.google.common.collect.Iterables;
48-
import com.google.common.collect.Lists;
49-
import net.nuage.vsp.acs.client.api.model.VspAclRule;
50-
import net.nuage.vsp.acs.client.api.model.VspDomain;
51-
import net.nuage.vsp.acs.client.api.model.VspNetwork;
52-
import net.nuage.vsp.acs.client.api.model.VspNic;
53-
import net.nuage.vsp.acs.client.api.model.VspStaticNat;
54-
import net.nuage.vsp.acs.client.api.model.VspVm;
55-
import net.nuage.vsp.acs.client.common.model.Pair;
56-
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
57-
import org.apache.commons.lang.StringUtils;
58-
import org.apache.log4j.Logger;
59-
60-
import javax.inject.Inject;
61-
import java.util.HashSet;
62-
import java.util.Iterator;
63-
import java.util.List;
64-
import java.util.Set;
65-
import java.util.TreeSet;
6671

6772
public class NuageVspEntityBuilder {
6873
private static final Logger s_logger = Logger.getLogger(NuageVspEntityBuilder.class);
@@ -270,24 +275,29 @@ public VspNic buildVspNic(NicVO nic) {
270275
return vspNicBuilder.build();
271276
}
272277

273-
public VspStaticNat buildVspStaticNat(Boolean forRevoke, IPAddressVO staticNatIp, VlanVO staticNatVlan, NicVO nic) {
278+
public VspStaticNat buildVspStaticNat(Boolean forRevoke, IPAddressVO staticNatIp, VlanVO staticNatVlan, VspNic vspNic) {
274279
VspStaticNat.Builder vspStaticNatBuilder = new VspStaticNat.Builder()
275280
.ipUuid(staticNatIp.getUuid())
276281
.ipAddress(staticNatIp.getAddress().addr())
277282
.revoke(forRevoke)
278283
.oneToOneNat(staticNatIp.isOneToOneNat())
284+
.state(getEnumValue(staticNatIp.getState(), VspStaticNat.State.class))
279285
.vlanUuid(staticNatVlan.getUuid())
280286
.vlanGateway(staticNatVlan.getVlanGateway())
281287
.vlanNetmask(staticNatVlan.getVlanNetmask());
282288

283-
if (nic != null) {
284-
VspNic vspNic = buildVspNic(nic);
289+
if (vspNic != null) {
285290
vspStaticNatBuilder.nic(vspNic);
286291
}
287292

288293
return vspStaticNatBuilder.build();
289294
}
290295

296+
public VspStaticNat buildVspStaticNat(Boolean forRevoke, IPAddressVO staticNatIp, VlanVO staticNatVlan, NicVO nic) {
297+
VspNic vspNic = (nic != null) ?buildVspNic(nic) : null;
298+
return buildVspStaticNat(forRevoke, staticNatIp, staticNatVlan, vspNic);
299+
}
300+
291301
public VspAclRule buildVspAclRule(FirewallRule firewallRule, Network network) {
292302
VspAclRule.Builder vspAclRuleBuilder = new VspAclRule.Builder()
293303
.uuid(firewallRule.getUuid())
@@ -367,4 +377,20 @@ public VspAclRule buildVspAclRule(NetworkACLItem networkAcl) {
367377

368378
return vspAclRuleBuilder.build();
369379
}
380+
381+
private <E extends Enum<E>> E getEnumValue(Enum cloudstackValue, Class<E> target) {
382+
try {
383+
return Enum.valueOf(target, cloudstackValue.name());
384+
} catch (IllegalArgumentException e) {
385+
return null;
386+
}
387+
}
388+
389+
private <E extends Enum<E>> E getEnumValue(Enum cloudstackValue, E defaultValue) {
390+
try {
391+
return Enum.valueOf(defaultValue.getDeclaringClass(), cloudstackValue.name());
392+
} catch (IllegalArgumentException e) {
393+
return defaultValue;
394+
}
395+
}
370396
}

plugins/network-elements/nuage-vsp/test/com/cloud/util/NuageVspEntityBuilderTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.cloud.dc.dao.VlanDao;
2525
import com.cloud.domain.DomainVO;
2626
import com.cloud.domain.dao.DomainDao;
27+
import com.cloud.network.IpAddress;
2728
import com.cloud.network.Network;
2829
import com.cloud.network.dao.IPAddressDao;
2930
import com.cloud.network.dao.IPAddressVO;
@@ -359,6 +360,7 @@ private void setUpMockedStaticNatIp() {
359360
when(_mockedStaticNatIp.getAddress()).thenReturn(new Ip("10.10.10.2"));
360361
when(_mockedStaticNatIp.isOneToOneNat()).thenReturn(true);
361362
when(_mockedStaticNatIp.getVmIp()).thenReturn("192.168.0.24");
363+
when(_mockedStaticNatIp.getState()).thenReturn(IpAddress.State.Allocated);
362364
}
363365

364366
private void setUpMockedStaticNatVlan() {

0 commit comments

Comments
 (0)