use of com.vmware.flowgate.vcworker.client.VsphereClient in project flowgate by vmware.
the class VCDataService method queryHostMetaData.
public void queryHostMetaData(SDDCSoftwareConfig vc) {
Map<String, ServerMapping> serverMappingMap = getVaildServerMapping(vc);
if (serverMappingMap == null || serverMappingMap.isEmpty()) {
logger.info("serverMapping is invaild");
return;
}
try (VsphereClient vsphereClient = connectVsphere(vc)) {
String vcInstanceUUID = vsphereClient.getVCUUID();
Collection<HostSystem> hosts = vsphereClient.getAllHost();
if (hosts == null || hosts.isEmpty()) {
logger.error("vsphere: " + vsphereClient.getVCUUID() + " get hosts is null");
return;
}
Collection<ClusterComputeResource> clusters = vsphereClient.getAllClusterComputeResource();
Map<String, ClusterComputeResource> clusterMap = new HashMap<String, ClusterComputeResource>();
if (clusters == null) {
logger.error("vsphere: " + vsphereClient.getVCUUID() + " get clusters is null");
return;
}
for (ClusterComputeResource cluster : clusters) {
clusterMap.put(cluster._getRef().getValue(), cluster);
}
for (HostSystem host : hosts) {
String mobId = host._getRef().getValue();
if (serverMappingMap.containsKey(mobId)) {
ServerMapping serverMapping = serverMappingMap.get(mobId);
String assetId = serverMapping.getAsset();
Asset hostMappingAsset = restClient.getAssetByID(assetId).getBody();
if (hostMappingAsset == null) {
logger.error("serverMapping: " + serverMapping.getId() + " get asset: " + assetId + " is null");
continue;
}
HostInfo hostInfo = new HostInfo();
HashMap<String, String> hostJustification = hostMappingAsset.getJustificationfields();
if (hostJustification != null && !hostJustification.isEmpty()) {
String oldHostInfoString = hostJustification.get(FlowgateConstant.HOST_METADATA);
if (oldHostInfoString != null) {
try {
hostInfo = mapper.readValue(oldHostInfoString, HostInfo.class);
} catch (IOException ioException) {
logger.error("Cannot process message", ioException);
continue;
}
}
}
boolean hostNeedUpdate = false;
boolean clusterNeedUpdate = false;
hostNeedUpdate = feedHostMetaData(host, hostInfo);
if (clusters != null && !clusters.isEmpty()) {
clusterNeedUpdate = feedClusterMetaData(clusterMap, host, hostInfo, vcInstanceUUID);
}
if (hostNeedUpdate || clusterNeedUpdate) {
try {
String vcHostObjStr = mapper.writeValueAsString(hostInfo);
hostJustification.put(FlowgateConstant.HOST_METADATA, vcHostObjStr);
hostMappingAsset.setJustificationfields(hostJustification);
} catch (JsonProcessingException jsonProcessingException) {
logger.error("Format host info map error", jsonProcessingException);
continue;
}
restClient.saveAssets(hostMappingAsset);
} else {
logger.debug("host: " + mobId + " No update required");
continue;
}
}
}
} catch (ConnectionException connectionException) {
checkAndUpdateIntegrationStatus(vc, connectionException.getMessage());
return;
} catch (ExecutionException executionException) {
if (executionException.getCause() instanceof InvalidLogin) {
logger.error("Failed to push data to " + vc.getServerURL(), executionException);
checkAndUpdateIntegrationStatus(vc, "Invalid username or password.");
return;
}
} catch (Exception exception) {
logger.error("Failed to sync the host metadata to VC ", exception);
return;
}
}
use of com.vmware.flowgate.vcworker.client.VsphereClient in project flowgate by vmware.
the class VCDataService method syncCustomAttributes.
private void syncCustomAttributes(SDDCSoftwareConfig vc) {
try (VsphereClient vsphereClient = connectVsphere(vc)) {
for (String key : VCConstants.hostCustomAttrMapping.values()) {
vsphereClient.createCustomAttribute(key, VCConstants.HOSTSYSTEM);
}
// Add the PDU information;
vsphereClient.createCustomAttribute(VCConstants.ASSET_PDUs, VCConstants.HOSTSYSTEM);
// Add host switch information;
vsphereClient.createCustomAttribute(VCConstants.ASSET_SWITCHs, VCConstants.HOSTSYSTEM);
} catch (ConnectionException connectionException) {
checkAndUpdateIntegrationStatus(vc, connectionException.getMessage());
return;
} catch (ExecutionException executionException) {
if (executionException.getCause() instanceof InvalidLogin) {
logger.error("Failed to push data to " + vc.getServerURL(), executionException);
IntegrationStatus integrationStatus = vc.getIntegrationStatus();
if (integrationStatus == null) {
integrationStatus = new IntegrationStatus();
}
integrationStatus.setStatus(IntegrationStatus.Status.ERROR);
integrationStatus.setDetail("Invalid username or password.");
integrationStatus.setRetryCounter(FlowgateConstant.DEFAULTNUMBEROFRETRIES);
updateIntegrationStatus(vc);
return;
}
} catch (Exception exception) {
logger.error("Failed to sync the host metadata to VC ", exception);
return;
}
try (HostTagClient client = new HostTagClient(vc.getServerURL(), vc.getUserName(), vc.getPassword(), !vc.isVerifyCert())) {
client.initConnection();
TagModel tag = client.getTagByName(VCConstants.locationAntiAffinityTagName);
String categoryID;
if (tag == null) {
CategoryModel category = client.getTagCategoryByName(VCConstants.categoryName);
if (category == null) {
categoryID = client.createTagCategory(VCConstants.categoryName, VCConstants.categoryDescription, Cardinality.MULTIPLE);
} else {
categoryID = category.getId();
}
client.createTag(VCConstants.locationAntiAffinityTagName, VCConstants.locationAntiAffinityTagDescription, categoryID);
}
} catch (Exception exception) {
logger.error("Faild to check the predefined tag information", exception);
}
}
use of com.vmware.flowgate.vcworker.client.VsphereClient in project flowgate by vmware.
the class VCDataService method syncCustomerAttrsData.
private void syncCustomerAttrsData(SDDCSoftwareConfig vcInfo) {
restClient.setServiceKey(serviceKeyConfig.getServiceKey());
try (VsphereClient vsphereClient = connectVsphere(vcInfo)) {
ServerMapping[] mappings = null;
try {
mappings = restClient.getServerMappingsByVC(vcInfo.getId()).getBody();
} catch (HttpClientErrorException clientError) {
if (clientError.getRawStatusCode() != HttpStatus.NOT_FOUND.value()) {
throw clientError;
}
mappings = new ServerMapping[0];
}
HashMap<String, ServerMapping> mobIdDictionary = new HashMap<String, ServerMapping>();
for (ServerMapping mapping : mappings) {
mobIdDictionary.put(mapping.getVcMobID(), mapping);
}
List<ServerMapping> validMapping = new ArrayList<ServerMapping>();
Collection<HostSystem> hosts = vsphereClient.getAllHost();
Map<String, HostSystem> hostDictionary = new HashMap<String, HostSystem>();
for (HostSystem host : hosts) {
String mobId = host._getRef().getValue();
String hostName = host.getName();
if (mobIdDictionary.containsKey(mobId)) {
ServerMapping serverMapping = mobIdDictionary.get(mobId);
if (!serverMapping.getVcHostName().equals(hostName)) {
// need to update the hostname.
serverMapping.setVcHostName(hostName);
restClient.saveServerMapping(serverMapping);
}
if (serverMapping.getAsset() != null) {
validMapping.add(serverMapping);
} else {
// check the hostNameIP mapping
String ipaddress = IPAddressUtil.getIPAddress(hostName);
if (null != ipaddress) {
AssetIPMapping[] ipMappings = restClient.getHostnameIPMappingByIP(ipaddress).getBody();
if (null != ipMappings && ipMappings.length > 0) {
// update the mapping
String assetName = ipMappings[0].getAssetname();
Asset asset = restClient.getAssetByName(assetName).getBody();
if (asset != null) {
serverMapping.setAsset(asset.getId());
restClient.saveServerMapping(serverMapping);
validMapping.add(serverMapping);
feedAssetMetricsFormulars(asset);
}
} else {
// seems we don't have the ip hostname mapping. Notify infoblox to check the ip
logger.info("Notify infoblox to check ip: " + ipaddress);
publisher.publish(null, ipaddress);
}
}
}
hostDictionary.put(mobId, host);
} else {
ServerMapping newMapping = new ServerMapping();
newMapping.setVcHostName(hostName);
newMapping.setVcID(vcInfo.getId());
newMapping.setVcMobID(mobId);
newMapping.setVcInstanceUUID(vsphereClient.getVCUUID());
String ipaddress = IPAddressUtil.getIPAddress(hostName);
logger.info(String.format("hostName %s, ipaddress: %s", hostName, ipaddress));
// publish message to queue.
if (null != ipaddress) {
logger.info("Notify infoblox");
publisher.publish(null, hostName);
AssetIPMapping[] ipMappings = restClient.getHostnameIPMappingByIP(ipaddress).getBody();
if (null != ipMappings && ipMappings.length > 0) {
// update the mapping
String assetName = ipMappings[0].getAssetname();
Asset asset = restClient.getAssetByName(assetName).getBody();
if (asset != null) {
newMapping.setAsset(asset.getId());
feedAssetMetricsFormulars(asset);
}
}
}
restClient.saveServerMapping(newMapping);
}
}
// feed meta data to VC.
Asset[] assets = restClient.getAssetsByVCID(vcInfo.getId()).getBody();
Map<String, Asset> assetDictionary = new HashMap<String, Asset>();
for (Asset asset : assets) {
assetDictionary.put(asset.getId(), asset);
}
feedData(assetDictionary, validMapping, hostDictionary);
validClusterHostsLocationAntiaffinity(vcInfo, assetDictionary, validMapping);
} catch (ConnectionException connectionException) {
checkAndUpdateIntegrationStatus(vcInfo, connectionException.getMessage());
return;
} catch (ExecutionException executionException) {
if (executionException.getCause() instanceof InvalidLogin) {
logger.error("Failed to push data to " + vcInfo.getServerURL(), executionException);
IntegrationStatus integrationStatus = vcInfo.getIntegrationStatus();
if (integrationStatus == null) {
integrationStatus = new IntegrationStatus();
}
integrationStatus.setStatus(IntegrationStatus.Status.ERROR);
integrationStatus.setDetail("Invalid username or password.");
integrationStatus.setRetryCounter(FlowgateConstant.DEFAULTNUMBEROFRETRIES);
updateIntegrationStatus(vcInfo);
return;
}
} catch (Exception exception) {
logger.error("Failed to push data to " + vcInfo.getServerURL(), exception);
}
}
use of com.vmware.flowgate.vcworker.client.VsphereClient in project flowgate by vmware.
the class VCDataService method queryHostMetrics.
public void queryHostMetrics(SDDCSoftwareConfig vc) {
Map<String, ServerMapping> serverMappingMap = getVaildServerMapping(vc);
if (serverMappingMap == null || serverMappingMap.isEmpty()) {
logger.info("No serverMapping found for vc {}", vc.getName());
return;
}
try (VsphereClient vsphereClient = connectVsphere(vc)) {
Collection<HostSystem> hosts = vsphereClient.getAllHost();
if (hosts == null || hosts.isEmpty()) {
logger.error("vsphere: {} get hosts is null", vc.getName());
return;
}
for (HostSystem host : hosts) {
String mobId = host._getRef().getValue();
if (serverMappingMap.containsKey(mobId)) {
ServerMapping serverMapping = serverMappingMap.get(mobId);
String assetId = serverMapping.getAsset();
Asset hostMappingAsset = restClient.getAssetByID(assetId).getBody();
if (hostMappingAsset == null) {
logger.error("The asset {} doesn't exist in serverMapping {}.", assetId, serverMapping.getId());
continue;
}
feedHostUsageData(vsphereClient, assetId, host._getRef());
}
}
} catch (ConnectionException connectionException) {
checkAndUpdateIntegrationStatus(vc, connectionException.getMessage());
return;
} catch (ExecutionException executionException) {
if (executionException.getCause() instanceof InvalidLogin) {
logger.error("Failed to login {}: {}", vc.getServerURL(), executionException);
checkAndUpdateIntegrationStatus(vc, "Invalid username or password.");
return;
}
} catch (Exception exception) {
logger.error("Failed to sync the host metrics to VC ", exception);
return;
}
}
Aggregations