Skip to content

Commit 9e3eeb7

Browse files
committed
Pass conserve mode on create VPC Offering
1 parent 3fd969b commit 9e3eeb7

File tree

8 files changed

+50
-16
lines changed

8 files changed

+50
-16
lines changed

api/src/main/java/com/cloud/network/vpc/VpcProvisioningService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ VpcOffering createVpcOffering(String name, String displayText, List<String> supp
3939
Map serviceCapabilitystList, NetUtils.InternetProtocol internetProtocol,
4040
Long serviceOfferingId, String externalProvider, NetworkOffering.NetworkMode networkMode,
4141
List<Long> domainIds, List<Long> zoneIds, VpcOffering.State state,
42-
NetworkOffering.RoutingMode routingMode, boolean specifyAsNumber);
42+
NetworkOffering.RoutingMode routingMode, boolean specifyAsNumber, boolean conserveMode);
4343

4444

4545
Pair<List<? extends VpcOffering>,Integer> listVpcOfferings(ListVPCOfferingsCmd cmd);

api/src/main/java/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,12 @@ public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd {
161161
description = "the routing mode for the VPC offering. Supported types are: Static or Dynamic.")
162162
private String routingMode;
163163

164+
@Parameter(name = ApiConstants.CONSERVE_MODE, type = CommandType.BOOLEAN,
165+
since = "4.23.0",
166+
description = "True if the VPC offering is IP conserve mode enabled, allowing public IP services to be used across multiple VPC tiers")
167+
private Boolean conserveMode;
168+
169+
164170
/////////////////////////////////////////////////////
165171
/////////////////// Accessors ///////////////////////
166172
/////////////////////////////////////////////////////
@@ -311,6 +317,10 @@ public String getRoutingMode() {
311317
return routingMode;
312318
}
313319

320+
public boolean isConserveMode() {
321+
return BooleanUtils.toBoolean(conserveMode);
322+
}
323+
314324
@Override
315325
public void create() throws ResourceAllocationException {
316326
VpcOffering vpcOff = _vpcProvSvc.createVpcOffering(this);

api/src/main/java/org/apache/cloudstack/api/response/VpcOfferingResponse.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,10 @@ public class VpcOfferingResponse extends BaseResponse {
102102
@Param(description = "The routing mode for the network offering, supported types are Static or Dynamic.")
103103
private String routingMode;
104104

105+
@SerializedName(ApiConstants.CONSERVE_MODE)
106+
@Param(description = "True if the VPC offering is IP conserve mode enabled, allowing public IP services to be used across multiple VPC tiers.")
107+
private Boolean conserveMode;
108+
105109
public void setId(String id) {
106110
this.id = id;
107111
}
@@ -201,4 +205,12 @@ public String getRoutingMode() {
201205
public void setRoutingMode(String routingMode) {
202206
this.routingMode = routingMode;
203207
}
208+
209+
public Boolean getConserveMode() {
210+
return conserveMode;
211+
}
212+
213+
public void setConserveMode(Boolean conserveMode) {
214+
this.conserveMode = conserveMode;
215+
}
204216
}

plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/management/ContrailManagerImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ private VpcOffering locateVpcOffering() {
293293
}
294294
serviceProviderMap.put(svc, providerSet);
295295
}
296-
vpcOffer = _vpcProvSvc.createVpcOffering(juniperVPCOfferingName, juniperVPCOfferingDisplayText, services, serviceProviderMap, null, null, null, null, null, null, null, VpcOffering.State.Enabled, null, false);
296+
vpcOffer = _vpcProvSvc.createVpcOffering(juniperVPCOfferingName, juniperVPCOfferingDisplayText, services, serviceProviderMap, null, null, null, null, null, null, null, VpcOffering.State.Enabled, null, false, false);
297297
long id = vpcOffer.getId();
298298
_vpcOffDao.update(id, (VpcOfferingVO)vpcOffer);
299299
return _vpcOffDao.findById(id);

server/src/main/java/com/cloud/api/query/dao/VpcOfferingJoinDaoImpl.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ public VpcOfferingResponse newVpcOfferingResponse(VpcOffering offering) {
7777
if (offering.isSpecifyAsNumber() != null) {
7878
offeringResponse.setSpecifyAsNumber(offering.isSpecifyAsNumber());
7979
}
80+
offeringResponse.setConserveMode(offering.isConserveMode());
8081
if (offering instanceof VpcOfferingJoinVO) {
8182
VpcOfferingJoinVO offeringJoinVO = (VpcOfferingJoinVO) offering;
8283
offeringResponse.setDomainId(offeringJoinVO.getDomainUuid());

server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,7 @@ public void doInTransactionWithoutResult(final TransactionStatus status) {
388388
}
389389
createVpcOffering(VpcOffering.defaultVPCOfferingName, VpcOffering.defaultVPCOfferingName, svcProviderMap,
390390
true, State.Enabled, null, false,
391-
false, false, null, null, false);
391+
false, false, null, null, false, true);
392392
}
393393

394394
// configure default vpc offering with Netscaler as LB Provider
@@ -408,7 +408,7 @@ public void doInTransactionWithoutResult(final TransactionStatus status) {
408408
}
409409
}
410410
createVpcOffering(VpcOffering.defaultVPCNSOfferingName, VpcOffering.defaultVPCNSOfferingName,
411-
svcProviderMap, false, State.Enabled, null, false, false, false, null, null, false);
411+
svcProviderMap, false, State.Enabled, null, false, false, false, null, null, false, false);
412412

413413
}
414414

@@ -429,7 +429,7 @@ public void doInTransactionWithoutResult(final TransactionStatus status) {
429429
}
430430
}
431431
createVpcOffering(VpcOffering.redundantVPCOfferingName, VpcOffering.redundantVPCOfferingName, svcProviderMap, true, State.Enabled,
432-
null, false, false, true, null, null, false);
432+
null, false, false, true, null, null, false, true);
433433
}
434434

435435
// configure default vpc offering with NSX as network service provider in NAT mode
@@ -446,7 +446,7 @@ public void doInTransactionWithoutResult(final TransactionStatus status) {
446446
}
447447
}
448448
createVpcOffering(VpcOffering.DEFAULT_VPC_NAT_NSX_OFFERING_NAME, VpcOffering.DEFAULT_VPC_NAT_NSX_OFFERING_NAME, svcProviderMap, false,
449-
State.Enabled, null, false, false, false, NetworkOffering.NetworkMode.NATTED, null, false);
449+
State.Enabled, null, false, false, false, NetworkOffering.NetworkMode.NATTED, null, false, false);
450450

451451
}
452452

@@ -464,7 +464,7 @@ public void doInTransactionWithoutResult(final TransactionStatus status) {
464464
}
465465
}
466466
createVpcOffering(VpcOffering.DEFAULT_VPC_ROUTE_NSX_OFFERING_NAME, VpcOffering.DEFAULT_VPC_ROUTE_NSX_OFFERING_NAME, svcProviderMap, false,
467-
State.Enabled, null, false, false, false, NetworkOffering.NetworkMode.ROUTED, null, false);
467+
State.Enabled, null, false, false, false, NetworkOffering.NetworkMode.ROUTED, null, false, false);
468468

469469
}
470470

@@ -482,7 +482,7 @@ public void doInTransactionWithoutResult(final TransactionStatus status) {
482482
}
483483
}
484484
createVpcOffering(VpcOffering.DEFAULT_VPC_ROUTE_NETRIS_OFFERING_NAME, VpcOffering.DEFAULT_VPC_ROUTE_NETRIS_OFFERING_NAME, svcProviderMap, false,
485-
State.Enabled, null, false, false, false, NetworkOffering.NetworkMode.ROUTED, null, false);
485+
State.Enabled, null, false, false, false, NetworkOffering.NetworkMode.ROUTED, null, false, false);
486486

487487
}
488488

@@ -500,7 +500,7 @@ public void doInTransactionWithoutResult(final TransactionStatus status) {
500500
}
501501
}
502502
createVpcOffering(VpcOffering.DEFAULT_VPC_NAT_NETRIS_OFFERING_NAME, VpcOffering.DEFAULT_VPC_NAT_NETRIS_OFFERING_NAME, svcProviderMap, false,
503-
State.Enabled, null, false, false, false, NetworkOffering.NetworkMode.NATTED, null, false);
503+
State.Enabled, null, false, false, false, NetworkOffering.NetworkMode.NATTED, null, false, false);
504504

505505
}
506506
}
@@ -586,6 +586,7 @@ public VpcOffering createVpcOffering(CreateVPCOfferingCmd cmd) {
586586
}
587587
boolean specifyAsNumber = cmd.getSpecifyAsNumber();
588588
String routingModeString = cmd.getRoutingMode();
589+
boolean conserveMode = cmd.isConserveMode();
589590

590591
// check if valid domain
591592
if (CollectionUtils.isNotEmpty(cmd.getDomainIds())) {
@@ -624,15 +625,15 @@ public VpcOffering createVpcOffering(CreateVPCOfferingCmd cmd) {
624625

625626
return createVpcOffering(vpcOfferingName, displayText, supportedServices,
626627
serviceProviderList, serviceCapabilityList, internetProtocol, serviceOfferingId, provider, networkMode,
627-
domainIds, zoneIds, (enable ? State.Enabled : State.Disabled), routingMode, specifyAsNumber);
628+
domainIds, zoneIds, (enable ? State.Enabled : State.Disabled), routingMode, specifyAsNumber, conserveMode);
628629
}
629630

630631
@Override
631632
@ActionEvent(eventType = EventTypes.EVENT_VPC_OFFERING_CREATE, eventDescription = "creating vpc offering", create = true)
632633
public VpcOffering createVpcOffering(final String name, final String displayText, final List<String> supportedServices, final Map<String, List<String>> serviceProviders,
633634
final Map serviceCapabilityList, final NetUtils.InternetProtocol internetProtocol, final Long serviceOfferingId,
634635
final String externalProvider, final NetworkOffering.NetworkMode networkMode, List<Long> domainIds, List<Long> zoneIds, State state,
635-
NetworkOffering.RoutingMode routingMode, boolean specifyAsNumber) {
636+
NetworkOffering.RoutingMode routingMode, boolean specifyAsNumber, boolean conserveMode) {
636637

637638
if (!Ipv6Service.Ipv6OfferingCreationEnabled.value() && !(internetProtocol == null || NetUtils.InternetProtocol.IPv4.equals(internetProtocol))) {
638639
throw new InvalidParameterValueException(String.format("Configuration %s needs to be enabled for creating IPv6 supported VPC offering", Ipv6Service.Ipv6OfferingCreationEnabled.key()));
@@ -727,7 +728,7 @@ public VpcOffering createVpcOffering(final String name, final String displayText
727728
final boolean offersRegionLevelVPC = isVpcOfferingForRegionLevelVpc(serviceCapabilityList);
728729
final boolean redundantRouter = isVpcOfferingRedundantRouter(serviceCapabilityList, redundantRouterService);
729730
final VpcOfferingVO offering = createVpcOffering(name, displayText, svcProviderMap, false, state, serviceOfferingId, supportsDistributedRouter, offersRegionLevelVPC,
730-
redundantRouter, networkMode, routingMode, specifyAsNumber);
731+
redundantRouter, networkMode, routingMode, specifyAsNumber, conserveMode);
731732

732733
if (offering != null) {
733734
List<VpcOfferingDetailsVO> detailsVO = new ArrayList<>();
@@ -755,7 +756,7 @@ public VpcOffering createVpcOffering(final String name, final String displayText
755756
@DB
756757
protected VpcOfferingVO createVpcOffering(final String name, final String displayText, final Map<Service, Set<Provider>> svcProviderMap,
757758
final boolean isDefault, final State state, final Long serviceOfferingId, final boolean supportsDistributedRouter, final boolean offersRegionLevelVPC,
758-
final boolean redundantRouter, NetworkOffering.NetworkMode networkMode, NetworkOffering.RoutingMode routingMode, boolean specifyAsNumber) {
759+
final boolean redundantRouter, NetworkOffering.NetworkMode networkMode, NetworkOffering.RoutingMode routingMode, boolean specifyAsNumber, boolean conserveMode) {
759760

760761
return Transaction.execute(new TransactionCallback<VpcOfferingVO>() {
761762
@Override
@@ -771,6 +772,7 @@ public VpcOfferingVO doInTransaction(final TransactionStatus status) {
771772
if (Objects.nonNull(routingMode)) {
772773
offering.setRoutingMode(routingMode);
773774
}
775+
offering.setConserveMode(conserveMode);
774776

775777
logger.debug("Adding vpc offering " + offering);
776778
offering = _vpcOffDao.persist(offering);

ui/src/config/section/offering.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -508,7 +508,7 @@ export default {
508508
searchFilters: ['name', 'zoneid', 'domainid'],
509509
resourceType: 'VpcOffering',
510510
columns: ['name', 'state', 'displaytext', 'domain', 'zone', 'order'],
511-
details: ['name', 'id', 'displaytext', 'internetprotocol', 'distributedvpcrouter', 'tags', 'routingmode', 'specifyasnumber', 'service', 'fornsx', 'networkmode', 'domain', 'zone', 'created'],
511+
details: ['name', 'id', 'displaytext', 'internetprotocol', 'distributedvpcrouter', 'tags', 'routingmode', 'specifyasnumber', 'service', 'fornsx', 'networkmode', 'conservemode', 'domain', 'zone', 'created'],
512512
related: [{
513513
name: 'vpc',
514514
title: 'label.vpc',

ui/src/views/offering/AddVpcOffering.vue

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,14 @@
194194
</a-select-option>
195195
</a-select>
196196
</a-form-item>
197+
<a-form-item
198+
name="conservemode"
199+
ref="conservemode">
200+
<template #label>
201+
<tooltip-label :title="$t('label.conservemode')" :tooltip="apiParams.conservemode.description"/>
202+
</template>
203+
<a-switch v-model:checked="form.conservemode" />
204+
</a-form-item>
197205
<a-form-item name="ispublic" ref="ispublic" :label="$t('label.ispublic')" v-if="isAdmin()">
198206
<a-switch v-model:checked="form.ispublic" />
199207
</a-form-item>
@@ -282,7 +290,6 @@ export default {
282290
return {
283291
selectedDomains: [],
284292
selectedZones: [],
285-
isConserveMode: true,
286293
internetProtocolValue: 'ipv4',
287294
domains: [],
288295
domainLoading: false,
@@ -328,7 +335,8 @@ export default {
328335
description: 'Netris',
329336
enabled: true
330337
},
331-
nsxSupportedServicesMap: {}
338+
nsxSupportedServicesMap: {},
339+
conservemode: false
332340
}
333341
},
334342
beforeCreate () {
@@ -719,6 +727,7 @@ export default {
719727
params.provider = 'Netris'
720728
}
721729
params.networkmode = values.networkmode
730+
params.conservemode = values.conservemode
722731
if (!values.forVpc) {
723732
params.specifyasnumber = values.specifyasnumber
724733
}

0 commit comments

Comments
 (0)