Add Netris Tag parameter to the Network provider and fix zone creation wizard (#33)

* Add Netris Tag parameter to the Network provider

* remove unused import

* Fix public IP ranges creation on zone creation (#34)

* use single quotes

---------

Co-authored-by: Nicolas Vazquez <nicovazquez90@gmail.com>
This commit is contained in:
Pearl Dsilva 2024-12-10 13:45:50 -05:00 committed by GitHub
parent aa222a51ab
commit 554ed63440
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 80 additions and 9 deletions

View File

@ -27,4 +27,5 @@ public interface NetrisProvider extends InternalIdentity, Identity {
String getUsername();
String getSiteName();
String getTenantName();
String getNetrisTag();
}

View File

@ -1149,6 +1149,7 @@ public class ApiConstants {
public static final String HAS_RULES = "hasrules";
public static final String NSX_DETAIL_KEY = "forNsx";
public static final String NETRIS_DETAIL_KEY = "forNetris";
public static final String NETRIS_TAG = "netristag";
public static final String DISK_PATH = "diskpath";
public static final String IMPORT_SOURCE = "importsource";
public static final String TEMP_PATH = "temppath";

View File

@ -66,6 +66,9 @@ public class NetrisProviderVO implements NetrisProvider {
@Column(name = "tenant_name")
private String tenantName;
@Column(name = "netris_tag")
private String netrisTag;
@Column(name = "created")
private Date created;
@ -171,6 +174,14 @@ public class NetrisProviderVO implements NetrisProvider {
this.tenantName = tenantName;
}
public String getNetrisTag() {
return netrisTag;
}
public void setNetrisTag(String netrisTag) {
this.netrisTag = netrisTag;
}
public Date getCreated() {
return created;
}
@ -197,6 +208,7 @@ public class NetrisProviderVO implements NetrisProvider {
private String password;
private String siteName;
private String tenantName;
private String netrisTag;
public Builder() {
// Default constructor
@ -246,6 +258,12 @@ public class NetrisProviderVO implements NetrisProvider {
this.tenantName = tenantName;
return this;
}
public Builder setNetrisTag(String netrisTag) {
this.netrisTag = netrisTag;
return this;
}
public NetrisProviderVO build() {
NetrisProviderVO provider = new NetrisProviderVO();
provider.setZoneId(this.zoneId);
@ -258,6 +276,7 @@ public class NetrisProviderVO implements NetrisProvider {
provider.setPassword(this.password);
provider.setSiteName(this.siteName);
provider.setTenantName(this.tenantName);
provider.setNetrisTag(this.netrisTag);
provider.setCreated(new Date());
return provider;
}

View File

@ -439,6 +439,7 @@ CREATE TABLE `cloud`.`netris_providers` (
`password` varchar(255) NOT NULL,
`site_name` varchar(255) NOT NULL,
`tenant_name` varchar(255) NOT NULL,
`netris_tag` varchar(255) NOT NULL,
`created` datetime NOT NULL COMMENT 'created date',
`removed` datetime COMMENT 'removed date if not null',
PRIMARY KEY (`id`),

View File

@ -22,6 +22,7 @@ public class CreateNetrisVnetCommand extends NetrisCommand {
private String cidr;
private Integer vxlanId;
private String gateway;
private String netrisTag;
public CreateNetrisVnetCommand(Long zoneId, Long accountId, Long domainId, String vpcName, Long vpcId, String vNetName, Long networkId, String cidr, String gateway, boolean isVpc) {
super(zoneId, accountId, domainId, vNetName, networkId, isVpc);
@ -55,4 +56,12 @@ public class CreateNetrisVnetCommand extends NetrisCommand {
public String getGateway() {
return gateway;
}
public String getNetrisTag() {
return netrisTag;
}
public void setNetrisTag(String netrisTag) {
this.netrisTag = netrisTag;
}
}

View File

@ -68,6 +68,9 @@ public class AddNetrisProviderCmd extends BaseCmd {
@Parameter(name = ApiConstants.TENANT_NAME, type = CommandType.STRING, required = true, description = "Password to login into Netris")
private String tenantName;
@Parameter(name = ApiConstants.NETRIS_TAG, type = CommandType.STRING, required = true, description = "Netris tag for vNets")
private String netrisTag;
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
/////////////////////////////////////////////////////
@ -104,6 +107,10 @@ public class AddNetrisProviderCmd extends BaseCmd {
return tenantName;
}
public String getNetrisTag() {
return netrisTag;
}
@Override
public void execute() throws ServerApiException, ConcurrentOperationException {
NetrisProvider provider = netrisProviderService.addProvider(this);

View File

@ -57,6 +57,10 @@ public class NetrisProviderResponse extends BaseResponse {
@Param(description = "Netris Admin tenant name")
private String tenantName;
@SerializedName(ApiConstants.NETRIS_TAG)
@Param(description = "Netris Tag for vNets")
private String netrisTag;
public String getName() {
return name;
}
@ -120,4 +124,12 @@ public class NetrisProviderResponse extends BaseResponse {
public void setTenantName(String tenantName) {
this.tenantName = tenantName;
}
public String getNetrisTag() {
return netrisTag;
}
public void setNetrisTag(String netrisTag) {
this.netrisTag = netrisTag;
}
}

View File

@ -86,6 +86,7 @@ import org.apache.logging.log4j.Logger;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@ -382,7 +383,7 @@ public class NetrisApiClientImpl implements NetrisApiClient {
Long networkId = cmd.getId();
String vnetCidr = cmd.getCidr();
Integer vxlanId = cmd.getVxlanId();
String gateway = cmd.getGateway();
String netrisTag = cmd.getNetrisTag();
String netmask = vnetCidr.split("/")[1];
String netrisGateway = cmd.getGateway() + "/" + netmask;
boolean isVpc = cmd.isVpc();
@ -407,7 +408,7 @@ public class NetrisApiClientImpl implements NetrisApiClient {
createIpamSubnetInternal(netrisSubnetName, vnetCidr, SubnetBody.PurposeEnum.COMMON, associatedVpc);
logger.debug("Successfully created IPAM Subnet {} for network {} on Netris", netrisSubnetName, networkName);
VnetResAddBody vnetResponse = createVnetInternal(associatedVpc, netrisVnetName, netrisGateway, vxlanId);
VnetResAddBody vnetResponse = createVnetInternal(associatedVpc, netrisVnetName, netrisGateway, vxlanId, netrisTag);
if (vnetResponse == null || !vnetResponse.isIsSuccess()) {
String reason = vnetResponse == null ? "Empty response" : "Operation failed on Netris";
logger.debug("The Netris vNet creation {} failed: {}", vNetName, reason);
@ -899,7 +900,7 @@ public class NetrisApiClientImpl implements NetrisApiClient {
}
}
VnetResAddBody createVnetInternal(VPCListing associatedVpc, String netrisVnetName, String netrisGateway, Integer vxlanId) {
VnetResAddBody createVnetInternal(VPCListing associatedVpc, String netrisVnetName, String netrisGateway, Integer vxlanId, String netrisTag) {
logger.debug("Creating Netris VPC vNet {} for CIDR {}", netrisVnetName, netrisGateway);
try {
VnetAddBody vnetBody = new VnetAddBody();
@ -950,6 +951,8 @@ public class NetrisApiClientImpl implements NetrisApiClient {
vpc.setId(associatedVpc.getId());
vnetBody.setVpc(vpc);
vnetBody.setTags(Collections.singletonList(netrisTag));
VNetApi vnetApi = apiClient.getApiStubForMethod(VNetApi.class);
return vnetApi.apiV2VnetPost(vnetBody);
} catch (ApiException e) {

View File

@ -86,6 +86,7 @@ public class NetrisProviderServiceImpl implements NetrisProviderService {
final String password = cmd.getPassword();
final String tenantName = cmd.getTenantName();
final String siteName = cmd.getSiteName();
final String netrisTag = cmd.getNetrisTag();
Map<String, String> params = new HashMap<>();
params.put("guid", UUID.randomUUID().toString());
@ -97,6 +98,7 @@ public class NetrisProviderServiceImpl implements NetrisProviderService {
params.put("password", password);
params.put("siteName", siteName);
params.put("tenantName", tenantName);
params.put("netrisTag", netrisTag);
Map<String, Object> hostdetails = new HashMap<>(params);
NetrisProvider netrisProvider;
@ -117,6 +119,7 @@ public class NetrisProviderServiceImpl implements NetrisProviderService {
.setPassword(password)
.setSiteName(siteName)
.setTenantName(tenantName)
.setNetrisTag(netrisTag)
.build();
netrisProviderDao.persist(netrisProviderVO);
@ -190,6 +193,7 @@ public class NetrisProviderServiceImpl implements NetrisProviderService {
response.setZoneName(zone.getName());
response.setSiteName(provider.getSiteName());
response.setTenantName(provider.getTenantName());
response.setNetrisTag(provider.getNetrisTag());
response.setObjectName("netrisProvider");
return response;
}

View File

@ -203,6 +203,8 @@ public class NetrisServiceImpl implements NetrisService, Configurable {
String vxlanId = Networks.BroadcastDomainType.getValue(network.getBroadcastUri());
CreateNetrisVnetCommand cmd = new CreateNetrisVnetCommand(zoneId, accountId, domainId, vpcName, vpcId, networkName, networkId, cidr, network.getGateway(), !Objects.isNull(vpcId));
cmd.setVxlanId(Integer.parseInt(vxlanId));
NetrisProviderVO netrisProvider = netrisProviderDao.findByZoneId(zoneId);
cmd.setNetrisTag(netrisProvider.getNetrisTag());
NetrisAnswer answer = sendNetrisCommand(cmd, zoneId);
return answer.getResult();
}

View File

@ -4580,12 +4580,14 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
throw new InvalidParameterValueException("Unable to find zone by id " + zoneId);
}
// If external provider is provided, verify zone has that provider enabled
// If external provider is provided, verify zone has that provider enabled and the controller added
Provider provider = cmd.getProvider();
if (Objects.nonNull(provider)) {
NsxProviderVO nsxProvider = nsxProviderDao.findByZoneId(zoneId);
NetrisProviderVO netrisProvider = netrisProviderDao.findByZoneId(zoneId);
if (Objects.nonNull(provider) && ObjectUtils.anyNotNull(nsxProvider, netrisProvider)) {
boolean unsupported =
(Provider.Nsx == provider && nsxProviderDao.findByZoneId(zoneId) == null) ||
(Provider.Netris == provider && netrisProviderDao.findByZoneId(zoneId) == null);
(Provider.Nsx == provider && nsxProvider == null) ||
(Provider.Netris == provider && netrisProvider == null);
if (unsupported) {
throw new InvalidParameterValueException(String.format("Cannot add public IP range as the zone does not support provider: %s", provider.getName()));
}
@ -4762,7 +4764,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
}
});
if (provider == Provider.Netris) {
if (provider == Provider.Netris && netrisProviderDao.findByZoneId(zoneId) != null) {
netrisService.createIPAMAllocationsForZoneLevelPublicRanges(zoneId);
}
messageBus.publish(_name, MESSAGE_CREATE_VLAN_IP_RANGE_EVENT, PublishScope.LOCAL, vlan);

View File

@ -1485,6 +1485,7 @@
"label.ncc": "NCC",
"label.netmask": "Netmask",
"label.netris": "Netris",
"label.netristag": "Netris tag",
"label.netris.provider": "Netris Provider",
"label.netris.provider.name": "Netris provider name",
"label.netris.provider.hostname": "Netris provider hostname",
@ -1493,6 +1494,7 @@
"label.netris.provider.password": "Netris provider password",
"label.netris.provider.site": "Netris provider Site name",
"label.netris.provider.tenant.name": "Netris provider Admin Tenant name",
"label.netris.provider.tag": "Netris Tag",
"label.netscaler": "NetScaler",
"label.netscaler.mpx": "NetScaler MPX LoadBalancer",
"label.netscaler.sdx": "NetScaler SDX LoadBalancer",
@ -3228,6 +3230,7 @@
"message.installwizard.tooltip.netris.provider.username": "Netris Provider username not provided",
"message.installwizard.tooltip.netris.provider.password": "Netris Provider password not provided",
"message.installwizard.tooltip.netris.provider.site": "Netris Provider Site name not provided",
"message.installwizard.tooltip.netris.provider.tag": "Netris Tag to be assigned to vNets",
"message.installwizard.tooltip.netris.provider.tenant.name": "Netris Provider Admin Tenant name not provided",
"message.installwizard.tooltip.nsx.provider.hostname": "NSX Provider hostname / IP address not provided",
"message.installwizard.tooltip.nsx.provider.username": "NSX Provider username not provided",

View File

@ -1169,7 +1169,7 @@ export default {
value: (record) => { return record.zoneid }
}
},
columns: ['name', 'hostname', 'port', 'site', 'tenantname']
columns: ['name', 'hostname', 'port', 'site', 'tenantname', 'netristag']
}
]
}

View File

@ -1127,6 +1127,7 @@ export default {
providerParams.zoneid = this.stepData.zoneReturned.id
providerParams.sitename = this.prefillContent?.siteName || ''
providerParams.tenantname = this.prefillContent?.tenantName || ''
providerParams.netristag = this.prefillContent?.netrisTag || ''
await this.addNetrisProvider(providerParams)
this.stepData.stepMove.push('addNetrisProvider')

View File

@ -519,6 +519,12 @@ export default {
key: 'tenantName',
placeHolder: 'message.installwizard.tooltip.netris.provider.tenant.name',
required: true
},
{
title: 'label.netris.provider.tag',
key: 'netrisTag',
placeHolder: 'message.installwizard.tooltip.netris.provider.tag',
required: true
}
]
return fields