add 根据数据中心查询虚拟机
parent
3a252bfafb
commit
9208d0f8f7
|
@ -38,6 +38,19 @@ public class CloudServerController {
|
||||||
return cloudServerService.list(pager, context);
|
return cloudServerService.list(pager, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 理想云主机列表查询
|
||||||
|
*
|
||||||
|
* @param pager
|
||||||
|
* @param context
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Operation(tags = {"CMC", "CSC"}, summary = "查询云主机列表")
|
||||||
|
@GetMapping("/vmsOfDataCenter")
|
||||||
|
public GeneralResult<GridBean<CloudServer>> vmsOfDataCenter(Pager pager, @Value(Common.REQ_CONTEXT) RequestContext context) {
|
||||||
|
return cloudServerService.vmsOfDataCenter(pager, context);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 云主机列表查询
|
* 云主机列表查询
|
||||||
*
|
*
|
||||||
|
|
|
@ -84,6 +84,15 @@ public class CloudVendorRepository extends BasicGenericDao<CloudVendor, Long> {
|
||||||
}
|
}
|
||||||
return list.get(0);
|
return list.get(0);
|
||||||
}
|
}
|
||||||
|
public List<CloudVendor> getByDcName(String dcName) {
|
||||||
|
String sql = "select * from cloud_vendor where dc_name = :dcName and is_deleted = 0";
|
||||||
|
Map<String, Object> params = MapTools.simpleMap("dcName", dcName);
|
||||||
|
List<CloudVendor> list = this.list(CloudVendor.class, sql, params);
|
||||||
|
if (list.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
public List<CloudVendor> list(int page, int rows, List<Param> params, Map<String, String> sorter,
|
public List<CloudVendor> list(int page, int rows, List<Param> params, Map<String, String> sorter,
|
||||||
List<Long> vendorIds) {
|
List<Long> vendorIds) {
|
||||||
|
|
|
@ -195,4 +195,5 @@ public interface CloudServerService {
|
||||||
*/
|
*/
|
||||||
GeneralResult selectAllByVendorId(Long vendorId, RequestContext context);
|
GeneralResult selectAllByVendorId(Long vendorId, RequestContext context);
|
||||||
|
|
||||||
|
GeneralResult<GridBean<CloudServer>> vmsOfDataCenter(Pager pager, RequestContext context);
|
||||||
}
|
}
|
||||||
|
|
|
@ -286,6 +286,176 @@ public class CloudServerServiceImpl implements CloudServerService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GeneralResult<GridBean<CloudServer>> vmsOfDataCenter(Pager pager, RequestContext context) {
|
||||||
|
GridBean<CloudServer> gridBean;
|
||||||
|
try {
|
||||||
|
List<Param> params = Optional.ofNullable(pager.getParams()).orElse(new ArrayList<>());
|
||||||
|
Map<String, String> sorter = Optional.ofNullable(pager.getSorter()).orElse(Maps.newHashMap());
|
||||||
|
Boolean simple = Optional.ofNullable(pager.getSimple()).orElse(false);
|
||||||
|
sorter.put("gmtCreate", Common.ONE);
|
||||||
|
sorter.put("id", Common.ONE);
|
||||||
|
Integer page = Optional.ofNullable(pager.getPage()).orElse(1);
|
||||||
|
Integer rows = Optional.ofNullable(pager.getRows()).orElse(10);
|
||||||
|
Long clusterId = null;
|
||||||
|
String labelContent = null;
|
||||||
|
String dcName = null;
|
||||||
|
for (Param param : params) {
|
||||||
|
Map<String, Object> paramMap = param.getParam();
|
||||||
|
if (paramMap.containsKey("clusterId")) {
|
||||||
|
clusterId = Long.valueOf(paramMap.get("clusterId").toString());
|
||||||
|
paramMap.remove("clusterId");
|
||||||
|
}
|
||||||
|
if (paramMap.containsKey("labelContent")) {
|
||||||
|
labelContent = paramMap.get("labelContent").toString();
|
||||||
|
paramMap.remove("labelContent");
|
||||||
|
}
|
||||||
|
if (paramMap.containsKey("dcName")) {
|
||||||
|
dcName = paramMap.get("dcName").toString();
|
||||||
|
paramMap.remove("dcName");
|
||||||
|
// 查询相应云平台
|
||||||
|
List<CloudVendor> cloudVendors = cloudVendorRepository.getByDcName(dcName);
|
||||||
|
String ids = cloudVendors.stream().map(CloudVendor::getId).map(item -> String.valueOf(item)).collect(Collectors.joining(","));
|
||||||
|
paramMap.put("vendorId", ids);
|
||||||
|
param.setSign(Sign.IN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int total = 0;
|
||||||
|
List<CloudServer> list = Lists.newArrayList();
|
||||||
|
if (context.getCatalog().equals(Catalog.Tenant)) {
|
||||||
|
if (simple) {
|
||||||
|
rows = Integer.MAX_VALUE;
|
||||||
|
}
|
||||||
|
// 租户能看到 1.属于当前租户的资源 2.租户下所有项目的资源
|
||||||
|
List<Project> tenantProjects = smsProjectService.listTenantProjects(context.getTenant());
|
||||||
|
List<Long> projectIds = tenantProjects.stream().map(Project::getId).collect(Collectors.toList());
|
||||||
|
total = this.cloudServerRepository.count(null, context.getTenant(), projectIds, params, labelContent);
|
||||||
|
list = this.cloudServerRepository.list(page, rows, null, context.getTenant(), projectIds, params,
|
||||||
|
sorter, labelContent);
|
||||||
|
gridBean = new GridBean<>(page, rows, total, list);
|
||||||
|
} else if (context.getCatalog().equals(Catalog.User)) {
|
||||||
|
if (simple) {
|
||||||
|
rows = Integer.MAX_VALUE;
|
||||||
|
}
|
||||||
|
// 用户能看到 1.自己申请的资源 2.自己所在的资源可见项目(资源对项目下所有成员可见)下创建的资源 3.自己管理的项目下的资源
|
||||||
|
List<Project> userManagerProjects = smsProjectService.listUserManagerProjects(context.getTarget());
|
||||||
|
List<Project> visibleProjects = smsProjectService.listUserVisibleProjects(context.getTarget());
|
||||||
|
List<Long> projectIds = new ArrayList<>();
|
||||||
|
List<Long> userManagerProjectsIds = userManagerProjects.stream().map(Project::getId)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
if (!userManagerProjectsIds.isEmpty()) {
|
||||||
|
projectIds.addAll(userManagerProjectsIds);
|
||||||
|
}
|
||||||
|
List<Long> visibleProjectsIds = visibleProjects.stream().map(Project::getId)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
if (!visibleProjectsIds.isEmpty()) {
|
||||||
|
projectIds.addAll(visibleProjectsIds);
|
||||||
|
}
|
||||||
|
total = this.cloudServerRepository.count(context.getTarget(), null, projectIds, params, labelContent);
|
||||||
|
list = this.cloudServerRepository.list(page, rows, context.getTarget(), null, projectIds, params,
|
||||||
|
sorter, labelContent);
|
||||||
|
gridBean = new GridBean<>(page, rows, total, list);
|
||||||
|
} else {
|
||||||
|
// 管理端搜索
|
||||||
|
if (null != clusterId) {
|
||||||
|
total = this.cloudServerRepository.count(clusterId, params);
|
||||||
|
list = this.cloudServerRepository.list(page, rows, clusterId, params, sorter);
|
||||||
|
gridBean = new GridBean<>(page, rows, total, list);
|
||||||
|
} else if (simple) {
|
||||||
|
total = this.cloudServerRepository.count(params, 0L);
|
||||||
|
List<SimpleBean> beans = this.cloudServerRepository.list(params, sorter);
|
||||||
|
gridBean = new GridBean(1, 1, total, beans);
|
||||||
|
} else {
|
||||||
|
total = this.cloudServerRepository.vmCount(params, labelContent);
|
||||||
|
list = this.cloudServerRepository.list(page, rows, params, sorter, labelContent);
|
||||||
|
gridBean = new GridBean<>(page, rows, total, list);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!simple) {
|
||||||
|
List<Long> tenantIds = new ArrayList<>();
|
||||||
|
List<Long> userIds = new ArrayList<>();
|
||||||
|
List<Long> businessIds = new ArrayList<>();
|
||||||
|
List<Long> projectIds = new ArrayList<>();
|
||||||
|
for (CloudServer cloudServer : list) {
|
||||||
|
if (cloudServer.getTenantId() != null) {
|
||||||
|
tenantIds.add(cloudServer.getTenantId());
|
||||||
|
}
|
||||||
|
if (cloudServer.getBusinessId() != null) {
|
||||||
|
businessIds.add(cloudServer.getBusinessId());
|
||||||
|
}
|
||||||
|
if (cloudServer.getProjectId() != null) {
|
||||||
|
projectIds.add(cloudServer.getProjectId());
|
||||||
|
}
|
||||||
|
if (cloudServer.getCreatorId() != null) {
|
||||||
|
userIds.add(cloudServer.getCreatorId());
|
||||||
|
}
|
||||||
|
if (cloudServer.getOwnerId() != null) {
|
||||||
|
userIds.add(cloudServer.getOwnerId());
|
||||||
|
}
|
||||||
|
if (cloudServer.getMenderId() != null) {
|
||||||
|
userIds.add(cloudServer.getMenderId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Map<Long, String> userMap = smsUserService.listUsersByIds(userIds).stream()
|
||||||
|
.collect(Collectors.toMap(User::getId, User::getName));
|
||||||
|
Map<Long, String> projectMap = smsProjectService.listProjectsByIds(projectIds).stream()
|
||||||
|
.collect(Collectors.toMap(Project::getId, Project::getName));
|
||||||
|
Map<Long, String> businessMap = smsBusinessService.listBusinesssByIds(businessIds).stream()
|
||||||
|
.collect(Collectors.toMap(Business::getId, Business::getName));
|
||||||
|
Map<Long, String> tenantMap = smsTenantService.listTenantsByIds(tenantIds).stream()
|
||||||
|
.collect(Collectors.toMap(Tenant::getId, Tenant::getName));
|
||||||
|
for (CloudServer server : list) {
|
||||||
|
// 设置云主机归属信息
|
||||||
|
if (server.getTenantId() != null) {
|
||||||
|
server.setTenantName(tenantMap.get(server.getTenantId()));
|
||||||
|
}
|
||||||
|
if (server.getBusinessId() != null) {
|
||||||
|
server.setBusinessName(businessMap.get(server.getBusinessId()));
|
||||||
|
}
|
||||||
|
if (server.getProjectId() != null) {
|
||||||
|
server.setProjectName(projectMap.get(server.getProjectId()));
|
||||||
|
}
|
||||||
|
if (server.getCreatorId() != null) {
|
||||||
|
server.setCreatorName(userMap.get(server.getCreatorId()));
|
||||||
|
}
|
||||||
|
if (server.getOwnerId() != null) {
|
||||||
|
server.setOwnerName(userMap.get(server.getOwnerId()));
|
||||||
|
}
|
||||||
|
if (server.getMenderId() != null) {
|
||||||
|
server.setMenderName(userMap.get(server.getMenderId()));
|
||||||
|
}
|
||||||
|
// 设置主机名称
|
||||||
|
Server host = serverRepository.basic(server.getHostId());
|
||||||
|
host = Optional.ofNullable(host).orElse(new Server());
|
||||||
|
server.setHostName(host.getName());
|
||||||
|
server.setClusterName(host.getClusterName());
|
||||||
|
server.setVdcName(host.getVdcName());
|
||||||
|
server.setDisk((null == server.getDisk() || 0 == server.getDisk()) ? server.getTotalDisks()
|
||||||
|
: server.getDisk());
|
||||||
|
if (!StringUtils.isEmpty(server.getResourceGroup())) {
|
||||||
|
String resourceGroupName = dictionaryRepository.getNameByValue(server.getResourceGroup());
|
||||||
|
server.setResourceGroupName(resourceGroupName);
|
||||||
|
}
|
||||||
|
if (server.getVendorType().equalsIgnoreCase("CTSTACK")) {
|
||||||
|
FloatingIp floatingIp = floatingIpRepository.getByInstanceId(server.getInstanceId());
|
||||||
|
if (null != floatingIp) {
|
||||||
|
server.setFipId(floatingIp.getId());
|
||||||
|
//server.setFloatingIp(floatingIp.getFloatingIpAddress());
|
||||||
|
if (StringUtils.isEmpty(server.getPublicIps())) {
|
||||||
|
server.setPublicIps(JSON.toJSONString(Collections.singletonList(floatingIp.getFloatingIpAddress())));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gridBean.setRows(list);
|
||||||
|
}
|
||||||
|
return new GeneralResult<>(true, gridBean, "查询成功");
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("Query vm list fail:{}", e.getMessage());
|
||||||
|
return new GeneralResult<>(false, "查询失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public GeneralResult snapshotQuotasCallBack(RequestContext context, Action action) {
|
public GeneralResult snapshotQuotasCallBack(RequestContext context, Action action) {
|
||||||
try {
|
try {
|
||||||
if (null == context.getCatalog()) {
|
if (null == context.getCatalog()) {
|
||||||
|
|
Loading…
Reference in New Issue