Authored by qinchao

取所有主机,从cloud

... ... @@ -46,6 +46,26 @@ public class AwsEc2Fetcher {
return hosts;
}
/**
* 查询实例信息:all
* @return 主机信息
*/
public List<Host> getAllEc2Details(){
List<Host> hosts = new LinkedList<>();
DescribeInstancesRequest request = new DescribeInstancesRequest();
DescribeInstancesResult result = this.awsClientFactory.getEc2().describeInstances(request);
result.getReservations().forEach(reservation -> {
reservation.getInstances().forEach(instance -> {
hosts.add(new Host(DataCenter.aws, instance.getInstanceId(), instance.getPrivateIpAddress(), getName(instance),instance.getLaunchTime()));
});
});
return hosts;
}
private String getName(Instance instance){
String name="";
List<Tag> tags=instance.getTags();
... ...
... ... @@ -2,6 +2,8 @@ package com.yoho.ops.cmdb.models;
import lombok.Data;
import java.util.Date;
/**
* 主机信息
* Created by chunhua.zhang on 2017/6/27.
... ... @@ -17,6 +19,13 @@ public class Host {
public Host( String id ) {
this.id = id;
}
public Host(DataCenter dataCenter, String id, String ip, String name,Date launchTime) {
this.dataCenter = dataCenter;
this.id = id;
this.ip = ip;
this.name = name;
this.cloudCreateTime=launchTime;
}
/**
* 数据中心
... ... @@ -25,6 +34,7 @@ public class Host {
private String id;
private String ip;
private String name;
private Date cloudCreateTime;
@Override
public String toString() {
... ...
... ... @@ -12,6 +12,7 @@ import com.yoho.ops.cmdb.models.Host;
import com.yoho.ops.cmdb.qcloud.constant.QcloudConstant;
import com.yoho.ops.cmdb.qcloud.model.QcloudAutoScalingGroup;
import com.yoho.ops.cmdb.qcloud.model.QcloudInstanceSet;
import com.yoho.ops.cmdb.qcloud.model.QcloudResponse;
import com.yoho.ops.cmdb.qcloud.model.QcloudScalingInstancesSet;
import com.yoho.ops.cmdb.qcloud.util.QcloudSdkUtil;
import org.apache.commons.lang3.StringUtils;
... ... @@ -134,17 +135,6 @@ public class QcloudClientFactory {
if(joQcloudScalingInstancesData != null&&joQcloudScalingInstancesData.get("scalingInstancesSet")!=null){
scalingInstancesSets=JSON.parseArray(joQcloudScalingInstancesData.getString("scalingInstancesSet"), QcloudScalingInstancesSet.class);
}
/* if(scalingInstancesSets!=null&&scalingInstancesSets.size()>0){
List<String> scalingInstanceIDs=new ArrayList<String>();
scalingInstancesSets.forEach(scalingInstancesSet->{
//System.out.println(scalingInstancesSet.getInstanceId());
scalingInstanceIDs.add(scalingInstancesSet.getInstanceId());
});
List<QcloudInstanceSet> instanceList=this.getInstancesSet(scalingInstanceIDs);
instanceList.forEach(inst->{
// System.out.println(inst.getUnInstanceId());
});
}*/
}catch (Exception e){
logger.error(" - QcloudClientFactory - getScalingInstancesSet- error", e);
}
... ... @@ -153,23 +143,6 @@ public class QcloudClientFactory {
/**
* 接口:DescribeInstances
* @param instanceId 实例ID
* @return
*/
/*private List<QcloudInstanceSet> getInstancesSet(String instanceId){
List<QcloudInstanceSet> instanceSets = null;
if(StringUtils.isBlank(instanceId)){
return null;
}
List<String> instanceIds = new ArrayList<>();
instanceIds.add(instanceId);
instanceSets = getInstancesSet(instanceIds);
return instanceSets;
}
*/
/**
* 接口:DescribeInstances
* @param scalingInstanceIds 实例ID集合
* @return
*/
... ... @@ -199,5 +172,66 @@ public class QcloudClientFactory {
}
public List<Host> getAllInstancesSet(){
List<Host> allHost=new ArrayList<Host>();
//List<QcloudInstanceSet> instanceSets_all = new ArrayList<QcloudInstanceSet>();
Set<String> instanceIDs=new HashSet<String>();
try{
// 第一步,先获取第一页的数据
int Limit=20;
int pageNumber=0;
//int Offset=0;
TreeMap<String, Object> params = new TreeMap<>();
params.put("Offset", pageNumber*Limit);
params.put("Limit",100);
logger.info("--------------getAllInstancesSet - start");
String rootJson = QcloudSdkUtil.getCommonData(new Cvm(), "GET", QcloudConstant.QCLOUD_API_INSTANCE_FUN, params, true);
if(StringUtils.isBlank(rootJson)){
return null;
}
QcloudResponse rootObj = JSON.parseObject(rootJson, QcloudResponse.class);
int total=rootObj.getTotalCount();
if(rootObj != null&&rootObj.getInstanceSet()!=null){
rootObj.getInstanceSet().forEach(inst->{
if(!instanceIDs.contains(inst.getUnInstanceId())){
instanceIDs.add(inst.getUnInstanceId());
Host host=new Host(DataCenter.qcloud,inst.getUnInstanceId(), inst.getLanIp(), inst.getInstanceName());
allHost.add(host);
}
});
}
//第二步,分页获取
if(total>Limit){
pageNumber=1;
int pageCount=(int)Math.ceil(total/(double)Limit) ;
for(;pageNumber<pageCount;pageNumber++){
params.put("Offset", pageNumber*Limit);
rootJson = QcloudSdkUtil.getCommonData(new Cvm(), "GET", QcloudConstant.QCLOUD_API_INSTANCE_FUN, params, true);
if(StringUtils.isBlank(rootJson)){
continue;
}
rootObj = JSON.parseObject(rootJson, QcloudResponse.class);
if(rootObj != null&&rootObj.getInstanceSet()!=null){
rootObj.getInstanceSet().forEach(inst -> {
if(!instanceIDs.contains(inst.getUnInstanceId())){
instanceIDs.add(inst.getUnInstanceId());
Host host=new Host(DataCenter.qcloud,inst.getUnInstanceId(), inst.getLanIp(), inst.getInstanceName());
allHost.add(host);
}
});
}
}
}
}catch (Exception e){
logger.error(" - QcloudToolServiceImpl - getScalingInstancesSet- error", e);
}
return allHost;
}
}
... ...
... ... @@ -3,8 +3,10 @@ package com.yoho.ops.cmdb.qcloud.autoscaling;
import com.alibaba.fastjson.JSON;
import com.qcloud.Module.Scaling;
import com.yoho.ops.cmdb.models.AutoScalingGroup;
import com.yoho.ops.cmdb.models.Host;
import com.yoho.ops.cmdb.qcloud.QcloudClientFactory;
import com.yoho.ops.cmdb.qcloud.constant.QcloudConstant;
import com.yoho.ops.cmdb.qcloud.model.QcloudInstanceSet;
import com.yoho.ops.cmdb.qcloud.util.QcloudSdkUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -27,6 +29,10 @@ public class QcloudAutoScalingFetcher {
return autoScalingGroups;
}
public List<Host> getAllInstancesSet(){
return qcloudClientFactory.getAllInstancesSet();
}
}
... ...
package com.yoho.ops.cmdb.qcloud.model;
import lombok.Data;
import java.util.List;
/**
* 腾讯云api通用返回对象
* Created by hui.xu on 2017/5/8.
*/
@Data
public class QcloudResponse {
/**
* 公共错误码, 0表示成功,其他值表示失败
*/
private int code;
/**
* 业务侧错误码。成功时返回Success
*/
private String codeDesc;
/**
* 模块错误信息描述,与接口相关
*/
private String message;
/**
* 输出结果,查询到的伸缩组列表信息
*/
private String data;
/**
* 接口:DescribeInstances 专用
* 符合条件的实例数量
*/
private int totalCount;
/**
* 接口:DescribeInstances 专用
* 实例信息列表
*/
private List<QcloudInstanceSet> instanceSet;
}
\ No newline at end of file
... ...