Commit c04edc45 authored by jinliang's avatar jinliang

add vps feature

parent 780ee419
......@@ -286,8 +286,9 @@ public class IpResourceServiceImpl implements IpResourceService {
case "isp":
ipResource.setVendorCn("住宅");
break;
case "aws":
ipResource.setVendorCn("亚马逊云");
//阿里云windows设备,支持代理IP和远程桌面
case "remote":
ipResource.setVendorCn("远程设备");
break;
}
ipResource.setStatus(6);
......
package com.edgec.browserbackend.common.client;
import com.alibaba.fastjson.JSON;
import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.sdk.service.ecs20140526.AsyncClient;
import com.aliyun.sdk.service.ecs20140526.models.DeleteInstanceRequest;
import com.aliyun.sdk.service.ecs20140526.models.DeleteInstanceResponse;
import com.aliyun.sdk.service.ecs20140526.models.DescribeInstancesRequest;
import com.aliyun.sdk.service.ecs20140526.models.DescribeInstancesResponse;
import com.aliyun.sdk.service.ecs20140526.models.ModifyInstanceChargeTypeRequest;
import com.aliyun.sdk.service.ecs20140526.models.ModifyInstanceChargeTypeResponse;
import com.aliyun.sdk.service.ecs20140526.models.RenewInstanceRequest;
import com.aliyun.sdk.service.ecs20140526.models.RenewInstanceResponse;
import com.aliyun.sdk.service.ecs20140526.models.RunInstancesRequest;
import com.aliyun.sdk.service.ecs20140526.models.RunInstancesResponse;
import com.edgec.browserbackend.browser.domain.CloudPlatformConfig;
import com.edgec.browserbackend.common.utils.Aes;
import darabonba.core.client.ClientOverrideConfiguration;
import java.util.concurrent.CompletableFuture;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @Description 阿里云ECS相关api \
* url:https://next.api.aliyun.com/document/Ecs/2014-05-26/overview
* @Data 2024年7月28日
**/
@Service
@RequiredArgsConstructor
@Slf4j
public class AliEcsRemoteClient {
//access_key_id
private static String getAccessKeyId() {
return "LTAI5tEdz1DY4A4oYUawUuNH";
}
//access_key_secret
private static String getAccessKeySecret() {
return "8KWmYgO0QIicZpyulhEwUhZqStrTwe";
}
//launch_template_id
//脚本userData
private static String getUserData() {
return "#!/bin/sh\n"
+ "echo \"users %s:CL:%s\n"
+ "allow %s *\n"
+ "auth strong\n"
+ "proxy -p8880\n"
+ "proxy -p8881 -a\n"
+ "socks -p8882\n"
+ "flush\" | tee /etc/3proxy.cfg\n"
+ "systemctl restart 3proxy";
}
/*
* @Description //创建链接
* @Date 2024/7/25 10:32
**/
private static AsyncClient createClient(String regionId) {
StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
.accessKeyId(getAccessKeyId())
.accessKeySecret(getAccessKeySecret())
.build());
String endpoint = String.format("ecs.%s.aliyuncs.com", regionId);
return AsyncClient.builder()
.region(regionId)
.credentialsProvider(provider)
.overrideConfiguration(
ClientOverrideConfiguration.create()
.setEndpointOverride(endpoint)
)
.build();
}
/**
* 创建并运行实例
*/
public static RunInstancesResponse runInstances(String owner,String username, String password, CloudPlatformConfig config) {
AsyncClient client = createClient(config.getRegionId());
RunInstancesResponse runInstancesResponse = null;
String userData = String.format(getUserData(), username, password, username);
try {
RunInstancesRequest runInstancesRequest = RunInstancesRequest.builder()
.regionId(config.getRegionId())
.launchTemplateId(config.getTemplateId())
.userData(Aes.base64Encode(userData.getBytes()))
.password(password)
.build();
log.info("调用aliEcsRemote创建并运行实例,入参:owner:{},regionId:{}", owner, config.getRegionId());
CompletableFuture<RunInstancesResponse> response = client.runInstances(
runInstancesRequest);
runInstancesResponse = response.get();
log.info("调用aliEcsRemote创建并运行实例,响应参数:owner:{},response:{}", owner,
JSON.toJSON(runInstancesResponse));
} catch (Exception e) {
log.error("fail to aliEcsRemote runInstances {}", e.getMessage());
} finally {
client.close();
}
return runInstancesResponse;
}
/**
* 续费实例
*/
public static RenewInstanceResponse renewInstance(String owner, String regionId, String instanceId,
Integer period, String periodUnit){
AsyncClient client = createClient(regionId);
RenewInstanceResponse renewInstanceResponse = null;
try {
RenewInstanceRequest renewInstanceRequest = RenewInstanceRequest.builder()
.instanceId(instanceId)
.period(period)
.periodUnit(periodUnit)
.build();
log.info("调用aliEcsRemote续费实例,入参:owner:{},regionId:{},instanceId:{},period:{},periodUnit:{}", owner, regionId, instanceId, period, periodUnit);
CompletableFuture<RenewInstanceResponse> response = client.renewInstance(
renewInstanceRequest);
renewInstanceResponse = response.get();
log.info("调用aliEcsRemote续费实例,响应参数:owner:{},response:{}", owner,
JSON.toJSON(renewInstanceResponse));
} catch (Exception e) {
log.error("fail to aliEcsRemote runInstances {}", e.getMessage());
} finally {
client.close();
}
return renewInstanceResponse;
}
/**
* 查询单个实例
*/
public static DescribeInstancesResponse getDescribeInstances(String owner, String instanceId,
String regionId) {
AsyncClient client = createClient(regionId);
DescribeInstancesResponse resp = null;
try {
String instanceIds = String.format("[\"%s\"]", instanceId);
DescribeInstancesRequest describeInstancesRequest = DescribeInstancesRequest.builder()
.regionId(regionId)
.instanceIds(instanceIds)
.build();
log.info("调用aliEcsRemote查询单个实例,入参:owner:{},regionId:{},instanceId:{}",
owner, regionId, instanceId);
CompletableFuture<DescribeInstancesResponse> response = client.describeInstances(
describeInstancesRequest);
resp = response.get();
log.info("调用aliEcsRemote查询单个实例,响应参数:owner:{},response:{}", owner,
JSON.toJSON(resp));
} catch (Exception e) {
log.error("fail to aliEcsRemote getDescribeInstances {}", e.getMessage());
} finally {
client.close();
}
return resp;
}
/**
* 删除ECS
*/
public static DeleteInstanceResponse deleteInstance(String owner, String instanceId, String regionId) {
AsyncClient client = createClient(regionId);
DeleteInstanceResponse resp = null;
try {
DeleteInstanceRequest deleteInstanceRequest = DeleteInstanceRequest.builder()
.instanceId(instanceId)
.force(true)
.build();
log.info("调用aliEcsRemote删除ECS实例,入参:owner:{},instanceId:{},regionId{}",
owner, instanceId, regionId);
CompletableFuture<DeleteInstanceResponse> response = client.deleteInstance(
deleteInstanceRequest);
resp = response.get();
log.info("调用aliEcsRemote删除ECS实例,响应参数:owner:{},response:{}", owner,
JSON.toJSON(resp));
} catch (Exception e) {
log.error("fail to aliEcsRemote deleteInstance {}", e.getMessage());
} finally {
client.close();
}
return resp;
}
/**
* 将按量改为包年包月
*/
public static ModifyInstanceChargeTypeResponse modifyInstanceChargeType(String owner,
String periodUnit, int period, String regionId, String instanceId) {
AsyncClient client = createClient(regionId);
ModifyInstanceChargeTypeResponse modifyInstanceChargeTypeResponse = null;
try {
String instanceIds = String.format("[\"%s\"]", instanceId);
ModifyInstanceChargeTypeRequest modifyInstanceChargeTypeRequest =
ModifyInstanceChargeTypeRequest.builder()
.instanceIds(instanceIds)
.regionId(regionId)
.instanceChargeType("PrePaid")
.periodUnit(periodUnit)
.period(period)
.build();
log.info(
"调用aliEcsRemote将实例由量改为包年包月,入参:owner:{},regionId:{},periodUnit:{},period:{}, instanceId{}",
owner, regionId, periodUnit, period, instanceId);
CompletableFuture<ModifyInstanceChargeTypeResponse> response = client.modifyInstanceChargeType(
modifyInstanceChargeTypeRequest);
modifyInstanceChargeTypeResponse = response.get();
log.info("调用aliEcsRemote将实例由量改为包年包月,响应参数:owner:{},response:{}", owner,
JSON.toJSON(modifyInstanceChargeTypeResponse));
} catch (Exception e) {
log.error("fail to aliEcsRemote modifyInstanceChargeType {}", e.getMessage());
} finally {
client.close();
}
return modifyInstanceChargeTypeResponse;
}
}
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment