use of com.vmware.photon.controller.model.resources.SubnetService.SubnetState in project photon-model by vmware.
the class AzureNetworkEnumerationAdapterService method querySubnetStates.
/**
* Query subnet states stored in the local document store based on the retrieved azure subnets.
*/
private void querySubnetStates(NetworkEnumContext context, NetworkEnumStages next) {
if (context.subnets == null || context.subnets.isEmpty()) {
handleSubStage(context, next);
return;
}
logFine(() -> "Query Subnet States from local document store.");
Builder qBuilder = Query.Builder.create().addKindFieldClause(SubnetState.class).addInClause(SubnetState.FIELD_NAME_ID, context.subnets.keySet());
QueryByPages<SubnetState> queryLocalStates = new QueryByPages<>(getHost(), qBuilder.build(), SubnetState.class, context.parentCompute.tenantLinks, null, /* endpoint */
context.parentCompute.documentSelfLink).setMaxPageSize(QueryUtils.MAX_RESULT_LIMIT).setClusterType(ServiceTypeCluster.INVENTORY_SERVICE);
queryLocalStates.queryDocuments(subnet -> context.subnetStates.put(subnet.id, subnet.documentSelfLink)).whenComplete(thenHandleSubStage(context, next));
}
use of com.vmware.photon.controller.model.resources.SubnetService.SubnetState in project photon-model by vmware.
the class AzureNetworkEnumerationAdapterService method createUpdateSubnetStates.
/**
* Create new subnet states or updates matching subnet states with the actual state in Azure.
*/
private void createUpdateSubnetStates(NetworkEnumContext context, NetworkEnumStages next) {
if (context.subnets.size() == 0) {
logFine(() -> "No network states available for update.");
handleSubStage(context, next);
return;
}
Stream<Operation> operations = context.subnets.keySet().stream().map(subnetId -> {
SubnetStateWithParentVNetId subnetStateWithParentVNetId = context.subnets.get(subnetId);
SubnetState subnetState = subnetStateWithParentVNetId.subnetState;
if (!context.subnetStates.containsKey(subnetId)) {
// set internal tags as tagLinks for subnets to be newly created.
setTagLinksToResourceState(subnetState, context.subnetInternalTagsMap, false);
} else {
// for already existing subnets, add internal tags only if missing
if (subnetState.tagLinks == null || subnetState.tagLinks.isEmpty()) {
setTagLinksToResourceState(subnetState, context.subnetInternalTagsMap, false);
} else {
context.subnetInternalTagLinksSet.stream().filter(tagLink -> !subnetState.tagLinks.contains(tagLink)).map(tagLink -> subnetState.tagLinks.add(tagLink)).collect(Collectors.toSet());
}
}
// Update networkLink with "latest" (either created or updated)
// NetworkState.documentSelfLink
NetworkState networkState = context.networkStates.get(subnetStateWithParentVNetId.parentVNetId);
if (networkState != null) {
subnetState.networkLink = networkState.documentSelfLink;
} else {
logWarning(() -> String.format("Network state corresponding to subnet with" + " name [%s] was not found. Network Link is left empty.", subnetState.name));
}
if (StringUtils.isEmpty(subnetState.endpointLink)) {
subnetState.endpointLink = context.request.endpointLink;
}
subnetState.computeHostLink = context.parentCompute.documentSelfLink;
AdapterUtils.addToEndpointLinks(subnetState, context.request.endpointLink);
return context.subnetStates.containsKey(subnetId) ? // Update case
Operation.createPatch(this, context.subnetStates.get(subnetId)).setBody(subnetState) : // Create case.
Operation.createPost(getHost(), SubnetService.FACTORY_LINK).setBody(subnetState);
});
OperationJoin.create(operations).setCompletion((ops, failures) -> {
if (failures != null) {
// We don't want to fail the whole data collection if some of the
// operation fails.
failures.values().forEach(ex -> logWarning(() -> String.format("Error: %s", ex.getMessage())));
}
// Process successful operations.
ops.values().stream().filter(operation -> failures != null && !failures.containsKey(operation.getId())).filter(operation -> operation.getStatusCode() != Operation.STATUS_CODE_NOT_MODIFIED).forEach(operation -> {
SubnetState subnetState = operation.getBody(SubnetState.class);
context.subnets.get(subnetState.id).subnetState = subnetState;
});
if (context.enumNextPageLink != null) {
logFine(() -> "Fetch next page of Virtual Networks from Azure.");
handleSubStage(context, NetworkEnumStages.GET_VNETS);
return;
}
logFine(() -> "Finished updating network states");
handleSubStage(context, next);
}).sendWith(this);
}
use of com.vmware.photon.controller.model.resources.SubnetService.SubnetState in project photon-model by vmware.
the class AzureNetworkEnumerationAdapterService method getSubnets.
/**
* Based on the retrieved page of Virtual Network resources from azure, compose the structures
* holding Azure Subnets data.
*/
private void getSubnets(NetworkEnumContext context, NetworkEnumStages next) {
logFine(() -> "Enumerating Subnets from Azure.");
context.virtualNetworks.values().forEach(virtualNetwork -> {
if (virtualNetwork.properties.subnets != null) {
virtualNetwork.properties.subnets.forEach(subnet -> {
SubnetState subnetState = buildSubnetState(subnet, context.parentCompute.tenantLinks, context.request.endpointLink, virtualNetwork.location, context.parentCompute.documentSelfLink);
SubnetStateWithParentVNetId subnetStateWithParentVNetId = new SubnetStateWithParentVNetId(virtualNetwork.id, subnetState);
context.addSubnet(subnet, subnetStateWithParentVNetId);
});
}
});
handleSubStage(context, next);
}
use of com.vmware.photon.controller.model.resources.SubnetService.SubnetState in project photon-model by vmware.
the class NetworkDeviceBackingFactoryTest method testGetDvsPortBackingInfoWithPortGroupKey.
/**
* NSX-V test case when only port group key is present
*
* Exception as
*/
@Test(expected = IllegalArgumentException.class)
public void testGetDvsPortBackingInfoWithPortGroupKey() {
this.subnet = new SubnetState();
this.subnet.customProperties = new HashMap<>();
List<String> portGroupIds = new ArrayList<>();
portGroupIds.add(UUID.randomUUID().toString());
portGroupIds.add(UUID.randomUUID().toString());
this.subnet.customProperties.put(DvsProperties.PORT_GROUP_KEY, Utils.toJson(portGroupIds));
// will throw NPE here as the querytargetrequest is null
VirtualDeviceBackingInfo deviceBackingInfo = NetworkDeviceBackingFactory.getNetworkDeviceBackingInfo(this.subnet);
assertTrue(deviceBackingInfo instanceof VirtualEthernetCardDistributedVirtualPortBackingInfo);
VirtualEthernetCardDistributedVirtualPortBackingInfo distributedVirtualPortBackingInfo = (VirtualEthernetCardDistributedVirtualPortBackingInfo) deviceBackingInfo;
DistributedVirtualSwitchPortConnection port = distributedVirtualPortBackingInfo.getPort();
assertNotNull(port);
// TODO: mock get DVS switch call to vSphere and match the result
// for now we are just using the expected exception as without UUID the backing info
// cannot be set.
assertNull(port.getSwitchUuid());
assertEquals(this.subnet.customProperties.get(DvsProperties.PORT_GROUP_KEY), port.getPortgroupKey());
}
use of com.vmware.photon.controller.model.resources.SubnetService.SubnetState in project photon-model by vmware.
the class NetworkDeviceBackingFactoryTest method testUnknownNetworkTypeBackingInfo.
@Test
public void testUnknownNetworkTypeBackingInfo() {
this.subnet = new SubnetState();
this.subnet.customProperties = new HashMap<>();
assertNull(NetworkDeviceBackingFactory.getNetworkDeviceBackingInfo(null));
}
Aggregations