vmware vsphere 存储 Datastore

Datastore 存储

/**
*
* 0查所有:没有选择数据中心,全部存储,
* 1数据中心:只选择数据中心,查询数据中心下存储
* 2集群名:选择数据中心和集群,查询集群下存储
* 3主机名:选择数据中心和集群、主机,查询主机下存储
*/
@Override
public List queryDataStore(ServiceInstance client, VcDataStoreGetParams record) {
if (client == null){
return new ArrayList<>();
}

	Folder rootFolder = client.getRootFolder();
	ManagedEntity[] datastores = null;
	try {
		switch (record.getType()) {
            case 0:
                datastores = new InventoryNavigator(rootFolder).searchManagedEntities(VcenterConstantUtils.ManagedEntityType.Datastore);
                break;
			case 1:
				Datacenter dcenter = (Datacenter) new InventoryNavigator(rootFolder).searchManagedEntity(VcenterConstantUtils.ManagedEntityType.Datacenter, record.getDcName());
				datastores = new InventoryNavigator(dcenter).searchManagedEntities(VcenterConstantUtils.ManagedEntityType.Datastore);
				break;
			case 2:
				Datacenter dcenter2 = (Datacenter) new InventoryNavigator(rootFolder).searchManagedEntity(VcenterConstantUtils.ManagedEntityType.Datacenter, record.getDcName());
				ClusterComputeResource cluster = (ClusterComputeResource) new InventoryNavigator(dcenter2).searchManagedEntity(VcenterConstantUtils.ManagedEntityType.ClusterComputeResource, record.getClusterName());
				datastores =  cluster.getDatastores();
				break;
			case 3:
				Datacenter dcenter3 = (Datacenter) new InventoryNavigator(rootFolder).searchManagedEntity(VcenterConstantUtils.ManagedEntityType.Datacenter, record.getDcName());
				ClusterComputeResource cluster2 = (ClusterComputeResource) new InventoryNavigator(dcenter3).searchManagedEntity(VcenterConstantUtils.ManagedEntityType.ClusterComputeResource, record.getClusterName());
				HostSystem host = (HostSystem) new InventoryNavigator(cluster2).searchManagedEntity(VcenterConstantUtils.ManagedEntityType.HostSystem, record.getHostName());
				datastores =  host.getDatastores();
				break;
            default:
                break;
		}
		List<Datastore> ds = this.forDataStore(datastores);
		return forVcDataStore(client, ds);
	}catch(Exception e){
		log.error(TypeIdEnums.getName(TypeIdEnums.TYPE_VM.getTypeid())+"##DataStoreServiceImpl##queryDataStore", e);
		throw new CloudResourcesException(CloudResourcesErrorEnum.QUERY_ERROR);
	}
}

/**==============================================分割线===========================================================*/

@Override
public Result<List<VcDataStore>> listExtend(ServiceInstance client, BaseCloudParams<CloudDiskReq> baseCloudParams) {
	VcDataStoreGetParams data = baseCloudParams.getData().getVc();
	List<VcDataStore> res = this.queryDataStore(client, data);
	if(null==res || res.size()<=0){
		return ResultUtil.error(ResultTipsEnums.ERROR_QUERY.getMsg());
	}
	return ResultUtil.data(res);
}

public List<VcDataStore> forVcDataStore(ServiceInstance client,List<Datastore> dataStores)
{
	if(null==dataStores || dataStores.size()<=0){
		return null;
	}
	List<VcDataStore> vcds = new ArrayList<>();
	for(Datastore d:dataStores){
		VirtualMachine[] vms = d.getVms();//存储下虚机个数
		DatastoreHostMount[] ff = d.getHost();
		ManagedObjectReference host = null;
		try {
			List<String> hosts = new ArrayList<>();
			if(ff!=null)
			{
				for(DatastoreHostMount f:ff){
					host = f.getKey();
					HostSystem h =  new HostSystem(client.getServerConnection(),host);
					hosts.add(h.getName());
				}
			}
			String s = StringUtils.join(hosts.toArray(),",");
			//总容量
			Long capacity = d.getSummary().getCapacity();
			//可用空间
			Long freeSpace = d.getSummary().getFreeSpace();
			//置备空间
			Long uncommitted = d.getSummary().getUncommitted();
			//已用空间+可用空间=总容量,已用空间 capacity-freeSpace;
			//已用空间/总容量=使用率===>>>String.format("%.2f", ((capacity - freeSpace) / 100d) * 100 / capacity)
			String used = "0";

			//置备空间/总容量=分配率===>>>String.format("%.2f", (uncommitted / 100d)*100/capacity)
			String distribution = "0";

			Long zero = 0L;
			if(null!=capacity && !zero.equals(capacity)){
				used = String.format("%.2f", (capacity - freeSpace) * 100 / capacity/ 100d);
				if(uncommitted!=null){
					distribution = String.format("%.2f", uncommitted*100/capacity / 100d);
				}

			}
			
			//status ==== >>>>> red(警示)、green(正常)、yellow(警告)、wgray(未知)
			VcDataStore.VcDataStoreBuilder vcdsBuilder = VcDataStore.builder().host(s).name(d.getName()).uuid(d.getMOR().get_value()).status(d.getOverallStatus().name())
					.type(d.getSummary().getType()).uncommitted(dealSize(uncommitted)).instanceCount(vms.length).used(used).distribution(distribution);
			ManagedEntity dc=getTypeFromParentEntity(d, "Datacenter");
            if(null!=dc) {
            	vcdsBuilder.dcName(dc.getName()).dcUuid(dc.getMOR().get_value());
            }
			String pod = "StoragePod".equalsIgnoreCase(d.getParent().getMOR().getType())?d.getParent().getName():"-";
			vcdsBuilder.storagePod(pod).Capacity(dealSize(capacity)).usedSpace(dealSize(capacity-freeSpace)).freeSpace(dealSize(freeSpace));
			vcds.add(vcdsBuilder.build());
		}catch (Exception e){
			log.error(TypeIdEnums.getName(TypeIdEnums.TYPE_VM.getTypeid())+"##InstanceServiceImpl##forVcDataStore", e);
		}

	}
	return vcds;
}

//处理单位转换
private Double dealSize(Long size){
	if(size==null){
		return 0d;
	}
	return Math.round(size * 100 / 1024 / 1024 / 1024) / 100.0;
}

 ManagedEntity getTypeFromParentEntity(ManagedEntity me, String targetType) {
        try {
            if (targetType.equals(me.getParent().getMOR().getType())) {
                return me.getParent();
            } else {
                return getTypeFromParentEntity(me.getParent(), targetType);
            }
        } catch (Exception e) {
            log.error( "getTypeFromParent", e);
        }
        return null;
    }

private List<Datastore> forDataStore(ManagedEntity[] datastores){
	List<Datastore> result = new ArrayList<>();
	if(datastores==null){
		return null;
	}
	for(int i=0;i<datastores.length;i++)
	{
		Datastore datastore = (Datastore)datastores[i];
		result.add(datastore);
	}
	return result;
}
发布了5 篇原创文章 · 获赞 0 · 访问量 17

猜你喜欢

转载自blog.csdn.net/pingzhilidexingfu/article/details/105139575