|
@@ -0,0 +1,134 @@
|
|
|
+package vps
|
|
|
+
|
|
|
+import (
|
|
|
+ "github.com/go-xweb/xweb"
|
|
|
+ qu "qfw/util"
|
|
|
+ "strings"
|
|
|
+ "util"
|
|
|
+)
|
|
|
+
|
|
|
+type Vps struct {
|
|
|
+ *xweb.Action
|
|
|
+ vpsList xweb.Mapper `xweb:"/center/vps"` //服务器管理列表
|
|
|
+ apply xweb.Mapper `xweb:"/center/vps/apply"` //申请实例
|
|
|
+ update xweb.Mapper `xweb:"/center/vps/update"` //更新实例
|
|
|
+ delay xweb.Mapper `xweb:"/center/vps/delay"` //延迟实例
|
|
|
+ //deploy xweb.Mapper `xweb:"/center/vps/deploy"` //部署实例
|
|
|
+ release xweb.Mapper `xweb:"/center/vps/release"` //释放实例
|
|
|
+ delete xweb.Mapper `xweb:"/center/vps/delete"` //删除信息
|
|
|
+ //allDeploy xweb.Mapper `xweb:"/center/vps/alldeploy"` //一键部署
|
|
|
+ allRelease xweb.Mapper `xweb:"/center/vps/allrelease"` //一键释放
|
|
|
+}
|
|
|
+
|
|
|
+func (vps *Vps) VpsList() {
|
|
|
+ defer qu.Catch()
|
|
|
+ draw, _ := vps.GetInteger("draw")
|
|
|
+ start, _ := vps.GetInteger("start")
|
|
|
+ limit, _ := vps.GetInteger("length")
|
|
|
+ if vps.Method() == "POST" {
|
|
|
+ query := map[string]interface{}{
|
|
|
+ // "modifytime": map[string]interface{}{
|
|
|
+ // "$exists": false,
|
|
|
+ // },
|
|
|
+ }
|
|
|
+ count := util.MgoE.Count("ecs", query)
|
|
|
+ qu.Debug("query:", query, count)
|
|
|
+ list, _ := util.MgoE.Find("ecs", query, nil, nil, false, start, limit)
|
|
|
+ vps.ServeJson(map[string]interface{}{"draw": draw, "data": *list, "recordsFiltered": count, "recordsTotal": count})
|
|
|
+ } else {
|
|
|
+ vps.Render("vps/vpslist.html")
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (vps *Vps) Apply() {
|
|
|
+ defer qu.Catch()
|
|
|
+ vpsname := vps.GetString("vpsname")
|
|
|
+ vpsimage := vps.GetString("vpsimage")
|
|
|
+ vpsnum, _ := vps.GetInteger("vpsnum")
|
|
|
+ vpsduration, _ := vps.GetInteger("vpsduration")
|
|
|
+ vpstype := vps.GetString("vpstype")
|
|
|
+ vpspublic, _ := vps.GetBool("vpspublic")
|
|
|
+ ok := false
|
|
|
+ RunInstances(vpsname, vpsimage, vpstype, vpspublic, vpsnum, vpsduration, &ok)
|
|
|
+ vps.ServeJson(map[string]interface{}{"ok": ok})
|
|
|
+}
|
|
|
+
|
|
|
+func (vps *Vps) Update() {
|
|
|
+ defer qu.Catch()
|
|
|
+ qu.Debug("更新实例...")
|
|
|
+ ok := false
|
|
|
+ DescribeInstances(&ok)
|
|
|
+ vps.ServeJson(map[string]interface{}{"ok": ok})
|
|
|
+}
|
|
|
+
|
|
|
+func (vps *Vps) Delay() {
|
|
|
+ defer qu.Catch()
|
|
|
+ delayid := vps.GetString("delayid")
|
|
|
+ delaytime, _ := vps.GetInteger("delaytime")
|
|
|
+ allOk := true
|
|
|
+ failedAll := []string{}
|
|
|
+ if delayid != "" { //单个实例延时
|
|
|
+ qu.Debug("单个实例延时:", delayid, delaytime)
|
|
|
+ ModifyInstanceAutoReleaseTime(delayid, delaytime, &allOk)
|
|
|
+ if !allOk {
|
|
|
+ failedAll = append(failedAll, delayid)
|
|
|
+ }
|
|
|
+ } else { //延时所有实例
|
|
|
+ qu.Debug("所有实例延时:", delaytime)
|
|
|
+ list, _ := util.MgoE.Find("ecs", map[string]interface{}{"Status": "Running"}, nil, map[string]interface{}{"InstanceId": 1}, false, -1, -1)
|
|
|
+ for _, l := range *list {
|
|
|
+ ok := false
|
|
|
+ instanceId := qu.ObjToString(l["InstanceId"])
|
|
|
+ ModifyInstanceAutoReleaseTime(instanceId, delaytime, &ok)
|
|
|
+ if !ok {
|
|
|
+ failedAll = append(failedAll, instanceId)
|
|
|
+ allOk = false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ msg := "延时失败实例:" + strings.Join(failedAll, ",")
|
|
|
+ vps.ServeJson(map[string]interface{}{"ok": allOk, "msg": msg})
|
|
|
+}
|
|
|
+
|
|
|
+func (vps *Vps) Release() {
|
|
|
+ defer qu.Catch()
|
|
|
+ instanceId := vps.GetString("instanceId")
|
|
|
+ qu.Debug("释放实例:", instanceId)
|
|
|
+ ok := false
|
|
|
+ if instanceId != "" {
|
|
|
+ DeleteInstance(instanceId, &ok)
|
|
|
+ }
|
|
|
+ vps.ServeJson(map[string]interface{}{"ok": ok})
|
|
|
+}
|
|
|
+
|
|
|
+func (vps *Vps) AllRelease() {
|
|
|
+ defer qu.Catch()
|
|
|
+ qu.Debug("释放所有实例...")
|
|
|
+ allOk := true
|
|
|
+ failedAll := []string{}
|
|
|
+ list, _ := util.MgoE.Find("ecs", map[string]interface{}{"Status": "Running"}, nil, map[string]interface{}{"InstanceId": 1}, false, -1, -1)
|
|
|
+ for _, l := range *list {
|
|
|
+ ok := false
|
|
|
+ instanceId := qu.ObjToString(l["InstanceId"])
|
|
|
+ DeleteInstance(instanceId, &ok)
|
|
|
+ if !ok {
|
|
|
+ failedAll = append(failedAll, instanceId)
|
|
|
+ allOk = false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ msg := "释放失败实例:" + strings.Join(failedAll, ",")
|
|
|
+ vps.ServeJson(map[string]interface{}{"ok": allOk, "msg": msg})
|
|
|
+}
|
|
|
+
|
|
|
+func (vps *Vps) Delete() {
|
|
|
+ defer qu.Catch()
|
|
|
+ instanceId := vps.GetString("instanceId")
|
|
|
+ qu.Debug("删除实例信息:", instanceId)
|
|
|
+ ok := false
|
|
|
+ if instanceId != "" {
|
|
|
+ ok = util.MgoE.Del("ecs", map[string]interface{}{"InstanceId": instanceId})
|
|
|
+ } else {
|
|
|
+ ok = util.MgoE.Del("ecs", nil)
|
|
|
+ }
|
|
|
+ vps.ServeJson(map[string]interface{}{"ok": ok})
|
|
|
+}
|