public WebController() { get("/", (request, response) -> "<h1>Welcome Cloudeply!</h1>"); /** 创建新主机 POST /host/new */ post( "/host/new", (request, response) -> { InstanceForm form = new InstanceForm(); form.setUser(request.queryParams("user")); form.setPlatform(request.queryParams("platform")); form.setRegion(request.queryParams("region")); form.setOsName( StringUtils.defaultString(request.queryParams("osName"), "CentOS").toLowerCase()); form.setOsBit(request.queryParams("osBit")); form.setOsVersion(request.queryParams("osVersion")); form.setCpu(request.queryParams("cpu")); form.setMemory(request.queryParams("memory")); form.setPassword(request.queryParams("password")); form.setInternetChargeType(request.queryParams("internetChargeType")); form.setInternetMaxBandwidthOut(request.queryParams("internetMaxBandwidthOut")); logger.debug("new host param:{}", form); JsonObject result2json = new JsonObject(); // validate if (StringUtils.isEmpty(form.getUser())) { result2json.add("user", "is not empty"); } if (form.getOsBit() != null && !StringUtils.isNumeric(form.getOsBit())) { result2json.add("osBit", "is not number"); } if (form.getCpu() != null && !StringUtils.isNumeric(form.getCpu())) { result2json.add("cpu", "is not number"); } if (form.getMemory() != null && !StringUtils.isNumeric(form.getMemory())) { result2json.add("memory", "is not number"); } if (!result2json.isEmpty()) { response.status(HttpStatus.BAD_REQUEST_400); return result2json; } InstanceProxy instanceProxy = new InstanceProxy(); try { InstanceResult r = instanceProxy.newInstance(form); // add user record UserInstance u = new UserInstance(); u.setInstanceId(r.getInstanceId()); u.setInstanceIp(r.getIp()); u.setUser(form.getUser()); u.setPlatform(form.getPlatform()); UserInstanceHelper userInstanceHelper = new UserInstanceHelper(); userInstanceHelper.add(u); return result2json.add("instanceId", r.getInstanceId()).add("ip", r.getIp()); } catch (DeployException de) { response.status(HttpStatus.INTERNAL_SERVER_ERROR_500); return result2json.add("code", de.getCode()).add("message", de.getMessage()); } }); /** * 查询主机状态 GET /host/status Param: instanceId * * <p>json: {result: Running, Starting, Stopped} */ get( "/host/status", (request, response) -> { String instanceId = request.queryParams("instanceId"); logger.debug("param instanceId:{}", instanceId); JsonObject result2json = new JsonObject(); if (StringUtils.isEmpty(instanceId)) { response.status(HttpStatus.BAD_REQUEST_400); result2json.add("instanceId", "param is not empty"); return result2json; } AliyunInstanceService instanceService = new AliyunInstanceService(); try { InstanceStatus status = instanceService.describeInstanceAttribute(instanceId); return result2json .add("instanceId", status.getInstanceId()) .add("status", status.getStatus()) .add("publicIp", status.getPublicIp()) .add("innerIp", status.getInnerIp()); } catch (DeployException de) { response.status(HttpStatus.INTERNAL_SERVER_ERROR_500); return result2json.add("code", de.getCode()).add("message", de.getMessage()); } }); /** * 执行ansible命令 POST /ansible/send Content-Type:application/x-www-form-urlencoded Param: command * * <p>Result: responseStatus == 200:成功, 400:参数错误, 500:系统错误 responseBody */ post( "/ansible/send", (request, response) -> { JsonObject result2json = new JsonObject(); String command = request.queryParams("command"); logger.debug("command param:{}", command); if (StringUtils.isEmpty(command)) { response.status(HttpStatus.BAD_REQUEST_400); return result2json.add("command", "param is not empty"); } command = StringUtils.toEncodedString(Base64.decodeBase64(command), Charset.defaultCharset()); logger.debug("command decode:{}", command); ProcessBuilder pb = new ProcessBuilder(); pb.command("/bin/sh", "-c", command); try { Process p = pb.start(); String result = IOUtils.toString(p.getErrorStream(), Charset.defaultCharset()); logger.info("command process:\n{}", result); return result2json.add("result", result); } catch (IOException ioe) { logger.error("command execute error", ioe); response.status(HttpStatus.INTERNAL_SERVER_ERROR_500); return result2json.add("error", ioe.getMessage()); } }); }