|
@@ -13,9 +13,9 @@
|
|
|
</div>
|
|
|
<form class="form-horizontal" role="form">
|
|
|
<div class="form-group">
|
|
|
- <label for="vpsname" class="col-sm-2 control-label">实例名称 :</label>
|
|
|
+ <label for="vpsname" class="col-sm-2 control-label">任务名称 :</label>
|
|
|
<div class="col-sm-10">
|
|
|
- <input type="text" class="form-control" id="vpsname" placeholder="请输入实例名称">
|
|
|
+ <input type="text" class="form-control" id="vpsname" placeholder="请输入任务名称">
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="form-group">
|
|
@@ -33,7 +33,7 @@
|
|
|
<div class="form-group">
|
|
|
<label for="vpsduration" class="col-sm-2 control-label">时长(h):</label>
|
|
|
<div class="col-sm-10">
|
|
|
- <input type="text" class="form-control" id="vpsduration" placeholder="请输入申请时长">
|
|
|
+ <input type="text" class="form-control" id="vpsduration" value="0">
|
|
|
</div>
|
|
|
</div>
|
|
|
<!-- <div class="form-group">-->
|
|
@@ -117,6 +117,61 @@
|
|
|
</div><!-- /.modal -->
|
|
|
</div>
|
|
|
<!-- 模态框(Modal) -->
|
|
|
+<!-- 部署实例(Modal) -->
|
|
|
+<div class="modal fade" id="deployvps" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
|
|
+ <div class="modal-dialog">
|
|
|
+ <div class="modal-content">
|
|
|
+ <div class="modal-header">
|
|
|
+ <div class="modal-header">
|
|
|
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
|
|
+ <div class="edit-form">
|
|
|
+ <div class="edit-info">
|
|
|
+ <span class="glyphicon glyphicon-tasks" aria-hidden="true"></span>
|
|
|
+ <span class="info">部署实例</span>
|
|
|
+ </div>
|
|
|
+ <form class="form-horizontal" role="form">
|
|
|
+ <div class="form-group">
|
|
|
+ <label for="stype" class="col-sm-2 control-label">服务类型 :</label>
|
|
|
+ <div class="col-sm-10" id="stype">
|
|
|
+ <input type="checkbox" value="data">数据
|
|
|
+ <input type="checkbox" value="special">专用
|
|
|
+ <input type="checkbox" value="file">附件
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="form-group">
|
|
|
+ <div class="col-sm-offset-2 col-sm-10 operateStyle">
|
|
|
+ <input type="button" onclick="alldeploy()" class="btn btn-success saveBtn" value="确认">
|
|
|
+ <input type="button" onclick="cancelAdd()" class="btn btn-default" value="取消">
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </form>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div><!-- /.modal-content -->
|
|
|
+ </div><!-- /.modal -->
|
|
|
+</div>
|
|
|
+<!-- 模态框(Modal) -->
|
|
|
+<!-- loading实例(Modal) -->
|
|
|
+<div class="modal fade" id="loading" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static" data-keyboard="false">>
|
|
|
+ <div class="modal-dialog">
|
|
|
+ <div class="modal-content" style="margin-top: 220px">
|
|
|
+ <div class="modal-header">
|
|
|
+ <div class="modal-header">
|
|
|
+ <div class="edit-form">
|
|
|
+ <form class="form-horizontal" role="form">
|
|
|
+ <div class="form-group">
|
|
|
+ <span class="info">正在加载...</span>
|
|
|
+ <span class="fa fa-spin fa-spinner" aria-hidden="true"></span>
|
|
|
+ </div>
|
|
|
+ </form>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div><!-- /.modal-content -->
|
|
|
+ </div><!-- /.modal -->
|
|
|
+</div>
|
|
|
+<!-- 模态框(Modal) -->
|
|
|
<div class="content-wrapper">
|
|
|
<section class="content-header">
|
|
|
<h1>
|
|
@@ -124,17 +179,17 @@
|
|
|
<small>
|
|
|
<button class="btn btn-success" onclick='applymodal()'>申请实例</button>
|
|
|
<button class="btn btn-success" onclick='update()'>更新实例</button>
|
|
|
- <button class="btn btn-info" onclick='delaymodal("")'>一键延时</button>
|
|
|
+ <button class="btn btn-info" onclick='delaymodal("","")'>一键延时</button>
|
|
|
<!-- <button class="btn btn-success" onclick='delaymodal()'>延时设置</button>-->
|
|
|
- <button class="btn btn-info" onclick='tasks()'>一键部署</button>
|
|
|
+ <button class="btn btn-info" onclick='deploymodal()'>一键部署</button>
|
|
|
<button class="btn btn-danger" onclick='allrelease()'>一键释放</button>
|
|
|
- <button class="btn btn-danger" onclick='deletevps()'>一键删除</button>
|
|
|
+ <button class="btn btn-danger" onclick='deletevps("","")'>一键删除</button>
|
|
|
</small>
|
|
|
</h1>
|
|
|
<!--时间-->
|
|
|
<ol class="breadcrumb">
|
|
|
<li><a href="#"><i class="fa fa-dashboard"></i> 阿里实例</a></li>
|
|
|
- <li class="active">列表</li>
|
|
|
+ <li class="active">实例列表</li>
|
|
|
</ol>
|
|
|
</section>
|
|
|
<section id="taskerrmsg" class="content hide" style="min-height:0px;">
|
|
@@ -154,8 +209,8 @@
|
|
|
<th>实例ID</th>
|
|
|
<th>实例IP(内网/公网)</th>
|
|
|
<th>释放时间</th>
|
|
|
- <th>运行状态</th>
|
|
|
- <th>功能</th>
|
|
|
+ <th>状态</th>
|
|
|
+ <th>部署</th>
|
|
|
<th>操作</th>
|
|
|
</tr>
|
|
|
</thead>
|
|
@@ -183,10 +238,15 @@
|
|
|
"searching": false,
|
|
|
"ordering": false,
|
|
|
"info": true,
|
|
|
- "autoWidth": true,
|
|
|
+ "autoWidth": false,
|
|
|
"processing": true,
|
|
|
"columns": [
|
|
|
- {"data": "TaskName"},
|
|
|
+ {"data": "TaskName",render:function(val,a,row){
|
|
|
+ if(val == undefined){
|
|
|
+ val = ""
|
|
|
+ }
|
|
|
+ return val;
|
|
|
+ }},
|
|
|
{"data": "InstanceName",render:function(val,a,row){
|
|
|
if(val == undefined){
|
|
|
val = ""
|
|
@@ -208,24 +268,48 @@
|
|
|
}
|
|
|
return val;
|
|
|
}},
|
|
|
- {"data": "AutoReleaseTime",render:function(val,a,row){
|
|
|
+ {"data": "AutoReleaseTime",width:"75px",render:function(val,a,row){
|
|
|
if(val == undefined){
|
|
|
val = ""
|
|
|
+ }else{
|
|
|
+
|
|
|
}
|
|
|
return val;
|
|
|
}},
|
|
|
- {"data": "VpsState"},
|
|
|
+ {"data": "EcsState",render:function (val,a,row) {
|
|
|
+ if(val == "notdeploy"){
|
|
|
+ val = "未部署"
|
|
|
+ }else if(val == "deploy"){
|
|
|
+ val = "已部署"
|
|
|
+ }else if(val == "stop"){
|
|
|
+ val = "已停止"
|
|
|
+ }else{
|
|
|
+ val = ""
|
|
|
+ }
|
|
|
+ return val;
|
|
|
+ }},//未部署、已部署、已停止
|
|
|
{"data": "_id",render:function(val,a,row){
|
|
|
+ let classHtmlMap = {'data':'<a class="btn btn-sm btn-warning"','special':'<a class="btn btn-sm btn-warning"','file':'<a class="btn btn-sm btn-warning"'};
|
|
|
+ for (var i in row.EcsStype){
|
|
|
+ let stype = row.EcsStype[i]
|
|
|
+ classHtmlMap[stype] = '<a class="btn btn-sm btn-success" disabled'
|
|
|
+ }
|
|
|
tmp = '<div>' +
|
|
|
- '<a class="btn btn-sm btn-info" onclick="delaymodal(\''+row.InstanceId+'\')">延时</a> ' +
|
|
|
- '<a class="btn btn-sm btn-info" onclick="retrieveTask()">部署</a>' +
|
|
|
- '</div>';
|
|
|
+ classHtmlMap['data']+' onclick="deploy(this,\''+row.Status+'\',\''+row.InstanceId+'\',\''+row.ip_ww+'\',\'data\')">数据</a> '+
|
|
|
+ classHtmlMap['special']+' onclick="deploy(this,\''+row.Status+'\',\''+row.InstanceId+'\',\''+row.ip_ww+'\',\'special\')">专用</a> ' +
|
|
|
+ classHtmlMap['file']+' onclick="deploy(this,\''+row.Status+'\',\''+row.InstanceId+'\',\''+row.ip_ww+'\',\'file\')">附件</a> '
|
|
|
+ if(row.EcsState != "deploy"){
|
|
|
+ tmp = tmp +
|
|
|
+ '<a class="btn btn-sm btn-info" onclick="deploy(this,\''+row.Status+'\',\''+row.InstanceId+'\',\''+row.ip_ww+'\',\'all\')">一键启用' +
|
|
|
+ '</div>';
|
|
|
+ }
|
|
|
return tmp
|
|
|
}},
|
|
|
{"data": "_id",render:function(val,a,row){
|
|
|
tmp = '<div>' +
|
|
|
- '<a class="btn btn-sm btn-danger" onclick="releasevps(\''+row.InstanceId+'\')">释放</a> ' +
|
|
|
- '<a class="btn btn-sm btn-danger" onclick="deletevps(\''+row.InstanceId+'\')">删除</a>'+
|
|
|
+ '<a class="btn btn-sm btn-info" onclick="delaymodal(\''+row.InstanceId+'\',\''+row.Status+'\')">延时</a> ' +
|
|
|
+ '<a class="btn btn-sm btn-danger" onclick="releasevps(\''+row.InstanceId+'\',\''+row.Status+'\')">释放</a> ' +
|
|
|
+ '<a class="btn btn-sm btn-danger" onclick="deletevps(\''+row.InstanceId+'\',\''+row.Status+'\')">删除</a>'+
|
|
|
// '<a class="btn btn-sm btn-primary" onclick="checkMethod(\'' + row.s_projectid + '\',\'' + val + '\',\'' + row.s_sourceinfo + '\')">删除</a> ' +
|
|
|
'</div>';
|
|
|
return tmp
|
|
@@ -233,10 +317,17 @@
|
|
|
]
|
|
|
});
|
|
|
});
|
|
|
- function delaymodal(instanceId) {
|
|
|
+ function deploymodal() {
|
|
|
+ $("#deployvps").modal("show");
|
|
|
+ }
|
|
|
+ function delaymodal(instanceId,status) {
|
|
|
if(instanceId == ""){//一键延时
|
|
|
$("#delay").css("display","none");
|
|
|
- }else{//单个实例延时
|
|
|
+ }else {//单个实例延时
|
|
|
+ if(status != "Running"){
|
|
|
+ alert("服务器不可用!")
|
|
|
+ return
|
|
|
+ }
|
|
|
$("#delayid").val(instanceId)
|
|
|
$("#delay").css("display","");
|
|
|
}
|
|
@@ -248,6 +339,7 @@
|
|
|
function cancelAdd(){
|
|
|
$("#delayvps").modal("hide");
|
|
|
$("#applyvps").modal("hide");
|
|
|
+ $("#deployvps").modal("hide");
|
|
|
}
|
|
|
//申请实例
|
|
|
function apply() {
|
|
@@ -255,10 +347,16 @@
|
|
|
let vpsimage = $("#vpsimage").val();
|
|
|
let vpsnum = $("#vpsnum").val();
|
|
|
let vpsduration = $("#vpsduration").val();
|
|
|
- if (vpsname == ""||vpsimage==""||vpsnum == ""||vpsduration == ""){
|
|
|
+ if (vpsname == ""||vpsnum == ""||vpsduration == ""){
|
|
|
alert("请填写完整的信息!")
|
|
|
return
|
|
|
}
|
|
|
+ if(vpsnum > 100 || vpsnum < 1){
|
|
|
+ alert("申请机器数量异常!")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ $("#applyvps").modal("hide");
|
|
|
+ $("#loading").modal("show");
|
|
|
let vpstype = $("#vpstype").val();
|
|
|
let vpspublic = $("#vpspublic").val();
|
|
|
$.ajax({
|
|
@@ -266,9 +364,9 @@
|
|
|
type:"post",
|
|
|
data:{"vpsname":vpsname,"vpsimage":vpsimage,"vpsnum":vpsnum,"vpsduration":vpsduration,"vpstype":vpstype,"vpspublic":vpspublic},
|
|
|
success:function (r){
|
|
|
+ $("#loading").modal("hide");
|
|
|
if(r&&r.ok){
|
|
|
showTip("申请成功", 1000);
|
|
|
- $("#applyvps").modal("hide");
|
|
|
setTimeout(function (){
|
|
|
window.location.reload();
|
|
|
}, 1000);
|
|
@@ -281,10 +379,12 @@
|
|
|
//更新实例
|
|
|
function update() {
|
|
|
showConfirm("确定更新实例?", function() {
|
|
|
+ $("#loading").modal("show");
|
|
|
$.ajax({
|
|
|
url:"/center/vps/update",
|
|
|
type:"post",
|
|
|
success:function (r){
|
|
|
+ $("#loading").modal("hide");
|
|
|
if(r&&r.ok){
|
|
|
showTip("更新成功", 1000);
|
|
|
window.location.reload();
|
|
@@ -297,20 +397,22 @@
|
|
|
}
|
|
|
//延时
|
|
|
function delay() {
|
|
|
+ $("#delayvps").modal("hide");
|
|
|
let delayid = $("#delayid").val();
|
|
|
let delaytime = $("#delaytime").val();
|
|
|
if (delaytime == ""){
|
|
|
alert("请填写完整的信息!")
|
|
|
return
|
|
|
}
|
|
|
+ $("#loading").modal("show");
|
|
|
$.ajax({
|
|
|
url:"/center/vps/delay",
|
|
|
type:"post",
|
|
|
data:{"delaytime":delaytime,"delayid":delayid},
|
|
|
success:function (r){
|
|
|
+ $("#loading").modal("hide");
|
|
|
if(r&&r.ok){
|
|
|
showTip("设置成功", 1000);
|
|
|
- $("#delayvps").modal("hide");
|
|
|
setTimeout(function (){
|
|
|
window.location.reload();
|
|
|
}, 1000);
|
|
@@ -323,13 +425,19 @@
|
|
|
})
|
|
|
}
|
|
|
//释放
|
|
|
- function releasevps(instanceId) {
|
|
|
+ function releasevps(instanceId,status) {
|
|
|
+ if(status == "Deleted"){
|
|
|
+ alert("服务器已释放!")
|
|
|
+ return
|
|
|
+ }
|
|
|
showConfirm("确定释放实例?", function() {
|
|
|
+ $("#loading").modal("show");
|
|
|
$.ajax({
|
|
|
url:"/center/vps/release",
|
|
|
type:"post",
|
|
|
data:{"instanceId":instanceId},
|
|
|
success:function (r){
|
|
|
+ $("#loading").modal("hide");
|
|
|
if(r&&r.ok){
|
|
|
showTip("释放成功",1000);
|
|
|
setTimeout(function (){
|
|
@@ -345,12 +453,15 @@
|
|
|
//一键释放
|
|
|
function allrelease() {
|
|
|
showConfirm("确定释放所有实例?", function() {
|
|
|
+ $("#loading").modal("show");
|
|
|
$.ajax({
|
|
|
url:"/center/vps/allrelease",
|
|
|
type:"post",
|
|
|
success:function (r){
|
|
|
+ $("#loading").modal("hide");
|
|
|
if(r&&r.ok){
|
|
|
showTip("释放成功", 1000);
|
|
|
+ $("#delayvps").modal("hide");
|
|
|
setTimeout(function (){
|
|
|
window.location.reload();
|
|
|
}, 1000);
|
|
@@ -362,14 +473,53 @@
|
|
|
})
|
|
|
})
|
|
|
}
|
|
|
+ //一键部署
|
|
|
+ function alldeploy() {
|
|
|
+ let stypeArr = [];
|
|
|
+ $("#stype input[type=checkbox]").each(function(){
|
|
|
+ if($(this).prop("checked")){
|
|
|
+ stypeArr.push($(this).val());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ let stype = stypeArr.join(",");
|
|
|
+ if(stype == ""){
|
|
|
+ alert("请选择服务类型!")
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ $("#deployvps").modal("hide");
|
|
|
+ $("#loading").modal("show");
|
|
|
+ $.ajax({
|
|
|
+ url:"/center/vps/alldeploy",
|
|
|
+ type:"post",
|
|
|
+ data:{"stype":stype},
|
|
|
+ success:function (r){
|
|
|
+ $("#loading").modal("hide");
|
|
|
+ if(r&&r.ok){
|
|
|
+ showTip("部署成功", 1000);
|
|
|
+ setTimeout(function (){
|
|
|
+ window.location.reload();
|
|
|
+ }, 1000);
|
|
|
+ }else{
|
|
|
+ showMsg(r.msg, function () {
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
//删除
|
|
|
- function deletevps(instanceId) {
|
|
|
+ function deletevps(instanceId,status) {
|
|
|
+ // if(instanceId != "" && status != "Deleted"){
|
|
|
+ // alert("服务器未释放!")
|
|
|
+ // return
|
|
|
+ // }
|
|
|
showConfirm("确定删除实例信息?", function() {
|
|
|
+ $("#loading").modal("show");
|
|
|
$.ajax({
|
|
|
url:"/center/vps/delete",
|
|
|
type:"post",
|
|
|
data:{"instanceId":instanceId},
|
|
|
success:function (r){
|
|
|
+ $("#loading").modal("hide");
|
|
|
if(r&&r.ok){
|
|
|
showTip("删除成功", 1000);
|
|
|
setTimeout(function (){
|
|
@@ -382,6 +532,43 @@
|
|
|
})
|
|
|
})
|
|
|
}
|
|
|
+ //部署实例
|
|
|
+ function deploy(e,status,instanceId,ip,stype) {
|
|
|
+ if($(e).attr('disabled')){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if( status != "Running"){
|
|
|
+ alert("服务器不可用!")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ let val = "所有";
|
|
|
+ if(stype == "data"){
|
|
|
+ val = "数据";
|
|
|
+ }else if(stype == "special"){
|
|
|
+ val = "专用";
|
|
|
+ }else if(stype == "file") {
|
|
|
+ val = "附件";
|
|
|
+ }
|
|
|
+ showConfirm("确定启用"+val+"服务?", function() {
|
|
|
+ $("#loading").modal("show");
|
|
|
+ $.ajax({
|
|
|
+ url:"/center/vps/deploy",
|
|
|
+ type:"post",
|
|
|
+ data:{"instanceId":instanceId,"ip":ip,"stype":stype},
|
|
|
+ success:function (r){
|
|
|
+ $("#loading").modal("hide");
|
|
|
+ if(r&&r.ok){
|
|
|
+ showTip("部署成功", 1000);
|
|
|
+ setTimeout(function (){
|
|
|
+ window.location.reload();
|
|
|
+ }, 1000);
|
|
|
+ }else{
|
|
|
+ showTip("部署失败", 1000);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ })
|
|
|
+ }
|
|
|
</script>
|
|
|
</div>
|
|
|
{{include "bottom.html"}}
|