diff --git a/src/modules/api_module.go b/src/modules/api_module.go index 4c35f06..3a5dd98 100644 --- a/src/modules/api_module.go +++ b/src/modules/api_module.go @@ -9,8 +9,6 @@ import ( "encoding/json" "errors" "fmt" - "github.com/julienschmidt/httprouter" - "github.com/project-nano/framework" "io" "io/ioutil" "log" @@ -24,6 +22,9 @@ import ( "strconv" "strings" "time" + + "github.com/julienschmidt/httprouter" + "github.com/project-nano/framework" ) type APIModule struct { @@ -48,7 +49,7 @@ type APIConfig struct { } const ( - HeaderNameHost = "Host" + HeaderNameHost = "Host" //HeaderNameContentType = "Content-Type" //HeaderNameSession = "Nano-Session" HeaderNameDate = "Nano-Date" @@ -72,23 +73,23 @@ func CreateAPIModule(configPath string, sender framework.MessageSender, resource if err = json.Unmarshal(data, &config); err != nil { return } - if 0 == len(config.Credentials){ + if 0 == len(config.Credentials) { const ( dummyID = "dummyID" dummyKey = "ThisIsAKeyPlaceHolder_ChangeToYourContent" ) config.Credentials = []ApiCredential{{ID: dummyID, Key: dummyKey}} - if data, err = json.MarshalIndent(config, "", " "); err != nil{ + if data, err = json.MarshalIndent(config, "", " "); err != nil { err = fmt.Errorf("marshal new config fail: %s", err.Error()) return } var file *os.File - if file, err = os.Create(configFile); err != nil{ + if file, err = os.Create(configFile); err != nil { err = fmt.Errorf("create new config fail: %s", err.Error()) return } defer file.Close() - if _, err = file.Write(data); err != nil{ + if _, err = file.Write(data); err != nil { err = fmt.Errorf("write new config fail: %s", err.Error()) return } @@ -103,12 +104,12 @@ func CreateAPIModule(configPath string, sender framework.MessageSender, resource module = &APIModule{} module.apiCredentials = map[string]string{} - for _, credential := range config.Credentials{ - if 0 == len(credential.ID){ + for _, credential := range config.Credentials { + if 0 == len(credential.ID) { err = errors.New("empty API ID") return } - if 0 == len(credential.Key){ + if 0 == len(credential.Key) { err = fmt.Errorf("empty API key for '%s'", credential.ID) return } @@ -127,7 +128,7 @@ func CreateAPIModule(configPath string, sender framework.MessageSender, resource return } -func (module *APIModule) GetServiceAddress() string{ +func (module *APIModule) GetServiceAddress() string { return module.server.Addr } @@ -160,19 +161,19 @@ func (module *APIModule) routine() { module.exitChan <- true } -func apiPath(path string) string{ +func apiPath(path string) string { return fmt.Sprintf("%s/v%d%s", APIRoot, APIVersion, path) } -func (module *APIModule) verifyRequestSignature(r *http.Request) error{ +func (module *APIModule) verifyRequestSignature(r *http.Request) error { return module.verifySignature(r, true) } -func (module *APIModule) verifyStreamSignature(r *http.Request) error{ +func (module *APIModule) verifyStreamSignature(r *http.Request) error { return module.verifySignature(r, false) } -func (module *APIModule) verifySignature(r *http.Request, processPayload bool) (err error){ +func (module *APIModule) verifySignature(r *http.Request, processPayload bool) (err error) { const ( SignatureMethodHMAC256 = "Nano-HMAC-SHA256" ShortDateFormat = "20060102" @@ -184,11 +185,11 @@ func (module *APIModule) verifySignature(r *http.Request, processPayload bool) ( //check authorization var authorization = r.Header.Get(HeaderNameAuthorization) var length = len(authorization) - if 0 == length{ + if 0 == length { err = errors.New("authorization required") return } - if length <= len(SignatureMethodHMAC256){ + if length <= len(SignatureMethodHMAC256) { err = fmt.Errorf("insufficent authorization: %s", authorization) return } @@ -198,9 +199,9 @@ func (module *APIModule) verifySignature(r *http.Request, processPayload bool) ( return } var names, values []string - for _, token := range strings.Split(authorization[len(SignatureMethodHMAC256) + 1:], ","){ + for _, token := range strings.Split(authorization[len(SignatureMethodHMAC256)+1:], ",") { var split = strings.SplitN(token, "=", 2) - if 2 != len(split){ + if 2 != len(split) { err = fmt.Errorf("invalid authorization token: %s", token) return } @@ -213,34 +214,34 @@ func (module *APIModule) verifySignature(r *http.Request, processPayload bool) ( TokenSignedHeaders = "SignedHeaders" TokenSignature = "Signature" ) - if TokenCount != len(names) || TokenCount != len(values){ + if TokenCount != len(names) || TokenCount != len(values) { err = fmt.Errorf("unexpected token count %d/%d", len(names), len(values)) return } - if TokenCredential != names[0]{ + if TokenCredential != names[0] { err = fmt.Errorf("invalid first token %s", names[0]) return } - if TokenSignedHeaders != names[1]{ + if TokenSignedHeaders != names[1] { err = fmt.Errorf("invalid second token %s", names[1]) return } - if TokenSignature != names[2]{ + if TokenSignature != names[2] { err = fmt.Errorf("invalid third token %s", names[2]) return } var idTail = strings.IndexByte(values[0], '/') - if -1 == idTail{ + if -1 == idTail { err = fmt.Errorf("no API ID in credential: %s", values[0]) return } apiID = values[0][:idTail] var exists bool - if apiKey, exists = module.apiCredentials[apiID]; !exists{ + if apiKey, exists = module.apiCredentials[apiID]; !exists { err = fmt.Errorf("invalid API ID: %s", apiID) return } - requestScope = values[0][idTail + 1:] + requestScope = values[0][idTail+1:] signedHeaders = values[1] signature = values[2] } @@ -249,51 +250,51 @@ func (module *APIModule) verifySignature(r *http.Request, processPayload bool) ( //canonicalRequest var canonicalURI = url.QueryEscape(url.QueryEscape(r.URL.Path)) var canonicalQueryString string - if 0 != len(r.URL.Query()){ + if 0 != len(r.URL.Query()) { var paramNames []string - for key := range r.URL.Query(){ + for key := range r.URL.Query() { paramNames = append(paramNames, key) } sort.Sort(sort.StringSlice(paramNames)) var queryParams []string - for _, name := range paramNames{ + for _, name := range paramNames { queryParams = append(queryParams, fmt.Sprintf("%s=%s", url.QueryEscape(name), url.QueryEscape(r.URL.Query().Get(name)))) } canonicalQueryString = strings.Join(queryParams, "&") - }else{ + } else { canonicalQueryString = "" } var headerIndexes = map[string]int{} var targetHeaders = strings.Split(signedHeaders, ";") - for index, name := range targetHeaders{ + for index, name := range targetHeaders { headerIndexes[name] = index } var signedHeaderToken = make([]string, len(signedHeaders)) //extract signed headers - for name, _ := range r.Header{ + for name, _ := range r.Header { var lowerName = strings.ToLower(name) - if index, exists := headerIndexes[lowerName]; exists{ + if index, exists := headerIndexes[lowerName]; exists { //signed header signedHeaderToken[index] = fmt.Sprintf("%s:%s\n", lowerName, strings.Trim(r.Header.Get(name), " ")) } - if HeaderNameDate == name{ + if HeaderNameDate == name { requestDate = r.Header.Get(name) var requestTime time.Time - if requestTime, err = time.Parse(time.RFC3339, requestDate); err != nil{ + if requestTime, err = time.Parse(time.RFC3339, requestDate); err != nil { err = fmt.Errorf("invalid request date: %s", requestDate) } //must on same day - if time.Now().Format(ShortDateFormat) != requestTime.Format(ShortDateFormat){ + if time.Now().Format(ShortDateFormat) != requestTime.Format(ShortDateFormat) { err = fmt.Errorf("expired request with date %s", requestDate) return } } - if HeaderNameScope == name{ + if HeaderNameScope == name { var scope = r.Header.Get(name) - if scope != requestScope{ + if scope != requestScope { err = fmt.Errorf("request scope mismatch: %s => %s", scope, requestScope) return } @@ -301,7 +302,7 @@ func (module *APIModule) verifySignature(r *http.Request, processPayload bool) ( } var canonicalHeaders string var headersBuilder strings.Builder - for _, token := range signedHeaderToken{ + for _, token := range signedHeaderToken { headersBuilder.WriteString(token) } canonicalHeaders = headersBuilder.String() @@ -314,12 +315,12 @@ func (module *APIModule) verifySignature(r *http.Request, processPayload bool) ( signedHeaders, } if processPayload { - if http.MethodGet == r.Method || http.MethodHead == r.Method || http.MethodOptions == r.Method{ + if http.MethodGet == r.Method || http.MethodHead == r.Method || http.MethodOptions == r.Method { hash.Write([]byte("")) - }else { + } else { //clone request payload var payload []byte - if payload, err = ioutil.ReadAll(r.Body); err != nil{ + if payload, err = ioutil.ReadAll(r.Body); err != nil { return } hash.Write(payload) @@ -349,17 +350,17 @@ func (module *APIModule) verifySignature(r *http.Request, processPayload bool) ( var key = []byte(builder.String()) var data = []byte(requestScope) - if signKey, err = computeHMACSha256(key, data); err != nil{ + if signKey, err = computeHMACSha256(key, data); err != nil { err = fmt.Errorf("compute signature key fail: %s", err.Error()) return } var hmacSignature []byte - if hmacSignature, err = computeHMACSha256(signKey, []byte(stringToSign)); err != nil{ + if hmacSignature, err = computeHMACSha256(signKey, []byte(stringToSign)); err != nil { err = fmt.Errorf("compute signature fail: %s", err.Error()) return } var expectedSignature = hex.EncodeToString(hmacSignature) - if signature != expectedSignature{ + if signature != expectedSignature { err = errors.New("signature corrupted") return } @@ -367,9 +368,9 @@ func (module *APIModule) verifySignature(r *http.Request, processPayload bool) ( return nil } -func computeHMACSha256(key, data []byte) (hash []byte, err error){ +func computeHMACSha256(key, data []byte) (hash []byte, err error) { var h = hmac.New(sha256.New, key) - if _, err = h.Write(data); err != nil{ + if _, err = h.Write(data); err != nil { return } hash = h.Sum(nil) @@ -452,7 +453,7 @@ func (module *APIModule) RegisterAPIHandler(router *httprouter.Router) { router.PATCH(apiPath("/disk_images/"), module.syncDiskImages) router.GET(apiPath("/disk_images/:id/file/"), module.redirectToImageServer) - router.POST(apiPath("/disk_images/:id/file/"), module.redirectToImageServer)//upload from web + router.POST(apiPath("/disk_images/:id/file/"), module.redirectToImageServer) //upload from web router.POST(apiPath("/instances/:id/media"), module.handleInsertMedia) router.DELETE(apiPath("/instances/:id/media"), module.handleEjectMedia) @@ -522,7 +523,7 @@ func (module *APIModule) RegisterAPIHandler(router *httprouter.Router) { } func (module *APIModule) queryZoneStatistic(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -623,13 +624,13 @@ func (module *APIModule) queryZoneStatistic(w http.ResponseWriter, r *http.Reque ResponseFail(ResponseDefaultError, err.Error(), w) return } - if err = ResponseOK(data, w); err != nil{ + if err = ResponseOK(data, w); err != nil { log.Printf(" marshal zone status fail: %s", err.Error()) } } func (module *APIModule) queryComputePoolsStatus(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -706,45 +707,45 @@ func (module *APIModule) queryComputePoolsStatus(w http.ResponseWriter, r *http. var memoryCount = len(memory) var diskCount = len(disk) var speedCount = len(speed) - if cellCount != count * cellParamCount{ - err = fmt.Errorf("unexpected cell params %d / %d", cellCount, count * cellParamCount) + if cellCount != count*cellParamCount { + err = fmt.Errorf("unexpected cell params %d / %d", cellCount, count*cellParamCount) return } - if instanceCount != count * instanceParamCount{ - err = fmt.Errorf("unexpected instance params %d / %d", instanceCount, count * instanceParamCount) + if instanceCount != count*instanceParamCount { + err = fmt.Errorf("unexpected instance params %d / %d", instanceCount, count*instanceParamCount) return } - if memoryCount != count * memoryParamCount{ - err = fmt.Errorf("unexpected memory params %d / %d", memoryCount, count * memoryParamCount) + if memoryCount != count*memoryParamCount { + err = fmt.Errorf("unexpected memory params %d / %d", memoryCount, count*memoryParamCount) return } - if diskCount != count * diskParamCount{ - err = fmt.Errorf("unexpected disk params %d / %d", diskCount, count * diskParamCount) + if diskCount != count*diskParamCount { + err = fmt.Errorf("unexpected disk params %d / %d", diskCount, count*diskParamCount) return } - if speedCount != count * speedParamCount{ - err = fmt.Errorf("unexpected speed params %d / %d", memoryCount, count * speedParamCount) + if speedCount != count*speedParamCount { + err = fmt.Errorf("unexpected speed params %d / %d", memoryCount, count*speedParamCount) return } - for i := 0; i < count; i++{ - var p = poolStatus{Name:name[i]} - if 1 == enabled[i]{ + for i := 0; i < count; i++ { + var p = poolStatus{Name: name[i]} + if 1 == enabled[i] { p.Enabled = true - }else{ + } else { p.Enabled = false } - p.Cells = []uint64{cells[i*cellParamCount], cells[i*cellParamCount + 1]} - p.Instances = []uint64{instances[i*instanceParamCount], instances[i*instanceParamCount + 1], instances[i*instanceParamCount+ 2], instances[i*instanceParamCount + 3]} + p.Cells = []uint64{cells[i*cellParamCount], cells[i*cellParamCount+1]} + p.Instances = []uint64{instances[i*instanceParamCount], instances[i*instanceParamCount+1], instances[i*instanceParamCount+2], instances[i*instanceParamCount+3]} p.CpuUsage = float64(usage[i]) p.MaxCpu = uint(cores[i]) p.AvailableMemory = memory[i*memoryParamCount] - p.MaxMemory = memory[i*memoryParamCount + 1] + p.MaxMemory = memory[i*memoryParamCount+1] p.AvailableDisk = disk[i*diskParamCount] - p.MaxDisk = disk[i*diskParamCount + 1] + p.MaxDisk = disk[i*diskParamCount+1] p.ReadSpeed = speed[i*speedParamCount] - p.WriteSpeed = speed[i*speedParamCount + 1] - p.ReceiveSpeed = speed[i*speedParamCount + 2] - p.SendSpeed = speed[i*speedParamCount + 3] + p.WriteSpeed = speed[i*speedParamCount+1] + p.ReceiveSpeed = speed[i*speedParamCount+2] + p.SendSpeed = speed[i*speedParamCount+3] status = append(status, p) } return @@ -760,7 +761,7 @@ func (module *APIModule) queryComputePoolsStatus(w http.ResponseWriter, r *http. } func (module *APIModule) getComputePoolStatus(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -864,7 +865,7 @@ func (module *APIModule) getComputePoolStatus(w http.ResponseWriter, r *http.Req } func (module *APIModule) queryComputeCellStatus(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -945,45 +946,45 @@ func (module *APIModule) queryComputeCellStatus(w http.ResponseWriter, r *http.R var memoryCount = len(memory) var diskCount = len(disk) var speedCount = len(speed) - if instanceCount != count * instanceParamCount{ - err = fmt.Errorf("unexpected instance params %d / %d", instanceCount, count * instanceParamCount) + if instanceCount != count*instanceParamCount { + err = fmt.Errorf("unexpected instance params %d / %d", instanceCount, count*instanceParamCount) return } - if memoryCount != count * memoryParamCount{ - err = fmt.Errorf("unexpected memory params %d / %d", memoryCount, count * memoryParamCount) + if memoryCount != count*memoryParamCount { + err = fmt.Errorf("unexpected memory params %d / %d", memoryCount, count*memoryParamCount) return } - if diskCount != count * diskParamCount{ - err = fmt.Errorf("unexpected disk params %d / %d", diskCount, count * diskParamCount) + if diskCount != count*diskParamCount { + err = fmt.Errorf("unexpected disk params %d / %d", diskCount, count*diskParamCount) return } - if speedCount != count * speedParamCount{ - err = fmt.Errorf("unexpected speed params %d / %d", memoryCount, count * speedParamCount) + if speedCount != count*speedParamCount { + err = fmt.Errorf("unexpected speed params %d / %d", memoryCount, count*speedParamCount) return } - for i := 0; i < count; i++{ - var p = cellStatus{Name:name[i], Address:address[i]} - if 1 == enabled[i]{ + for i := 0; i < count; i++ { + var p = cellStatus{Name: name[i], Address: address[i]} + if 1 == enabled[i] { p.Enabled = true - }else{ + } else { p.Enabled = false } - if 1 == alive[i]{ + if 1 == alive[i] { p.Alive = true - }else{ + } else { p.Alive = false } - p.Instances = []uint64{instances[i*instanceParamCount], instances[i*instanceParamCount + 1], instances[i*instanceParamCount+ 2], instances[i*instanceParamCount + 3]} + p.Instances = []uint64{instances[i*instanceParamCount], instances[i*instanceParamCount+1], instances[i*instanceParamCount+2], instances[i*instanceParamCount+3]} p.CpuUsage = float64(usage[i]) p.MaxCpu = uint(cores[i]) p.AvailableMemory = memory[i*memoryParamCount] - p.MaxMemory = memory[i*memoryParamCount + 1] + p.MaxMemory = memory[i*memoryParamCount+1] p.AvailableDisk = disk[i*diskParamCount] - p.MaxDisk = disk[i*diskParamCount + 1] + p.MaxDisk = disk[i*diskParamCount+1] p.ReadSpeed = speed[i*speedParamCount] - p.WriteSpeed = speed[i*speedParamCount + 1] - p.ReceiveSpeed = speed[i*speedParamCount + 2] - p.SendSpeed = speed[i*speedParamCount + 3] + p.WriteSpeed = speed[i*speedParamCount+1] + p.ReceiveSpeed = speed[i*speedParamCount+2] + p.SendSpeed = speed[i*speedParamCount+3] status = append(status, p) } return @@ -999,7 +1000,7 @@ func (module *APIModule) queryComputeCellStatus(w http.ResponseWriter, r *http.R } func (module *APIModule) getComputeCellStatus(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -1110,12 +1111,12 @@ func (module *APIModule) getComputeCellStatus(w http.ResponseWriter, r *http.Req } func (module *APIModule) handleQueryInstanceStatusInPool(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } var poolName = params.ByName("pool") - if "" == poolName{ + if "" == poolName { err := errors.New("must specify target pool") log.Printf(" query instance in pool fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) @@ -1138,7 +1139,7 @@ func (module *APIModule) handleQueryInstanceStatusInPool(w http.ResponseWriter, return } result, err := UnmarshalGuestConfigListFromMessage(resp) - if err != nil{ + if err != nil { log.Printf(" parse query instance in pool result fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -1147,12 +1148,12 @@ func (module *APIModule) handleQueryInstanceStatusInPool(w http.ResponseWriter, } func (module *APIModule) handleQueryInstanceStatusInCell(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } var poolName = params.ByName("pool") - if "" == poolName{ + if "" == poolName { err := errors.New("must specify target pool") log.Printf(" query instance in cell fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) @@ -1160,7 +1161,7 @@ func (module *APIModule) handleQueryInstanceStatusInCell(w http.ResponseWriter, } var cellName = params.ByName("cell") - if "" == cellName{ + if "" == cellName { err := errors.New("must specify target cell") log.Printf(" query instance in cell fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) @@ -1184,7 +1185,7 @@ func (module *APIModule) handleQueryInstanceStatusInCell(w http.ResponseWriter, return } result, err := UnmarshalGuestConfigListFromMessage(resp) - if err != nil{ + if err != nil { log.Printf(" parse query instance in cell result fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -1193,13 +1194,13 @@ func (module *APIModule) handleQueryInstanceStatusInCell(w http.ResponseWriter, } func (module *APIModule) handleCreateComputePool(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } pool := params.ByName("pool") rawData, err := ioutil.ReadAll(r.Body) - if err != nil{ + if err != nil { log.Printf(" read create compute pool param fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -1210,9 +1211,9 @@ func (module *APIModule) handleCreateComputePool(w http.ResponseWriter, r *http. Failover bool `json:"failover,omitempty"` } var requestData UserRequest - if 0 != len(rawData){ + if 0 != len(rawData) { //body available - if err = json.Unmarshal(rawData, &requestData); err != nil{ + if err = json.Unmarshal(rawData, &requestData); err != nil { log.Printf(" parse create compute pool request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -1239,7 +1240,7 @@ func (module *APIModule) handleCreateComputePool(w http.ResponseWriter, r *http. } func (module *APIModule) handleDeleteComputePool(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -1261,8 +1262,8 @@ func (module *APIModule) handleDeleteComputePool(w http.ResponseWriter, r *http. ResponseOK("", w) } -func (module *APIModule) handleModifyComputePool(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) handleModifyComputePool(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -1275,7 +1276,7 @@ func (module *APIModule) handleModifyComputePool(w http.ResponseWriter, r *http. } var requestData UserRequest var decoder = json.NewDecoder(r.Body) - if err := decoder.Decode(&requestData); err != nil{ + if err := decoder.Decode(&requestData); err != nil { log.Printf(" parse delete compute pool request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -1300,8 +1301,8 @@ func (module *APIModule) handleModifyComputePool(w http.ResponseWriter, r *http. ResponseOK("", w) } -func (module *APIModule) handleQueryStoragePool(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) handleQueryStoragePool(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -1337,7 +1338,7 @@ func (module *APIModule) handleQueryStoragePool(w http.ResponseWriter, r *http.R if hostArray, err = msg.GetStringArray(framework.ParamKeyHost); err != nil { return pools, err } - if targetArray, err = msg.GetStringArray(framework.ParamKeyTarget); err != nil{ + if targetArray, err = msg.GetStringArray(framework.ParamKeyTarget); err != nil { return } poolCount := len(nameArray) @@ -1367,13 +1368,13 @@ func (module *APIModule) handleQueryStoragePool(w http.ResponseWriter, r *http.R ResponseOK(pools, w) } -func (module *APIModule) handleGetStoragePool(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) handleGetStoragePool(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } poolName := params.ByName("pool") - if "" == poolName{ + if "" == poolName { err := errors.New("must specify pool name") log.Printf(" get storage pool fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) @@ -1403,10 +1404,10 @@ func (module *APIModule) handleGetStoragePool(w http.ResponseWriter, r *http.Req if pool.Type, err = msg.GetString(framework.ParamKeyType); err != nil { return } - if pool.Host, err = msg.GetString(framework.ParamKeyHost); err != nil{ + if pool.Host, err = msg.GetString(framework.ParamKeyHost); err != nil { return } - if pool.Target, err = msg.GetString(framework.ParamKeyTarget); err != nil{ + if pool.Target, err = msg.GetString(framework.ParamKeyTarget); err != nil { return } return @@ -1421,20 +1422,20 @@ func (module *APIModule) handleGetStoragePool(w http.ResponseWriter, r *http.Req ResponseOK(pool, w) } -func (module *APIModule) handleCreateStoragePool(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) handleCreateStoragePool(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } pool := params.ByName("pool") type UserRequest struct { - Type string `json:"type"` - Host string `json:"host,omitempty"` + Type string `json:"type"` + Host string `json:"host,omitempty"` Target string `json:"target,omitempty"` } var requestData UserRequest var decoder = json.NewDecoder(r.Body) - if err := decoder.Decode(&requestData); err != nil{ + if err := decoder.Decode(&requestData); err != nil { log.Printf(" parse create storage pool request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -1459,20 +1460,20 @@ func (module *APIModule) handleCreateStoragePool(w http.ResponseWriter, r *http. ResponseOK("", w) } -func (module *APIModule) handleModifyStoragePool(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) handleModifyStoragePool(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } pool := params.ByName("pool") type UserRequest struct { - Type string `json:"type"` - Host string `json:"host,omitempty"` + Type string `json:"type"` + Host string `json:"host,omitempty"` Target string `json:"target,omitempty"` } var requestData UserRequest var decoder = json.NewDecoder(r.Body) - if err := decoder.Decode(&requestData); err != nil{ + if err := decoder.Decode(&requestData); err != nil { log.Printf(" parse modify storage pool request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -1497,8 +1498,8 @@ func (module *APIModule) handleModifyStoragePool(w http.ResponseWriter, r *http. ResponseOK("", w) } -func (module *APIModule) handleDeleteStoragePool(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) handleDeleteStoragePool(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -1521,7 +1522,7 @@ func (module *APIModule) handleDeleteStoragePool(w http.ResponseWriter, r *http. } func (module *APIModule) handleAddComputeCell(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -1546,7 +1547,7 @@ func (module *APIModule) handleAddComputeCell(w http.ResponseWriter, r *http.Req } func (module *APIModule) handleRemoveComputeCell(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -1571,7 +1572,7 @@ func (module *APIModule) handleRemoveComputeCell(w http.ResponseWriter, r *http. } func (module *APIModule) handleModifyComputeCell(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -1582,7 +1583,7 @@ func (module *APIModule) handleModifyComputeCell(w http.ResponseWriter, r *http. } var requestData UserRequest var decoder = json.NewDecoder(r.Body) - if err := decoder.Decode(&requestData); err != nil{ + if err := decoder.Decode(&requestData); err != nil { log.Printf(" parse modify cell request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -1592,7 +1593,7 @@ func (module *APIModule) handleModifyComputeCell(w http.ResponseWriter, r *http. if requestData.Enable { operateName = "enable" msg, _ = framework.CreateJsonMessage(framework.EnableComputePoolCellRequest) - }else{ + } else { operateName = "disable" msg, _ = framework.CreateJsonMessage(framework.DisableComputePoolCellRequest) } @@ -1615,7 +1616,7 @@ func (module *APIModule) handleModifyComputeCell(w http.ResponseWriter, r *http. } func (module *APIModule) handleGetComputeCell(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -1663,28 +1664,28 @@ func (module *APIModule) handleGetComputeCell(w http.ResponseWriter, r *http.Req if data.Alive, err = msg.GetBoolean(framework.ParamKeyStatus); err != nil { return data, err } - if data.Alive && data.Enabled{ + if data.Alive && data.Enabled { var storage, errors []string var attached []uint64 - if storage, err = msg.GetStringArray(framework.ParamKeyStorage); err != nil{ + if storage, err = msg.GetStringArray(framework.ParamKeyStorage); err != nil { return } - if errors, err = msg.GetStringArray(framework.ParamKeyError);err != nil{ + if errors, err = msg.GetStringArray(framework.ParamKeyError); err != nil { return } - if attached, err = msg.GetUIntArray(framework.ParamKeyAttach); err != nil{ + if attached, err = msg.GetUIntArray(framework.ParamKeyAttach); err != nil { return } var storageCount = len(storage) - if 0 == storageCount{ + if 0 == storageCount { return } var index = 0 - for ; index < storageCount; index++{ + for ; index < storageCount; index++ { var pool = StorageStatus{Name: storage[index]} - if 1 == attached[index]{ + if 1 == attached[index] { pool.Attached = true - }else{ + } else { pool.Attached = false pool.Error = errors[index] } @@ -1705,7 +1706,7 @@ func (module *APIModule) handleGetComputeCell(w http.ResponseWriter, r *http.Req } func (module *APIModule) handleQueryUnallocatedCell(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -1732,7 +1733,7 @@ func (module *APIModule) handleQueryUnallocatedCell(w http.ResponseWriter, r *ht } func (module *APIModule) handleQueryCellsInPool(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -1761,7 +1762,7 @@ func (module *APIModule) handleQueryCellsInPool(w http.ResponseWriter, r *http.R } func (module *APIModule) handleQueryAllPools(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -1847,12 +1848,12 @@ func (module *APIModule) handleQueryAllPools(w http.ResponseWriter, r *http.Requ } func (module *APIModule) handleGetComputePool(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } poolName := params.ByName("pool") - if "" == poolName{ + if "" == poolName { err := errors.New("must specify pool name") log.Printf(" get compute pool fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) @@ -1885,19 +1886,19 @@ func (module *APIModule) handleGetComputePool(w http.ResponseWriter, r *http.Req if pool.Name, err = msg.GetString(framework.ParamKeyName); err != nil { return } - if pool.Enabled, err = msg.GetBoolean(framework.ParamKeyEnable); err != nil{ + if pool.Enabled, err = msg.GetBoolean(framework.ParamKeyEnable); err != nil { return } - if pool.Cells, err = msg.GetUInt(framework.ParamKeyCell);err != nil{ + if pool.Cells, err = msg.GetUInt(framework.ParamKeyCell); err != nil { return } - if pool.Network, err = msg.GetString(framework.ParamKeyNetwork); err != nil{ + if pool.Network, err = msg.GetString(framework.ParamKeyNetwork); err != nil { return } - if pool.Storage, err = msg.GetString(framework.ParamKeyStorage); err != nil{ + if pool.Storage, err = msg.GetString(framework.ParamKeyStorage); err != nil { return } - if pool.Failover, err = msg.GetBoolean(framework.ParamKeyOption); err != nil{ + if pool.Failover, err = msg.GetBoolean(framework.ParamKeyOption); err != nil { return } return @@ -1912,10 +1913,8 @@ func (module *APIModule) handleGetComputePool(w http.ResponseWriter, r *http.Req ResponseOK(pool, w) } - - func (module *APIModule) handleQueryGuestConfig(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -1936,28 +1935,28 @@ func (module *APIModule) handleQueryGuestConfig(w http.ResponseWriter, r *http.R var err error query := r.URL.Query() request.Pool = query.Get("pool") - if request.Cell = query.Get("cell");request.Cell != ""{ + if request.Cell = query.Get("cell"); request.Cell != "" { request.InCell = true } - if request.Owner = query.Get("owner");request.Owner != ""{ + if request.Owner = query.Get("owner"); request.Owner != "" { request.WithOwner = true } - if request.Group = query.Get("group");request.Group != ""{ + if request.Group = query.Get("group"); request.Group != "" { request.WithGroup = true } - if status := query.Get("status");status != ""{ + if status := query.Get("status"); status != "" { request.WithStatus = true request.Status, err = strconv.Atoi(status) - if err != nil{ + if err != nil { log.Printf(" parse query guest request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } } - if created := query.Get("created");created != ""{ + if created := query.Get("created"); created != "" { request.WithCreateFlag = true request.Created, err = strconv.ParseBool(created) - if err != nil{ + if err != nil { log.Printf(" parse query guest request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -1965,7 +1964,7 @@ func (module *APIModule) handleQueryGuestConfig(w http.ResponseWriter, r *http.R } msg, _ := framework.CreateJsonMessage(framework.QueryGuestRequest) - if "" == request.Pool{ + if "" == request.Pool { err := errors.New("must specify target pool") log.Printf(" build query guest request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) @@ -1973,56 +1972,56 @@ func (module *APIModule) handleQueryGuestConfig(w http.ResponseWriter, r *http.R } msg.SetString(framework.ParamKeyPool, request.Pool) var options []uint64 - if request.InCell{ + if request.InCell { options = append(options, 1) - if "" == request.Cell{ + if "" == request.Cell { err := errors.New("must specify target cell") log.Printf(" build query guest request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } msg.SetString(framework.ParamKeyCell, request.Cell) - }else{ + } else { options = append(options, 0) } - if request.WithOwner{ + if request.WithOwner { options = append(options, 1) - if "" == request.Owner{ + if "" == request.Owner { err := errors.New("must specify instance owner") log.Printf(" build query guest request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } msg.SetString(framework.ParamKeyUser, request.Owner) - }else{ + } else { options = append(options, 0) } - if request.WithGroup{ + if request.WithGroup { options = append(options, 1) - if "" == request.Group{ + if "" == request.Group { err := errors.New("must specify instance group") log.Printf(" build query guest request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } msg.SetString(framework.ParamKeyGroup, request.Group) - }else{ + } else { options = append(options, 0) } - if request.WithStatus{ + if request.WithStatus { options = append(options, 1) msg.SetUInt(framework.ParamKeyStatus, uint(request.Status)) - }else{ + } else { options = append(options, 0) } - if request.WithCreateFlag{ + if request.WithCreateFlag { options = append(options, 1) msg.SetBoolean(framework.ParamKeyEnable, request.Created) - }else{ + } else { options = append(options, 0) } @@ -2041,7 +2040,7 @@ func (module *APIModule) handleQueryGuestConfig(w http.ResponseWriter, r *http.R return } result, err := UnmarshalGuestConfigListFromMessage(resp) - if err != nil{ + if err != nil { log.Printf(" parse query result fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -2051,15 +2050,15 @@ func (module *APIModule) handleQueryGuestConfig(w http.ResponseWriter, r *http.R func (module *APIModule) redirectToImageServer(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err = module.verifyStreamSignature(r) - if err != nil{ + if err != nil { log.Printf(" verify stream fail: %s", err.Error()) ResponseFail(ResponseDefaultError, "unauthorized stream", w) return } var respChan = make(chan ResourceResult, 1) module.resource.GetImageServer(respChan) - var result = <- respChan - if result.Error != nil{ + var result = <-respChan + if result.Error != nil { var err = result.Error log.Printf(" fetch current image server fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) @@ -2070,19 +2069,19 @@ func (module *APIModule) redirectToImageServer(w http.ResponseWriter, r *http.Re const ( DefaultProtocol = "https" ) - var address = fmt.Sprintf("%s://%s:%d",DefaultProtocol, imageHost, imagePort) - if address == module.currentImageURL{ + var address = fmt.Sprintf("%s://%s:%d", DefaultProtocol, imageHost, imagePort) + if address == module.currentImageURL { //not changed r.Host = module.currentImageHost module.currentImageProxy.ServeHTTP(w, r) return } //update new URL - if url, err := url.Parse(address);err != nil{ + if url, err := url.Parse(address); err != nil { log.Printf(" parse image proxy url fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return - }else{ + } else { module.currentImageHost = imageHost module.currentImageURL = address module.currentImageProxy = httputil.NewSingleHostReverseProxy(url) @@ -2095,7 +2094,7 @@ func (module *APIModule) redirectToImageServer(w http.ResponseWriter, r *http.Re } func (module *APIModule) handleGetGuestConfig(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -2115,23 +2114,22 @@ func (module *APIModule) handleGetGuestConfig(w http.ResponseWriter, r *http.Req return } var config restGuestConfig - if err := config.Unmarshal(resp);err != nil{ + if err := config.Unmarshal(resp); err != nil { log.Printf(" parse guest config fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } - if !config.Created{ + if !config.Created { w.WriteHeader(http.StatusCreated) - }else{ + } else { w.WriteHeader(http.StatusOK) } ResponseOK(config, w) } - func (module *APIModule) handleCreateGuest(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err error - if err = module.verifyRequestSignature(r); err != nil{ + if err = module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -2152,6 +2150,7 @@ func (module *APIModule) handleCreateGuest(w http.ResponseWriter, r *http.Reques Disks []uint64 `json:"disks"` Template string `json:"template"` AutoStart bool `json:"auto_start,omitempty"` + Cell string `json:"cell,omitempty"` NetworkAddress string `json:"network_address,omitempty"` EthernetAddress string `json:"ethernet_address,omitempty"` FromImage string `json:"from_image,omitempty"` @@ -2164,45 +2163,45 @@ func (module *APIModule) handleCreateGuest(w http.ResponseWriter, r *http.Reques decoder := json.NewDecoder(r.Body) var request userRequest - if err := decoder.Decode(&request);err != nil{ + if err := decoder.Decode(&request); err != nil { log.Printf(" parse create guest request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } - var validator = func(config userRequest) (err error){ - if "" == config.Name{ + var validator = func(config userRequest) (err error) { + if "" == config.Name { err = fmt.Errorf("name required") return } - if "" == config.Owner{ + if "" == config.Owner { err = fmt.Errorf("owner required") return } - if "" == config.Group{ + if "" == config.Group { err = fmt.Errorf("group required") return } - if "" == config.Pool{ + if "" == config.Pool { err = fmt.Errorf("target pool required") return } - if "" == config.Template{ + if "" == config.Template { err = fmt.Errorf("system template required") return } - if 0 == config.Cores{ + if 0 == config.Cores { err = fmt.Errorf("cores required") return } - if 0 == config.Memory{ + if 0 == config.Memory { err = fmt.Errorf("memory required") return } return nil } - if err = validator(request); err != nil{ + if err = validator(request); err != nil { log.Printf(" validate create guest request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -2221,7 +2220,7 @@ func (module *APIModule) handleCreateGuest(w http.ResponseWriter, r *http.Reques msg.SetString(framework.ParamKeyTemplate, request.Template) msg.SetString(framework.ParamKeyPolicy, request.SecurityPolicyGroup) //optional disk image - if "" != request.FromImage{ + if "" != request.FromImage { msg.SetString(framework.ParamKeyImage, request.FromImage) } msg.SetStringArray(framework.ParamKeyModule, request.Modules) @@ -2230,24 +2229,24 @@ func (module *APIModule) handleCreateGuest(w http.ResponseWriter, r *http.Reques RootLoginEnabled ) var flags []uint64 - if nil != request.CloudInit{ + if nil != request.CloudInit { msg.SetString(framework.ParamKeyAdmin, request.CloudInit.AdminName) msg.SetString(framework.ParamKeySecret, request.CloudInit.AdminSecret) msg.SetString(framework.ParamKeyPath, request.CloudInit.DataPath) - if request.CloudInit.RootEnabled{ + if request.CloudInit.RootEnabled { flags = append(flags, RootLoginEnabled) - }else{ + } else { flags = append(flags, RootLoginDisabled) } - }else{ + } else { msg.SetString(framework.ParamKeyAdmin, "") msg.SetString(framework.ParamKeySecret, "") msg.SetString(framework.ParamKeyPath, "") flags = append(flags, RootLoginEnabled) } - if nil != request.QoS{ + if nil != request.QoS { var qos = request.QoS switch qos.CPUPriority { case priority_label_high: @@ -2264,12 +2263,22 @@ func (module *APIModule) handleCreateGuest(w http.ResponseWriter, r *http.Reques } msg.SetUIntArray(framework.ParamKeyLimit, []uint64{qos.ReadSpeed, qos.WriteSpeed, qos.ReadIOPS, qos.WriteIOPS, qos.ReceiveSpeed, qos.SendSpeed}) - }else{ + } else { msg.SetUInt(framework.ParamKeyPriority, PriorityHigh) msg.SetUIntArray(framework.ParamKeyLimit, []uint64{0, 0, 0, 0, 0, 0}) } msg.SetUIntArray(framework.ParamKeyFlag, flags) + //set assigned cell + if cell := strings.TrimSpace(request.Cell); cell != "" { + msg.SetString(framework.ParamKeyCell, cell) + } + + //set assigned address + if ipstr := strings.TrimSpace(request.NetworkAddress); ipstr != "" { + msg.SetString(framework.ParamKeyInternal, ipstr) + } + respChan := make(chan ProxyResult) if err := module.proxy.SendRequest(msg, respChan); err != nil { log.Printf(" send create request fail: %s", err.Error()) @@ -2283,13 +2292,13 @@ func (module *APIModule) handleCreateGuest(w http.ResponseWriter, r *http.Reques return } created, err := resp.GetBoolean(framework.ParamKeyEnable) - if err != nil{ + if err != nil { log.Printf(" parse create result fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } id, err := resp.GetString(framework.ParamKeyInstance) - if err != nil{ + if err != nil { log.Printf(" parse instance id fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -2298,17 +2307,17 @@ func (module *APIModule) handleCreateGuest(w http.ResponseWriter, r *http.Reques ID string `json:"id"` } - var result = userResponse{ID:id} - if !created{ + var result = userResponse{ID: id} + if !created { w.WriteHeader(http.StatusAccepted) - }else{ + } else { w.WriteHeader(http.StatusOK) } ResponseOK(result, w) } func (module *APIModule) handleDeleteGuest(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -2318,7 +2327,7 @@ func (module *APIModule) handleDeleteGuest(w http.ResponseWriter, r *http.Reques } decoder := json.NewDecoder(r.Body) var request userRequest - if err := decoder.Decode(&request);err != nil{ + if err := decoder.Decode(&request); err != nil { log.Printf(" parse delete guest request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -2326,9 +2335,9 @@ func (module *APIModule) handleDeleteGuest(w http.ResponseWriter, r *http.Reques msg, _ := framework.CreateJsonMessage(framework.DeleteGuestRequest) msg.SetString(framework.ParamKeyInstance, id) - if request.Force{ + if request.Force { msg.SetUInt(framework.ParamKeyOption, 1) - }else { + } else { msg.SetUInt(framework.ParamKeyOption, 0) } @@ -2348,7 +2357,7 @@ func (module *APIModule) handleDeleteGuest(w http.ResponseWriter, r *http.Reques } func (module *APIModule) handleGetInstanceStatus(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -2368,7 +2377,7 @@ func (module *APIModule) handleGetInstanceStatus(w http.ResponseWriter, r *http. return } var status restInstanceStatus - if err := status.Unmarshal(resp);err != nil{ + if err := status.Unmarshal(resp); err != nil { log.Printf(" parse status fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -2377,19 +2386,19 @@ func (module *APIModule) handleGetInstanceStatus(w http.ResponseWriter, r *http. } func (module *APIModule) handleStartInstance(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } id := params.ByName("id") type userRequest struct { - FromMedia bool `json:"from_media,omitempty"` - FromNetwork bool `json:"from_network,omitempty"` - Source string `json:"source,omitempty"` + FromMedia bool `json:"from_media,omitempty"` + FromNetwork bool `json:"from_network,omitempty"` + Source string `json:"source,omitempty"` } decoder := json.NewDecoder(r.Body) var request userRequest - if err := decoder.Decode(&request);err != nil{ + if err := decoder.Decode(&request); err != nil { log.Printf(" parse start instance request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -2397,12 +2406,12 @@ func (module *APIModule) handleStartInstance(w http.ResponseWriter, r *http.Requ msg, _ := framework.CreateJsonMessage(framework.StartInstanceRequest) msg.SetString(framework.ParamKeyInstance, id) - if request.FromMedia{ + if request.FromMedia { msg.SetUInt(framework.ParamKeyOption, InstanceMediaOptionImage) msg.SetString(framework.ParamKeySource, request.Source) - }else if request.FromNetwork{ + } else if request.FromNetwork { msg.SetUInt(framework.ParamKeyOption, InstanceMediaOptionNetwork) - }else{ + } else { msg.SetUInt(framework.ParamKeyOption, InstanceMediaOptionNone) } respChan := make(chan ProxyResult) @@ -2421,18 +2430,18 @@ func (module *APIModule) handleStartInstance(w http.ResponseWriter, r *http.Requ } func (module *APIModule) handleStopInstance(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } id := params.ByName("id") type userRequest struct { Reboot bool `json:"reboot,omitempty"` - Force bool `json:"force,omitempty"` + Force bool `json:"force,omitempty"` } decoder := json.NewDecoder(r.Body) var request userRequest - if err := decoder.Decode(&request);err != nil{ + if err := decoder.Decode(&request); err != nil { log.Printf(" parse stop instance request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -2440,14 +2449,14 @@ func (module *APIModule) handleStopInstance(w http.ResponseWriter, r *http.Reque msg, _ := framework.CreateJsonMessage(framework.StopInstanceRequest) msg.SetString(framework.ParamKeyInstance, id) var options []uint64 - if request.Reboot{ + if request.Reboot { options = append(options, 1) - }else{ + } else { options = append(options, 0) } - if request.Force{ + if request.Force { options = append(options, 1) - }else{ + } else { options = append(options, 0) } msg.SetUIntArray(framework.ParamKeyOption, options) @@ -2466,8 +2475,7 @@ func (module *APIModule) handleStopInstance(w http.ResponseWriter, r *http.Reque ResponseOK("", w) } - -func (module *APIModule) searchMediaImage(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) searchMediaImage(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var filterOwner = r.URL.Query().Get("owner") var filterGroup = r.URL.Query().Get("group") @@ -2498,47 +2506,47 @@ func (module *APIModule) searchMediaImage(w http.ResponseWriter, r *http.Request ModifyTime string `json:"modify_time,omitempty"` } - var parser = func(msg framework.Message) (images []respImage, err error){ + var parser = func(msg framework.Message) (images []respImage, err error) { //unmarshal var name, id, description, tags, createTime, modifyTime []string var size, tagCount []uint64 - if name, err = msg.GetStringArray(framework.ParamKeyName); err != nil{ + if name, err = msg.GetStringArray(framework.ParamKeyName); err != nil { return } - if id, err = msg.GetStringArray(framework.ParamKeyImage); err != nil{ + if id, err = msg.GetStringArray(framework.ParamKeyImage); err != nil { return } - if description, err = msg.GetStringArray(framework.ParamKeyDescription); err != nil{ + if description, err = msg.GetStringArray(framework.ParamKeyDescription); err != nil { return } - if tags, err = msg.GetStringArray(framework.ParamKeyTag); err != nil{ + if tags, err = msg.GetStringArray(framework.ParamKeyTag); err != nil { return } - if createTime, err = msg.GetStringArray(framework.ParamKeyCreate); err != nil{ + if createTime, err = msg.GetStringArray(framework.ParamKeyCreate); err != nil { return } - if modifyTime, err = msg.GetStringArray(framework.ParamKeyModify); err != nil{ + if modifyTime, err = msg.GetStringArray(framework.ParamKeyModify); err != nil { return } - if size, err = msg.GetUIntArray(framework.ParamKeySize); err != nil{ + if size, err = msg.GetUIntArray(framework.ParamKeySize); err != nil { return } - if tagCount, err = msg.GetUIntArray(framework.ParamKeyCount); err != nil{ + if tagCount, err = msg.GetUIntArray(framework.ParamKeyCount); err != nil { return } var totalTags uint64 = 0 - for _, count := range tagCount{ + for _, count := range tagCount { totalTags += count } - if int(totalTags) != len(tags){ + if int(totalTags) != len(tags) { err = fmt.Errorf("unexpect tag count %d / %d", len(tags), totalTags) return } var imageCount = len(name) images = make([]respImage, 0) var tagBegin = 0 - for i := 0 ; i < imageCount;i++{ + for i := 0; i < imageCount; i++ { var image = respImage{} image.Name = name[i] image.ID = id[i] @@ -2555,7 +2563,7 @@ func (module *APIModule) searchMediaImage(w http.ResponseWriter, r *http.Request } payload, err := parser(resp) - if err != nil{ + if err != nil { log.Printf(" parse query media image result fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -2563,8 +2571,8 @@ func (module *APIModule) searchMediaImage(w http.ResponseWriter, r *http.Request ResponseOK(payload, w) } -func (module *APIModule) queryAllMediaImage(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) queryAllMediaImage(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -2592,47 +2600,47 @@ func (module *APIModule) queryAllMediaImage(w http.ResponseWriter, r *http.Reque ModifyTime string `json:"modify_time,omitempty"` } - var parser = func(msg framework.Message) (images []respImage, err error){ + var parser = func(msg framework.Message) (images []respImage, err error) { //unmarshal var name, id, description, tags, createTime, modifyTime []string var size, tagCount []uint64 - if name, err = msg.GetStringArray(framework.ParamKeyName); err != nil{ + if name, err = msg.GetStringArray(framework.ParamKeyName); err != nil { return } - if id, err = msg.GetStringArray(framework.ParamKeyImage); err != nil{ + if id, err = msg.GetStringArray(framework.ParamKeyImage); err != nil { return } - if description, err = msg.GetStringArray(framework.ParamKeyDescription); err != nil{ + if description, err = msg.GetStringArray(framework.ParamKeyDescription); err != nil { return } - if tags, err = msg.GetStringArray(framework.ParamKeyTag); err != nil{ + if tags, err = msg.GetStringArray(framework.ParamKeyTag); err != nil { return } - if createTime, err = msg.GetStringArray(framework.ParamKeyCreate); err != nil{ + if createTime, err = msg.GetStringArray(framework.ParamKeyCreate); err != nil { return } - if modifyTime, err = msg.GetStringArray(framework.ParamKeyModify); err != nil{ + if modifyTime, err = msg.GetStringArray(framework.ParamKeyModify); err != nil { return } - if size, err = msg.GetUIntArray(framework.ParamKeySize); err != nil{ + if size, err = msg.GetUIntArray(framework.ParamKeySize); err != nil { return } - if tagCount, err = msg.GetUIntArray(framework.ParamKeyCount); err != nil{ + if tagCount, err = msg.GetUIntArray(framework.ParamKeyCount); err != nil { return } var totalTags uint64 = 0 - for _, count := range tagCount{ + for _, count := range tagCount { totalTags += count } - if int(totalTags) != len(tags){ + if int(totalTags) != len(tags) { err = fmt.Errorf("unexpect tag count %d / %d", len(tags), totalTags) return } var imageCount = len(name) images = make([]respImage, 0) var tagBegin = 0 - for i := 0 ; i < imageCount;i++{ + for i := 0; i < imageCount; i++ { var image = respImage{} image.Name = name[i] image.ID = id[i] @@ -2649,16 +2657,15 @@ func (module *APIModule) queryAllMediaImage(w http.ResponseWriter, r *http.Reque } payload, err := parser(resp) - if err != nil{ + if err != nil { log.Printf(" parse query media image result fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) } ResponseOK(payload, w) } - -func (module *APIModule) getMediaImage(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) getMediaImage(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -2686,22 +2693,22 @@ func (module *APIModule) getMediaImage(w http.ResponseWriter, r *http.Request, p } var data userResponse var err error - if data.Name, err = resp.GetString(framework.ParamKeyName); err != nil{ + if data.Name, err = resp.GetString(framework.ParamKeyName); err != nil { log.Printf(" parse media image name fail: %s", errMsg) ResponseFail(ResponseDefaultError, errMsg, w) return } - if data.Description, err = resp.GetString(framework.ParamKeyDescription); err != nil{ + if data.Description, err = resp.GetString(framework.ParamKeyDescription); err != nil { log.Printf(" parse media image description fail: %s", errMsg) ResponseFail(ResponseDefaultError, errMsg, w) return } - if data.Tags, err = resp.GetStringArray(framework.ParamKeyTag); err != nil{ + if data.Tags, err = resp.GetStringArray(framework.ParamKeyTag); err != nil { log.Printf(" parse media image tags fail: %s", errMsg) ResponseFail(ResponseDefaultError, errMsg, w) return } - if data.Size, err = resp.GetUInt(framework.ParamKeySize); err != nil{ + if data.Size, err = resp.GetUInt(framework.ParamKeySize); err != nil { log.Printf(" parse media image size fail: %s", errMsg) ResponseFail(ResponseDefaultError, errMsg, w) return @@ -2710,8 +2717,8 @@ func (module *APIModule) getMediaImage(w http.ResponseWriter, r *http.Request, p ResponseOK(data, w) } -func (module *APIModule) createMediaImage(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) createMediaImage(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -2724,7 +2731,7 @@ func (module *APIModule) createMediaImage(w http.ResponseWriter, r *http.Request } decoder := json.NewDecoder(r.Body) var request userRequest - if err := decoder.Decode(&request);err != nil{ + if err := decoder.Decode(&request); err != nil { log.Printf(" parse create media image request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -2751,7 +2758,7 @@ func (module *APIModule) createMediaImage(w http.ResponseWriter, r *http.Request } var imageID string var err error - if imageID, err = resp.GetString(framework.ParamKeyImage);err != nil{ + if imageID, err = resp.GetString(framework.ParamKeyImage); err != nil { log.Printf(" get image from create result fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -2760,13 +2767,12 @@ func (module *APIModule) createMediaImage(w http.ResponseWriter, r *http.Request type userResponse struct { ID string `json:"id"` } - var data = userResponse{ID:imageID} + var data = userResponse{ID: imageID} ResponseOK(data, w) } - -func (module *APIModule) modifyMediaImage(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) modifyMediaImage(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -2781,7 +2787,7 @@ func (module *APIModule) modifyMediaImage(w http.ResponseWriter, r *http.Request } decoder := json.NewDecoder(r.Body) var request userRequest - if err := decoder.Decode(&request);err != nil{ + if err := decoder.Decode(&request); err != nil { log.Printf(" parse modify media image request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -2810,8 +2816,8 @@ func (module *APIModule) modifyMediaImage(w http.ResponseWriter, r *http.Request ResponseOK("", w) } -func (module *APIModule) deleteMediaImage(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) deleteMediaImage(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -2833,9 +2839,9 @@ func (module *APIModule) deleteMediaImage(w http.ResponseWriter, r *http.Request ResponseOK("", w) } -func (module *APIModule) syncMediaImages(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) syncMediaImages(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err error - if err = module.verifyRequestSignature(r); err != nil{ + if err = module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -2846,17 +2852,17 @@ func (module *APIModule) syncMediaImages(w http.ResponseWriter, r *http.Request, var request RequestPayload var decoder = json.NewDecoder(r.Body) - if err = decoder.Decode(&request);err != nil{ + if err = decoder.Decode(&request); err != nil { log.Printf(" parse sync media image request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } - if "" == request.Owner{ + if "" == request.Owner { ResponseFail(ResponseDefaultError, "owner required", w) return } - if "" == request.Group{ + if "" == request.Group { ResponseFail(ResponseDefaultError, "group required", w) return } @@ -2878,8 +2884,8 @@ func (module *APIModule) syncMediaImages(w http.ResponseWriter, r *http.Request, ResponseOK("", w) } -func (module *APIModule) queryDiskImage(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) queryDiskImage(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -2891,10 +2897,10 @@ func (module *APIModule) queryDiskImage(w http.ResponseWriter, r *http.Request, msg.SetString(framework.ParamKeyUser, filterOwner) - if filterGroup != ""{ + if filterGroup != "" { msg.SetString(framework.ParamKeyGroup, filterGroup) } - if 0 != len(filterTags){ + if 0 != len(filterTags) { msg.SetStringArray(framework.ParamKeyTag, filterTags) } respChan := make(chan ProxyResult) @@ -2920,47 +2926,47 @@ func (module *APIModule) queryDiskImage(w http.ResponseWriter, r *http.Request, ModifyTime string `json:"modify_time,omitempty"` } - var parser = func(msg framework.Message) (images []respImage, err error){ + var parser = func(msg framework.Message) (images []respImage, err error) { //unmarshal var name, id, description, tags, createTime, modifyTime []string var size, tagCount []uint64 - if name, err = msg.GetStringArray(framework.ParamKeyName); err != nil{ + if name, err = msg.GetStringArray(framework.ParamKeyName); err != nil { return } - if id, err = msg.GetStringArray(framework.ParamKeyImage); err != nil{ + if id, err = msg.GetStringArray(framework.ParamKeyImage); err != nil { return } - if description, err = msg.GetStringArray(framework.ParamKeyDescription); err != nil{ + if description, err = msg.GetStringArray(framework.ParamKeyDescription); err != nil { return } - if tags, err = msg.GetStringArray(framework.ParamKeyTag); err != nil{ + if tags, err = msg.GetStringArray(framework.ParamKeyTag); err != nil { return } - if createTime, err = msg.GetStringArray(framework.ParamKeyCreate); err != nil{ + if createTime, err = msg.GetStringArray(framework.ParamKeyCreate); err != nil { return } - if modifyTime, err = msg.GetStringArray(framework.ParamKeyModify); err != nil{ + if modifyTime, err = msg.GetStringArray(framework.ParamKeyModify); err != nil { return } - if size, err = msg.GetUIntArray(framework.ParamKeySize); err != nil{ + if size, err = msg.GetUIntArray(framework.ParamKeySize); err != nil { return } - if tagCount, err = msg.GetUIntArray(framework.ParamKeyCount); err != nil{ + if tagCount, err = msg.GetUIntArray(framework.ParamKeyCount); err != nil { return } var totalTags uint64 = 0 - for _, count := range tagCount{ + for _, count := range tagCount { totalTags += count } - if int(totalTags) != len(tags){ + if int(totalTags) != len(tags) { err = fmt.Errorf("unexpect tag count %d / %d", len(tags), totalTags) return } var imageCount = len(name) images = make([]respImage, 0) var tagBegin = 0 - for i := 0 ; i < imageCount;i++{ + for i := 0; i < imageCount; i++ { var image = respImage{} image.Name = name[i] image.ID = id[i] @@ -2977,7 +2983,7 @@ func (module *APIModule) queryDiskImage(w http.ResponseWriter, r *http.Request, } payload, err := parser(resp) - if err != nil{ + if err != nil { log.Printf(" parse query disk image result fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -2985,8 +2991,8 @@ func (module *APIModule) queryDiskImage(w http.ResponseWriter, r *http.Request, ResponseOK(payload, w) } -func (module *APIModule) getDiskImage(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) getDiskImage(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -3016,32 +3022,32 @@ func (module *APIModule) getDiskImage(w http.ResponseWriter, r *http.Request, pa } var data userResponse var err error - if data.Name, err = resp.GetString(framework.ParamKeyName); err != nil{ + if data.Name, err = resp.GetString(framework.ParamKeyName); err != nil { log.Printf(" parse disk image name fail: %s", errMsg) ResponseFail(ResponseDefaultError, errMsg, w) return } - if data.Description, err = resp.GetString(framework.ParamKeyDescription); err != nil{ + if data.Description, err = resp.GetString(framework.ParamKeyDescription); err != nil { log.Printf(" parse disk image description fail: %s", errMsg) ResponseFail(ResponseDefaultError, errMsg, w) return } - if data.Tags, err = resp.GetStringArray(framework.ParamKeyTag); err != nil{ + if data.Tags, err = resp.GetStringArray(framework.ParamKeyTag); err != nil { log.Printf(" parse disk image tags fail: %s", errMsg) ResponseFail(ResponseDefaultError, errMsg, w) return } - if data.Size, err = resp.GetUInt(framework.ParamKeySize); err != nil{ + if data.Size, err = resp.GetUInt(framework.ParamKeySize); err != nil { log.Printf(" parse disk image size fail: %s", errMsg) ResponseFail(ResponseDefaultError, errMsg, w) return } - if data.Progress, err = resp.GetUInt(framework.ParamKeyProgress); err != nil{ + if data.Progress, err = resp.GetUInt(framework.ParamKeyProgress); err != nil { log.Printf(" parse disk image progress fail: %s", errMsg) ResponseFail(ResponseDefaultError, errMsg, w) return } - if data.Created, err = resp.GetBoolean(framework.ParamKeyEnable); err != nil{ + if data.Created, err = resp.GetBoolean(framework.ParamKeyEnable); err != nil { log.Printf(" parse disk image status fail: %s", errMsg) ResponseFail(ResponseDefaultError, errMsg, w) return @@ -3050,8 +3056,8 @@ func (module *APIModule) getDiskImage(w http.ResponseWriter, r *http.Request, pa ResponseOK(data, w) } -func (module *APIModule) createDiskImage(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) createDiskImage(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -3065,7 +3071,7 @@ func (module *APIModule) createDiskImage(w http.ResponseWriter, r *http.Request, } decoder := json.NewDecoder(r.Body) var request userRequest - if err := decoder.Decode(&request);err != nil{ + if err := decoder.Decode(&request); err != nil { log.Printf(" parse create disk image request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -3093,7 +3099,7 @@ func (module *APIModule) createDiskImage(w http.ResponseWriter, r *http.Request, } var imageID string var err error - if imageID, err = resp.GetString(framework.ParamKeyImage);err != nil{ + if imageID, err = resp.GetString(framework.ParamKeyImage); err != nil { log.Printf(" get image from create result fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -3102,16 +3108,15 @@ func (module *APIModule) createDiskImage(w http.ResponseWriter, r *http.Request, type userResponse struct { ID string `json:"id"` } - var data = userResponse{ID:imageID} - if "" != request.Guest{ + var data = userResponse{ID: imageID} + if "" != request.Guest { w.WriteHeader(http.StatusAccepted) } ResponseOK(data, w) } - -func (module *APIModule) modifyDiskImage(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) modifyDiskImage(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -3126,7 +3131,7 @@ func (module *APIModule) modifyDiskImage(w http.ResponseWriter, r *http.Request, } decoder := json.NewDecoder(r.Body) var request userRequest - if err := decoder.Decode(&request);err != nil{ + if err := decoder.Decode(&request); err != nil { log.Printf(" parse modify media image request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -3155,9 +3160,8 @@ func (module *APIModule) modifyDiskImage(w http.ResponseWriter, r *http.Request, ResponseOK("", w) } - -func (module *APIModule) deleteDiskImage(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) deleteDiskImage(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -3179,9 +3183,9 @@ func (module *APIModule) deleteDiskImage(w http.ResponseWriter, r *http.Request, ResponseOK("", w) } -func (module *APIModule) syncDiskImages(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) syncDiskImages(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err error - if err = module.verifyRequestSignature(r); err != nil{ + if err = module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -3192,17 +3196,17 @@ func (module *APIModule) syncDiskImages(w http.ResponseWriter, r *http.Request, var request RequestPayload var decoder = json.NewDecoder(r.Body) - if err = decoder.Decode(&request);err != nil{ + if err = decoder.Decode(&request); err != nil { log.Printf(" parse sync disk image request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } - if "" == request.Owner{ + if "" == request.Owner { ResponseFail(ResponseDefaultError, "owner required", w) return } - if "" == request.Group{ + if "" == request.Group { ResponseFail(ResponseDefaultError, "group required", w) return } @@ -3225,17 +3229,17 @@ func (module *APIModule) syncDiskImages(w http.ResponseWriter, r *http.Request, } func (module *APIModule) handleModifyGuestName(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } - var id= params.ByName("id") + var id = params.ByName("id") type userRequest struct { Name string `json:"name"` } decoder := json.NewDecoder(r.Body) var request userRequest - if err := decoder.Decode(&request);err != nil{ + if err := decoder.Decode(&request); err != nil { log.Printf(" parse modify name request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -3261,18 +3265,18 @@ func (module *APIModule) handleModifyGuestName(w http.ResponseWriter, r *http.Re } func (module *APIModule) handleModifyGuestCores(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } - var id= params.ByName("id") + var id = params.ByName("id") type userRequest struct { Cores uint `json:"cores"` Immediate bool `json:"immediate,omitempty"` } decoder := json.NewDecoder(r.Body) var request userRequest - if err := decoder.Decode(&request);err != nil{ + if err := decoder.Decode(&request); err != nil { log.Printf(" parse modify cores request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -3299,18 +3303,18 @@ func (module *APIModule) handleModifyGuestCores(w http.ResponseWriter, r *http.R } func (module *APIModule) handleModifyGuestMemory(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } - var id= params.ByName("id") + var id = params.ByName("id") type userRequest struct { Memory uint `json:"memory"` Immediate bool `json:"immediate,omitempty"` } decoder := json.NewDecoder(r.Body) var request userRequest - if err := decoder.Decode(&request);err != nil{ + if err := decoder.Decode(&request); err != nil { log.Printf(" parse modify memory request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -3337,17 +3341,17 @@ func (module *APIModule) handleModifyGuestMemory(w http.ResponseWriter, r *http. } func (module *APIModule) handleModifyAutoStart(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } - var id= params.ByName("id") + var id = params.ByName("id") type userRequest struct { Enable bool `json:"enable"` } decoder := json.NewDecoder(r.Body) var request userRequest - if err := decoder.Decode(&request);err != nil{ + if err := decoder.Decode(&request); err != nil { log.Printf(" parse modify memory request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -3373,17 +3377,17 @@ func (module *APIModule) handleModifyAutoStart(w http.ResponseWriter, r *http.Re } func (module *APIModule) handleModifyGuestPriority(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } - var id= params.ByName("id") + var id = params.ByName("id") type userRequest struct { Priority string `json:"priority"` } decoder := json.NewDecoder(r.Body) var request userRequest - if err := decoder.Decode(&request);err != nil{ + if err := decoder.Decode(&request); err != nil { log.Printf(" parse modify priority request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -3422,11 +3426,11 @@ func (module *APIModule) handleModifyGuestPriority(w http.ResponseWriter, r *htt } func (module *APIModule) handleModifyDiskThreshold(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } - var id= params.ByName("id") + var id = params.ByName("id") type userRequest struct { ReadSpeed uint64 `json:"read_speed,omitempty"` ReadIOPS uint64 `json:"read_iops,omitempty"` @@ -3435,7 +3439,7 @@ func (module *APIModule) handleModifyDiskThreshold(w http.ResponseWriter, r *htt } decoder := json.NewDecoder(r.Body) var request userRequest - if err := decoder.Decode(&request);err != nil{ + if err := decoder.Decode(&request); err != nil { log.Printf(" parse modify disk threshold request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -3460,20 +3464,19 @@ func (module *APIModule) handleModifyDiskThreshold(w http.ResponseWriter, r *htt ResponseOK("", w) } - func (module *APIModule) handleModifyNetworkThreshold(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } - var id= params.ByName("id") + var id = params.ByName("id") type userRequest struct { ReceiveSpeed uint64 `json:"receive_speed,omitempty"` SendSpeed uint64 `json:"send_speed,omitempty"` } decoder := json.NewDecoder(r.Body) var request userRequest - if err := decoder.Decode(&request);err != nil{ + if err := decoder.Decode(&request); err != nil { log.Printf(" parse modify network threshold request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -3499,7 +3502,7 @@ func (module *APIModule) handleModifyNetworkThreshold(w http.ResponseWriter, r * } func (module *APIModule) handleResetGuestSystem(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -3509,7 +3512,7 @@ func (module *APIModule) handleResetGuestSystem(w http.ResponseWriter, r *http.R } decoder := json.NewDecoder(r.Body) var request userRequest - if err := decoder.Decode(&request);err != nil{ + if err := decoder.Decode(&request); err != nil { log.Printf(" parse reset system request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -3534,20 +3537,19 @@ func (module *APIModule) handleResetGuestSystem(w http.ResponseWriter, r *http.R ResponseOK("", w) } - func (module *APIModule) handleModifyGuestPassword(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } - var id= params.ByName("id") + var id = params.ByName("id") type userRequest struct { Password string `json:"password,omitempty"` User string `json:"user,omitempty"` } decoder := json.NewDecoder(r.Body) var request userRequest - if err := decoder.Decode(&request);err != nil{ + if err := decoder.Decode(&request); err != nil { log.Printf(" parse modify password request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -3581,11 +3583,11 @@ func (module *APIModule) handleModifyGuestPassword(w http.ResponseWriter, r *htt } func (module *APIModule) handleGetGuestPassword(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } - var id= params.ByName("id") + var id = params.ByName("id") msg, _ := framework.CreateJsonMessage(framework.GetAuthRequest) msg.SetString(framework.ParamKeyGuest, id) @@ -3607,12 +3609,12 @@ func (module *APIModule) handleGetGuestPassword(w http.ResponseWriter, r *http.R } var data RespData var err error - if data.Password, err = resp.GetString(framework.ParamKeySecret); err != nil{ + if data.Password, err = resp.GetString(framework.ParamKeySecret); err != nil { log.Printf(" get password fail when parse password: %s", errMsg) ResponseFail(ResponseDefaultError, errMsg, w) return } - if data.User, err = resp.GetString(framework.ParamKeyUser); err != nil{ + if data.User, err = resp.GetString(framework.ParamKeyUser); err != nil { log.Printf(" get password fail when parse user: %s", errMsg) ResponseFail(ResponseDefaultError, errMsg, w) return @@ -3622,14 +3624,14 @@ func (module *APIModule) handleGetGuestPassword(w http.ResponseWriter, r *http.R } func (module *APIModule) handleResizeDisk(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } var id = params.ByName("id") var index = params.ByName("index") diskOffset, err := strconv.Atoi(index) - if err != nil{ + if err != nil { log.Printf(" try resize disk with invalid index %s", index) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -3640,7 +3642,7 @@ func (module *APIModule) handleResizeDisk(w http.ResponseWriter, r *http.Request } decoder := json.NewDecoder(r.Body) var request userRequest - if err := decoder.Decode(&request);err != nil{ + if err := decoder.Decode(&request); err != nil { log.Printf(" parse resize disk request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -3668,14 +3670,14 @@ func (module *APIModule) handleResizeDisk(w http.ResponseWriter, r *http.Request } func (module *APIModule) handleShrinkDisk(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } var id = params.ByName("id") var index = params.ByName("index") diskOffset, err := strconv.Atoi(index) - if err != nil{ + if err != nil { log.Printf(" try shrink disk with invalid index %s", index) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -3685,7 +3687,7 @@ func (module *APIModule) handleShrinkDisk(w http.ResponseWriter, r *http.Request } decoder := json.NewDecoder(r.Body) var request userRequest - if err := decoder.Decode(&request);err != nil{ + if err := decoder.Decode(&request); err != nil { log.Printf(" parse shrink disk request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -3712,7 +3714,7 @@ func (module *APIModule) handleShrinkDisk(w http.ResponseWriter, r *http.Request } func (module *APIModule) handleInsertMedia(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -3725,7 +3727,7 @@ func (module *APIModule) handleInsertMedia(w http.ResponseWriter, r *http.Reques decoder := json.NewDecoder(r.Body) var request userRequest - if err := decoder.Decode(&request);err != nil{ + if err := decoder.Decode(&request); err != nil { log.Printf(" parse insert media request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -3752,7 +3754,7 @@ func (module *APIModule) handleInsertMedia(w http.ResponseWriter, r *http.Reques } func (module *APIModule) handleEjectMedia(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -3776,8 +3778,8 @@ func (module *APIModule) handleEjectMedia(w http.ResponseWriter, r *http.Request ResponseOK("", w) } -func (module *APIModule) handleQueryInstanceSnapshots(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) handleQueryInstanceSnapshots(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -3798,42 +3800,42 @@ func (module *APIModule) handleQueryInstanceSnapshots(w http.ResponseWriter, r * return } type Snapshot struct { - IsRoot bool `json:"is_root,omitempty"` - IsCurrent bool `json:"is_current,omitempty"` - Backing string `json:"backing,omitempty"` + IsRoot bool `json:"is_root,omitempty"` + IsCurrent bool `json:"is_current,omitempty"` + Backing string `json:"backing,omitempty"` } var data = map[string]Snapshot{} var rootFlags, currentFlags []uint64 var backings, names []string - var parser = func () (err error) { - if names, err = resp.GetStringArray(framework.ParamKeyName); err != nil{ + var parser = func() (err error) { + if names, err = resp.GetStringArray(framework.ParamKeyName); err != nil { return } - if backings, err = resp.GetStringArray(framework.ParamKeyPrevious); err != nil{ + if backings, err = resp.GetStringArray(framework.ParamKeyPrevious); err != nil { return } - if rootFlags, err = resp.GetUIntArray(framework.ParamKeySource); err != nil{ + if rootFlags, err = resp.GetUIntArray(framework.ParamKeySource); err != nil { return } - if currentFlags, err = resp.GetUIntArray(framework.ParamKeyCurrent); err != nil{ + if currentFlags, err = resp.GetUIntArray(framework.ParamKeyCurrent); err != nil { return } return nil } - if err := parser(); err != nil{ + if err := parser(); err != nil { log.Printf(" parse snapshots fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } var count = len(names) - for i := 0; i < count; i++{ + for i := 0; i < count; i++ { var snapshot = Snapshot{} snapshot.Backing = backings[i] - if 1 == rootFlags[i]{ + if 1 == rootFlags[i] { snapshot.IsRoot = true } - if 1 == currentFlags[i]{ + if 1 == currentFlags[i] { snapshot.IsCurrent = true } data[names[i]] = snapshot @@ -3842,21 +3844,21 @@ func (module *APIModule) handleQueryInstanceSnapshots(w http.ResponseWriter, r * ResponseOK(data, w) } -func (module *APIModule) handleCreateInstanceSnapshot(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) handleCreateInstanceSnapshot(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } var instanceID = params.ByName("id") type UserRequest struct { - Name string `json:"name"` + Name string `json:"name"` Description string `json:"description,omitempty"` } var err error var decoder = json.NewDecoder(r.Body) var requestData UserRequest - if err = decoder.Decode(&requestData); err != nil{ + if err = decoder.Decode(&requestData); err != nil { log.Printf(" decode create snapshot request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -3882,8 +3884,8 @@ func (module *APIModule) handleCreateInstanceSnapshot(w http.ResponseWriter, r * ResponseOK("", w) } -func (module *APIModule) handleDeleteInstanceSnapshot(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) handleDeleteInstanceSnapshot(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -3909,8 +3911,8 @@ func (module *APIModule) handleDeleteInstanceSnapshot(w http.ResponseWriter, r * ResponseOK("", w) } -func (module *APIModule) handleRestoreInstanceSnapshot(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) handleRestoreInstanceSnapshot(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -3920,7 +3922,7 @@ func (module *APIModule) handleRestoreInstanceSnapshot(w http.ResponseWriter, r } var request UserRequest var decoder = json.NewDecoder(r.Body) - if err := decoder.Decode(&request); err != nil{ + if err := decoder.Decode(&request); err != nil { log.Printf(" parse restore snapshot request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -3946,8 +3948,8 @@ func (module *APIModule) handleRestoreInstanceSnapshot(w http.ResponseWriter, r ResponseOK("", w) } -func (module *APIModule) handleGetInstanceSnapshot(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) handleGetInstanceSnapshot(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -3971,18 +3973,18 @@ func (module *APIModule) handleGetInstanceSnapshot(w http.ResponseWriter, r *htt return } type ResponseData struct { - Running bool `json:"running"` + Running bool `json:"running"` Description string `json:"description,omitempty"` - CreateTime string `json:"create_time"` + CreateTime string `json:"create_time"` } var data ResponseData var err error - if data.Running, err = resp.GetBoolean(framework.ParamKeyStatus); err != nil{ + if data.Running, err = resp.GetBoolean(framework.ParamKeyStatus); err != nil { log.Printf(" parse snapshot status fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } - if data.CreateTime, err = resp.GetString(framework.ParamKeyCreate); err != nil{ + if data.CreateTime, err = resp.GetString(framework.ParamKeyCreate); err != nil { log.Printf(" parse snapshot create time fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -3991,8 +3993,8 @@ func (module *APIModule) handleGetInstanceSnapshot(w http.ResponseWriter, r *htt ResponseOK(data, w) } -func (module *APIModule) handleQueryMigrations(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) handleQueryMigrations(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -4020,12 +4022,12 @@ func (module *APIModule) handleQueryMigrations(w http.ResponseWriter, r *http.Re var err error var respPayload = make([]Migration, 0) - if id, err = resp.GetStringArray(framework.ParamKeyMigration); err != nil{ + if id, err = resp.GetStringArray(framework.ParamKeyMigration); err != nil { log.Printf(" parse id fail when query migration: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } - if finished, err = resp.GetUIntArray(framework.ParamKeyStatus); err != nil{ + if finished, err = resp.GetUIntArray(framework.ParamKeyStatus); err != nil { log.Printf(" parse status fail when query migration: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -4035,36 +4037,36 @@ func (module *APIModule) handleQueryMigrations(w http.ResponseWriter, r *http.Re ResponseFail(ResponseDefaultError, err.Error(), w) return } - if errMessage, err = resp.GetStringArray(framework.ParamKeyError); err != nil{ + if errMessage, err = resp.GetStringArray(framework.ParamKeyError); err != nil { log.Printf(" parse message fail when query migration: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } var count = len(id) - if len(finished) != count{ + if len(finished) != count { var err = fmt.Errorf("unexpect status array size %d", len(finished)) log.Printf(" verify status fail when query migration: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } - if len(progress) != count{ + if len(progress) != count { var err = fmt.Errorf("unexpect progress array size %d", len(finished)) log.Printf(" verify progress fail when query migration: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } - if len(errMessage) != count{ + if len(errMessage) != count { var err = fmt.Errorf("unexpect message array size %d", len(finished)) log.Printf(" verify message fail when query migration: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } - for i := 0; i < count;i++{ + for i := 0; i < count; i++ { var m = Migration{ID: id[i]} - if 1 == finished[i]{ + if 1 == finished[i] { m.Finished = true } - if 0 != progress[i]{ + if 0 != progress[i] { m.Progress = uint(progress[i]) } m.Error = errMessage[i] @@ -4073,8 +4075,8 @@ func (module *APIModule) handleQueryMigrations(w http.ResponseWriter, r *http.Re ResponseOK(respPayload, w) } -func (module *APIModule) handleGetMigration(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) handleGetMigration(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -4105,8 +4107,8 @@ func (module *APIModule) handleGetMigration(w http.ResponseWriter, r *http.Reque ResponseOK(respPayload, w) } -func (module *APIModule) handleCreateMigration(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) handleCreateMigration(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -4120,12 +4122,12 @@ func (module *APIModule) handleCreateMigration(w http.ResponseWriter, r *http.Re var err error var decoder = json.NewDecoder(r.Body) var requestData UserRequest - if err = decoder.Decode(&requestData); err != nil{ + if err = decoder.Decode(&requestData); err != nil { log.Printf(" decode create migration request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } - if "" != requestData.TargetPool{ + if "" != requestData.TargetPool { err = errors.New("migration between pools not support") log.Printf(" verify migration request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) @@ -4157,8 +4159,8 @@ func (module *APIModule) handleCreateMigration(w http.ResponseWriter, r *http.Re ResponseOK(respPayload, w) } -func (module *APIModule) handleQueryAddressPool(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) handleQueryAddressPool(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -4190,51 +4192,51 @@ func (module *APIModule) handleQueryAddressPool(w http.ResponseWriter, r *http.R payload = make([]Pool, 0) var nameArray, gatewayArray, dnsArray, providerArray []string var addressArray, allocateArray, dnsCountArray []uint64 - if nameArray, err = msg.GetStringArray(framework.ParamKeyName); err != nil{ + if nameArray, err = msg.GetStringArray(framework.ParamKeyName); err != nil { return } - if gatewayArray, err = msg.GetStringArray(framework.ParamKeyGateway); err != nil{ + if gatewayArray, err = msg.GetStringArray(framework.ParamKeyGateway); err != nil { return } - if dnsArray, err = msg.GetStringArray(framework.ParamKeyServer); err != nil{ + if dnsArray, err = msg.GetStringArray(framework.ParamKeyServer); err != nil { return } - if providerArray, err = msg.GetStringArray(framework.ParamKeyMode); err != nil{ + if providerArray, err = msg.GetStringArray(framework.ParamKeyMode); err != nil { err = fmt.Errorf("get provider fail: %s", err.Error()) return } - if addressArray, err = msg.GetUIntArray(framework.ParamKeyAddress); err != nil{ + if addressArray, err = msg.GetUIntArray(framework.ParamKeyAddress); err != nil { return } - if allocateArray, err = msg.GetUIntArray(framework.ParamKeyAllocate); err != nil{ + if allocateArray, err = msg.GetUIntArray(framework.ParamKeyAllocate); err != nil { return } - if dnsCountArray, err = msg.GetUIntArray(framework.ParamKeyCount); err != nil{ + if dnsCountArray, err = msg.GetUIntArray(framework.ParamKeyCount); err != nil { return } var count = len(nameArray) - if count != len(gatewayArray){ + if count != len(gatewayArray) { err = fmt.Errorf("unmatched gateway array size %d", len(gatewayArray)) return } - if count != len(addressArray){ + if count != len(addressArray) { err = fmt.Errorf("unmatched address array size %d", len(addressArray)) return } - if count != len(allocateArray){ + if count != len(allocateArray) { err = fmt.Errorf("unmatched allocate array size %d", len(allocateArray)) return } var start = 0 - for i := 0; i < count;i++{ + for i := 0; i < count; i++ { var dnsCount = int(dnsCountArray[i]) var end = start + dnsCount - var dns = dnsArray[start : end] + var dns = dnsArray[start:end] var pool = Pool{ - Name: nameArray[i], - Gateway: gatewayArray[i], - DNS: dns, - Provider: providerArray[i], + Name: nameArray[i], + Gateway: gatewayArray[i], + DNS: dns, + Provider: providerArray[i], Addresses: addressArray[i], Allocated: allocateArray[i], } @@ -4244,7 +4246,7 @@ func (module *APIModule) handleQueryAddressPool(w http.ResponseWriter, r *http.R return } payload, err := parser(resp) - if err != nil{ + if err != nil { log.Printf(" parse query address pool result fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -4252,8 +4254,8 @@ func (module *APIModule) handleQueryAddressPool(w http.ResponseWriter, r *http.R ResponseOK(payload, w) } -func (module *APIModule) handleGetAddressPool(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) handleGetAddressPool(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -4280,32 +4282,32 @@ func (module *APIModule) handleGetAddressPool(w http.ResponseWriter, r *http.Req payload.Ranges = make([]AddressRangeConfig, 0) var addressArray, instanceArray, startArray, endArray, maskArray []string var capacityArray []uint64 - if startArray, err = msg.GetStringArray(framework.ParamKeyStart); err != nil{ + if startArray, err = msg.GetStringArray(framework.ParamKeyStart); err != nil { return } - if endArray, err = msg.GetStringArray(framework.ParamKeyEnd); err != nil{ + if endArray, err = msg.GetStringArray(framework.ParamKeyEnd); err != nil { return } - if maskArray, err = msg.GetStringArray(framework.ParamKeyMask); err != nil{ + if maskArray, err = msg.GetStringArray(framework.ParamKeyMask); err != nil { return } - if capacityArray, err = msg.GetUIntArray(framework.ParamKeyCount); err != nil{ + if capacityArray, err = msg.GetUIntArray(framework.ParamKeyCount); err != nil { return } - if payload.Gateway, err = msg.GetString(framework.ParamKeyGateway); err != nil{ + if payload.Gateway, err = msg.GetString(framework.ParamKeyGateway); err != nil { return } - if payload.DNS, err = msg.GetStringArray(framework.ParamKeyServer); err != nil{ + if payload.DNS, err = msg.GetStringArray(framework.ParamKeyServer); err != nil { return } - if payload.Provider, err = msg.GetString(framework.ParamKeyMode); err != nil{ + if payload.Provider, err = msg.GetString(framework.ParamKeyMode); err != nil { err = fmt.Errorf("get provider fail: %s", err.Error()) return } - if addressArray, err = msg.GetStringArray(framework.ParamKeyAddress); err != nil{ + if addressArray, err = msg.GetStringArray(framework.ParamKeyAddress); err != nil { return } - if instanceArray, err = msg.GetStringArray(framework.ParamKeyInstance); err != nil{ + if instanceArray, err = msg.GetStringArray(framework.ParamKeyInstance); err != nil { return } var rangeCount = len(startArray) @@ -4319,23 +4321,23 @@ func (module *APIModule) handleGetAddressPool(w http.ResponseWriter, r *http.Req } var allocatedCount = len(addressArray) - if allocatedCount != len(instanceArray){ + if allocatedCount != len(instanceArray) { err = fmt.Errorf("unmatched instance array size %d", len(instanceArray)) return } - for i := 0; i < rangeCount; i++{ - payload.Ranges = append(payload.Ranges, AddressRangeConfig{Start:startArray[i], End: endArray[i], Netmask: maskArray[i], Capacity: uint32(capacityArray[i])}) + for i := 0; i < rangeCount; i++ { + payload.Ranges = append(payload.Ranges, AddressRangeConfig{Start: startArray[i], End: endArray[i], Netmask: maskArray[i], Capacity: uint32(capacityArray[i])}) } - for i := 0; i < allocatedCount; i++{ + for i := 0; i < allocatedCount; i++ { payload.Allocated = append(payload.Allocated, AllocatedAddress{addressArray[i], instanceArray[i]}) } return payload, nil } payload, err := parser(resp) - if err != nil{ + if err != nil { log.Printf(" parse get address pool result fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -4344,8 +4346,8 @@ func (module *APIModule) handleGetAddressPool(w http.ResponseWriter, r *http.Req ResponseOK(payload, w) } -func (module *APIModule) handleCreateAddressPool(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) handleCreateAddressPool(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -4353,14 +4355,14 @@ func (module *APIModule) handleCreateAddressPool(w http.ResponseWriter, r *http. var err error var decoder = json.NewDecoder(r.Body) var request AddressPoolConfig - if err = decoder.Decode(&request); err != nil{ + if err = decoder.Decode(&request); err != nil { log.Printf(" parse create address pool request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } request.Name = poolName msg, _ := framework.CreateJsonMessage(framework.CreateAddressPoolRequest) - if err = request.build(msg); err != nil{ + if err = request.build(msg); err != nil { log.Printf(" build create address pool request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -4380,8 +4382,8 @@ func (module *APIModule) handleCreateAddressPool(w http.ResponseWriter, r *http. ResponseOK("", w) } -func (module *APIModule) handleModifyAddressPool(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) handleModifyAddressPool(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -4389,14 +4391,14 @@ func (module *APIModule) handleModifyAddressPool(w http.ResponseWriter, r *http. var err error var decoder = json.NewDecoder(r.Body) var request AddressPoolConfig - if err = decoder.Decode(&request); err != nil{ + if err = decoder.Decode(&request); err != nil { log.Printf(" parse modify address pool request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } request.Name = poolName msg, _ := framework.CreateJsonMessage(framework.ModifyAddressPoolRequest) - if err = request.build(msg); err != nil{ + if err = request.build(msg); err != nil { log.Printf(" build modify address pool request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -4416,8 +4418,8 @@ func (module *APIModule) handleModifyAddressPool(w http.ResponseWriter, r *http. ResponseOK("", w) } -func (module *APIModule) handleDeleteAddressPool(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) handleDeleteAddressPool(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -4439,8 +4441,8 @@ func (module *APIModule) handleDeleteAddressPool(w http.ResponseWriter, r *http. ResponseOK("", w) } -func (module *APIModule) handleQueryAddressRange(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) handleQueryAddressRange(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -4470,31 +4472,31 @@ func (module *APIModule) handleQueryAddressRange(w http.ResponseWriter, r *http. var parser = func(msg framework.Message) (payload []Range, err error) { payload = make([]Range, 0) var startArray, endArray, maskArray []string - if startArray, err = msg.GetStringArray(framework.ParamKeyStart); err != nil{ + if startArray, err = msg.GetStringArray(framework.ParamKeyStart); err != nil { return } - if endArray, err = msg.GetStringArray(framework.ParamKeyEnd); err != nil{ + if endArray, err = msg.GetStringArray(framework.ParamKeyEnd); err != nil { return } - if maskArray, err = msg.GetStringArray(framework.ParamKeyMask); err != nil{ + if maskArray, err = msg.GetStringArray(framework.ParamKeyMask); err != nil { return } var count = len(startArray) - if count != len(endArray){ + if count != len(endArray) { err = fmt.Errorf("unmatched end array size %d", len(endArray)) return } - if count != len(maskArray){ + if count != len(maskArray) { err = fmt.Errorf("unmatched netmask array size %d", len(maskArray)) return } - for i := 0; i < count;i++{ + for i := 0; i < count; i++ { payload = append(payload, Range{startArray[i], endArray[i], maskArray[i]}) } return } payload, err := parser(resp) - if err != nil{ + if err != nil { log.Printf(" parse query address range result fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -4502,8 +4504,8 @@ func (module *APIModule) handleQueryAddressRange(w http.ResponseWriter, r *http. ResponseOK(payload, w) } -func (module *APIModule) handleGetAddressRange(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) handleGetAddressRange(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -4532,40 +4534,40 @@ func (module *APIModule) handleGetAddressRange(w http.ResponseWriter, r *http.Re var parser = func(msg framework.Message) (payload AddressRangeStatus, err error) { payload.Allocated = make([]AllocatedAddress, 0) var addressArray, instanceArray []string - if payload.Start, err = msg.GetString(framework.ParamKeyStart); err != nil{ + if payload.Start, err = msg.GetString(framework.ParamKeyStart); err != nil { return } - if payload.End, err = msg.GetString(framework.ParamKeyEnd); err != nil{ + if payload.End, err = msg.GetString(framework.ParamKeyEnd); err != nil { return } - if payload.Netmask, err = msg.GetString(framework.ParamKeyMask); err != nil{ + if payload.Netmask, err = msg.GetString(framework.ParamKeyMask); err != nil { return } capacity, err := msg.GetUInt(framework.ParamKeyCount) - if err != nil{ + if err != nil { return } payload.Capacity = uint32(capacity) - if addressArray, err = msg.GetStringArray(framework.ParamKeyAddress); err != nil{ + if addressArray, err = msg.GetStringArray(framework.ParamKeyAddress); err != nil { return } - if instanceArray, err = msg.GetStringArray(framework.ParamKeyInstance); err != nil{ + if instanceArray, err = msg.GetStringArray(framework.ParamKeyInstance); err != nil { return } var count = len(addressArray) - if count != len(instanceArray){ + if count != len(instanceArray) { err = fmt.Errorf("unmatched instance array size %d", len(instanceArray)) return } payload.Allocated = make([]AllocatedAddress, 0) - for i := 0; i< count ; i++{ + for i := 0; i < count; i++ { payload.Allocated = append(payload.Allocated, AllocatedAddress{addressArray[i], instanceArray[i]}) } return payload, nil } payload, err := parser(resp) - if err != nil{ + if err != nil { log.Printf(" parse get address range result fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -4573,8 +4575,8 @@ func (module *APIModule) handleGetAddressRange(w http.ResponseWriter, r *http.Re ResponseOK(payload, w) } -func (module *APIModule) handleAddAddressRange(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) handleAddAddressRange(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -4588,7 +4590,7 @@ func (module *APIModule) handleAddAddressRange(w http.ResponseWriter, r *http.Re var err error var decoder = json.NewDecoder(r.Body) var requestData UserRequest - if err = decoder.Decode(&requestData); err != nil{ + if err = decoder.Decode(&requestData); err != nil { log.Printf(" parse add address range request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -4616,8 +4618,8 @@ func (module *APIModule) handleAddAddressRange(w http.ResponseWriter, r *http.Re ResponseOK("", w) } -func (module *APIModule) handleRemoveAddressRange(w http.ResponseWriter, r *http.Request, params httprouter.Params){ - if err := module.verifyRequestSignature(r); err != nil{ +func (module *APIModule) handleRemoveAddressRange(w http.ResponseWriter, r *http.Request, params httprouter.Params) { + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -4646,7 +4648,7 @@ func (module *APIModule) handleRemoveAddressRange(w http.ResponseWriter, r *http } func (module *APIModule) handleGetBatchCreateGuest(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -4678,53 +4680,53 @@ func (module *APIModule) handleGetBatchCreateGuest(w http.ResponseWriter, r *htt const ( StatusProcess = "creating" StatusSuccess = "created" - StatusFail = "fail" + StatusFail = "fail" ) var allFinished = true var parser = func(msg framework.Message) (payload []GuestStatus, err error) { var nameArray, idArray, errArray []string var statusArray, progressArray []uint64 - if nameArray, err = msg.GetStringArray(framework.ParamKeyName); err != nil{ + if nameArray, err = msg.GetStringArray(framework.ParamKeyName); err != nil { return } - if idArray, err = msg.GetStringArray(framework.ParamKeyGuest); err != nil{ + if idArray, err = msg.GetStringArray(framework.ParamKeyGuest); err != nil { return } - if errArray, err = msg.GetStringArray(framework.ParamKeyError); err != nil{ + if errArray, err = msg.GetStringArray(framework.ParamKeyError); err != nil { return } - if statusArray, err = msg.GetUIntArray(framework.ParamKeyStatus); err != nil{ + if statusArray, err = msg.GetUIntArray(framework.ParamKeyStatus); err != nil { return } - if progressArray, err = msg.GetUIntArray(framework.ParamKeyProgress); err != nil{ + if progressArray, err = msg.GetUIntArray(framework.ParamKeyProgress); err != nil { return } var count = len(nameArray) - if count != len(idArray){ + if count != len(idArray) { err = fmt.Errorf("unmatched id array size %d", len(idArray)) return } - if count != len(errArray){ + if count != len(errArray) { err = fmt.Errorf("unmatched error array size %d", len(errArray)) return } - if count != len(statusArray){ + if count != len(statusArray) { err = fmt.Errorf("unmatched status array size %d", len(statusArray)) return } - if count != len(progressArray){ + if count != len(progressArray) { err = fmt.Errorf("unmatched progress array size %d", len(progressArray)) return } - for i := 0; i < count;i++{ + for i := 0; i < count; i++ { switch statusArray[i] { case BatchTaskStatusProcess: allFinished = false - payload = append(payload, GuestStatus{nameArray[i], idArray[i], StatusProcess,errArray[i], progressArray[i]}) + payload = append(payload, GuestStatus{nameArray[i], idArray[i], StatusProcess, errArray[i], progressArray[i]}) case BatchTaskStatusSuccess: - payload = append(payload, GuestStatus{nameArray[i], idArray[i], StatusSuccess,errArray[i], progressArray[i]}) + payload = append(payload, GuestStatus{nameArray[i], idArray[i], StatusSuccess, errArray[i], progressArray[i]}) case BatchTaskStatusFail: - payload = append(payload, GuestStatus{nameArray[i], idArray[i], StatusFail,errArray[i], progressArray[i]}) + payload = append(payload, GuestStatus{nameArray[i], idArray[i], StatusFail, errArray[i], progressArray[i]}) default: err = fmt.Errorf("invalid status %d for guest '%s'", statusArray[i], nameArray[i]) return @@ -4733,15 +4735,15 @@ func (module *APIModule) handleGetBatchCreateGuest(w http.ResponseWriter, r *htt return payload, nil } payload, err := parser(resp) - if err != nil{ + if err != nil { log.Printf(" parse batch create guest result fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } - if allFinished{ + if allFinished { w.WriteHeader(http.StatusOK) - }else{ + } else { w.WriteHeader(http.StatusAccepted) } ResponseOK(payload, w) @@ -4749,7 +4751,7 @@ func (module *APIModule) handleGetBatchCreateGuest(w http.ResponseWriter, r *htt func (module *APIModule) handleStartBatchCreateGuest(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err error - if err = module.verifyRequestSignature(r); err != nil{ + if err = module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -4783,45 +4785,45 @@ func (module *APIModule) handleStartBatchCreateGuest(w http.ResponseWriter, r *h decoder := json.NewDecoder(r.Body) var request userRequest - if err := decoder.Decode(&request);err != nil{ + if err := decoder.Decode(&request); err != nil { log.Printf(" parse batch create guest request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } - var validator = func(config userRequest) (err error){ - if "" == config.NamePrefix{ + var validator = func(config userRequest) (err error) { + if "" == config.NamePrefix { err = fmt.Errorf("prefix required") return } - if "" == config.Owner{ + if "" == config.Owner { err = fmt.Errorf("owner required") return } - if "" == config.Group{ + if "" == config.Group { err = fmt.Errorf("group required") return } - if "" == config.Pool{ + if "" == config.Pool { err = fmt.Errorf("target pool required") return } - if "" == config.Template{ + if "" == config.Template { err = fmt.Errorf("system template required") return } - if 0 == config.Cores{ + if 0 == config.Cores { err = fmt.Errorf("cores required") return } - if 0 == config.Memory{ + if 0 == config.Memory { err = fmt.Errorf("memory required") return } return nil } - if err = validator(request); err != nil{ + if err = validator(request); err != nil { log.Printf(" validate batch create guest request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -4858,7 +4860,7 @@ func (module *APIModule) handleStartBatchCreateGuest(w http.ResponseWriter, r *h msg.SetBoolean(framework.ParamKeyOption, request.AutoStart) msg.SetString(framework.ParamKeyTemplate, request.Template) //optional disk image - if "" != request.FromImage{ + if "" != request.FromImage { msg.SetString(framework.ParamKeyImage, request.FromImage) } msg.SetStringArray(framework.ParamKeyModule, request.Modules) @@ -4867,24 +4869,24 @@ func (module *APIModule) handleStartBatchCreateGuest(w http.ResponseWriter, r *h RootLoginEnabled ) var flags []uint64 - if nil != request.CloudInit{ + if nil != request.CloudInit { msg.SetString(framework.ParamKeyAdmin, request.CloudInit.AdminName) msg.SetString(framework.ParamKeySecret, request.CloudInit.AdminSecret) msg.SetString(framework.ParamKeyPath, request.CloudInit.DataPath) - if request.CloudInit.RootEnabled{ + if request.CloudInit.RootEnabled { flags = append(flags, RootLoginEnabled) - }else{ + } else { flags = append(flags, RootLoginDisabled) } - }else{ + } else { msg.SetString(framework.ParamKeyAdmin, "") msg.SetString(framework.ParamKeySecret, "") msg.SetString(framework.ParamKeyPath, "") flags = append(flags, RootLoginEnabled) } - if nil != request.QoS{ + if nil != request.QoS { var qos = request.QoS switch qos.CPUPriority { case priority_label_high: @@ -4901,7 +4903,7 @@ func (module *APIModule) handleStartBatchCreateGuest(w http.ResponseWriter, r *h } msg.SetUIntArray(framework.ParamKeyLimit, []uint64{qos.ReadSpeed, qos.WriteSpeed, qos.ReadIOPS, qos.WriteIOPS, qos.ReceiveSpeed, qos.SendSpeed}) - }else{ + } else { msg.SetUInt(framework.ParamKeyPriority, PriorityHigh) msg.SetUIntArray(framework.ParamKeyLimit, []uint64{0, 0, 0, 0, 0, 0}) } @@ -4921,7 +4923,7 @@ func (module *APIModule) handleStartBatchCreateGuest(w http.ResponseWriter, r *h return } batchID, err := resp.GetString(framework.ParamKeyID) - if err != nil{ + if err != nil { log.Printf(" parse batch id fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -4936,7 +4938,7 @@ func (module *APIModule) handleStartBatchCreateGuest(w http.ResponseWriter, r *h } func (module *APIModule) handleGetBatchDeleteGuest(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -4967,47 +4969,47 @@ func (module *APIModule) handleGetBatchDeleteGuest(w http.ResponseWriter, r *htt const ( StatusProcess = "deleting" StatusSuccess = "deleted" - StatusFail = "fail" + StatusFail = "fail" ) var allFinished = true var parser = func(msg framework.Message) (payload []GuestStatus, err error) { var nameArray, idArray, errArray []string var statusArray []uint64 - if nameArray, err = msg.GetStringArray(framework.ParamKeyName); err != nil{ + if nameArray, err = msg.GetStringArray(framework.ParamKeyName); err != nil { return } - if idArray, err = msg.GetStringArray(framework.ParamKeyGuest); err != nil{ + if idArray, err = msg.GetStringArray(framework.ParamKeyGuest); err != nil { return } - if errArray, err = msg.GetStringArray(framework.ParamKeyError); err != nil{ + if errArray, err = msg.GetStringArray(framework.ParamKeyError); err != nil { return } - if statusArray, err = msg.GetUIntArray(framework.ParamKeyStatus); err != nil{ + if statusArray, err = msg.GetUIntArray(framework.ParamKeyStatus); err != nil { return } var count = len(nameArray) - if count != len(idArray){ + if count != len(idArray) { err = fmt.Errorf("unmatched id array size %d", len(idArray)) return } - if count != len(errArray){ + if count != len(errArray) { err = fmt.Errorf("unmatched error array size %d", len(errArray)) return } - if count != len(statusArray){ + if count != len(statusArray) { err = fmt.Errorf("unmatched status array size %d", len(statusArray)) return } - for i := 0; i < count;i++{ + for i := 0; i < count; i++ { switch statusArray[i] { case BatchTaskStatusProcess: - payload = append(payload, GuestStatus{nameArray[i], idArray[i], StatusProcess,errArray[i] }) + payload = append(payload, GuestStatus{nameArray[i], idArray[i], StatusProcess, errArray[i]}) allFinished = false case BatchTaskStatusSuccess: - payload = append(payload, GuestStatus{nameArray[i], idArray[i], StatusSuccess,errArray[i] }) + payload = append(payload, GuestStatus{nameArray[i], idArray[i], StatusSuccess, errArray[i]}) case BatchTaskStatusFail: - payload = append(payload, GuestStatus{nameArray[i], idArray[i], StatusFail,errArray[i] }) + payload = append(payload, GuestStatus{nameArray[i], idArray[i], StatusFail, errArray[i]}) default: err = fmt.Errorf("invalid status %d for guest '%s'", statusArray[i], nameArray[i]) return @@ -5016,21 +5018,21 @@ func (module *APIModule) handleGetBatchDeleteGuest(w http.ResponseWriter, r *htt return payload, nil } payload, err := parser(resp) - if err != nil{ + if err != nil { log.Printf(" parse batch delete guest result fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } - if allFinished{ + if allFinished { w.WriteHeader(http.StatusOK) - }else{ + } else { w.WriteHeader(http.StatusAccepted) } ResponseOK(payload, w) } func (module *APIModule) handleStartBatchDeleteGuest(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -5040,7 +5042,7 @@ func (module *APIModule) handleStartBatchDeleteGuest(w http.ResponseWriter, r *h var err error var decoder = json.NewDecoder(r.Body) var requestData UserRequest - if err = decoder.Decode(&requestData); err != nil{ + if err = decoder.Decode(&requestData); err != nil { log.Printf(" parse start batch delete request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -5062,7 +5064,7 @@ func (module *APIModule) handleStartBatchDeleteGuest(w http.ResponseWriter, r *h return } batchID, err := resp.GetString(framework.ParamKeyID) - if err != nil{ + if err != nil { log.Printf(" parse batch id fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -5076,9 +5078,8 @@ func (module *APIModule) handleStartBatchDeleteGuest(w http.ResponseWriter, r *h ResponseOK(result, w) } - func (module *APIModule) handleGetBatchStopGuest(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -5109,47 +5110,47 @@ func (module *APIModule) handleGetBatchStopGuest(w http.ResponseWriter, r *http. const ( StatusProcess = "stopping" StatusSuccess = "stopped" - StatusFail = "fail" + StatusFail = "fail" ) var allFinished = true var parser = func(msg framework.Message) (payload []GuestStatus, err error) { var nameArray, idArray, errArray []string var statusArray []uint64 - if nameArray, err = msg.GetStringArray(framework.ParamKeyName); err != nil{ + if nameArray, err = msg.GetStringArray(framework.ParamKeyName); err != nil { return } - if idArray, err = msg.GetStringArray(framework.ParamKeyGuest); err != nil{ + if idArray, err = msg.GetStringArray(framework.ParamKeyGuest); err != nil { return } - if errArray, err = msg.GetStringArray(framework.ParamKeyError); err != nil{ + if errArray, err = msg.GetStringArray(framework.ParamKeyError); err != nil { return } - if statusArray, err = msg.GetUIntArray(framework.ParamKeyStatus); err != nil{ + if statusArray, err = msg.GetUIntArray(framework.ParamKeyStatus); err != nil { return } var count = len(nameArray) - if count != len(idArray){ + if count != len(idArray) { err = fmt.Errorf("unmatched id array size %d", len(idArray)) return } - if count != len(errArray){ + if count != len(errArray) { err = fmt.Errorf("unmatched error array size %d", len(errArray)) return } - if count != len(statusArray){ + if count != len(statusArray) { err = fmt.Errorf("unmatched status array size %d", len(statusArray)) return } - for i := 0; i < count;i++{ + for i := 0; i < count; i++ { switch statusArray[i] { case BatchTaskStatusProcess: - payload = append(payload, GuestStatus{nameArray[i], idArray[i], StatusProcess,errArray[i] }) + payload = append(payload, GuestStatus{nameArray[i], idArray[i], StatusProcess, errArray[i]}) allFinished = false case BatchTaskStatusSuccess: - payload = append(payload, GuestStatus{nameArray[i], idArray[i], StatusSuccess,errArray[i] }) + payload = append(payload, GuestStatus{nameArray[i], idArray[i], StatusSuccess, errArray[i]}) case BatchTaskStatusFail: - payload = append(payload, GuestStatus{nameArray[i], idArray[i], StatusFail,errArray[i] }) + payload = append(payload, GuestStatus{nameArray[i], idArray[i], StatusFail, errArray[i]}) default: err = fmt.Errorf("invalid status %d for guest '%s'", statusArray[i], nameArray[i]) return @@ -5158,21 +5159,21 @@ func (module *APIModule) handleGetBatchStopGuest(w http.ResponseWriter, r *http. return payload, nil } payload, err := parser(resp) - if err != nil{ + if err != nil { log.Printf(" parse batch stop guest result fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } - if allFinished{ + if allFinished { w.WriteHeader(http.StatusOK) - }else{ + } else { w.WriteHeader(http.StatusAccepted) } ResponseOK(payload, w) } func (module *APIModule) handleStartBatchStopGuest(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -5183,7 +5184,7 @@ func (module *APIModule) handleStartBatchStopGuest(w http.ResponseWriter, r *htt var err error var decoder = json.NewDecoder(r.Body) var requestData UserRequest - if err = decoder.Decode(&requestData); err != nil{ + if err = decoder.Decode(&requestData); err != nil { log.Printf(" parse start batch stop request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -5196,9 +5197,9 @@ func (module *APIModule) handleStartBatchStopGuest(w http.ResponseWriter, r *htt ) var options []uint64 - if requestData.Force{ + if requestData.Force { options = []uint64{RebootDisable, ForceStopEnable} - }else{ + } else { options = []uint64{RebootDisable, ForceStopDisable} } @@ -5219,7 +5220,7 @@ func (module *APIModule) handleStartBatchStopGuest(w http.ResponseWriter, r *htt return } batchID, err := resp.GetString(framework.ParamKeyID) - if err != nil{ + if err != nil { log.Printf(" parse batch id fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -5233,9 +5234,9 @@ func (module *APIModule) handleStartBatchStopGuest(w http.ResponseWriter, r *htt ResponseOK(result, w) } -func (module *APIModule) querySystemTemplates(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) querySystemTemplates(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err = module.verifyRequestSignature(r) - if err != nil{ + if err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -5262,32 +5263,32 @@ func (module *APIModule) querySystemTemplates(w http.ResponseWriter, r *http.Req ModifiedTime string `json:"modified_time,omitempty"` } - var parser = func(msg framework.Message) (items []responseItem, err error){ + var parser = func(msg framework.Message) (items []responseItem, err error) { //unmarshal var name, id, operatingSystem, createTime, modifyTime []string - if name, err = msg.GetStringArray(framework.ParamKeyName); err != nil{ + if name, err = msg.GetStringArray(framework.ParamKeyName); err != nil { err = fmt.Errorf("get name fail: %s", err.Error()) return } - if id, err = msg.GetStringArray(framework.ParamKeyID); err != nil{ + if id, err = msg.GetStringArray(framework.ParamKeyID); err != nil { err = fmt.Errorf("get id fail: %s", err.Error()) return } - if operatingSystem, err = msg.GetStringArray(framework.ParamKeySystem); err != nil{ + if operatingSystem, err = msg.GetStringArray(framework.ParamKeySystem); err != nil { err = fmt.Errorf("get operating system fail: %s", err.Error()) return } - if createTime, err = msg.GetStringArray(framework.ParamKeyCreate); err != nil{ + if createTime, err = msg.GetStringArray(framework.ParamKeyCreate); err != nil { err = fmt.Errorf("get created time fail: %s", err.Error()) return } - if modifyTime, err = msg.GetStringArray(framework.ParamKeyModify); err != nil{ + if modifyTime, err = msg.GetStringArray(framework.ParamKeyModify); err != nil { err = fmt.Errorf("get modified time fail: %s", err.Error()) return } var itemCount = len(name) items = make([]responseItem, 0) - for i := 0 ; i < itemCount;i++{ + for i := 0; i < itemCount; i++ { items = append(items, responseItem{ ID: id[i], Name: name[i], @@ -5299,7 +5300,7 @@ func (module *APIModule) querySystemTemplates(w http.ResponseWriter, r *http.Req return items, nil } var items []responseItem - if items, err = parser(resp); err != nil{ + if items, err = parser(resp); err != nil { log.Printf(" parse query system templates result fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -5307,9 +5308,9 @@ func (module *APIModule) querySystemTemplates(w http.ResponseWriter, r *http.Req ResponseOK(items, w) } -func (module *APIModule) getSystemTemplate(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) getSystemTemplate(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err = module.verifyRequestSignature(r) - if err != nil{ + if err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -5329,54 +5330,54 @@ func (module *APIModule) getSystemTemplate(w http.ResponseWriter, r *http.Reques return } - var parser = func(msg framework.Message) (t SystemTemplate, err error){ - if t.ID, err = msg.GetString(framework.ParamKeyID); err != nil{ + var parser = func(msg framework.Message) (t SystemTemplate, err error) { + if t.ID, err = msg.GetString(framework.ParamKeyID); err != nil { err = fmt.Errorf("get template id fail: %s", err.Error()) return } - if t.Name, err = msg.GetString(framework.ParamKeyName); err != nil{ + if t.Name, err = msg.GetString(framework.ParamKeyName); err != nil { err = fmt.Errorf("get template name fail: %s", err.Error()) return } - if t.Admin, err = msg.GetString(framework.ParamKeyAdmin); err != nil{ + if t.Admin, err = msg.GetString(framework.ParamKeyAdmin); err != nil { err = fmt.Errorf("get template admin fail: %s", err.Error()) return } - if t.OperatingSystem, err = msg.GetString(framework.ParamKeySystem); err != nil{ + if t.OperatingSystem, err = msg.GetString(framework.ParamKeySystem); err != nil { err = fmt.Errorf("get template os fail: %s", err.Error()) return } - if t.Disk, err = msg.GetString(framework.ParamKeyDisk); err != nil{ + if t.Disk, err = msg.GetString(framework.ParamKeyDisk); err != nil { err = fmt.Errorf("get template disk fail: %s", err.Error()) return } - if t.Network, err = msg.GetString(framework.ParamKeyNetwork); err != nil{ + if t.Network, err = msg.GetString(framework.ParamKeyNetwork); err != nil { err = fmt.Errorf("get template network fail: %s", err.Error()) return } - if t.Display, err = msg.GetString(framework.ParamKeyDisplay); err != nil{ + if t.Display, err = msg.GetString(framework.ParamKeyDisplay); err != nil { err = fmt.Errorf("get template control fail: %s", err.Error()) return } - if t.Control, err = msg.GetString(framework.ParamKeyMonitor); err != nil{ + if t.Control, err = msg.GetString(framework.ParamKeyMonitor); err != nil { err = fmt.Errorf("get template id fail: %s", err.Error()) return } - if t.USB, err = msg.GetString(framework.ParamKeyDevice); err != nil{ + if t.USB, err = msg.GetString(framework.ParamKeyDevice); err != nil { err = fmt.Errorf("get template usb fail: %s", err.Error()) return } - if t.Tablet, err = msg.GetString(framework.ParamKeyInterface); err != nil{ + if t.Tablet, err = msg.GetString(framework.ParamKeyInterface); err != nil { err = fmt.Errorf("get template tablet fail: %s", err.Error()) return } - if t.CreatedTime, err = msg.GetString(framework.ParamKeyCreate); err != nil{ + if t.CreatedTime, err = msg.GetString(framework.ParamKeyCreate); err != nil { err = fmt.Errorf("get created time fail: %s", err.Error()) return } - if t.ModifiedTime, err = msg.GetString(framework.ParamKeyModify); err != nil{ + if t.ModifiedTime, err = msg.GetString(framework.ParamKeyModify); err != nil { err = fmt.Errorf("get modified time fail: %s", err.Error()) return } @@ -5384,7 +5385,7 @@ func (module *APIModule) getSystemTemplate(w http.ResponseWriter, r *http.Reques } var template SystemTemplate - if template, err = parser(resp); err != nil{ + if template, err = parser(resp); err != nil { log.Printf(" parse get system templates result fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -5392,53 +5393,53 @@ func (module *APIModule) getSystemTemplate(w http.ResponseWriter, r *http.Reques ResponseOK(template, w) } -func (module *APIModule) createSystemTemplate(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) createSystemTemplate(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err = module.verifyRequestSignature(r) - if err != nil{ + if err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } var decoder = json.NewDecoder(r.Body) var request SystemTemplateConfig - if err = decoder.Decode(&request);err != nil{ + if err = decoder.Decode(&request); err != nil { log.Printf(" parse create system template request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } - var validator = func(config SystemTemplateConfig) (err error){ - if "" == config.Name{ + var validator = func(config SystemTemplateConfig) (err error) { + if "" == config.Name { err = fmt.Errorf("name required") return } - if "" == config.Admin{ + if "" == config.Admin { err = fmt.Errorf("admin required") return } - if "" == config.OperatingSystem{ + if "" == config.OperatingSystem { err = fmt.Errorf("operating system required") return } - if "" == config.Disk{ + if "" == config.Disk { err = fmt.Errorf("disk driver required") return } - if "" == config.Network{ + if "" == config.Network { err = fmt.Errorf("network driver required") return } - if "" == config.Display{ + if "" == config.Display { err = fmt.Errorf("display model required") return } - if "" == config.Control{ + if "" == config.Control { err = fmt.Errorf("control protocol required") return } return nil } - if err = validator(request); err != nil{ + if err = validator(request); err != nil { log.Printf(" validate create system template request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -5468,7 +5469,7 @@ func (module *APIModule) createSystemTemplate(w http.ResponseWriter, r *http.Req return } var templateID string - if templateID, err = resp.GetString(framework.ParamKeyID);err != nil{ + if templateID, err = resp.GetString(framework.ParamKeyID); err != nil { log.Printf(" get id from create result fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -5481,55 +5482,54 @@ func (module *APIModule) createSystemTemplate(w http.ResponseWriter, r *http.Req ResponseOK(data, w) } - -func (module *APIModule) modifySystemTemplate(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) modifySystemTemplate(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err = module.verifyRequestSignature(r) - if err != nil{ + if err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } var templateID = params.ByName("id") var decoder = json.NewDecoder(r.Body) var request SystemTemplateConfig - if err = decoder.Decode(&request);err != nil{ + if err = decoder.Decode(&request); err != nil { log.Printf(" parse modify system template request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } - var validator = func(config SystemTemplateConfig) (err error){ - if "" == config.Name{ + var validator = func(config SystemTemplateConfig) (err error) { + if "" == config.Name { err = fmt.Errorf("name required") return } - if "" == config.Admin{ + if "" == config.Admin { err = fmt.Errorf("admin required") return } - if "" == config.OperatingSystem{ + if "" == config.OperatingSystem { err = fmt.Errorf("operating system required") return } - if "" == config.Disk{ + if "" == config.Disk { err = fmt.Errorf("disk driver required") return } - if "" == config.Network{ + if "" == config.Network { err = fmt.Errorf("network driver required") return } - if "" == config.Display{ + if "" == config.Display { err = fmt.Errorf("display model required") return } - if "" == config.Control{ + if "" == config.Control { err = fmt.Errorf("control protocol required") return } return nil } - if err = validator(request); err != nil{ + if err = validator(request); err != nil { log.Printf(" validate modify system template request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -5562,10 +5562,9 @@ func (module *APIModule) modifySystemTemplate(w http.ResponseWriter, r *http.Req ResponseOK("", w) } - -func (module *APIModule) deleteSystemTemplate(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) deleteSystemTemplate(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err = module.verifyRequestSignature(r) - if err != nil{ + if err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -5587,9 +5586,9 @@ func (module *APIModule) deleteSystemTemplate(w http.ResponseWriter, r *http.Req ResponseOK("", w) } -func (module *APIModule) resetMonitorSecret(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) resetMonitorSecret(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err = module.verifyRequestSignature(r) - if err != nil{ + if err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -5613,9 +5612,9 @@ func (module *APIModule) resetMonitorSecret(w http.ResponseWriter, r *http.Reque ResponseOK("", w) } -func (module *APIModule) queryCellStorages(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) queryCellStorages(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err = module.verifyRequestSignature(r) - if err != nil{ + if err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -5641,7 +5640,7 @@ func (module *APIModule) queryCellStorages(w http.ResponseWriter, r *http.Reques Data []string `json:"data"` } - var parser = func(msg framework.Message) (payload Payload, err error){ + var parser = func(msg framework.Message) (payload Payload, err error) { const ( StoragePoolModeLocal = iota StoragePoolModeNFS @@ -5649,7 +5648,7 @@ func (module *APIModule) queryCellStorages(w http.ResponseWriter, r *http.Reques ) //unmarshal var mode uint - if mode, err = msg.GetUInt(framework.ParamKeyMode); err != nil{ + if mode, err = msg.GetUInt(framework.ParamKeyMode); err != nil { err = fmt.Errorf("get storage mode fail: %s", err.Error()) return } @@ -5663,18 +5662,18 @@ func (module *APIModule) queryCellStorages(w http.ResponseWriter, r *http.Reques return } - if payload.System, err = msg.GetStringArray(framework.ParamKeySystem); err != nil{ + if payload.System, err = msg.GetStringArray(framework.ParamKeySystem); err != nil { err = fmt.Errorf("get system paths fail: %s", err.Error()) return } - if payload.Data, err = msg.GetStringArray(framework.ParamKeyData); err != nil{ + if payload.Data, err = msg.GetStringArray(framework.ParamKeyData); err != nil { err = fmt.Errorf("get data paths fail: %s", err.Error()) return } return } var payload Payload - if payload, err = parser(resp); err != nil{ + if payload, err = parser(resp); err != nil { log.Printf(" parse query cell storages result fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -5682,9 +5681,9 @@ func (module *APIModule) queryCellStorages(w http.ResponseWriter, r *http.Reques ResponseOK(payload, w) } -func (module *APIModule) changeCellStorage(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) changeCellStorage(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err = module.verifyRequestSignature(r) - if err != nil{ + if err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -5694,12 +5693,12 @@ func (module *APIModule) changeCellStorage(w http.ResponseWriter, r *http.Reques } var decoder = json.NewDecoder(r.Body) var request Payload - if err = decoder.Decode(&request);err != nil{ + if err = decoder.Decode(&request); err != nil { log.Printf(" parse change cell storage request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } - if "" == request.Default{ + if "" == request.Default { err = errors.New("target path required") log.Printf(" verify change cell storage request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) @@ -5723,10 +5722,11 @@ func (module *APIModule) changeCellStorage(w http.ResponseWriter, r *http.Reques } ResponseOK("", w) } + //Security Policy Group -func (module *APIModule) querySecurityPolicyGroups(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) querySecurityPolicyGroups(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err = module.verifyRequestSignature(r) - if err != nil{ + if err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -5740,14 +5740,14 @@ func (module *APIModule) querySecurityPolicyGroups(w http.ResponseWriter, r *htt msg.SetString(framework.ParamKeyUser, owner) msg.SetString(framework.ParamKeyGroup, group) - if "true" == globalOnly{ + if "true" == globalOnly { msg.SetBoolean(framework.ParamKeyLimit, true) - }else{ + } else { msg.SetBoolean(framework.ParamKeyLimit, false) } - if "true" == enabledOnly{ + if "true" == enabledOnly { msg.SetBoolean(framework.ParamKeyEnable, true) - }else{ + } else { msg.SetBoolean(framework.ParamKeyEnable, false) } var respChan = make(chan ProxyResult, 1) @@ -5764,7 +5764,7 @@ func (module *APIModule) querySecurityPolicyGroups(w http.ResponseWriter, r *htt } payload, err := parsePolicyGroupList(resp) - if err != nil{ + if err != nil { log.Printf(" parse security policy groups result fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -5773,7 +5773,7 @@ func (module *APIModule) querySecurityPolicyGroups(w http.ResponseWriter, r *htt } func (module *APIModule) searchGuests(w http.ResponseWriter, r *http.Request, params httprouter.Params) { - if err := module.verifyRequestSignature(r); err != nil{ + if err := module.verifyRequestSignature(r); err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -5794,16 +5794,16 @@ func (module *APIModule) searchGuests(w http.ResponseWriter, r *http.Request, pa } decoder := json.NewDecoder(r.Body) var request userRequest - if err := decoder.Decode(&request);err != nil{ + if err := decoder.Decode(&request); err != nil { log.Printf(" parse search guests request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } - if 0 >= request.Limit{ + if 0 >= request.Limit { request.Limit = DefaultLimit } - if "" != request.Keyword && strings.Contains(request.Keyword, " "){ + if "" != request.Keyword && strings.Contains(request.Keyword, " ") { ResponseFail(ResponseDefaultError, "only allow one keyword", w) return } @@ -5836,19 +5836,19 @@ func (module *APIModule) searchGuests(w http.ResponseWriter, r *http.Request, pa var payload responsePayload var err error - if payload.Result, err = UnmarshalGuestConfigListFromMessage(resp); err != nil{ + if payload.Result, err = UnmarshalGuestConfigListFromMessage(resp); err != nil { log.Printf(" parse search guests result fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } var flags []uint64 - if flags, err = resp.GetUIntArray(framework.ParamKeyFlag); err != nil{ + if flags, err = resp.GetUIntArray(framework.ParamKeyFlag); err != nil { log.Printf(" parse search guests flags fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } - if ValidFlagCount != len(flags){ + if ValidFlagCount != len(flags) { log.Printf(" unexpected search guests flags count %d => %d", len(flags), ValidFlagCount) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -5861,9 +5861,9 @@ func (module *APIModule) searchGuests(w http.ResponseWriter, r *http.Request, pa ResponseOK(payload, w) } -func (module *APIModule) getSecurityPolicyGroup(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) getSecurityPolicyGroup(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err = module.verifyRequestSignature(r) - if err != nil{ + if err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -5883,7 +5883,7 @@ func (module *APIModule) getSecurityPolicyGroup(w http.ResponseWriter, r *http.R return } var payload restSecurityPolicyGroup - if payload, err = parsePolicyGroup(resp); err != nil{ + if payload, err = parsePolicyGroup(resp); err != nil { log.Printf(" parse get security policy group result fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -5891,15 +5891,15 @@ func (module *APIModule) getSecurityPolicyGroup(w http.ResponseWriter, r *http.R ResponseOK(payload, w) } -func (module *APIModule) createSecurityPolicyGroup(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) createSecurityPolicyGroup(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err = module.verifyRequestSignature(r) - if err != nil{ + if err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } var decoder = json.NewDecoder(r.Body) var request restSecurityPolicyGroup - if err = decoder.Decode(&request);err != nil{ + if err = decoder.Decode(&request); err != nil { log.Printf(" parse create security policy group request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -5923,7 +5923,7 @@ func (module *APIModule) createSecurityPolicyGroup(w http.ResponseWriter, r *htt ID string `json:"id"` } var result Response - if result.ID, err = resp.GetString(framework.ParamKeyPolicy); err != nil{ + if result.ID, err = resp.GetString(framework.ParamKeyPolicy); err != nil { err = fmt.Errorf("get policy id fail: %s", err.Error()) log.Printf(" parse create security policy group result fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) @@ -5932,16 +5932,16 @@ func (module *APIModule) createSecurityPolicyGroup(w http.ResponseWriter, r *htt ResponseOK(result, w) } -func (module *APIModule) modifySecurityPolicyGroup(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) modifySecurityPolicyGroup(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err = module.verifyRequestSignature(r) - if err != nil{ + if err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } var policyID = params.ByName("id") var decoder = json.NewDecoder(r.Body) var request restSecurityPolicyGroup - if err = decoder.Decode(&request);err != nil{ + if err = decoder.Decode(&request); err != nil { log.Printf(" parse modify security policy group request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -5965,9 +5965,9 @@ func (module *APIModule) modifySecurityPolicyGroup(w http.ResponseWriter, r *htt ResponseOK("", w) } -func (module *APIModule) deleteSecurityPolicyGroup(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) deleteSecurityPolicyGroup(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err = module.verifyRequestSignature(r) - if err != nil{ + if err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -5990,9 +5990,9 @@ func (module *APIModule) deleteSecurityPolicyGroup(w http.ResponseWriter, r *htt ResponseOK("", w) } -func (module *APIModule) querySecurityPolicyRules(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) querySecurityPolicyRules(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err = module.verifyRequestSignature(r) - if err != nil{ + if err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -6014,7 +6014,7 @@ func (module *APIModule) querySecurityPolicyRules(w http.ResponseWriter, r *http } payload, err := parsePolicyRuleList(resp) - if err != nil{ + if err != nil { log.Printf(" parse security policy rules result fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -6022,38 +6022,38 @@ func (module *APIModule) querySecurityPolicyRules(w http.ResponseWriter, r *http ResponseOK(payload, w) } -func (module *APIModule) addSecurityPolicyRule(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) addSecurityPolicyRule(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err = module.verifyRequestSignature(r) - if err != nil{ + if err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } var policyID = params.ByName("id") var decoder = json.NewDecoder(r.Body) var request restSecurityPolicyRule - if err = decoder.Decode(&request);err != nil{ + if err = decoder.Decode(&request); err != nil { log.Printf(" parse add security policy rule request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } //check IP format - if "" != request.ToAddress{ + if "" != request.ToAddress { var ip = net.ParseIP(request.ToAddress) - if nil == ip{ + if nil == ip { err = fmt.Errorf("invalid source address '%s'", request.ToAddress) ResponseFail(ResponseDefaultError, err.Error(), w) return } } - if "" != request.FromAddress{ + if "" != request.FromAddress { var ip = net.ParseIP(request.FromAddress) - if nil == ip{ + if nil == ip { err = fmt.Errorf("invalid target address '%s'", request.FromAddress) ResponseFail(ResponseDefaultError, err.Error(), w) return } } - if request.ToPort > 0xFFFF{ + if request.ToPort > 0xFFFF { err = fmt.Errorf("invalid target port %d", request.ToPort) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -6076,45 +6076,45 @@ func (module *APIModule) addSecurityPolicyRule(w http.ResponseWriter, r *http.Re ResponseOK("", w) } -func (module *APIModule) modifySecurityPolicyRule(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) modifySecurityPolicyRule(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err = module.verifyRequestSignature(r) - if err != nil{ + if err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } var policyID = params.ByName("id") var indexString = params.ByName("index") var index int - if index, err = strconv.Atoi(indexString); err != nil{ + if index, err = strconv.Atoi(indexString); err != nil { err = fmt.Errorf("invalid index %s", indexString) ResponseFail(ResponseDefaultError, err.Error(), w) return } var decoder = json.NewDecoder(r.Body) var request restSecurityPolicyRule - if err = decoder.Decode(&request);err != nil{ + if err = decoder.Decode(&request); err != nil { log.Printf(" parse modify security policy rule request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } //check IP format - if "" != request.ToAddress{ + if "" != request.ToAddress { var ip = net.ParseIP(request.ToAddress) - if nil == ip{ + if nil == ip { err = fmt.Errorf("invalid source address '%s'", request.ToAddress) ResponseFail(ResponseDefaultError, err.Error(), w) return } } - if "" != request.FromAddress{ + if "" != request.FromAddress { var ip = net.ParseIP(request.FromAddress) - if nil == ip{ + if nil == ip { err = fmt.Errorf("invalid target address '%s'", request.FromAddress) ResponseFail(ResponseDefaultError, err.Error(), w) return } } - if request.ToPort > 0xFFFF{ + if request.ToPort > 0xFFFF { err = fmt.Errorf("invalid target port %d", request.ToPort) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -6139,16 +6139,16 @@ func (module *APIModule) modifySecurityPolicyRule(w http.ResponseWriter, r *http ResponseOK("", w) } -func (module *APIModule) removeSecurityPolicyRule(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) removeSecurityPolicyRule(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err = module.verifyRequestSignature(r) - if err != nil{ + if err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } var policyID = params.ByName("id") var indexString = params.ByName("index") var index int - if index, err = strconv.Atoi(indexString); err != nil{ + if index, err = strconv.Atoi(indexString); err != nil { err = fmt.Errorf("invalid index %s", indexString) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -6172,20 +6172,20 @@ func (module *APIModule) removeSecurityPolicyRule(w http.ResponseWriter, r *http ResponseOK("", w) } -func (module *APIModule) moveSecurityPolicyRule(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) moveSecurityPolicyRule(w http.ResponseWriter, r *http.Request, params httprouter.Params) { const ( - directionUp = "up" + directionUp = "up" //directionDown = "down" ) var err = module.verifyRequestSignature(r) - if err != nil{ + if err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } var policyID = params.ByName("id") var indexString = params.ByName("index") var index int - if index, err = strconv.Atoi(indexString); err != nil{ + if index, err = strconv.Atoi(indexString); err != nil { err = fmt.Errorf("invalid index %s", indexString) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -6195,7 +6195,7 @@ func (module *APIModule) moveSecurityPolicyRule(w http.ResponseWriter, r *http.R Direction string `json:"direction"` } var request RequestPayload - if err = decoder.Decode(&request);err != nil{ + if err = decoder.Decode(&request); err != nil { log.Printf(" parse move security policy rule request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -6204,9 +6204,9 @@ func (module *APIModule) moveSecurityPolicyRule(w http.ResponseWriter, r *http.R msg, _ := framework.CreateJsonMessage(framework.ChangePolicyRuleOrderRequest) msg.SetString(framework.ParamKeyPolicy, policyID) msg.SetInt(framework.ParamKeyIndex, index) - if directionUp == request.Direction{ + if directionUp == request.Direction { msg.SetBoolean(framework.ParamKeyFlag, true) - }else{ + } else { msg.SetBoolean(framework.ParamKeyFlag, false) } var respChan = make(chan ProxyResult, 1) @@ -6224,9 +6224,9 @@ func (module *APIModule) moveSecurityPolicyRule(w http.ResponseWriter, r *http.R ResponseOK("", w) } -func (module *APIModule) getGuestSecurityPolicy(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) getGuestSecurityPolicy(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err = module.verifyRequestSignature(r) - if err != nil{ + if err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -6248,7 +6248,7 @@ func (module *APIModule) getGuestSecurityPolicy(w http.ResponseWriter, r *http.R } payload, err := parseGuestSecurityPolicy(resp) - if err != nil{ + if err != nil { log.Printf(" parse guest security policy result fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -6256,9 +6256,9 @@ func (module *APIModule) getGuestSecurityPolicy(w http.ResponseWriter, r *http.R ResponseOK(payload, w) } -func (module *APIModule) changeGuestSecurityAction(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) changeGuestSecurityAction(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err = module.verifyRequestSignature(r) - if err != nil{ + if err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } @@ -6268,7 +6268,7 @@ func (module *APIModule) changeGuestSecurityAction(w http.ResponseWriter, r *htt Action string `json:"action"` } var request RequestPayload - if err = decoder.Decode(&request);err != nil{ + if err = decoder.Decode(&request); err != nil { log.Printf(" parse change guest policy action request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -6292,44 +6292,44 @@ func (module *APIModule) changeGuestSecurityAction(w http.ResponseWriter, r *htt ResponseOK("", w) } -func (module *APIModule) addGuestSecurityRule(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) addGuestSecurityRule(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err = module.verifyRequestSignature(r) - if err != nil{ + if err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } var instanceID = params.ByName("id") var decoder = json.NewDecoder(r.Body) var request restSecurityPolicyRule - if err = decoder.Decode(&request);err != nil{ + if err = decoder.Decode(&request); err != nil { log.Printf(" parse add guest policy rule request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } //check IP format - if "" != request.ToAddress{ + if "" != request.ToAddress { var ip = net.ParseIP(request.ToAddress) - if nil == ip{ + if nil == ip { err = fmt.Errorf("invalid source address '%s'", request.ToAddress) ResponseFail(ResponseDefaultError, err.Error(), w) return } } - if "" != request.FromAddress{ + if "" != request.FromAddress { var ip = net.ParseIP(request.FromAddress) - if nil == ip{ + if nil == ip { err = fmt.Errorf("invalid target address '%s'", request.FromAddress) ResponseFail(ResponseDefaultError, err.Error(), w) return } } - if request.ToPort > 0xFFFF{ + if request.ToPort > 0xFFFF { err = fmt.Errorf("invalid target port %d", request.ToPort) ResponseFail(ResponseDefaultError, err.Error(), w) return } msg, _ := framework.CreateJsonMessage(framework.AddGuestRuleRequest) - if err =request.buildForCell(msg); err != nil{ + if err = request.buildForCell(msg); err != nil { log.Printf(" build add guest policy rule request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -6350,51 +6350,51 @@ func (module *APIModule) addGuestSecurityRule(w http.ResponseWriter, r *http.Req ResponseOK("", w) } -func (module *APIModule) modifyGuestSecurityRule(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) modifyGuestSecurityRule(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err = module.verifyRequestSignature(r) - if err != nil{ + if err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } var instanceID = params.ByName("id") var indexString = params.ByName("index") var index int - if index, err = strconv.Atoi(indexString); err != nil{ + if index, err = strconv.Atoi(indexString); err != nil { err = fmt.Errorf("invalid index %s", indexString) ResponseFail(ResponseDefaultError, err.Error(), w) return } var decoder = json.NewDecoder(r.Body) var request restSecurityPolicyRule - if err = decoder.Decode(&request);err != nil{ + if err = decoder.Decode(&request); err != nil { log.Printf(" parse modify guest policy rule request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return } //check IP format - if "" != request.ToAddress{ + if "" != request.ToAddress { var ip = net.ParseIP(request.ToAddress) - if nil == ip{ + if nil == ip { err = fmt.Errorf("invalid source address '%s'", request.ToAddress) ResponseFail(ResponseDefaultError, err.Error(), w) return } } - if "" != request.FromAddress{ + if "" != request.FromAddress { var ip = net.ParseIP(request.FromAddress) - if nil == ip{ + if nil == ip { err = fmt.Errorf("invalid target address '%s'", request.FromAddress) ResponseFail(ResponseDefaultError, err.Error(), w) return } } - if request.ToPort > 0xFFFF{ + if request.ToPort > 0xFFFF { err = fmt.Errorf("invalid target port %d", request.ToPort) ResponseFail(ResponseDefaultError, err.Error(), w) return } msg, _ := framework.CreateJsonMessage(framework.ModifyGuestRuleRequest) - if err =request.buildForCell(msg); err != nil{ + if err = request.buildForCell(msg); err != nil { log.Printf(" build modify guest policy rule request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -6416,16 +6416,16 @@ func (module *APIModule) modifyGuestSecurityRule(w http.ResponseWriter, r *http. ResponseOK("", w) } -func (module *APIModule) removeGuestSecurityRule(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) removeGuestSecurityRule(w http.ResponseWriter, r *http.Request, params httprouter.Params) { var err = module.verifyRequestSignature(r) - if err != nil{ + if err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } var instanceID = params.ByName("id") var indexString = params.ByName("index") var index int - if index, err = strconv.Atoi(indexString); err != nil{ + if index, err = strconv.Atoi(indexString); err != nil { err = fmt.Errorf("invalid index %s", indexString) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -6449,21 +6449,21 @@ func (module *APIModule) removeGuestSecurityRule(w http.ResponseWriter, r *http. ResponseOK("", w) } -func (module *APIModule) moveGuestSecurityRule(w http.ResponseWriter, r *http.Request, params httprouter.Params){ +func (module *APIModule) moveGuestSecurityRule(w http.ResponseWriter, r *http.Request, params httprouter.Params) { const ( directionUp = "up" modeUp = 1 modeDown = -1 ) var err = module.verifyRequestSignature(r) - if err != nil{ + if err != nil { ResponseFail(ResponseDefaultError, err.Error(), w) return } var instanceID = params.ByName("id") var indexString = params.ByName("index") var index int - if index, err = strconv.Atoi(indexString); err != nil{ + if index, err = strconv.Atoi(indexString); err != nil { err = fmt.Errorf("invalid index %s", indexString) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -6473,7 +6473,7 @@ func (module *APIModule) moveGuestSecurityRule(w http.ResponseWriter, r *http.Re Direction string `json:"direction"` } var request RequestPayload - if err = decoder.Decode(&request);err != nil{ + if err = decoder.Decode(&request); err != nil { log.Printf(" parse move guest policy rule request fail: %s", err.Error()) ResponseFail(ResponseDefaultError, err.Error(), w) return @@ -6482,9 +6482,9 @@ func (module *APIModule) moveGuestSecurityRule(w http.ResponseWriter, r *http.Re msg, _ := framework.CreateJsonMessage(framework.ChangeGuestRuleOrderRequest) msg.SetString(framework.ParamKeyInstance, instanceID) msg.SetInt(framework.ParamKeyIndex, index) - if directionUp == request.Direction{ + if directionUp == request.Direction { msg.SetInt(framework.ParamKeyMode, modeUp) - }else{ + } else { msg.SetInt(framework.ParamKeyMode, modeDown) } var respChan = make(chan ProxyResult, 1) diff --git a/src/modules/instance.go b/src/modules/instance.go index 9932818..25881ff 100644 --- a/src/modules/instance.go +++ b/src/modules/instance.go @@ -2,6 +2,7 @@ package modules import ( "fmt" + "github.com/project-nano/framework" ) @@ -68,12 +69,12 @@ const ( const ( //bit 0~1 for running/stopped - InstanceStatusLostBit = 2; - InstanceStatusMigrateBit = 3; + InstanceStatusLostBit = 2 + InstanceStatusMigrateBit = 3 ) const ( - InstanceMediaOptionNone uint = iota + InstanceMediaOptionNone uint = iota InstanceMediaOptionImage InstanceMediaOptionNetwork ) diff --git a/src/modules/resource_manager.go b/src/modules/resource_manager.go index 9e61422..01fa0cb 100644 --- a/src/modules/resource_manager.go +++ b/src/modules/resource_manager.go @@ -6,8 +6,6 @@ import ( "encoding/json" "errors" "fmt" - "github.com/project-nano/framework" - uuid "github.com/satori/go.uuid" "io/ioutil" "log" "math" @@ -19,6 +17,9 @@ import ( "sort" "strings" "time" + + "github.com/project-nano/framework" + uuid "github.com/satori/go.uuid" ) //config file define @@ -79,10 +80,10 @@ type ManagedComputePool struct { type ManagedComputeCell struct { ComputeCellInfo - Pool string - LatestUpdate time.Time - Instances map[string]bool - Pending map[string]bool + Pool string + LatestUpdate time.Time + Instances map[string]bool + Pending map[string]bool InstanceStatistic ResourceUsage } @@ -242,7 +243,7 @@ const ( ) const ( - cmdQueryAllComputePoolInfo = iota + cmdQueryAllComputePoolInfo = iota cmdGetComputePoolInfo cmdCreateComputePool cmdDeleteComputePool @@ -305,7 +306,7 @@ const ( cmdMigrationInstance cmdPurgeInstance cmdBeginResetSystem - cmdFinishResetSystem + cmdFinishResetSystem cmdStartBatchCreateGuest cmdSetBatchCreateGuestStart cmdSetBatchCreateGuestFail @@ -435,22 +436,21 @@ var commandNames = []string{ } func (c commandType) toString() string { - if c >= cmdInvalid{ - return "invalid" + if c >= cmdInvalid { + return "invalid" } return commandNames[c] } const ( - TimeFormatLayout = "2006-01-02 15:04:05" - StorageTypeNFS = "nfs" + TimeFormatLayout = "2006-01-02 15:04:05" + StorageTypeNFS = "nfs" RangeTypeExternal = "external" RangeTypeInternal = "internal" ) - func CreateResourceManager(dataPath string) (manager *ResourceManager, err error) { - if cmdInvalid != len(commandNames){ + if cmdInvalid != len(commandNames) { err = fmt.Errorf("insufficient command names %d/%d", len(commandNames), cmdInvalid) return } @@ -500,12 +500,12 @@ func (manager *ResourceManager) UpdateCellStatus(report CellStatusReport) { } func (manager *ResourceManager) CreatePool(name, storage, address string, failover bool, resultChan chan error) { - req := resourceCommand{Type: cmdCreateComputePool, Pool: name, Storage:storage, Address: address, Failover: failover, ErrorChan: resultChan} + req := resourceCommand{Type: cmdCreateComputePool, Pool: name, Storage: storage, Address: address, Failover: failover, ErrorChan: resultChan} manager.commands <- req } -func (manager *ResourceManager) ModifyPool(name, storage, address string, failover bool, resultChan chan error){ - manager.commands <- resourceCommand{Type:cmdModifyComputePool, Pool:name, Storage:storage, Address: address, Failover: failover, ErrorChan:resultChan} +func (manager *ResourceManager) ModifyPool(name, storage, address string, failover bool, resultChan chan error) { + manager.commands <- resourceCommand{Type: cmdModifyComputePool, Pool: name, Storage: storage, Address: address, Failover: failover, ErrorChan: resultChan} } func (manager *ResourceManager) DeletePool(name string, resultChan chan error) { @@ -514,25 +514,25 @@ func (manager *ResourceManager) DeletePool(name string, resultChan chan error) { } //storage pools -func (manager *ResourceManager) CreateStoragePool(name, storageType, host, target string, respChan chan error){ - manager.commands <- resourceCommand{Type: cmdCreateStoragePool, Storage:name, StorageType:storageType, Host:host, Target: target, ErrorChan:respChan} +func (manager *ResourceManager) CreateStoragePool(name, storageType, host, target string, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdCreateStoragePool, Storage: name, StorageType: storageType, Host: host, Target: target, ErrorChan: respChan} } -func (manager *ResourceManager) ModifyStoragePool(name, storageType, host, target string, respChan chan error){ - manager.commands <- resourceCommand{Type: cmdModifyStoragePool, Storage:name, StorageType:storageType, Host:host, Target: target, ErrorChan:respChan} +func (manager *ResourceManager) ModifyStoragePool(name, storageType, host, target string, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdModifyStoragePool, Storage: name, StorageType: storageType, Host: host, Target: target, ErrorChan: respChan} } -func (manager *ResourceManager) DeleteStoragePool(name string, respChan chan error){ - manager.commands <- resourceCommand{Type: cmdDeleteStoragePool, Storage:name, ErrorChan:respChan} +func (manager *ResourceManager) DeleteStoragePool(name string, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdDeleteStoragePool, Storage: name, ErrorChan: respChan} } -func (manager *ResourceManager) GetStoragePool(name string, respChan chan ResourceResult){ - manager.commands <- resourceCommand{Type: cmdGetStoragePool, Storage:name, ResultChan: respChan} +func (manager *ResourceManager) GetStoragePool(name string, respChan chan ResourceResult) { + manager.commands <- resourceCommand{Type: cmdGetStoragePool, Storage: name, ResultChan: respChan} } -func (manager *ResourceManager) QueryStoragePool(respChan chan ResourceResult){ +func (manager *ResourceManager) QueryStoragePool(respChan chan ResourceResult) { manager.commands <- resourceCommand{Type: cmdQueryStoragePool, ResultChan: respChan} } -func (manager *ResourceManager) QueryCellsInPool(pool string, resp chan ResourceResult){ - cmd := resourceCommand{Type:cmdQueryComputeCells, Pool:pool, ResultChan:resp} +func (manager *ResourceManager) QueryCellsInPool(pool string, resp chan ResourceResult) { + cmd := resourceCommand{Type: cmdQueryComputeCells, Pool: pool, ResultChan: resp} manager.commands <- cmd } func (manager *ResourceManager) AddCell(pool, cell string, resultChan chan error) { @@ -545,19 +545,19 @@ func (manager *ResourceManager) RemoveCell(pool, cell string, resultChan chan er manager.commands <- req } -func (manager *ResourceManager) EnableCell(poolName, cellName string, respChan chan error){ - manager.commands <- resourceCommand{Type:cmdEnableComputeCell, Pool:poolName, Cell:cellName, ErrorChan:respChan} +func (manager *ResourceManager) EnableCell(poolName, cellName string, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdEnableComputeCell, Pool: poolName, Cell: cellName, ErrorChan: respChan} } -func (manager *ResourceManager) DisableCell(poolName, cellName string, purge bool, respChan chan error){ - manager.commands <- resourceCommand{Type:cmdDisableComputeCell, Pool:poolName, Cell:cellName, ErrorChan:respChan} +func (manager *ResourceManager) DisableCell(poolName, cellName string, purge bool, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdDisableComputeCell, Pool: poolName, Cell: cellName, ErrorChan: respChan} } -func (manager *ResourceManager) FinishPurgeCell(cellName string, respChan chan error){ - manager.commands <- resourceCommand{Type:cmdFinishPurgeCell, Cell:cellName, ErrorChan:respChan} +func (manager *ResourceManager) FinishPurgeCell(cellName string, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdFinishPurgeCell, Cell: cellName, ErrorChan: respChan} } func (manager *ResourceManager) GetUnallocatedCells(resp chan ResourceResult) { - req := resourceCommand{Type: cmdQueryUnallocatedComputeCell, ResultChan:resp} + req := resourceCommand{Type: cmdQueryUnallocatedComputeCell, ResultChan: resp} manager.commands <- req } @@ -581,7 +581,7 @@ func (manager *ResourceManager) QueryComputeCellStatus(pool string, resp chan Re } func (manager *ResourceManager) GetComputeCellStatus(pool, cell string, resp chan ResourceResult) { - req := resourceCommand{Type: cmdGetComputeCellStatus, Pool: pool, Cell:cell, ResultChan: resp} + req := resourceCommand{Type: cmdGetComputeCellStatus, Pool: pool, Cell: cell, ResultChan: resp} manager.commands <- req } @@ -590,15 +590,13 @@ func (manager *ResourceManager) GetAllComputePool(resp chan ResourceResult) { manager.commands <- req } - -func (manager *ResourceManager) GetComputePool(pool string, resp chan ResourceResult){ - cmd := resourceCommand{Type: cmdGetComputePoolInfo, Pool:pool, ResultChan:resp} +func (manager *ResourceManager) GetComputePool(pool string, resp chan ResourceResult) { + cmd := resourceCommand{Type: cmdGetComputePoolInfo, Pool: pool, ResultChan: resp} manager.commands <- cmd } - -func (manager *ResourceManager) UpdateCellInfo(name, address string, respChan chan error){ - manager.commands <- resourceCommand{Type: cmdUpdateCellInfo, Cell:name, Address:address, ErrorChan:respChan} +func (manager *ResourceManager) UpdateCellInfo(name, address string, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdUpdateCellInfo, Cell: name, Address: address, ErrorChan: respChan} } func (manager *ResourceManager) GetCellStatus(cell string, respChan chan ResourceResult) { @@ -606,8 +604,8 @@ func (manager *ResourceManager) GetCellStatus(cell string, respChan chan Resourc manager.commands <- req } -func (manager *ResourceManager) SetCellDead(cellName string, respChan chan error){ - manager.commands <- resourceCommand{Type: cmdSetCellDead, Cell:cellName, ErrorChan:respChan} +func (manager *ResourceManager) SetCellDead(cellName string, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdSetCellDead, Cell: cellName, ErrorChan: respChan} } func (manager *ResourceManager) QueryGuestsByCondition(condition GuestQueryCondition, respChan chan ResourceResult) { @@ -615,7 +613,7 @@ func (manager *ResourceManager) QueryGuestsByCondition(condition GuestQueryCondi manager.commands <- cmd } -func (manager *ResourceManager) SearchGuests(condition SearchGuestsCondition, respChan chan ResourceResult){ +func (manager *ResourceManager) SearchGuests(condition SearchGuestsCondition, respChan chan ResourceResult) { manager.commands <- resourceCommand{Type: cmdSearchGuests, SearchCondition: condition, ResultChan: respChan} } @@ -633,7 +631,7 @@ func (manager *ResourceManager) UpdateInstanceStatus(status InstanceStatus, resp manager.commands <- cmd } func (manager *ResourceManager) ConfirmInstance(id string, monitor uint, secret, ethernetAddress string, respChan chan error) { - cmd := resourceCommand{Type: cmdConfirmInstance, InstanceID: id, MonitorPort: monitor, Secret:secret, Hardware: ethernetAddress, ErrorChan: respChan} + cmd := resourceCommand{Type: cmdConfirmInstance, InstanceID: id, MonitorPort: monitor, Secret: secret, Hardware: ethernetAddress, ErrorChan: respChan} manager.commands <- cmd } @@ -647,45 +645,45 @@ func (manager *ResourceManager) GetInstanceStatus(id string, respChan chan Resou manager.commands <- cmd } -func (manager *ResourceManager) QueryInstanceStatusInPool(poolName string, respChan chan ResourceResult){ +func (manager *ResourceManager) QueryInstanceStatusInPool(poolName string, respChan chan ResourceResult) { cmd := resourceCommand{Type: cmdQueryInstanceStatusInPool, Pool: poolName, ResultChan: respChan} manager.commands <- cmd } -func (manager *ResourceManager) QueryInstanceStatusInCell(poolName, cellName string, respChan chan ResourceResult){ - cmd := resourceCommand{Type: cmdQueryInstanceStatusInCell, Pool: poolName, Cell:cellName, ResultChan: respChan} +func (manager *ResourceManager) QueryInstanceStatusInCell(poolName, cellName string, respChan chan ResourceResult) { + cmd := resourceCommand{Type: cmdQueryInstanceStatusInCell, Pool: poolName, Cell: cellName, ResultChan: respChan} manager.commands <- cmd } -func (manager *ResourceManager) UpdateInstanceAddress(id, ip string, respChan chan error){ - manager.commands <- resourceCommand{Type:cmdUpdateInstanceAddress, InstanceID:id, Address:ip, ErrorChan:respChan} +func (manager *ResourceManager) UpdateInstanceAddress(id, ip string, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdUpdateInstanceAddress, InstanceID: id, Address: ip, ErrorChan: respChan} } func (manager *ResourceManager) UpdateInstancePriority(id string, priority PriorityEnum, respChan chan error) { - manager.commands <- resourceCommand{Type: cmdUpdateInstancePriority, InstanceID: id, Priority: priority, ErrorChan:respChan} + manager.commands <- resourceCommand{Type: cmdUpdateInstancePriority, InstanceID: id, Priority: priority, ErrorChan: respChan} } -func (manager *ResourceManager) UpdateInstanceMonitorSecret(id, secret string, respChan chan error){ +func (manager *ResourceManager) UpdateInstanceMonitorSecret(id, secret string, respChan chan error) { manager.commands <- resourceCommand{Type: cmdUpdateInstanceMonitorSecret, InstanceID: id, Secret: secret, ErrorChan: respChan} } func (manager *ResourceManager) UpdateInstanceDiskThreshold(id string, readSpeed, readIOPS, writeSpeed, writeIOPS uint64, respChan chan error) { - manager.commands <- resourceCommand{Type: cmdUpdateInstanceDiskThreshold, InstanceID: id, ReadSpeed: readSpeed, ReadIOPS: readIOPS, WriteSpeed:writeSpeed, WriteIOPS: writeIOPS, ErrorChan: respChan} + manager.commands <- resourceCommand{Type: cmdUpdateInstanceDiskThreshold, InstanceID: id, ReadSpeed: readSpeed, ReadIOPS: readIOPS, WriteSpeed: writeSpeed, WriteIOPS: writeIOPS, ErrorChan: respChan} } func (manager *ResourceManager) UpdateInstanceNetworkThreshold(id string, receive, send uint64, respChan chan error) { - manager.commands <- resourceCommand{Type: cmdUpdateInstanceNetworkThreshold, InstanceID: id, ReceiveSpeed:receive, SendSpeed: send, ErrorChan: respChan} + manager.commands <- resourceCommand{Type: cmdUpdateInstanceNetworkThreshold, InstanceID: id, ReceiveSpeed: receive, SendSpeed: send, ErrorChan: respChan} } -func (manager *ResourceManager) UpdateGuestAutoStart(guestID string, enabled bool, respChan chan error){ +func (manager *ResourceManager) UpdateGuestAutoStart(guestID string, enabled bool, respChan chan error) { manager.commands <- resourceCommand{Type: cmdUpdateAutoStart, InstanceID: guestID, Flag: enabled, ErrorChan: respChan} } -func (manager *ResourceManager) RenameInstance(id, name string, respChan chan error){ - manager.commands <- resourceCommand{Type:cmdRenameInstance, InstanceID:id, Name:name, ErrorChan:respChan} +func (manager *ResourceManager) RenameInstance(id, name string, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdRenameInstance, InstanceID: id, Name: name, ErrorChan: respChan} } -func (manager *ResourceManager) GetInstanceByName(poolName, instanceName string, respChan chan ResourceResult){ - manager.commands <- resourceCommand{Type:cmdGetInstanceByName, Pool:poolName, Name:instanceName, ResultChan:respChan} +func (manager *ResourceManager) GetInstanceByName(poolName, instanceName string, respChan chan ResourceResult) { + manager.commands <- resourceCommand{Type: cmdGetInstanceByName, Pool: poolName, Name: instanceName, ResultChan: respChan} } func (manager *ResourceManager) AddImageServer(name, host string, port int) { @@ -704,179 +702,179 @@ func (manager *ResourceManager) GetImageServer(respChan chan ResourceResult) { } //migration -func (manager *ResourceManager) QueryMigration(respChan chan ResourceResult){ - manager.commands <- resourceCommand{Type:cmdQueryMigration, ResultChan:respChan} +func (manager *ResourceManager) QueryMigration(respChan chan ResourceResult) { + manager.commands <- resourceCommand{Type: cmdQueryMigration, ResultChan: respChan} } -func (manager *ResourceManager) GetMigration(id string, respChan chan ResourceResult){ - manager.commands <- resourceCommand{Type:cmdGetMigration, MigrationID:id, ResultChan:respChan} +func (manager *ResourceManager) GetMigration(id string, respChan chan ResourceResult) { + manager.commands <- resourceCommand{Type: cmdGetMigration, MigrationID: id, ResultChan: respChan} } -func (manager *ResourceManager) CreateMigration(params MigrationParameter, respChan chan ResourceResult){ - manager.commands <- resourceCommand{Type:cmdCreateMigration, Migration: params, ResultChan:respChan} +func (manager *ResourceManager) CreateMigration(params MigrationParameter, respChan chan ResourceResult) { + manager.commands <- resourceCommand{Type: cmdCreateMigration, Migration: params, ResultChan: respChan} } -func (manager *ResourceManager) FinishMigration(migration string, instances []string, ports []uint64, respChan chan error){ - manager.commands <- resourceCommand{Type:cmdFinishMigration, MigrationID:migration, IDList:instances, PortList:ports, ErrorChan:respChan} +func (manager *ResourceManager) FinishMigration(migration string, instances []string, ports []uint64, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdFinishMigration, MigrationID: migration, IDList: instances, PortList: ports, ErrorChan: respChan} } -func (manager *ResourceManager) CancelMigration(migration string, err error, respChan chan error){ - manager.commands <- resourceCommand{Type:cmdCancelMigration, MigrationID:migration, Error: err, ErrorChan:respChan} +func (manager *ResourceManager) CancelMigration(migration string, err error, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdCancelMigration, MigrationID: migration, Error: err, ErrorChan: respChan} } -func (manager *ResourceManager) UpdateMigration(migration string, progress uint, respChan chan error){ - manager.commands <- resourceCommand{Type:cmdUpdateMigration, MigrationID:migration, Progress:progress, ErrorChan:respChan} +func (manager *ResourceManager) UpdateMigration(migration string, progress uint, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdUpdateMigration, MigrationID: migration, Progress: progress, ErrorChan: respChan} } -func (manager *ResourceManager) BuildFailoverPlan(cellName string, respChan chan ResourceResult){ - manager.commands <- resourceCommand{Type: cmdBuildFailoverPlan, Cell:cellName, ResultChan:respChan} +func (manager *ResourceManager) BuildFailoverPlan(cellName string, respChan chan ResourceResult) { + manager.commands <- resourceCommand{Type: cmdBuildFailoverPlan, Cell: cellName, ResultChan: respChan} } -func (manager *ResourceManager) MigrateInstance(oldCell, newCell string, instances []string, ports []uint64, respChan chan error){ - manager.commands <- resourceCommand{Type: cmdMigrationInstance, Cell:oldCell, Target:newCell, IDList:instances, PortList:ports, ErrorChan:respChan} +func (manager *ResourceManager) MigrateInstance(oldCell, newCell string, instances []string, ports []uint64, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdMigrationInstance, Cell: oldCell, Target: newCell, IDList: instances, PortList: ports, ErrorChan: respChan} } -func (manager *ResourceManager) PurgeInstance(cellName string, respChan chan error){ - manager.commands <- resourceCommand{Type: cmdPurgeInstance, Cell:cellName, ErrorChan:respChan} +func (manager *ResourceManager) PurgeInstance(cellName string, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdPurgeInstance, Cell: cellName, ErrorChan: respChan} } -func (manager *ResourceManager) QueryAddressPool(respChan chan ResourceResult){ - manager.commands <- resourceCommand{Type: cmdQueryAddressPool, ResultChan:respChan} +func (manager *ResourceManager) QueryAddressPool(respChan chan ResourceResult) { + manager.commands <- resourceCommand{Type: cmdQueryAddressPool, ResultChan: respChan} } -func (manager *ResourceManager) GetAddressPool(name string, respChan chan ResourceResult){ - manager.commands <- resourceCommand{Type: cmdGetAddressPool, Address:name, ResultChan:respChan} +func (manager *ResourceManager) GetAddressPool(name string, respChan chan ResourceResult) { + manager.commands <- resourceCommand{Type: cmdGetAddressPool, Address: name, ResultChan: respChan} } -func (manager *ResourceManager) CreateAddressPool(config AddressPoolConfig, respChan chan error){ - manager.commands <- resourceCommand{Type:cmdCreateAddressPool, AddressPool:config, ErrorChan:respChan} +func (manager *ResourceManager) CreateAddressPool(config AddressPoolConfig, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdCreateAddressPool, AddressPool: config, ErrorChan: respChan} } -func (manager *ResourceManager) ModifyAddressPool(config AddressPoolConfig, respChan chan ResourceResult){ - manager.commands <- resourceCommand{Type:cmdModifyAddressPool, AddressPool: config, ResultChan:respChan} +func (manager *ResourceManager) ModifyAddressPool(config AddressPoolConfig, respChan chan ResourceResult) { + manager.commands <- resourceCommand{Type: cmdModifyAddressPool, AddressPool: config, ResultChan: respChan} } -func (manager *ResourceManager) DeleteAddressPool(name string, respChan chan error){ - manager.commands <- resourceCommand{Type:cmdDeleteAddressPool, Address:name, ErrorChan:respChan} +func (manager *ResourceManager) DeleteAddressPool(name string, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdDeleteAddressPool, Address: name, ErrorChan: respChan} } -func (manager *ResourceManager) QueryAddressRange(poolName, rangeType string, respChan chan ResourceResult){ - manager.commands <- resourceCommand{Type:cmdQueryAddressRange, Address:poolName, Range:rangeType, ResultChan:respChan} +func (manager *ResourceManager) QueryAddressRange(poolName, rangeType string, respChan chan ResourceResult) { + manager.commands <- resourceCommand{Type: cmdQueryAddressRange, Address: poolName, Range: rangeType, ResultChan: respChan} } -func (manager *ResourceManager) GetAddressRange(poolName, rangeType, startAddress string, respChan chan ResourceResult){ - manager.commands <- resourceCommand{Type:cmdGetAddressRange, Address:poolName, Range:rangeType, Start:startAddress, ResultChan:respChan} +func (manager *ResourceManager) GetAddressRange(poolName, rangeType, startAddress string, respChan chan ResourceResult) { + manager.commands <- resourceCommand{Type: cmdGetAddressRange, Address: poolName, Range: rangeType, Start: startAddress, ResultChan: respChan} } -func (manager *ResourceManager) AddAddressRange(poolName, rangeType string, config AddressRangeConfig, respChan chan error){ - manager.commands <- resourceCommand{Type:cmdAddAddressRange, Address:poolName, Range:rangeType, AddressRange: config, ErrorChan:respChan} +func (manager *ResourceManager) AddAddressRange(poolName, rangeType string, config AddressRangeConfig, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdAddAddressRange, Address: poolName, Range: rangeType, AddressRange: config, ErrorChan: respChan} } -func (manager *ResourceManager) RemoveAddressRange(poolName, rangeType, startAddress string, respChan chan error){ - manager.commands <- resourceCommand{Type:cmdRemoveAddressRange, Address:poolName, Range:rangeType, Start:startAddress, ErrorChan:respChan} +func (manager *ResourceManager) RemoveAddressRange(poolName, rangeType, startAddress string, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdRemoveAddressRange, Address: poolName, Range: rangeType, Start: startAddress, ErrorChan: respChan} } -func (manager *ResourceManager) BeginResetSystem(instanceID string, respChan chan error){ - manager.commands <- resourceCommand{Type: cmdBeginResetSystem, InstanceID: instanceID, ErrorChan:respChan} +func (manager *ResourceManager) BeginResetSystem(instanceID string, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdBeginResetSystem, InstanceID: instanceID, ErrorChan: respChan} } -func (manager *ResourceManager) FinishResetSystem(instanceID string, err error, respChan chan error){ - manager.commands <- resourceCommand{Type: cmdFinishResetSystem, InstanceID: instanceID, Error:err, ErrorChan:respChan} +func (manager *ResourceManager) FinishResetSystem(instanceID string, err error, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdFinishResetSystem, InstanceID: instanceID, Error: err, ErrorChan: respChan} } //batch -func (manager *ResourceManager) StartBatchCreateGuest(request BatchCreateRequest, respChan chan ResourceResult){ - manager.commands <- resourceCommand{Type: cmdStartBatchCreateGuest, BatchCreating: request, ResultChan:respChan} +func (manager *ResourceManager) StartBatchCreateGuest(request BatchCreateRequest, respChan chan ResourceResult) { + manager.commands <- resourceCommand{Type: cmdStartBatchCreateGuest, BatchCreating: request, ResultChan: respChan} } -func (manager *ResourceManager) SetBatchCreateGuestStart(batchID, guestName, guestID string, respChan chan error){ - manager.commands <- resourceCommand{Type: cmdSetBatchCreateGuestStart, BatchID: batchID, Name: guestName, InstanceID: guestID, ErrorChan:respChan} +func (manager *ResourceManager) SetBatchCreateGuestStart(batchID, guestName, guestID string, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdSetBatchCreateGuestStart, BatchID: batchID, Name: guestName, InstanceID: guestID, ErrorChan: respChan} } -func (manager *ResourceManager) SetBatchCreateGuestFail(batchID, guestName string, err error, respChan chan error){ - manager.commands <- resourceCommand{Type: cmdSetBatchCreateGuestFail, BatchID: batchID, Name: guestName, Error:err, ErrorChan:respChan} +func (manager *ResourceManager) SetBatchCreateGuestFail(batchID, guestName string, err error, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdSetBatchCreateGuestFail, BatchID: batchID, Name: guestName, Error: err, ErrorChan: respChan} } -func (manager *ResourceManager) GetBatchCreateGuestStatus(batchID string, respChan chan ResourceResult){ - manager.commands <- resourceCommand{Type: cmdGetBatchCreateGuest, BatchID: batchID, ResultChan:respChan} +func (manager *ResourceManager) GetBatchCreateGuestStatus(batchID string, respChan chan ResourceResult) { + manager.commands <- resourceCommand{Type: cmdGetBatchCreateGuest, BatchID: batchID, ResultChan: respChan} } -func (manager *ResourceManager) StartBatchDeleteGuest(id []string, respChan chan ResourceResult){ - manager.commands <- resourceCommand{Type: cmdStartBatchDeleteGuest, IDList: id, ResultChan:respChan} +func (manager *ResourceManager) StartBatchDeleteGuest(id []string, respChan chan ResourceResult) { + manager.commands <- resourceCommand{Type: cmdStartBatchDeleteGuest, IDList: id, ResultChan: respChan} } -func (manager *ResourceManager) SetBatchDeleteGuestSuccess(batchID, guestID string, respChan chan error){ - manager.commands <- resourceCommand{Type: cmdSetBatchDeleteGuestSuccess, BatchID:batchID, InstanceID:guestID, ErrorChan:respChan} +func (manager *ResourceManager) SetBatchDeleteGuestSuccess(batchID, guestID string, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdSetBatchDeleteGuestSuccess, BatchID: batchID, InstanceID: guestID, ErrorChan: respChan} } -func (manager *ResourceManager) SetBatchDeleteGuestFail(batchID, guestID string, err error, respChan chan error){ - manager.commands <- resourceCommand{Type: cmdSetBatchDeleteGuestFail, BatchID:batchID, InstanceID: guestID, Error:err, ErrorChan:respChan} +func (manager *ResourceManager) SetBatchDeleteGuestFail(batchID, guestID string, err error, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdSetBatchDeleteGuestFail, BatchID: batchID, InstanceID: guestID, Error: err, ErrorChan: respChan} } -func (manager *ResourceManager) GetBatchDeleteGuestStatus(batchID string, respChan chan ResourceResult){ - manager.commands <- resourceCommand{Type: cmdGetBatchDeleteGuest, BatchID:batchID, ResultChan:respChan} +func (manager *ResourceManager) GetBatchDeleteGuestStatus(batchID string, respChan chan ResourceResult) { + manager.commands <- resourceCommand{Type: cmdGetBatchDeleteGuest, BatchID: batchID, ResultChan: respChan} } -func (manager *ResourceManager) StartBatchStopGuest(id []string, respChan chan ResourceResult){ - manager.commands <- resourceCommand{Type: cmdStartBatchStopGuest, IDList: id, ResultChan:respChan} +func (manager *ResourceManager) StartBatchStopGuest(id []string, respChan chan ResourceResult) { + manager.commands <- resourceCommand{Type: cmdStartBatchStopGuest, IDList: id, ResultChan: respChan} } -func (manager *ResourceManager) SetBatchStopGuestSuccess(batchID, guestID string, respChan chan error){ - manager.commands <- resourceCommand{Type: cmdSetBatchStopGuestSuccess, BatchID:batchID, InstanceID:guestID, ErrorChan:respChan} +func (manager *ResourceManager) SetBatchStopGuestSuccess(batchID, guestID string, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdSetBatchStopGuestSuccess, BatchID: batchID, InstanceID: guestID, ErrorChan: respChan} } -func (manager *ResourceManager) SetBatchStopGuestFail(batchID, guestID string, err error, respChan chan error){ - manager.commands <- resourceCommand{Type: cmdSetBatchStopGuestFail, BatchID:batchID, InstanceID: guestID, Error:err, ErrorChan:respChan} +func (manager *ResourceManager) SetBatchStopGuestFail(batchID, guestID string, err error, respChan chan error) { + manager.commands <- resourceCommand{Type: cmdSetBatchStopGuestFail, BatchID: batchID, InstanceID: guestID, Error: err, ErrorChan: respChan} } -func (manager *ResourceManager) GetBatchStopGuestStatus(batchID string, respChan chan ResourceResult){ - manager.commands <- resourceCommand{Type: cmdGetBatchStopGuest, BatchID:batchID, ResultChan:respChan} +func (manager *ResourceManager) GetBatchStopGuestStatus(batchID string, respChan chan ResourceResult) { + manager.commands <- resourceCommand{Type: cmdGetBatchStopGuest, BatchID: batchID, ResultChan: respChan} } -func (manager *ResourceManager) QuerySystemTemplates(respChan chan ResourceResult){ +func (manager *ResourceManager) QuerySystemTemplates(respChan chan ResourceResult) { manager.commands <- resourceCommand{Type: cmdQuerySystemTemplates, ResultChan: respChan} } -func (manager *ResourceManager) GetSystemTemplate(id string, respChan chan ResourceResult){ +func (manager *ResourceManager) GetSystemTemplate(id string, respChan chan ResourceResult) { manager.commands <- resourceCommand{Type: cmdGetSystemTemplate, TemplateID: id, ResultChan: respChan} } -func (manager *ResourceManager) CreateSystemTemplate(config SystemTemplateConfig, respChan chan ResourceResult){ +func (manager *ResourceManager) CreateSystemTemplate(config SystemTemplateConfig, respChan chan ResourceResult) { manager.commands <- resourceCommand{Type: cmdCreateSystemTemplate, TemplateConfig: config, ResultChan: respChan} } -func (manager *ResourceManager) ModifySystemTemplate(id string, config SystemTemplateConfig, respChan chan error){ +func (manager *ResourceManager) ModifySystemTemplate(id string, config SystemTemplateConfig, respChan chan error) { manager.commands <- resourceCommand{Type: cmdModifySystemTemplate, TemplateID: id, TemplateConfig: config, ErrorChan: respChan} } -func (manager *ResourceManager) DeleteSystemTemplate(id string, respChan chan error){ +func (manager *ResourceManager) DeleteSystemTemplate(id string, respChan chan error) { manager.commands <- resourceCommand{Type: cmdDeleteSystemTemplate, TemplateID: id, ErrorChan: respChan} } //Security Policy Group -func (manager *ResourceManager) QuerySecurityPolicyGroups(condition SecurityPolicyGroupQueryCondition, respChan chan ResourceResult){ +func (manager *ResourceManager) QuerySecurityPolicyGroups(condition SecurityPolicyGroupQueryCondition, respChan chan ResourceResult) { manager.commands <- resourceCommand{Type: cmdQuerySecurityPolicyGroups, PolicyGroupQuery: condition, ResultChan: respChan} } -func (manager *ResourceManager) GetSecurityPolicyGroup(groupID string, respChan chan ResourceResult){ +func (manager *ResourceManager) GetSecurityPolicyGroup(groupID string, respChan chan ResourceResult) { manager.commands <- resourceCommand{Type: cmdGetSecurityPolicyGroup, Group: groupID, ResultChan: respChan} } -func (manager *ResourceManager) CreateSecurityPolicyGroup(config SecurityPolicyGroup, respChan chan ResourceResult){ +func (manager *ResourceManager) CreateSecurityPolicyGroup(config SecurityPolicyGroup, respChan chan ResourceResult) { manager.commands <- resourceCommand{Type: cmdCreateSecurityPolicyGroup, PolicyGroup: config, ResultChan: respChan} } -func (manager *ResourceManager) ModifySecurityPolicyGroup(groupID string, config SecurityPolicyGroup, respChan chan error){ +func (manager *ResourceManager) ModifySecurityPolicyGroup(groupID string, config SecurityPolicyGroup, respChan chan error) { manager.commands <- resourceCommand{Type: cmdModifySecurityPolicyGroup, Group: groupID, PolicyGroup: config, ErrorChan: respChan} } -func (manager *ResourceManager) DeleteSecurityPolicyGroup(groupID string, respChan chan error){ +func (manager *ResourceManager) DeleteSecurityPolicyGroup(groupID string, respChan chan error) { manager.commands <- resourceCommand{Type: cmdDeleteSecurityPolicyGroup, Group: groupID, ErrorChan: respChan} } -func (manager *ResourceManager) GetSecurityPolicyRules(groupID string, respChan chan ResourceResult){ +func (manager *ResourceManager) GetSecurityPolicyRules(groupID string, respChan chan ResourceResult) { manager.commands <- resourceCommand{Type: cmdGetSecurityPolicyRules, Group: groupID, ResultChan: respChan} } -func (manager *ResourceManager) AddSecurityPolicyRule(groupID string, rule SecurityPolicyRule, respChan chan error){ +func (manager *ResourceManager) AddSecurityPolicyRule(groupID string, rule SecurityPolicyRule, respChan chan error) { manager.commands <- resourceCommand{Type: cmdAddSecurityPolicyRule, Group: groupID, PolicyRule: rule, ErrorChan: respChan} } -func (manager *ResourceManager) ModifySecurityPolicyRule(groupID string, index int, rule SecurityPolicyRule, respChan chan error){ +func (manager *ResourceManager) ModifySecurityPolicyRule(groupID string, index int, rule SecurityPolicyRule, respChan chan error) { manager.commands <- resourceCommand{Type: cmdModifySecurityPolicyRule, Group: groupID, Index: index, PolicyRule: rule, ErrorChan: respChan} } -func (manager *ResourceManager) RemoveSecurityPolicyRule(groupID string, index int, respChan chan error){ +func (manager *ResourceManager) RemoveSecurityPolicyRule(groupID string, index int, respChan chan error) { manager.commands <- resourceCommand{Type: cmdRemoveSecurityPolicyRule, Group: groupID, Index: index, ErrorChan: respChan} } -func (manager *ResourceManager) MoveSecurityPolicyRule(groupID string, index int, up bool, respChan chan error){ +func (manager *ResourceManager) MoveSecurityPolicyRule(groupID string, index int, up bool, respChan chan error) { manager.commands <- resourceCommand{Type: cmdMoveSecurityPolicyRule, Group: groupID, Index: index, Flag: up, ErrorChan: respChan} } @@ -889,13 +887,13 @@ func (manager *ResourceManager) mainRoutine(c framework.RoutineController) { var batchUpdateTicker = time.NewTicker(batchUpdateInterval) for !c.IsStopping() { select { - case <- c.GetNotifyChannel(): + case <-c.GetNotifyChannel(): c.SetStopping() case report := <-manager.reportChan: manager.onCellStatusUpdate(report) case <-summaryTicker.C: manager.onUpdateSystemStatus() - case <- batchUpdateTicker.C: + case <-batchUpdateTicker.C: manager.updateBatchStatus() case cmd := <-manager.commands: manager.handleCommand(cmd) @@ -904,23 +902,23 @@ func (manager *ResourceManager) mainRoutine(c framework.RoutineController) { c.NotifyExit() } -func (manager *ResourceManager) updateBatchStatus(){ +func (manager *ResourceManager) updateBatchStatus() { const ( TaskExpire = time.Second * 30 ) var expireTime = time.Now().Add(-TaskExpire) - if 0 != len(manager.batchCreateTasks){ + if 0 != len(manager.batchCreateTasks) { //create batch var expired []string - for taskID, task := range manager.batchCreateTasks{ + for taskID, task := range manager.batchCreateTasks { if task.Finished { - if task.LatestUpdate.Before(expireTime){ + if task.LatestUpdate.Before(expireTime) { //expired expired = append(expired, taskID) } - }else{ + } else { //unfinished - if task.LatestUpdate.Before(expireTime){ + if task.LatestUpdate.Before(expireTime) { //expired task.Finished = true manager.batchCreateTasks[taskID] = task @@ -930,28 +928,28 @@ func (manager *ResourceManager) updateBatchStatus(){ //check all guest var unfinishedGuestCount = 0 var taskUpdated = false - for guestIndex, guest := range task.Guests{ - if guest.Status == BatchTaskStatusProcess{ - if createError, exists := manager.pendingError[guest.ID]; exists{ + for guestIndex, guest := range task.Guests { + if guest.Status == BatchTaskStatusProcess { + if createError, exists := manager.pendingError[guest.ID]; exists { //create fail guest.Status = BatchTaskStatusFail guest.Error = createError.Error() log.Printf(" batch create guest '%s' fail: %s", guest.Name, createError.Error()) - }else if 0 == len(guest.ID){ + } else if 0 == len(guest.ID) { //not id allocated unfinishedGuestCount++ continue - }else{ + } else { ins, exists := manager.instances[guest.ID] - if !exists{ + if !exists { unfinishedGuestCount++ log.Printf(" warning: invalid guest '%s' in batch '%s'", guest.ID, taskID) continue } - if ins.Created{ + if ins.Created { guest.Status = BatchTaskStatusSuccess log.Printf(" update guest '%s' as created in batch '%s'", guest.Name, taskID) - }else{ + } else { guest.Progress = ins.Progress unfinishedGuestCount++ } @@ -960,11 +958,11 @@ func (manager *ResourceManager) updateBatchStatus(){ taskUpdated = true } } - if taskUpdated{ + if taskUpdated { task.LatestUpdate = time.Now() manager.batchCreateTasks[taskID] = task } - if 0 == unfinishedGuestCount{ + if 0 == unfinishedGuestCount { //all guest processed task.Finished = true manager.batchCreateTasks[taskID] = task @@ -972,25 +970,25 @@ func (manager *ResourceManager) updateBatchStatus(){ } } } - if 0 != len(expired){ - for _, taskID := range expired{ + if 0 != len(expired) { + for _, taskID := range expired { delete(manager.batchCreateTasks, taskID) log.Printf(" release expired batch create task '%s'", taskID) } } } - if 0 != len(manager.batchDeleteTasks){ + if 0 != len(manager.batchDeleteTasks) { //delete batch var expired []string - for taskID, task := range manager.batchDeleteTasks{ + for taskID, task := range manager.batchDeleteTasks { if task.Finished { - if task.LatestUpdate.Before(expireTime){ + if task.LatestUpdate.Before(expireTime) { //expired expired = append(expired, taskID) } - }else{ + } else { //unfinished - if task.LatestUpdate.Before(expireTime){ + if task.LatestUpdate.Before(expireTime) { //expired task.Finished = true manager.batchDeleteTasks[taskID] = task @@ -999,19 +997,19 @@ func (manager *ResourceManager) updateBatchStatus(){ } //check all guest var unfinishedGuestCount = 0 - for guestIndex, guest := range task.Guests{ - if guest.Status == BatchTaskStatusProcess{ - if _, exists := manager.instances[guest.ID];!exists{ + for guestIndex, guest := range task.Guests { + if guest.Status == BatchTaskStatusProcess { + if _, exists := manager.instances[guest.ID]; !exists { //already deleted guest.Status = BatchTaskStatusSuccess task.Guests[guestIndex] = guest log.Printf(" update guest '%s' as deleted in batch '%s'", guest.Name, taskID) - }else{ + } else { unfinishedGuestCount++ } } } - if 0 == unfinishedGuestCount{ + if 0 == unfinishedGuestCount { //all guest processed task.Finished = true manager.batchDeleteTasks[taskID] = task @@ -1019,26 +1017,26 @@ func (manager *ResourceManager) updateBatchStatus(){ } } } - if 0 != len(expired){ - for _, taskID := range expired{ + if 0 != len(expired) { + for _, taskID := range expired { delete(manager.batchDeleteTasks, taskID) log.Printf(" release expired batch delete task '%s'", taskID) } } } - if 0 != len(manager.batchStopTasks){ + if 0 != len(manager.batchStopTasks) { //stop batch var expired []string - for taskID, task := range manager.batchStopTasks{ + for taskID, task := range manager.batchStopTasks { if task.Finished { - if task.LatestUpdate.Before(expireTime){ + if task.LatestUpdate.Before(expireTime) { //expired expired = append(expired, taskID) } - }else{ + } else { //unfinished - if task.LatestUpdate.Before(expireTime){ + if task.LatestUpdate.Before(expireTime) { //expired task.Finished = true manager.batchStopTasks[taskID] = task @@ -1047,19 +1045,19 @@ func (manager *ResourceManager) updateBatchStatus(){ } //check all guest var unfinishedGuestCount = 0 - for guestIndex, guest := range task.Guests{ - if guest.Status == BatchTaskStatusProcess{ - if _, exists := manager.instances[guest.ID];!exists{ + for guestIndex, guest := range task.Guests { + if guest.Status == BatchTaskStatusProcess { + if _, exists := manager.instances[guest.ID]; !exists { //already stopd guest.Status = BatchTaskStatusSuccess task.Guests[guestIndex] = guest log.Printf(" update guest '%s' as stopped in batch '%s'", guest.Name, taskID) - }else{ + } else { unfinishedGuestCount++ } } } - if 0 == unfinishedGuestCount{ + if 0 == unfinishedGuestCount { //all guest processed task.Finished = true manager.batchStopTasks[taskID] = task @@ -1067,8 +1065,8 @@ func (manager *ResourceManager) updateBatchStatus(){ } } } - if 0 != len(expired){ - for _, taskID := range expired{ + if 0 != len(expired) { + for _, taskID := range expired { delete(manager.batchStopTasks, taskID) log.Printf(" release expired batch stop task '%s'", taskID) } @@ -1099,7 +1097,7 @@ func (manager *ResourceManager) handleCommand(cmd resourceCommand) { err = manager.handleModifyStoragePool(cmd.Storage, cmd.StorageType, cmd.Host, cmd.Target, cmd.ErrorChan) case cmdDeleteStoragePool: err = manager.handleDeleteStoragePool(cmd.Storage, cmd.ErrorChan) - + case cmdQueryComputeCells: err = manager.handleQueryCellsInPool(cmd.Pool, cmd.ResultChan) case cmdAddComputeCell: @@ -1319,8 +1317,8 @@ func (manager *ResourceManager) onUpdateSystemStatus() { continue } pool.ResourceUsage.Accumulate(cell.ResourceUsage) - if !cell.isInstanceConsistent(){ - if err = manager.syncInstanceStatistic(cell.Name); err != nil{ + if !cell.isInstanceConsistent() { + if err = manager.syncInstanceStatistic(cell.Name); err != nil { log.Printf(" warning: sync instance statistic on cell '%s' fail: %s", cell.Name, err.Error()) continue } @@ -1356,7 +1354,7 @@ func (manager *ResourceManager) onUpdateSystemStatus() { func (manager *ResourceManager) handleQueryAllPools(resp chan ResourceResult) error { var result []ComputePoolInfo var names []string - for name, _ := range manager.pools{ + for name, _ := range manager.pools { names = append(names, name) } sort.Stable(sort.StringSlice(names)) @@ -1365,15 +1363,15 @@ func (manager *ResourceManager) handleQueryAllPools(resp chan ResourceResult) er var info = ComputePoolInfo{poolName, pool.Enabled, pool.Network, pool.Storage, pool.Failover, uint64(len(pool.Cells))} result = append(result, info) } - resp <- ResourceResult{ComputePoolInfoList:result} + resp <- ResourceResult{ComputePoolInfoList: result} return nil } -func (manager *ResourceManager) handleGetComputePool(poolName string, resp chan ResourceResult) error{ +func (manager *ResourceManager) handleGetComputePool(poolName string, resp chan ResourceResult) error { pool, exists := manager.pools[poolName] - if !exists{ + if !exists { err := fmt.Errorf("invalid pool '%s'", poolName) - resp <- ResourceResult{Error:err} + resp <- ResourceResult{Error: err} return err } resp <- ResourceResult{ComputePoolConfig: pool.ComputePoolInfo} @@ -1391,24 +1389,24 @@ func (manager *ResourceManager) handleCreatePool(name, storage, addressPool stri newPool.Name = name newPool.Cells = map[string]bool{} newPool.InstanceNames = map[string]string{} - if "" != storage{ - if _, exists := manager.storagePools[storage]; !exists{ + if "" != storage { + if _, exists := manager.storagePools[storage]; !exists { err = fmt.Errorf("invalid storage pool '%s'", storage) resp <- err return err } newPool.Storage = storage log.Printf(" new compute pool '%s' using storage '%s' created", name, storage) - }else{ - if failover{ + } else { + if failover { err = errors.New("using shared storage to enable Failover feature") resp <- err return err } log.Printf(" new compute pool '%s' using local storage created", name) } - if "" != addressPool{ - if _, exists := manager.addressPools[addressPool]; !exists{ + if "" != addressPool { + if _, exists := manager.addressPools[addressPool]; !exists { err = fmt.Errorf("invalid address pool '%s'", addressPool) resp <- err return err @@ -1429,74 +1427,74 @@ func (manager *ResourceManager) handleModifyPool(poolName, storage, addressPool resp <- err return err } - if (pool.Storage == storage) && (pool.Failover == failover) && (pool.Network == addressPool){ + if (pool.Storage == storage) && (pool.Failover == failover) && (pool.Network == addressPool) { err = errors.New("no need to change") resp <- err return err } var sharedStorage = "" != storage - if pool.Failover != failover{ + if pool.Failover != failover { //change failover - if failover{ + if failover { //enable - if !sharedStorage{ + if !sharedStorage { err = errors.New("using shared storage to enable Failover feature") resp <- err return err } log.Printf(" failover enabled on pool '%s'", poolName) - }else{ + } else { log.Printf(" failover disabled on pool '%s'", poolName) } pool.Failover = failover } - if pool.Storage != storage{ + if pool.Storage != storage { if 0 != len(pool.Cells) { err = errors.New("must remove all cells before change storage") resp <- err return err } - if sharedStorage{ - if _, exists = manager.storagePools[storage]; !exists{ + if sharedStorage { + if _, exists = manager.storagePools[storage]; !exists { err = fmt.Errorf("invalid storage pool '%s'", storage) resp <- err return err } log.Printf(" compute pool '%s' change to storage pool '%s'", poolName, storage) - }else if pool.Failover{ + } else if pool.Failover { err = errors.New("can not using local storage when failover enabled") resp <- err return err - }else{ + } else { log.Printf(" compute pool '%s' change to local storage", poolName) } pool.Storage = storage } - if addressPool != pool.Network{ - if "" != pool.Network{ + if addressPool != pool.Network { + if "" != pool.Network { //check previous addresses - if current, exists := manager.addressPools[pool.Network]; !exists{ + if current, exists := manager.addressPools[pool.Network]; !exists { err = fmt.Errorf("invalid current address pool '%s'", pool.Network) resp <- err return err - }else{ + } else { var allocated = 0 - for _, addressRange := range current.ranges{ - for allocatedAddress, instanceID := range addressRange.allocated{ + for _, addressRange := range current.ranges { + for allocatedAddress, instanceID := range addressRange.allocated { ins, exists := manager.instances[instanceID] - if !exists{ + if !exists { err = fmt.Errorf("can't find instance '%s' allocated with address '%s' in current pool '%s'", instanceID, allocatedAddress, pool.Network) resp <- err return err } - if ins.Pool == poolName{ + if ins.Pool == poolName { allocated++ } } } - if 0 != allocated{ + if 0 != allocated { err = fmt.Errorf("%d instance address(es) allocated in current pool '%s', remove or detach all address before change address pool", allocated, current.name) resp <- err @@ -1504,14 +1502,14 @@ func (manager *ResourceManager) handleModifyPool(poolName, storage, addressPool } } } - if "" != addressPool{ - if _, exists := manager.addressPools[addressPool]; !exists{ + if "" != addressPool { + if _, exists := manager.addressPools[addressPool]; !exists { err = fmt.Errorf("invalid address pool '%s'", addressPool) resp <- err return err } log.Printf(" address pool of '%s' changed to '%s'", poolName, addressPool) - }else{ + } else { log.Printf(" address pool '%s' detached from '%s'", pool.Network, poolName) } @@ -1543,8 +1541,8 @@ func (manager *ResourceManager) handleDeletePool(name string, resp chan error) e } //storage pools -func (manager *ResourceManager) handleCreateStoragePool(name, storageType, host, target string, respChan chan error) (err error){ - if _, exists := manager.storagePools[name]; exists{ +func (manager *ResourceManager) handleCreateStoragePool(name, storageType, host, target string, respChan chan error) (err error) { + if _, exists := manager.storagePools[name]; exists { err = fmt.Errorf("storage pool '%s' already exists", name) respChan <- err return err @@ -1565,16 +1563,16 @@ func (manager *ResourceManager) handleCreateStoragePool(name, storageType, host, return manager.saveConfig() } -func (manager *ResourceManager) handleModifyStoragePool(name, storageType, host, target string, respChan chan error) (err error){ +func (manager *ResourceManager) handleModifyStoragePool(name, storageType, host, target string, respChan chan error) (err error) { currentStorage, exists := manager.storagePools[name] - if !exists{ + if !exists { err = fmt.Errorf("invalid storage pool '%s'", name) respChan <- err return err } //check attached compute pool - for poolName, pool := range manager.pools{ - if pool.Storage == name{ + for poolName, pool := range manager.pools { + if pool.Storage == name { err = fmt.Errorf("compute pool '%s' still attached to storage '%s'", poolName, name) respChan <- err return err @@ -1589,20 +1587,20 @@ func (manager *ResourceManager) handleModifyStoragePool(name, storageType, host, respChan <- err return err } - var isEqual = func(source, target StoragePoolInfo) bool{ - if source.Type != target.Type{ + var isEqual = func(source, target StoragePoolInfo) bool { + if source.Type != target.Type { return false } - if source.Host != target.Host{ + if source.Host != target.Host { return false } - if source.Target != target.Target{ + if source.Target != target.Target { return false } return true } var newStorage = StoragePoolInfo{name, storageType, host, target} - if isEqual(currentStorage, newStorage){ + if isEqual(currentStorage, newStorage) { err = errors.New("no need to change") respChan <- err return err @@ -1614,15 +1612,15 @@ func (manager *ResourceManager) handleModifyStoragePool(name, storageType, host, return manager.saveConfig() } -func (manager *ResourceManager) handleDeleteStoragePool(name string, respChan chan error) (err error){ - if _, exists := manager.storagePools[name]; !exists{ +func (manager *ResourceManager) handleDeleteStoragePool(name string, respChan chan error) (err error) { + if _, exists := manager.storagePools[name]; !exists { err = fmt.Errorf("invalid storage pool '%s'", name) respChan <- err return err } //check attached compute pool - for poolName, pool := range manager.pools{ - if pool.Storage == name{ + for poolName, pool := range manager.pools { + if pool.Storage == name { err = fmt.Errorf("compute pool '%s' still attached to storage '%s'", poolName, name) respChan <- err return err @@ -1634,32 +1632,32 @@ func (manager *ResourceManager) handleDeleteStoragePool(name string, respChan ch return manager.saveConfig() } -func (manager *ResourceManager) handleGetStoragePool(name string, respChan chan ResourceResult) (err error){ +func (manager *ResourceManager) handleGetStoragePool(name string, respChan chan ResourceResult) (err error) { pool, exists := manager.storagePools[name] - if !exists{ + if !exists { err = fmt.Errorf("invalid storage pool '%s'", name) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } respChan <- ResourceResult{StoragePool: pool} return nil } -func (manager *ResourceManager) handleQueryStoragePool(respChan chan ResourceResult) (err error){ +func (manager *ResourceManager) handleQueryStoragePool(respChan chan ResourceResult) (err error) { var result []StoragePoolInfo var keys = make([]string, len(manager.storagePools)) var keyIndex = 0 - for name, _ := range manager.storagePools{ + for name, _ := range manager.storagePools { keys[keyIndex] = name keyIndex++ } sort.Stable(sort.StringSlice(keys)) - for _, poolName := range keys{ + for _, poolName := range keys { storage, exists := manager.storagePools[poolName] - if !exists{ + if !exists { err = fmt.Errorf("invalid storage pool '%s'", poolName) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } result = append(result, storage) @@ -1668,31 +1666,31 @@ func (manager *ResourceManager) handleQueryStoragePool(respChan chan ResourceRes return nil } -func (manager *ResourceManager) handleQueryCellsInPool(poolName string, resp chan ResourceResult) error{ +func (manager *ResourceManager) handleQueryCellsInPool(poolName string, resp chan ResourceResult) error { pool, exists := manager.pools[poolName] if !exists { err := fmt.Errorf("invalid compute pool '%s'", poolName) - resp <- ResourceResult{Error:err} + resp <- ResourceResult{Error: err} return err } var names []string - for name, _ := range pool.Cells{ + for name, _ := range pool.Cells { names = append(names, name) } sort.Stable(sort.StringSlice(names)) var cells []ComputeCellInfo - for _, cellName:= range names{ - if cell, exists := manager.cells[cellName];!exists{ + for _, cellName := range names { + if cell, exists := manager.cells[cellName]; !exists { err := fmt.Errorf("invalid compute cell '%s'", cellName) - resp <- ResourceResult{Error:err} + resp <- ResourceResult{Error: err} return err - }else { + } else { var info = ComputeCellInfo{cell.Name, cell.Address, cell.Enabled, cell.Alive, cell.PurgeAppending} cells = append(cells, info) } } - resp <- ResourceResult{ComputeCellInfoList:cells} + resp <- ResourceResult{ComputeCellInfoList: cells} return nil } @@ -1750,8 +1748,8 @@ func (manager *ResourceManager) handleRemoveCell(poolName, cellName string, resp return err } var left = len(cell.Instances) + len(cell.Pending) - if 0 != left{ - err := fmt.Errorf("%d instance(s) left in cell '%s', migrate or delete all instance(s) before remove cell", left, cellName,) + if 0 != left { + err := fmt.Errorf("%d instance(s) left in cell '%s', migrate or delete all instance(s) before remove cell", left, cellName) resp <- err return err } @@ -1769,7 +1767,7 @@ func (manager *ResourceManager) handleRemoveCell(poolName, cellName string, resp return manager.saveConfig() } -func (manager *ResourceManager) handleEnableCell(poolName, cellName string, respChan chan error) (err error){ +func (manager *ResourceManager) handleEnableCell(poolName, cellName string, respChan chan error) (err error) { _, exists := manager.pools[poolName] if !exists { err = fmt.Errorf("invalid compute pool '%s'", poolName) @@ -1787,14 +1785,14 @@ func (manager *ResourceManager) handleEnableCell(poolName, cellName string, resp respChan <- err return err } - if cell.Enabled{ + if cell.Enabled { err = fmt.Errorf("cell '%s' already enabled", cellName) respChan <- err return err } - if cell.PurgeAppending{ + if cell.PurgeAppending { log.Printf(" warning: appending purge canceled when cell '%s' in pool '%s' enabled", cellName, poolName) - }else{ + } else { log.Printf(" cell '%s' in pool '%s' enabled", cellName, poolName) } cell.PurgeAppending = false @@ -1804,7 +1802,7 @@ func (manager *ResourceManager) handleEnableCell(poolName, cellName string, resp return manager.saveConfig() } -func (manager *ResourceManager) handleDisableCell(poolName, cellName string, purge bool, respChan chan error) (err error){ +func (manager *ResourceManager) handleDisableCell(poolName, cellName string, purge bool, respChan chan error) (err error) { _, exists := manager.pools[poolName] if !exists { err = fmt.Errorf("invalid compute pool '%s'", poolName) @@ -1822,14 +1820,14 @@ func (manager *ResourceManager) handleDisableCell(poolName, cellName string, pur respChan <- err return err } - if !cell.Enabled{ + if !cell.Enabled { err = fmt.Errorf("cell '%s' already disabled", cellName) respChan <- err return err } - if purge{ + if purge { log.Printf(" cell '%s' in pool '%s' disabled with purge appending", cellName, poolName) - }else{ + } else { log.Printf(" cell '%s' in pool '%s' disabled", cellName, poolName) } cell.PurgeAppending = purge @@ -1839,14 +1837,14 @@ func (manager *ResourceManager) handleDisableCell(poolName, cellName string, pur return manager.saveConfig() } -func (manager *ResourceManager) handleFinishPurgeCell(cellName string, respChan chan error) (err error){ +func (manager *ResourceManager) handleFinishPurgeCell(cellName string, respChan chan error) (err error) { cell, exists := manager.cells[cellName] if !exists { err = fmt.Errorf("invalid compute cell '%s'", cellName) respChan <- err return err } - if !cell.PurgeAppending{ + if !cell.PurgeAppending { err = fmt.Errorf("cell '%s' doesn't have purge appending", cellName) respChan <- err return err @@ -1861,21 +1859,21 @@ func (manager *ResourceManager) handleFinishPurgeCell(cellName string, respChan func (manager *ResourceManager) handleGetUnallocatedCells(resp chan ResourceResult) error { var cells []ComputeCellInfo for name, _ := range manager.unallocatedCells { - if cell, exists := manager.cells[name];!exists{ + if cell, exists := manager.cells[name]; !exists { err := fmt.Errorf("invalid cell '%s'", name) - resp <- ResourceResult{Error:err} + resp <- ResourceResult{Error: err} return err - }else{ + } else { var info = ComputeCellInfo{cell.Name, cell.Address, cell.Enabled, cell.Alive, cell.PurgeAppending} cells = append(cells, info) } } - resp <- ResourceResult{ComputeCellInfoList:cells} + resp <- ResourceResult{ComputeCellInfoList: cells} return nil } func (manager *ResourceManager) handleQueryZoneStatus(resp chan ResourceResult) error { - var s = ZoneStatus{Name:manager.zone.Name, + var s = ZoneStatus{Name: manager.zone.Name, PoolStatistic: manager.zone.PoolStatistic, CellStatistic: manager.zone.CellStatistic, InstanceStatistic: manager.zone.InstanceStatistic, ResourceUsage: manager.zone.ResourceUsage, StartTime: manager.startTime} @@ -1887,15 +1885,15 @@ func (manager *ResourceManager) handleQueryZoneStatus(resp chan ResourceResult) func (manager *ResourceManager) handleQueryComputePoolStatus(resp chan ResourceResult) error { var pools []ComputePoolStatus var names []string - for name, _ := range manager.pools{ + for name, _ := range manager.pools { names = append(names, name) } sort.Stable(sort.StringSlice(names)) for _, poolName := range names { pool, _ := manager.pools[poolName] var s = ComputePoolStatus{ - Name:pool.Name, Enabled:pool.Enabled, - CellStatistic:pool.CellStatistic, InstanceStatistic: pool.InstanceStatistic, ResourceUsage: pool.ResourceUsage} + Name: pool.Name, Enabled: pool.Enabled, + CellStatistic: pool.CellStatistic, InstanceStatistic: pool.InstanceStatistic, ResourceUsage: pool.ResourceUsage} pools = append(pools, s) } resp <- ResourceResult{ComputePoolList: pools} @@ -1910,36 +1908,35 @@ func (manager *ResourceManager) handleGetComputePoolStatus(name string, resp cha return err } var s = ComputePoolStatus{ - Name:pool.Name, Enabled:pool.Enabled, - CellStatistic:pool.CellStatistic, InstanceStatistic: pool.InstanceStatistic, ResourceUsage: pool.ResourceUsage} + Name: pool.Name, Enabled: pool.Enabled, + CellStatistic: pool.CellStatistic, InstanceStatistic: pool.InstanceStatistic, ResourceUsage: pool.ResourceUsage} resp <- ResourceResult{ComputePool: s} return nil } - func (manager *ResourceManager) handleQueryComputeCellStatus(poolName string, resp chan ResourceResult) error { pool, exists := manager.pools[poolName] - if !exists{ + if !exists { err := fmt.Errorf("invalid pool '%s'", poolName) - resp <- ResourceResult{Error:err} + resp <- ResourceResult{Error: err} return err } var result []ComputeCellStatus var names []string - for name, _ := range pool.Cells{ + for name, _ := range pool.Cells { names = append(names, name) } sort.Stable(sort.StringSlice(names)) - for _, cellName:= range names{ + for _, cellName := range names { cell, exists := manager.cells[cellName] if !exists { err := fmt.Errorf("invalid cell '%s' in pool %s", cellName, poolName) resp <- ResourceResult{Error: err} return err } - var s = ComputeCellStatus{ComputeCellInfo:cell.ComputeCellInfo, + var s = ComputeCellStatus{ComputeCellInfo: cell.ComputeCellInfo, InstanceStatistic: cell.InstanceStatistic, ResourceUsage: cell.ResourceUsage} result = append(result, s) } @@ -1947,26 +1944,26 @@ func (manager *ResourceManager) handleQueryComputeCellStatus(poolName string, re return nil } -func (manager *ResourceManager) handleGetComputeCellStatus(poolName, cellName string, resp chan ResourceResult) error{ +func (manager *ResourceManager) handleGetComputeCellStatus(poolName, cellName string, resp chan ResourceResult) error { cell, exists := manager.cells[cellName] if !exists { err := fmt.Errorf("invalid cell '%s'", cellName) - resp <- ResourceResult{Error:err} + resp <- ResourceResult{Error: err} return err } - if cell.Pool != poolName{ + if cell.Pool != poolName { err := fmt.Errorf("cell '%s' not in pool '%s'", cellName, poolName) - resp <- ResourceResult{Error:err} + resp <- ResourceResult{Error: err} return err } - var s = ComputeCellStatus{ComputeCellInfo:cell.ComputeCellInfo, InstanceStatistic: cell.InstanceStatistic, ResourceUsage: cell.ResourceUsage} + var s = ComputeCellStatus{ComputeCellInfo: cell.ComputeCellInfo, InstanceStatistic: cell.InstanceStatistic, ResourceUsage: cell.ResourceUsage} resp <- ResourceResult{ComputeCell: s} return nil } -func (manager *ResourceManager) handleUpdateCellInfo(cellName, cellAddress string, respChan chan error) (err error){ +func (manager *ResourceManager) handleUpdateCellInfo(cellName, cellAddress string, respChan chan error) (err error) { cell, exists := manager.cells[cellName] - if !exists{ + if !exists { var cellStatus = ManagedComputeCell{} cellStatus.LatestUpdate = time.Now() cellStatus.Name = cellName @@ -1978,10 +1975,10 @@ func (manager *ResourceManager) handleUpdateCellInfo(cellName, cellAddress strin manager.unallocatedCells[cellName] = true manager.cells[cellName] = cellStatus log.Printf(" new unallocated cell '%s' (address %s) available", cellName, cellAddress) - }else{ + } else { cell.Alive = true cell.LatestUpdate = time.Now() - if cell.Address != cellAddress{ + if cell.Address != cellAddress { log.Printf(" cell '%s' address changed to %s", cellName, cellAddress) cell.Address = cellAddress } @@ -2004,7 +2001,7 @@ func (manager *ResourceManager) handleGetCellStatus(cellName string, respChan ch return nil } -func (manager *ResourceManager) handleSetCellStopped(cellName string, respChan chan error) (err error){ +func (manager *ResourceManager) handleSetCellStopped(cellName string, respChan chan error) (err error) { cell, exists := manager.cells[cellName] if !exists { err = fmt.Errorf("invalid cell '%s'", cellName) @@ -2013,20 +2010,20 @@ func (manager *ResourceManager) handleSetCellStopped(cellName string, respChan c } cell.Alive = false log.Printf(" remote cell '%s' stopped", cellName) - if "" != cell.Pool{ + if "" != cell.Pool { //update resource statistic cell.LostInstances = 0 - for instanceID, _ := range cell.Instances{ - if ins, exists := manager.instances[instanceID];exists{ - if ins.Running{ + for instanceID, _ := range cell.Instances { + if ins, exists := manager.instances[instanceID]; exists { + if ins.Running { cell.RunningInstances-- - }else{ + } else { cell.StoppedInstances-- } cell.LostInstances++ ins.Lost = true manager.instances[instanceID] = ins - }else{ + } else { err = fmt.Errorf("invalid instance '%s' in cell '%s'", instanceID, cellName) respChan <- err return err @@ -2045,7 +2042,7 @@ func (manager *ResourceManager) handleQueryGuestsByCondition(condition GuestQuer if condition.InCell { if cell, exists := manager.cells[condition.Cell]; !exists { err := fmt.Errorf("invalid cell '%s'", condition.Cell) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } else { for id, _ := range cell.Instances { @@ -2054,13 +2051,13 @@ func (manager *ResourceManager) handleQueryGuestsByCondition(condition GuestQuer } } else if pool, exists := manager.pools[condition.Pool]; !exists { err := fmt.Errorf("invalid pool '%s'", condition.Pool) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } else { for cellName, _ := range pool.Cells { if cell, exists := manager.cells[cellName]; !exists { err := fmt.Errorf("invalid cell '%s' in pool '%s'", condition.Cell, condition.Pool) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } else { for id, _ := range cell.Instances { @@ -2078,7 +2075,7 @@ func (manager *ResourceManager) handleQueryGuestsByCondition(condition GuestQuer for _, id := range idList { if instance, exists := manager.instances[id]; !exists { err := fmt.Errorf("invalid instance '%s'", id) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } else { if !(condition.WithOwner && instance.User == condition.Owner) && !(condition.WithGroup && instance.Group == condition.Group) { @@ -2091,9 +2088,9 @@ func (manager *ResourceManager) handleQueryGuestsByCondition(condition GuestQuer continue } - if _, exists := nameToID[instance.Name];exists{ + if _, exists := nameToID[instance.Name]; exists { err = fmt.Errorf("encounter duplicate instance name '%s'", instance.Name) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return } @@ -2104,17 +2101,17 @@ func (manager *ResourceManager) handleQueryGuestsByCondition(condition GuestQuer } sort.Stable(sort.StringSlice(names)) var result []InstanceStatus - for _, name := range names{ + for _, name := range names { id, exists := nameToID[name] - if !exists{ + if !exists { err = fmt.Errorf("no instance mapped with name '%s'", name) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } ins, exists := manager.instances[id] - if !exists{ + if !exists { err = fmt.Errorf("invalid instance '%s' with name '%s'", id, name) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } result = append(result, ins) @@ -2125,7 +2122,7 @@ func (manager *ResourceManager) handleQueryGuestsByCondition(condition GuestQuer func (manager *ResourceManager) handleBatchUpdateInstanceStatus(poolName, cellName string, instances []InstanceStatus, respChan chan error) error { pool, exists := manager.pools[poolName] - if !exists{ + if !exists { err := fmt.Errorf("invalid pool '%s'", poolName) respChan <- err return err @@ -2144,7 +2141,7 @@ func (manager *ResourceManager) handleBatchUpdateInstanceStatus(poolName, cellNa if 0 != len(cell.Instances) { for id, _ := range cell.Instances { log.Printf(" clear expired instance status, id '%s'", id) - if ins, exists := manager.instances[id];exists{ + if ins, exists := manager.instances[id]; exists { delete(pool.InstanceNames, ins.Name) } delete(manager.instances, id) @@ -2159,9 +2156,9 @@ func (manager *ResourceManager) handleBatchUpdateInstanceStatus(poolName, cellNa manager.instances[config.ID] = config cell.Instances[config.ID] = true //todo: migrating - if config.Running{ + if config.Running { cell.RunningInstances++ - }else{ + } else { cell.StoppedInstances++ } pool.InstanceNames[config.Name] = config.ID @@ -2176,24 +2173,32 @@ func (manager *ResourceManager) handleBatchUpdateInstanceStatus(poolName, cellNa func (manager *ResourceManager) handleAllocateInstance(poolName string, config InstanceStatus, respChan chan ResourceResult) (err error) { pool, exists := manager.pools[poolName] - if !exists{ + if !exists { err = fmt.Errorf("invalid compute pool '%s'", poolName) respChan <- ResourceResult{Error: err} return err } - if _, exists = pool.InstanceNames[config.Name];exists{ + if _, exists = pool.InstanceNames[config.Name]; exists { err = fmt.Errorf("instance '%s' already exists in pool '%s'", config.Name, poolName) respChan <- ResourceResult{Error: err} return err } var newID = uuid.NewV4() config.ID = newID.String() - cellName, err := manager.selectCell(poolName, config.InstanceResource, true) - if err != nil { - log.Printf(" select cell fail: %s", err.Error()) - respChan <- ResourceResult{Error: err} - return err + + // if config.Cell no set + var cellName string + if config.Cell == "" { + cellName, err = manager.selectCell(poolName, config.InstanceResource, true) + if err != nil { + log.Printf(" select cell fail: %s", err.Error()) + respChan <- ResourceResult{Error: err} + return err + } + } else { + cellName = config.Cell } + config.Cell = cellName config.Pool = poolName cell, exists := manager.cells[cellName] @@ -2202,19 +2207,28 @@ func (manager *ResourceManager) handleAllocateInstance(poolName string, config I respChan <- ResourceResult{Error: err} return err } - if "" != pool.Network{ - //select address - internal, external, err := manager.allocateNetworkAddress(pool, config.ID) - if err != nil{ + if "" != pool.Network { + var internal, external string + var err error + if "" == config.InternalNetwork.AssignedAddress { + //select address + internal, external, err = manager.allocateNetworkAddress(pool, config.ID) + } else { + //assigned address + internal, external, err = manager.allocateAssignedNetworkAddress(pool, config.ID, config.InternalNetwork.AssignedAddress) + } + + if err != nil { respChan <- ResourceResult{Error: err} return err } - if "" != external{ + if "" != external { config.ExternalNetwork.AssignedAddress = external log.Printf(" address '%s/%s' assigned for instance '%s'", internal, external, config.Name) - }else{ + } else { log.Printf(" internal address '%s' assigned for instance '%s'", internal, config.Name) } + config.InternalNetwork.AssignedAddress = internal } config.InternalNetwork.MonitorAddress = cell.Address @@ -2240,16 +2254,16 @@ func (manager *ResourceManager) handleUpdateInstanceStatus(status InstanceStatus } if ins.Running != status.Running { cell, exists := manager.cells[ins.Cell] - if !exists{ + if !exists { err := fmt.Errorf("invalid cell '%s' for instance '%s'", ins.Cell, status.ID) respChan <- err return err } - if ins.Running{ + if ins.Running { //running => stopped cell.StoppedInstances++ cell.RunningInstances-- - }else{ + } else { //stopped => running cell.StoppedInstances-- cell.RunningInstances++ @@ -2261,20 +2275,20 @@ func (manager *ResourceManager) handleUpdateInstanceStatus(status InstanceStatus ins.Progress = status.Progress ins.Created = status.Created } - if ins.Cores != status.Cores{ + if ins.Cores != status.Cores { ins.Cores = status.Cores } - if ins.Memory != status.Memory{ + if ins.Memory != status.Memory { ins.Memory = status.Memory } - if len(ins.Disks) == len(status.Disks){ - for index := 0; index < len(ins.Disks); index++{ - if ins.Disks[index] != status.Disks[index]{ + if len(ins.Disks) == len(status.Disks) { + for index := 0; index < len(ins.Disks); index++ { + if ins.Disks[index] != status.Disks[index] { ins.Disks[index] = status.Disks[index] } } } - if ins.MediaAttached != status.MediaAttached{ + if ins.MediaAttached != status.MediaAttached { ins.MediaAttached = status.MediaAttached ins.MediaSource = status.MediaSource } @@ -2347,14 +2361,14 @@ func (manager *ResourceManager) handleDeallocateInstance(id string, err error, r delete(cell.Instances, id) log.Printf(" instance '%s' deallocated in cell '%s'", id, cellName) } - if ins.Running{ + if ins.Running { cell.RunningInstances-- - }else{ + } else { cell.StoppedInstances-- } - if pool, exists := manager.pools[ins.Pool];exists{ - if "" != pool.Network{ + if pool, exists := manager.pools[ins.Pool]; exists { + if "" != pool.Network { manager.deallocateNetworkAddress(pool, ins.InternalNetwork.AssignedAddress, ins.ExternalNetwork.AssignedAddress) } delete(pool.InstanceNames, ins.Name) @@ -2364,7 +2378,7 @@ func (manager *ResourceManager) handleDeallocateInstance(id string, err error, r //update instance statistic manager.cells[cellName] = cell delete(manager.instances, id) - if err != nil{ + if err != nil { manager.pendingError[id] = err } respChan <- nil @@ -2374,84 +2388,83 @@ func (manager *ResourceManager) handleDeallocateInstance(id string, err error, r func (manager *ResourceManager) handleGetInstanceStatus(id string, respChan chan ResourceResult) (err error) { var exists bool var status InstanceStatus - if err, exists = manager.pendingError[id]; exists{ + if err, exists = manager.pendingError[id]; exists { //fetch pending error delete(manager.pendingError, id) respChan <- ResourceResult{Error: err} log.Printf(" pending error of instance '%s' fetched", id) return nil - }else if status, exists = manager.instances[id]; exists{ + } else if status, exists = manager.instances[id]; exists { respChan <- ResourceResult{Instance: status} return nil - }else{ + } else { err = fmt.Errorf("invalid instance '%s'", id) respChan <- ResourceResult{Error: err} return err } } - -func (manager *ResourceManager) handleQueryInstanceStatusInPool(poolName string, respChan chan ResourceResult) (err error){ +func (manager *ResourceManager) handleQueryInstanceStatusInPool(poolName string, respChan chan ResourceResult) (err error) { pool, exists := manager.pools[poolName] - if !exists{ + if !exists { err = fmt.Errorf("invalid pool '%s'", poolName) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } var idList []string - for cellName, _ := range pool.Cells{ - if cell, exists := manager.cells[cellName]; !exists{ + for cellName, _ := range pool.Cells { + if cell, exists := manager.cells[cellName]; !exists { err = fmt.Errorf("invalid cell '%s'", cellName) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err - }else{ - for instanceID, _ := range cell.Instances{ + } else { + for instanceID, _ := range cell.Instances { idList = append(idList, instanceID) } - for instanceID, _ := range cell.Pending{ + for instanceID, _ := range cell.Pending { idList = append(idList, instanceID) } } } result, err := manager.getSortedInstances(idList) - if err != nil{ - respChan <- ResourceResult{Error:err} + if err != nil { + respChan <- ResourceResult{Error: err} return err } respChan <- ResourceResult{InstanceList: result} return nil } -func (manager *ResourceManager) handleQueryInstanceStatusInCell(poolName, cellName string, respChan chan ResourceResult) (err error){ +func (manager *ResourceManager) handleQueryInstanceStatusInCell(poolName, cellName string, respChan chan ResourceResult) (err error) { pool, exists := manager.pools[poolName] - if !exists{ + if !exists { err = fmt.Errorf("invalid pool '%s'", poolName) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } - if _, exists := pool.Cells[cellName];!exists{ + if _, exists := pool.Cells[cellName]; !exists { err = fmt.Errorf("cell '%s' not in pool '%s'", cellName, poolName) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } cell, exists := manager.cells[cellName] - if !exists{ + if !exists { err = fmt.Errorf("invalid cell '%s'", cellName) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } var idList []string - for instanceID, _ := range cell.Instances{ + for instanceID, _ := range cell.Instances { idList = append(idList, instanceID) } - for instanceID, _ := range cell.Pending{ + for instanceID, _ := range cell.Pending { idList = append(idList, instanceID) } result, err := manager.getSortedInstances(idList) - if err != nil{ - respChan <- ResourceResult{Error:err} + if err != nil { + respChan <- ResourceResult{Error: err} return err } @@ -2459,74 +2472,74 @@ func (manager *ResourceManager) handleQueryInstanceStatusInCell(poolName, cellNa return nil } -func (manager *ResourceManager) handleSearchGuests(condition SearchGuestsCondition, respChan chan ResourceResult) (err error){ +func (manager *ResourceManager) handleSearchGuests(condition SearchGuestsCondition, respChan chan ResourceResult) (err error) { var poolSpecified = "" != condition.Pool var cellSpecifed = "" != condition.Cell var keywordSpecified = "" != condition.Keyword var targets []string - if cellSpecifed{ + if cellSpecifed { cell, exists := manager.cells[condition.Cell] - if !exists{ + if !exists { err = fmt.Errorf("invalid cell '%s'", condition.Cell) respChan <- ResourceResult{Error: err} return } - for instanceID, _ := range cell.Instances{ + for instanceID, _ := range cell.Instances { targets = append(targets, instanceID) } - } else if poolSpecified{ + } else if poolSpecified { pool, exists := manager.pools[condition.Pool] - if !exists{ + if !exists { err = fmt.Errorf("invalid pool '%s'", condition.Pool) respChan <- ResourceResult{Error: err} return } - for _, intancesID := range pool.InstanceNames{ + for _, intancesID := range pool.InstanceNames { targets = append(targets, intancesID) } } - var idMap = map[string]string{}//name to id - if keywordSpecified{ + var idMap = map[string]string{} //name to id + if keywordSpecified { //filter var filtered []string var matched bool var guestName string if cellSpecifed || poolSpecified { - for _, instanceID := range targets{ - if matched, guestName, err = manager.matchKeyword(instanceID, condition.Keyword); err != nil{ + for _, instanceID := range targets { + if matched, guestName, err = manager.matchKeyword(instanceID, condition.Keyword); err != nil { respChan <- ResourceResult{Error: err} return - }else if matched{ + } else if matched { idMap[guestName] = instanceID filtered = append(filtered, instanceID) } } - }else{ - for instanceID, _ := range manager.instances{ - if matched, guestName, err = manager.matchKeyword(instanceID, condition.Keyword); err != nil{ + } else { + for instanceID, _ := range manager.instances { + if matched, guestName, err = manager.matchKeyword(instanceID, condition.Keyword); err != nil { respChan <- ResourceResult{Error: err} return - }else if matched{ + } else if matched { idMap[guestName] = instanceID filtered = append(filtered, instanceID) } } } targets = filtered - }else if !cellSpecifed && !poolSpecified { + } else if !cellSpecifed && !poolSpecified { //fill all instances - for instanceID, instance := range manager.instances{ + for instanceID, instance := range manager.instances { targets = append(targets, instanceID) idMap[instance.Name] = instanceID } - }else { + } else { //collect name - for _, instanceID := range targets{ - if instance, exists := manager.instances[instanceID]; !exists{ + for _, instanceID := range targets { + if instance, exists := manager.instances[instanceID]; !exists { err = fmt.Errorf("invalid instance '%s'", instanceID) respChan <- ResourceResult{Error: err} return - }else{ + } else { idMap[instance.Name] = instanceID } } @@ -2536,18 +2549,18 @@ func (manager *ResourceManager) handleSearchGuests(condition SearchGuestsConditi result.Total = len(targets) result.Limit = condition.Limit result.Offset = condition.Offset - if 0 == result.Total{ + if 0 == result.Total { respChan <- result return } - if condition.Offset >= result.Total{ + if condition.Offset >= result.Total { err = fmt.Errorf("unexpected offset %d / %d", condition.Offset, result.Total) respChan <- ResourceResult{Error: err} return } //sort var names []string - for name, _ := range idMap{ + for name, _ := range idMap { names = append(names, name) } sort.Stable(sort.StringSlice(names)) @@ -2557,24 +2570,24 @@ func (manager *ResourceManager) handleSearchGuests(condition SearchGuestsConditi var instance InstanceStatus var instanceID string var exists bool - for _, name := range names{ - if offset < condition.Offset{ + for _, name := range names { + if offset < condition.Offset { offset++ continue } - if instanceID, exists = idMap[name]; !exists{ + if instanceID, exists = idMap[name]; !exists { err = fmt.Errorf("can not find id for guest '%s'", name) respChan <- ResourceResult{Error: err} return - }else if instance, exists = manager.instances[instanceID]; !exists{ + } else if instance, exists = manager.instances[instanceID]; !exists { err = fmt.Errorf("find invalid id '%s' for guest '%s'", instanceID, name) respChan <- ResourceResult{Error: err} return - }else{ + } else { result.InstanceList = append(result.InstanceList, instance) count++ offset++ - if count >= condition.Limit{ + if count >= condition.Limit { break } } @@ -2583,15 +2596,15 @@ func (manager *ResourceManager) handleSearchGuests(condition SearchGuestsConditi return } -func (manager *ResourceManager) matchKeyword(instanceID, keyword string) (matched bool, name string, err error){ +func (manager *ResourceManager) matchKeyword(instanceID, keyword string) (matched bool, name string, err error) { instance, exists := manager.instances[instanceID] - if !exists{ + if !exists { err = fmt.Errorf("invalid instance %s", instanceID) return } if -1 != strings.Index(instance.Name, keyword) || -1 != strings.Index(instance.InternalNetwork.InstanceAddress, keyword) || - -1 != strings.Index(instance.Host, keyword){ + -1 != strings.Index(instance.Host, keyword) { //matched matched = true name = instance.Name @@ -2601,17 +2614,17 @@ func (manager *ResourceManager) matchKeyword(instanceID, keyword string) (matche return } -func (manager *ResourceManager) handleUpdateGuestAutoStart(guestID string, enabled bool, respChan chan error) (err error){ +func (manager *ResourceManager) handleUpdateGuestAutoStart(guestID string, enabled bool, respChan chan error) (err error) { instance, exists := manager.instances[guestID] - if !exists{ + if !exists { err = fmt.Errorf("invaliad guest '%s'", guestID) respChan <- err return } - if enabled == instance.AutoStart{ - if enabled{ + if enabled == instance.AutoStart { + if enabled { err = fmt.Errorf("auto start of guest '%s' already enabled", instance.Name) - }else{ + } else { err = fmt.Errorf("auto start of guest '%s' already disabled", instance.Name) } respChan <- err @@ -2620,25 +2633,25 @@ func (manager *ResourceManager) handleUpdateGuestAutoStart(guestID string, enabl instance.AutoStart = enabled manager.instances[guestID] = instance respChan <- nil - if enabled{ + if enabled { log.Printf(" guest '%s' enabled auto start", instance.Name) - }else{ + } else { log.Printf(" guest '%s' disabled auto start", instance.Name) } return } -func (manager *ResourceManager) getSortedInstances(idList []string) (result []InstanceStatus, err error){ +func (manager *ResourceManager) getSortedInstances(idList []string) (result []InstanceStatus, err error) { var names []string var nameToID = map[string]string{} - for _, id := range idList{ + for _, id := range idList { ins, exists := manager.instances[id] - if !exists{ + if !exists { err = fmt.Errorf("invalid instance '%s", id) return } - if _, exists := nameToID[ins.Name];exists{ + if _, exists := nameToID[ins.Name]; exists { err = fmt.Errorf("encounter duplicate instance name '%s'", ins.Name) return } @@ -2646,14 +2659,14 @@ func (manager *ResourceManager) getSortedInstances(idList []string) (result []In names = append(names, ins.Name) } sort.Stable(sort.StringSlice(names)) - for _, name := range names{ + for _, name := range names { id, exists := nameToID[name] - if !exists{ + if !exists { err = fmt.Errorf("no instance mapped with name '%s'", name) return } ins, exists := manager.instances[id] - if !exists{ + if !exists { err = fmt.Errorf("invalid instance '%s' with name '%s'", id, name) return } @@ -2662,14 +2675,14 @@ func (manager *ResourceManager) getSortedInstances(idList []string) (result []In return } -func (manager *ResourceManager) handleUpdateInstanceAddress(id, ip string, respChan chan error) error{ +func (manager *ResourceManager) handleUpdateInstanceAddress(id, ip string, respChan chan error) error { instance, exists := manager.instances[id] - if !exists{ + if !exists { err := fmt.Errorf("invalid instance %s", id) respChan <- err return err } - if instance.InternalNetwork.InstanceAddress != ip{ + if instance.InternalNetwork.InstanceAddress != ip { instance.InternalNetwork.InstanceAddress = ip log.Printf(" update address of instance '%s' to %s", instance.Name, ip) manager.instances[id] = instance @@ -2678,21 +2691,21 @@ func (manager *ResourceManager) handleUpdateInstanceAddress(id, ip string, respC return nil } -func (manager *ResourceManager) handleRenameInstance(id, name string, respChan chan error) (err error){ +func (manager *ResourceManager) handleRenameInstance(id, name string, respChan chan error) (err error) { instance, exists := manager.instances[id] - if !exists{ + if !exists { err = fmt.Errorf("invalid instance %s", id) respChan <- err return err } - if instance.Name == name{ + if instance.Name == name { err = errors.New("no need to change") respChan <- err return err } var previousName = instance.Name pool, exists := manager.pools[instance.Pool] - if !exists{ + if !exists { err = fmt.Errorf("invalid pool '%s' attached with instance '%s'", instance.Pool, previousName) respChan <- err return err @@ -2708,9 +2721,9 @@ func (manager *ResourceManager) handleRenameInstance(id, name string, respChan c return nil } -func (manager *ResourceManager) handleUpdateInstancePriority(instanceID string, priority PriorityEnum, respChan chan error) (err error){ +func (manager *ResourceManager) handleUpdateInstancePriority(instanceID string, priority PriorityEnum, respChan chan error) (err error) { instance, exists := manager.instances[instanceID] - if !exists{ + if !exists { err = fmt.Errorf("invalid instance %s", instanceID) respChan <- err return err @@ -2722,9 +2735,9 @@ func (manager *ResourceManager) handleUpdateInstancePriority(instanceID string, return nil } -func (manager *ResourceManager) handleUpdateInstanceDiskThreshold(instanceID string, readSpeed, readIOPS, writeSpeed, writeIOPS uint64, respChan chan error) (err error){ +func (manager *ResourceManager) handleUpdateInstanceDiskThreshold(instanceID string, readSpeed, readIOPS, writeSpeed, writeIOPS uint64, respChan chan error) (err error) { instance, exists := manager.instances[instanceID] - if !exists{ + if !exists { err = fmt.Errorf("invalid instance %s", instanceID) respChan <- err return err @@ -2735,14 +2748,14 @@ func (manager *ResourceManager) handleUpdateInstanceDiskThreshold(instanceID str instance.WriteIOPS = writeIOPS manager.instances[instanceID] = instance log.Printf(" disk threshold of instance '%s' changed to read: %d MB/s, %d ops, write: %d MB/s, %d ops", - instanceID, readSpeed >> 20, readIOPS, writeSpeed >> 20, writeIOPS) + instanceID, readSpeed>>20, readIOPS, writeSpeed>>20, writeIOPS) respChan <- nil return nil } -func (manager *ResourceManager) handleUpdateInstanceNetworkThreshold(instanceID string, receive, send uint64, respChan chan error) (err error){ +func (manager *ResourceManager) handleUpdateInstanceNetworkThreshold(instanceID string, receive, send uint64, respChan chan error) (err error) { instance, exists := manager.instances[instanceID] - if !exists{ + if !exists { err = fmt.Errorf("invalid instance %s", instanceID) respChan <- err return err @@ -2751,28 +2764,28 @@ func (manager *ResourceManager) handleUpdateInstanceNetworkThreshold(instanceID instance.SendSpeed = send manager.instances[instanceID] = instance log.Printf(" network threshold of instance '%s' changed to receive %d KB/s, send: %d KB/s", - instanceID, receive >> 10, send >> 10) + instanceID, receive>>10, send>>10) respChan <- nil return nil } -func (manager *ResourceManager) handleGetInstanceByName(poolName, instanceName string, respChan chan ResourceResult) (err error){ +func (manager *ResourceManager) handleGetInstanceByName(poolName, instanceName string, respChan chan ResourceResult) (err error) { pool, exists := manager.pools[poolName] - if !exists{ + if !exists { err = fmt.Errorf("invalid pool '%s'", poolName) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } instanceID, exists := pool.InstanceNames[instanceName] - if !exists{ + if !exists { err = fmt.Errorf("no instance named '%s' in pool '%s'", instanceName, poolName) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } instance, exists := manager.instances[instanceID] - if !exists{ + if !exists { err = fmt.Errorf("invalid instance '%s' with name '%s'", instanceID, instanceName) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } respChan <- ResourceResult{Instance: instance} @@ -2810,18 +2823,18 @@ func (manager *ResourceManager) handleGetImageServer(respChan chan ResourceResul return nil } -func (manager *ResourceManager) handleQueryMigration(respChan chan ResourceResult) (err error){ +func (manager *ResourceManager) handleQueryMigration(respChan chan ResourceResult) (err error) { var result []MigrationStatus var releaseList []string - for _, m := range manager.migrations{ + for _, m := range manager.migrations { result = append(result, m) - if (m.Finished) || (m.Error != nil){ + if (m.Finished) || (m.Error != nil) { releaseList = append(releaseList, m.ID) } } respChan <- ResourceResult{MigrationList: result} - if 0 != len(releaseList){ - for _, id := range releaseList{ + if 0 != len(releaseList) { + for _, id := range releaseList { delete(manager.migrations, id) } log.Printf(" %d migration(s) released", len(releaseList)) @@ -2829,90 +2842,90 @@ func (manager *ResourceManager) handleQueryMigration(respChan chan ResourceResul return nil } -func (manager *ResourceManager) handleGetMigration(id string, respChan chan ResourceResult) (err error){ +func (manager *ResourceManager) handleGetMigration(id string, respChan chan ResourceResult) (err error) { migration, exists := manager.migrations[id] - if !exists{ + if !exists { err = fmt.Errorf("invalid migration '%s'", id) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } respChan <- ResourceResult{Migration: migration} - if (migration.Error != nil) || migration.Finished{ + if (migration.Error != nil) || migration.Finished { delete(manager.migrations, id) } return nil } -func (manager *ResourceManager) handleCreateMigration(params MigrationParameter, respChan chan ResourceResult) (err error){ +func (manager *ResourceManager) handleCreateMigration(params MigrationParameter, respChan chan ResourceResult) (err error) { - if params.TargetPool != params.SourcePool{ + if params.TargetPool != params.SourcePool { err = errors.New("migrate between pool not support") - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } - if params.TargetCell == params.SourceCell{ + if params.TargetCell == params.SourceCell { err = errors.New("migrate in same cell") - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } pool, exists := manager.pools[params.SourcePool] - if !exists{ + if !exists { err = fmt.Errorf("invalid pool '%s'", params.SourcePool) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } - if "" == pool.Storage{ + if "" == pool.Storage { err = errors.New("migrate only work on shared storage") - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } storage, exists := manager.storagePools[pool.Storage] - if !exists{ + if !exists { err = fmt.Errorf("invalid storage '%s' attached to pool '%s'", pool.Storage, params.SourcePool) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } - if storage.Type != StorageTypeNFS{ + if storage.Type != StorageTypeNFS { err = fmt.Errorf("migrate not work on storage type '%s'(storage '%s' attached to pool '%s')", storage.Type, pool.Storage, params.SourcePool) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } - if _, exists = pool.Cells[params.SourceCell];!exists{ + if _, exists = pool.Cells[params.SourceCell]; !exists { err = fmt.Errorf("source cell '%s' not in pool '%s'", params.SourceCell, params.SourcePool) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } - if _, exists = pool.Cells[params.TargetCell];!exists{ + if _, exists = pool.Cells[params.TargetCell]; !exists { err = fmt.Errorf("target cell '%s' not in pool '%s'", params.TargetCell, params.TargetPool) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } targetCell, exists := manager.cells[params.TargetCell] - if !exists{ + if !exists { err = fmt.Errorf("invalid target cell '%s'", params.TargetCell) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } - if !targetCell.Alive{ + if !targetCell.Alive { err = fmt.Errorf("target cell '%s' already lost", params.TargetCell) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } - if !targetCell.Enabled{ + if !targetCell.Enabled { err = fmt.Errorf("target cell '%s' already disabled", params.TargetCell) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } sourceCell, exists := manager.cells[params.SourceCell] - if !exists{ + if !exists { err = fmt.Errorf("invalid source cell '%s'", params.SourceCell) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } - if !sourceCell.Alive{ + if !sourceCell.Alive { err = fmt.Errorf("source cell '%s' already lost", params.SourceCell) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } var newID = uuid.NewV4() @@ -2924,52 +2937,52 @@ func (manager *ResourceManager) handleCreateMigration(params MigrationParameter, M.TargetCell = params.TargetCell M.Finished = false M.Progress = 0 - if _, exists = manager.migrations[M.ID];exists{ + if _, exists = manager.migrations[M.ID]; exists { err = fmt.Errorf("migration '%s' already exists", M.ID) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } - if 0 == len(params.Instances){ + if 0 == len(params.Instances) { //migrate all instance in source - if 0 == len(sourceCell.Instances){ + if 0 == len(sourceCell.Instances) { err = fmt.Errorf("no instance need migrate in cell '%s.%s'", params.SourcePool, params.SourceCell) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } - for instanceID, _ := range sourceCell.Instances{ + for instanceID, _ := range sourceCell.Instances { M.Instances = append(M.Instances, instanceID) } - }else{ + } else { M.Instances = params.Instances } //verify instance status - for _, instanceID := range M.Instances{ + for _, instanceID := range M.Instances { ins, exists := manager.instances[instanceID] - if !exists{ + if !exists { err = fmt.Errorf("invalid instance '%s'", instanceID) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } - if ins.Running{ + if ins.Running { err = fmt.Errorf("instance '%s'('%s') is still running", instanceID, ins.Name) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } - if ins.Migrating{ + if ins.Migrating { err = fmt.Errorf("instance '%s'('%s') already in migrating", instanceID, ins.Name) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } - if ins.Cell == targetCell.Name{ + if ins.Cell == targetCell.Name { err = fmt.Errorf("instance '%s'('%s') already in cell '%s'", instanceID, ins.Name, targetCell.Name) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } } //batch update - for _, instanceID := range M.Instances{ - if ins, exists := manager.instances[instanceID];exists{ + for _, instanceID := range M.Instances { + if ins, exists := manager.instances[instanceID]; exists { ins.Migrating = true manager.instances[instanceID] = ins } @@ -2981,14 +2994,14 @@ func (manager *ResourceManager) handleCreateMigration(params MigrationParameter, return nil } -func (manager *ResourceManager) handleFinishMigration(migrationID string, instances []string, monitorPorts []uint64, respChan chan error) (err error){ +func (manager *ResourceManager) handleFinishMigration(migrationID string, instances []string, monitorPorts []uint64, respChan chan error) (err error) { migration, exists := manager.migrations[migrationID] - if !exists{ + if !exists { err = fmt.Errorf("invalid migration '%s'", migrationID) respChan <- err return err } - if err = manager.transferInstances(migration.SourceCell, migration.TargetCell, instances, monitorPorts); err != nil{ + if err = manager.transferInstances(migration.SourceCell, migration.TargetCell, instances, monitorPorts); err != nil { log.Printf(" migrate instance(s) for migration '%s' fail: %s", migrationID, err.Error()) respChan <- err return err @@ -2997,32 +3010,32 @@ func (manager *ResourceManager) handleFinishMigration(migrationID string, instan manager.migrations[migrationID] = migration log.Printf(" migration '%s' finished", migrationID) respChan <- nil - return nil + return nil } -func (manager *ResourceManager) handleCancelMigration(migrationID string, reason error, respChan chan error)(err error){ +func (manager *ResourceManager) handleCancelMigration(migrationID string, reason error, respChan chan error) (err error) { migration, exists := manager.migrations[migrationID] - if !exists{ + if !exists { err = fmt.Errorf("invalid migration '%s'", migrationID) respChan <- err return err } - for _, instanceID := range migration.Instances{ + for _, instanceID := range migration.Instances { instance, exists := manager.instances[instanceID] - if !exists{ + if !exists { log.Printf(" warning: invalid migrating instance '%s'", instanceID) continue } - if instance.Migrating{ + if instance.Migrating { instance.Migrating = false log.Printf(" cancel migrating instance '%s'(%s)", instance.Name, instanceID) manager.instances[instanceID] = instance } } - if reason != nil{ + if reason != nil { migration.Error = reason log.Printf(" migration '%s' canceled due to %s", migrationID, reason.Error()) - }else{ + } else { migration.Finished = true log.Printf(" migration '%s' canceled without reason", migrationID) } @@ -3031,35 +3044,35 @@ func (manager *ResourceManager) handleCancelMigration(migrationID string, reason return nil } -func (manager *ResourceManager) handleBuildFailoverPlan(cellName string, respChan chan ResourceResult)(err error){ +func (manager *ResourceManager) handleBuildFailoverPlan(cellName string, respChan chan ResourceResult) (err error) { cell, exists := manager.cells[cellName] if !exists { err = fmt.Errorf("invalid cell '%s'", cellName) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } cell.Alive = false log.Printf(" cell '%s' lost", cellName) - if "" == cell.Pool{ + if "" == cell.Pool { //unallocated manager.cells[cellName] = cell respChan <- ResourceResult{} return nil } pool, exists := manager.pools[cell.Pool] - if !exists{ + if !exists { err = fmt.Errorf("invalid pool '%s'", cell.Pool) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } cell.InstanceStatistic.Reset() - if !pool.Failover{ + if !pool.Failover { //mark lost - for instanceID, _ := range cell.Instances{ + for instanceID, _ := range cell.Instances { ins, exists := manager.instances[instanceID] - if !exists{ + if !exists { err = fmt.Errorf("invalid instance '%s' in cell '%s'", instanceID, cellName) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } ins.Lost = true @@ -3070,37 +3083,37 @@ func (manager *ResourceManager) handleBuildFailoverPlan(cellName string, respCha respChan <- ResourceResult{} manager.cells[cellName] = cell return nil - }else{ + } else { cell.Enabled = false cell.PurgeAppending = true manager.cells[cellName] = cell //build plan and migrate var plan = map[string][]string{} - for instanceID, _ := range cell.Instances{ + for instanceID, _ := range cell.Instances { ins, exists := manager.instances[instanceID] - if !exists{ + if !exists { err = fmt.Errorf("invalid instance '%s' in cell '%s'", instanceID, cellName) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } targetName, err := manager.selectCell(pool.Name, ins.InstanceResource, false) - if err != nil{ - respChan <- ResourceResult{Error:err} + if err != nil { + respChan <- ResourceResult{Error: err} return err } targetCell, exists := manager.cells[targetName] - if !exists{ + if !exists { err = fmt.Errorf("invalid target cell '%s'", targetName) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } //mark targetCell.Instances[instanceID] = false ins.Migrating = true - if insList, exists := plan[targetName]; exists{ + if insList, exists := plan[targetName]; exists { insList = append(insList, instanceID) plan[targetName] = insList - }else{ + } else { plan[targetName] = []string{instanceID} } manager.instances[instanceID] = ins @@ -3109,16 +3122,16 @@ func (manager *ResourceManager) handleBuildFailoverPlan(cellName string, respCha cell.MigratingInstances = uint64(len(cell.Instances)) log.Printf(" schedule migrate %d instance(s) in cell '%s' to %d new cells", cell.MigratingInstances, cellName, len(plan)) - respChan <- ResourceResult{FailoverPlan:plan} + respChan <- ResourceResult{FailoverPlan: plan} manager.cells[cellName] = cell return nil } } -func (manager *ResourceManager) handleMigrateInstance(sourceCell, targetCell string, instances []string, monitorPorts []uint64, respChan chan error)(err error){ +func (manager *ResourceManager) handleMigrateInstance(sourceCell, targetCell string, instances []string, monitorPorts []uint64, respChan chan error) (err error) { err = manager.transferInstances(sourceCell, targetCell, instances, monitorPorts) - if err != nil{ + if err != nil { log.Printf(" migrate instance fail: %s", err.Error()) respChan <- err return @@ -3128,9 +3141,9 @@ func (manager *ResourceManager) handleMigrateInstance(sourceCell, targetCell str return nil } -func (manager *ResourceManager) handlePurgeInstance(cellName string, respChan chan error) (err error){ +func (manager *ResourceManager) handlePurgeInstance(cellName string, respChan chan error) (err error) { cell, exists := manager.cells[cellName] - if !exists{ + if !exists { err = fmt.Errorf("invalid cell '%s'", cellName) respChan <- err return err @@ -3147,9 +3160,9 @@ func (manager *ResourceManager) handlePurgeInstance(cellName string, respChan ch } //address pool&range -func (manager *ResourceManager) handleQueryAddressPool(respChan chan ResourceResult) (err error){ +func (manager *ResourceManager) handleQueryAddressPool(respChan chan ResourceResult) (err error) { var result = make([]AddressPoolStatus, 0) - for poolName, pool := range manager.addressPools{ + for poolName, pool := range manager.addressPools { var status AddressPoolStatus status.Name = poolName status.Gateway = pool.gateway @@ -3158,13 +3171,13 @@ func (manager *ResourceManager) handleQueryAddressPool(respChan chan ResourceRes status.Mode = pool.mode status.Allocated = make([]AllocatedAddress, 0) status.Ranges = make([]AddressRangeConfig, 0) - for _, addressRange := range pool.ranges{ + for _, addressRange := range pool.ranges { var rangeConfig AddressRangeConfig rangeConfig.Start = addressRange.startAddress.String() rangeConfig.End = addressRange.endAddress.String() rangeConfig.Netmask = IPv4MaskToString(addressRange.netmask) rangeConfig.Capacity = addressRange.capacity - for allocatedAddress, allocatedInstance := range addressRange.allocated{ + for allocatedAddress, allocatedInstance := range addressRange.allocated { status.Allocated = append(status.Allocated, AllocatedAddress{allocatedAddress, allocatedInstance}) } status.Ranges = append(status.Ranges, rangeConfig) @@ -3176,11 +3189,11 @@ func (manager *ResourceManager) handleQueryAddressPool(respChan chan ResourceRes return nil } -func (manager *ResourceManager) handleGetAddressPool(poolName string, respChan chan ResourceResult) (err error){ +func (manager *ResourceManager) handleGetAddressPool(poolName string, respChan chan ResourceResult) (err error) { pool, exists := manager.addressPools[poolName] - if !exists{ + if !exists { err = fmt.Errorf("invalid address pool '%s", poolName) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } var status AddressPoolStatus @@ -3191,13 +3204,13 @@ func (manager *ResourceManager) handleGetAddressPool(poolName string, respChan c status.Mode = pool.mode status.Allocated = make([]AllocatedAddress, 0) status.Ranges = make([]AddressRangeConfig, 0) - for _, addressRange := range pool.ranges{ + for _, addressRange := range pool.ranges { var rangeConfig AddressRangeConfig rangeConfig.Start = addressRange.startAddress.String() rangeConfig.End = addressRange.endAddress.String() rangeConfig.Netmask = IPv4MaskToString(addressRange.netmask) rangeConfig.Capacity = addressRange.capacity - for allocatedAddress, allocatedInstance := range addressRange.allocated{ + for allocatedAddress, allocatedInstance := range addressRange.allocated { status.Allocated = append(status.Allocated, AllocatedAddress{allocatedAddress, allocatedInstance}) } status.Ranges = append(status.Ranges, rangeConfig) @@ -3206,9 +3219,9 @@ func (manager *ResourceManager) handleGetAddressPool(poolName string, respChan c return nil } -func (manager *ResourceManager) handleCreateAddressPool(config AddressPoolConfig, respChan chan error) (err error){ +func (manager *ResourceManager) handleCreateAddressPool(config AddressPoolConfig, respChan chan error) (err error) { _, exists := manager.addressPools[config.Name] - if exists{ + if exists { err = fmt.Errorf("address pool '%s' already exists", config.Name) respChan <- err return err @@ -3216,14 +3229,14 @@ func (manager *ResourceManager) handleCreateAddressPool(config AddressPoolConfig var pool ManagedAddressPool pool.name = config.Name //verify params - if nil == net.ParseIP(config.Gateway){ + if nil == net.ParseIP(config.Gateway) { err = fmt.Errorf("invalid gateway '%s'", config.Gateway) respChan <- err return err } pool.gateway = config.Gateway - for _, dns := range config.DNS{ - if nil == net.ParseIP(dns){ + for _, dns := range config.DNS { + if nil == net.ParseIP(dns) { err = fmt.Errorf("invalid DNS '%s'", dns) respChan <- err return err @@ -3241,23 +3254,23 @@ func (manager *ResourceManager) handleCreateAddressPool(config AddressPoolConfig return manager.saveConfig() } -func (manager *ResourceManager) handleModifyAddressPool(config AddressPoolConfig, respChan chan ResourceResult) (err error){ +func (manager *ResourceManager) handleModifyAddressPool(config AddressPoolConfig, respChan chan ResourceResult) (err error) { pool, exists := manager.addressPools[config.Name] - if !exists{ + if !exists { err = fmt.Errorf("address pool '%s' not exists", config.Name) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } //verify params - if nil == net.ParseIP(config.Gateway){ + if nil == net.ParseIP(config.Gateway) { err = fmt.Errorf("invalid gateway '%s'", config.Gateway) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } - for _, dns := range config.DNS{ - if nil == net.ParseIP(dns){ + for _, dns := range config.DNS { + if nil == net.ParseIP(dns) { err = fmt.Errorf("invalid DNS '%s'", dns) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } } @@ -3268,18 +3281,18 @@ func (manager *ResourceManager) handleModifyAddressPool(config AddressPoolConfig manager.addressPools[pool.name] = pool //check affected cells var affected = make([]ComputeCellInfo, 0) - for _, pool := range manager.pools{ - if pool.Network != config.Name{ + for _, pool := range manager.pools { + if pool.Network != config.Name { continue } - for cellName, _ := range pool.Cells{ + for cellName, _ := range pool.Cells { cell, exists := manager.cells[cellName] - if !exists{ + if !exists { err = fmt.Errorf("invalid cell '%s' in pool '%s'", cellName, pool.Name) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } - if !cell.Alive{ + if !cell.Alive { continue } affected = append(affected, cell.ComputeCellInfo) @@ -3287,27 +3300,27 @@ func (manager *ResourceManager) handleModifyAddressPool(config AddressPoolConfig } log.Printf(" address pool '%s' modified with gateway '%s' and %d DNS server, %d cell(s) affected", pool.name, pool.gateway, len(pool.dns), len(affected)) - respChan <- ResourceResult{ComputeCellInfoList:affected} + respChan <- ResourceResult{ComputeCellInfoList: affected} return manager.saveConfig() } -func (manager *ResourceManager) handleDeleteAddressPool(poolName string, respChan chan error) (err error){ +func (manager *ResourceManager) handleDeleteAddressPool(poolName string, respChan chan error) (err error) { pool, exists := manager.addressPools[poolName] - if !exists{ + if !exists { err = fmt.Errorf("address pool '%s' not exists", poolName) respChan <- err return err } //check attached compute pool - for computeName, pool := range manager.pools{ - if pool.Network == poolName{ + for computeName, pool := range manager.pools { + if pool.Network == poolName { err = fmt.Errorf("compute pool '%s' still attached to address pool '%s'", computeName, poolName) respChan <- err return err } } - for _, addressRange := range pool.ranges{ - if 0 != len(addressRange.allocated){ + for _, addressRange := range pool.ranges { + if 0 != len(addressRange.allocated) { err = fmt.Errorf("%d address(es) of range '%s' allocated in pool '%s'", len(addressRange.allocated), addressRange.startAddress.String(), poolName) respChan <- err @@ -3320,28 +3333,28 @@ func (manager *ResourceManager) handleDeleteAddressPool(poolName string, respCha return manager.saveConfig() } -func (manager *ResourceManager) handleQueryAddressRange(poolName, rangeType string, respChan chan ResourceResult) (err error){ +func (manager *ResourceManager) handleQueryAddressRange(poolName, rangeType string, respChan chan ResourceResult) (err error) { pool, exists := manager.addressPools[poolName] - if !exists{ + if !exists { err = fmt.Errorf("address pool '%s' not exists", poolName) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } - if rangeType != RangeTypeInternal{ + if rangeType != RangeTypeInternal { err = fmt.Errorf("unsupported range type '%s'", rangeType) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } var result ResourceResult result.AddressRangeList = make([]AddressRangeStatus, 0) - for _, addressRange := range pool.ranges{ + for _, addressRange := range pool.ranges { var status AddressRangeStatus status.Start = addressRange.startAddress.String() status.End = addressRange.endAddress.String() status.Netmask = IPv4MaskToString(addressRange.netmask) status.Capacity = addressRange.capacity status.Allocated = make([]AllocatedAddress, 0) - for address, instance := range addressRange.allocated{ + for address, instance := range addressRange.allocated { status.Allocated = append(status.Allocated, AllocatedAddress{address, instance}) } result.AddressRangeList = append(result.AddressRangeList, status) @@ -3351,22 +3364,22 @@ func (manager *ResourceManager) handleQueryAddressRange(poolName, rangeType stri return nil } -func (manager *ResourceManager) handleGetAddressRange(poolName, rangeType, startAddress string, respChan chan ResourceResult) (err error){ +func (manager *ResourceManager) handleGetAddressRange(poolName, rangeType, startAddress string, respChan chan ResourceResult) (err error) { pool, exists := manager.addressPools[poolName] - if !exists{ + if !exists { err = fmt.Errorf("address pool '%s' not exists", poolName) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } - if rangeType != RangeTypeInternal{ + if rangeType != RangeTypeInternal { err = fmt.Errorf("unsupported range type '%s'", rangeType) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } addressRange, exists := pool.ranges[startAddress] - if !exists{ + if !exists { err = fmt.Errorf("range '%s' not exists in pool '%s'", startAddress, poolName) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } var status AddressRangeStatus @@ -3375,68 +3388,68 @@ func (manager *ResourceManager) handleGetAddressRange(poolName, rangeType, start status.Netmask = IPv4MaskToString(addressRange.netmask) status.Capacity = addressRange.capacity status.Allocated = make([]AllocatedAddress, 0) - for address, instance := range addressRange.allocated{ + for address, instance := range addressRange.allocated { status.Allocated = append(status.Allocated, AllocatedAddress{address, instance}) } respChan <- ResourceResult{AddressRange: status} return nil } -func (manager *ResourceManager) handleAddAddressRange(poolName, rangeType string, config AddressRangeConfig, respChan chan error) (err error){ +func (manager *ResourceManager) handleAddAddressRange(poolName, rangeType string, config AddressRangeConfig, respChan chan error) (err error) { pool, exists := manager.addressPools[poolName] - if !exists{ + if !exists { err = fmt.Errorf("address pool '%s' not exists", poolName) respChan <- err return err } - if rangeType != RangeTypeInternal{ + if rangeType != RangeTypeInternal { err = fmt.Errorf("unsupported range type '%s'", rangeType) respChan <- err return err } _, exists = pool.ranges[config.Start] - if exists{ + if exists { err = fmt.Errorf("range '%s' already exists in pool '%s'", config.Start, poolName) respChan <- err return err } var addressRange ManagedIPV4AddressRange - if addressRange.startAddress = net.ParseIP(config.Start); nil == addressRange.startAddress{ + if addressRange.startAddress = net.ParseIP(config.Start); nil == addressRange.startAddress { err = fmt.Errorf("invalid start address '%s'", config.Start) respChan <- err return err } - if addressRange.endAddress = net.ParseIP(config.End); nil == addressRange.endAddress{ + if addressRange.endAddress = net.ParseIP(config.End); nil == addressRange.endAddress { err = fmt.Errorf("invalid end address '%s'", config.End) respChan <- err return err } addressRange.netmask, err = IPv4ToMask(config.Netmask) - if err != nil{ + if err != nil { respChan <- err return } //check end range { - if bytes.Compare(addressRange.endAddress, addressRange.startAddress) < 0{ + if bytes.Compare(addressRange.endAddress, addressRange.startAddress) < 0 { err = fmt.Errorf("end address '%s' must greater than start address '%s'", config.End, config.Start) respChan <- err return err } var rangeNet = net.IPNet{addressRange.startAddress, addressRange.netmask} - if !rangeNet.Contains(addressRange.endAddress){ + if !rangeNet.Contains(addressRange.endAddress) { err = fmt.Errorf("end address '%s' not in net '%s/%s'", addressRange.endAddress.String(), addressRange.startAddress.String(), IPv4MaskToString(addressRange.netmask)) respChan <- err return err } - addressRange.capacity = IPv4ToNumber(addressRange.endAddress) - IPv4ToNumber(addressRange.startAddress) +1 + addressRange.capacity = IPv4ToNumber(addressRange.endAddress) - IPv4ToNumber(addressRange.startAddress) + 1 } //range conflict - for startAddress, currentRange := range pool.ranges{ - if bytes.Compare(addressRange.endAddress, currentRange.startAddress) < 0 || bytes.Compare(addressRange.startAddress, currentRange.endAddress) > 0{ + for startAddress, currentRange := range pool.ranges { + if bytes.Compare(addressRange.endAddress, currentRange.startAddress) < 0 || bytes.Compare(addressRange.startAddress, currentRange.endAddress) > 0 { continue - }else{ + } else { err = fmt.Errorf("address range '%s~%s' conflict with exists range '%s~%s'", config.Start, config.End, startAddress, currentRange.endAddress.String()) respChan <- err @@ -3452,32 +3465,32 @@ func (manager *ResourceManager) handleAddAddressRange(poolName, rangeType string return manager.saveConfig() } -func (manager *ResourceManager) handleRemoveAddressRange(poolName, rangeType, startAddress string, respChan chan error) (err error){ +func (manager *ResourceManager) handleRemoveAddressRange(poolName, rangeType, startAddress string, respChan chan error) (err error) { pool, exists := manager.addressPools[poolName] - if !exists{ + if !exists { err = fmt.Errorf("address pool '%s' not exists", poolName) respChan <- err return err } - if rangeType != RangeTypeInternal{ + if rangeType != RangeTypeInternal { err = fmt.Errorf("unsupported range type '%s'", rangeType) respChan <- err return err } addressRange, exists := pool.ranges[startAddress] - if !exists{ + if !exists { err = fmt.Errorf("range '%s' not exists in pool '%s'", startAddress, poolName) respChan <- err return err } - if 0 != len(addressRange.allocated){ + if 0 != len(addressRange.allocated) { err = fmt.Errorf("%d address(es) of range '%s' allocated, release before delete", len(addressRange.allocated), addressRange.startAddress.String()) respChan <- err return } - for index, address := range pool.rangeStartAddressed{ - if address == startAddress{ + for index, address := range pool.rangeStartAddressed { + if address == startAddress { pool.rangeStartAddressed = append(pool.rangeStartAddressed[:index], pool.rangeStartAddressed[index+1:]...) break } @@ -3489,19 +3502,19 @@ func (manager *ResourceManager) handleRemoveAddressRange(poolName, rangeType, st return manager.saveConfig() } -func (manager *ResourceManager) handleBeginResetSystem(instanceID string, respChan chan error) (err error){ +func (manager *ResourceManager) handleBeginResetSystem(instanceID string, respChan chan error) (err error) { ins, exists := manager.instances[instanceID] - if !exists{ + if !exists { err = fmt.Errorf("invalid guest '%s'", instanceID) respChan <- err return } - if !ins.Created{ + if !ins.Created { err = fmt.Errorf("guest '%s' not created yet", instanceID) respChan <- err return } - if ins.Running{ + if ins.Running { err = fmt.Errorf("guest '%s' is still running", instanceID) respChan <- err return @@ -3514,23 +3527,23 @@ func (manager *ResourceManager) handleBeginResetSystem(instanceID string, respCh return nil } -func (manager *ResourceManager) handleFinishResetSystem(instanceID string, resetError error, respChan chan error) (err error){ +func (manager *ResourceManager) handleFinishResetSystem(instanceID string, resetError error, respChan chan error) (err error) { ins, exists := manager.instances[instanceID] - if !exists{ + if !exists { err = fmt.Errorf("invalid guest '%s'", instanceID) respChan <- err return } - if ins.Created{ + if ins.Created { err = fmt.Errorf("guest '%s' already created", instanceID) respChan <- err return } - if resetError != nil{ + if resetError != nil { err = resetError manager.pendingError[instanceID] = resetError log.Printf(" reset system fail: %s", err.Error()) - }else{ + } else { ins.Created = true ins.Progress = 0 manager.instances[instanceID] = ins @@ -3541,24 +3554,24 @@ func (manager *ResourceManager) handleFinishResetSystem(instanceID string, reset } //batch -func (manager *ResourceManager) handleStartBatchCreateGuest(request BatchCreateRequest, respChan chan ResourceResult) (err error){ - if len(request.Prefix) == 0{ +func (manager *ResourceManager) handleStartBatchCreateGuest(request BatchCreateRequest, respChan chan ResourceResult) (err error) { + if len(request.Prefix) == 0 { err = errors.New("name prefix required") respChan <- ResourceResult{Error: err} return err } var r = regexp.MustCompile("[^\\w-]") - if r.MatchString(request.Prefix){ + if r.MatchString(request.Prefix) { err = errors.New("only '0~9a~Z_-' allowed in prefix") respChan <- ResourceResult{Error: err} return err } - if request.Count == 0{ + if request.Count == 0 { err = errors.New("guest count required") respChan <- ResourceResult{Error: err} return err } - if _, exists := manager.pools[request.Pool]; !exists{ + if _, exists := manager.pools[request.Pool]; !exists { err = fmt.Errorf("invalid compute pool '%s'", request.Pool) respChan <- ResourceResult{Error: err} return err @@ -3572,7 +3585,7 @@ func (manager *ResourceManager) handleStartBatchCreateGuest(request BatchCreateR switch request.Rule { case NameRuleByOrder: - for index := 0 ; index < request.Count ; index++{ + for index := 0; index < request.Count; index++ { var guestName = fmt.Sprintf("%s_%d", request.Prefix, index) task.GuestName[guestName] = index var status = CreateGuestStatus{guestName, "", 0, BatchTaskStatusProcess, ""} @@ -3585,26 +3598,26 @@ func (manager *ResourceManager) handleStartBatchCreateGuest(request BatchCreateR } var taskID = newID.String() manager.batchCreateTasks[taskID] = task - respChan <- ResourceResult{Batch:taskID, BatchCreate:task.Guests} + respChan <- ResourceResult{Batch: taskID, BatchCreate: task.Guests} log.Printf(" new create guest batch allocated, task id '%s'", taskID) return nil } -func (manager *ResourceManager) handleSetBatchCreateGuestStart(batchID, guestName, guestID string, respChan chan error) (err error){ +func (manager *ResourceManager) handleSetBatchCreateGuestStart(batchID, guestName, guestID string, respChan chan error) (err error) { task, exists := manager.batchCreateTasks[batchID] - if !exists{ + if !exists { err = fmt.Errorf("invalid batch task '%s", batchID) respChan <- err return err } guestIndex, exists := task.GuestName[guestName] - if !exists{ + if !exists { err = fmt.Errorf("no guest named '%s' in batch '%s'", guestName, batchID) respChan <- err return err } - if guestIndex > len(task.Guests){ - err = fmt.Errorf("invalid index %d with name '%s'", guestIndex, guestName) + if guestIndex > len(task.Guests) { + err = fmt.Errorf("invalid index %d with name '%s'", guestIndex, guestName) respChan <- err return err } @@ -3618,21 +3631,21 @@ func (manager *ResourceManager) handleSetBatchCreateGuestStart(batchID, guestNam return nil } -func (manager *ResourceManager) handleSetBatchCreateGuestFail(batchID, guestName string, createError error, respChan chan error) (err error){ +func (manager *ResourceManager) handleSetBatchCreateGuestFail(batchID, guestName string, createError error, respChan chan error) (err error) { task, exists := manager.batchCreateTasks[batchID] - if !exists{ + if !exists { err = fmt.Errorf("invalid batch task '%s", batchID) respChan <- err return err } guestIndex, exists := task.GuestName[guestName] - if !exists{ + if !exists { err = fmt.Errorf("no guest named '%s' in batch '%s'", guestName, batchID) respChan <- err return err } - if guestIndex > len(task.Guests){ - err = fmt.Errorf("invalid index %d with name '%s'", guestIndex, guestName) + if guestIndex > len(task.Guests) { + err = fmt.Errorf("invalid index %d with name '%s'", guestIndex, guestName) respChan <- err return err } @@ -3647,21 +3660,21 @@ func (manager *ResourceManager) handleSetBatchCreateGuestFail(batchID, guestName return nil } -func (manager *ResourceManager) handleGetBatchCreateGuestStatus(batchID string, respChan chan ResourceResult) (err error){ +func (manager *ResourceManager) handleGetBatchCreateGuestStatus(batchID string, respChan chan ResourceResult) (err error) { task, exists := manager.batchCreateTasks[batchID] - if !exists{ + if !exists { err = fmt.Errorf("invalid batch task '%s", batchID) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } respChan <- ResourceResult{BatchCreate: task.Guests} return nil } -func (manager *ResourceManager) handleStartBatchDeleteGuest(id []string, respChan chan ResourceResult) (err error){ - if 0 == len(id){ +func (manager *ResourceManager) handleStartBatchDeleteGuest(id []string, respChan chan ResourceResult) (err error) { + if 0 == len(id) { err = errors.New("guest id required") - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } var newID = uuid.NewV4() @@ -3671,10 +3684,9 @@ func (manager *ResourceManager) handleStartBatchDeleteGuest(id []string, respCha task.LatestUpdate = time.Now() task.GuestID = map[string]int{} - - for taskIndex, guestID := range id{ + for taskIndex, guestID := range id { guest, exists := manager.instances[guestID] - if !exists{ + if !exists { err = fmt.Errorf("invalid guest '%s'", guestID) respChan <- ResourceResult{Error: err} return err @@ -3685,26 +3697,26 @@ func (manager *ResourceManager) handleStartBatchDeleteGuest(id []string, respCha } var taskID = newID.String() manager.batchDeleteTasks[taskID] = task - respChan <- ResourceResult{Batch:taskID, BatchDelete:task.Guests} + respChan <- ResourceResult{Batch: taskID, BatchDelete: task.Guests} log.Printf(" new delete guest batch allocated, task id '%s'", taskID) return nil } -func (manager *ResourceManager) handleSetBatchDeleteGuestSuccess(batchID, guestID string, respChan chan error) (err error){ +func (manager *ResourceManager) handleSetBatchDeleteGuestSuccess(batchID, guestID string, respChan chan error) (err error) { task, exists := manager.batchDeleteTasks[batchID] - if !exists{ + if !exists { err = fmt.Errorf("invalid batch task '%s", batchID) respChan <- err return err } guestIndex, exists := task.GuestID[guestID] - if !exists{ + if !exists { err = fmt.Errorf("no guest with id '%s' in batch '%s'", guestID, batchID) respChan <- err return err } - if guestIndex > len(task.Guests){ - err = fmt.Errorf("invalid index %d with id '%s'", guestIndex, guestID) + if guestIndex > len(task.Guests) { + err = fmt.Errorf("invalid index %d with id '%s'", guestIndex, guestID) respChan <- err return err } @@ -3718,21 +3730,21 @@ func (manager *ResourceManager) handleSetBatchDeleteGuestSuccess(batchID, guestI return nil } -func (manager *ResourceManager) handleSetBatchDeleteGuestFail(batchID, guestID string, deleteError error, respChan chan error) (err error){ +func (manager *ResourceManager) handleSetBatchDeleteGuestFail(batchID, guestID string, deleteError error, respChan chan error) (err error) { task, exists := manager.batchDeleteTasks[batchID] - if !exists{ + if !exists { err = fmt.Errorf("invalid batch task '%s", batchID) respChan <- err return err } guestIndex, exists := task.GuestID[guestID] - if !exists{ + if !exists { err = fmt.Errorf("no guest with id '%s' in batch '%s'", guestID, batchID) respChan <- err return err } - if guestIndex > len(task.Guests){ - err = fmt.Errorf("invalid index %d with id '%s'", guestIndex, guestID) + if guestIndex > len(task.Guests) { + err = fmt.Errorf("invalid index %d with id '%s'", guestIndex, guestID) respChan <- err return err } @@ -3747,21 +3759,21 @@ func (manager *ResourceManager) handleSetBatchDeleteGuestFail(batchID, guestID s return nil } -func (manager *ResourceManager) handleGetBatchDeleteGuestStatus(batchID string, respChan chan ResourceResult) (err error){ +func (manager *ResourceManager) handleGetBatchDeleteGuestStatus(batchID string, respChan chan ResourceResult) (err error) { task, exists := manager.batchDeleteTasks[batchID] - if !exists{ + if !exists { err = fmt.Errorf("invalid batch task '%s", batchID) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } respChan <- ResourceResult{BatchDelete: task.Guests} return nil } -func (manager *ResourceManager) handleStartBatchStopGuest(id []string, respChan chan ResourceResult) (err error){ - if 0 == len(id){ +func (manager *ResourceManager) handleStartBatchStopGuest(id []string, respChan chan ResourceResult) (err error) { + if 0 == len(id) { err = errors.New("guest id required") - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } var newID = uuid.NewV4() @@ -3771,10 +3783,9 @@ func (manager *ResourceManager) handleStartBatchStopGuest(id []string, respChan task.LatestUpdate = time.Now() task.GuestID = map[string]int{} - - for taskIndex, guestID := range id{ + for taskIndex, guestID := range id { guest, exists := manager.instances[guestID] - if !exists{ + if !exists { err = fmt.Errorf("invalid guest '%s'", guestID) respChan <- ResourceResult{Error: err} return err @@ -3785,26 +3796,26 @@ func (manager *ResourceManager) handleStartBatchStopGuest(id []string, respChan } var taskID = newID.String() manager.batchStopTasks[taskID] = task - respChan <- ResourceResult{Batch:taskID, BatchStop:task.Guests} + respChan <- ResourceResult{Batch: taskID, BatchStop: task.Guests} log.Printf(" new stop guest batch allocated, task id '%s'", taskID) return nil } -func (manager *ResourceManager) handleSetBatchStopGuestSuccess(batchID, guestID string, respChan chan error) (err error){ +func (manager *ResourceManager) handleSetBatchStopGuestSuccess(batchID, guestID string, respChan chan error) (err error) { task, exists := manager.batchStopTasks[batchID] - if !exists{ + if !exists { err = fmt.Errorf("invalid batch task '%s", batchID) respChan <- err return err } guestIndex, exists := task.GuestID[guestID] - if !exists{ + if !exists { err = fmt.Errorf("no guest with id '%s' in batch '%s'", guestID, batchID) respChan <- err return err } - if guestIndex > len(task.Guests){ - err = fmt.Errorf("invalid index %d with id '%s'", guestIndex, guestID) + if guestIndex > len(task.Guests) { + err = fmt.Errorf("invalid index %d with id '%s'", guestIndex, guestID) respChan <- err return err } @@ -3818,21 +3829,21 @@ func (manager *ResourceManager) handleSetBatchStopGuestSuccess(batchID, guestID return nil } -func (manager *ResourceManager) handleSetBatchStopGuestFail(batchID, guestID string, deleteError error, respChan chan error) (err error){ +func (manager *ResourceManager) handleSetBatchStopGuestFail(batchID, guestID string, deleteError error, respChan chan error) (err error) { task, exists := manager.batchStopTasks[batchID] - if !exists{ + if !exists { err = fmt.Errorf("invalid batch task '%s", batchID) respChan <- err return err } guestIndex, exists := task.GuestID[guestID] - if !exists{ + if !exists { err = fmt.Errorf("no guest with id '%s' in batch '%s'", guestID, batchID) respChan <- err return err } - if guestIndex > len(task.Guests){ - err = fmt.Errorf("invalid index %d with id '%s'", guestIndex, guestID) + if guestIndex > len(task.Guests) { + err = fmt.Errorf("invalid index %d with id '%s'", guestIndex, guestID) respChan <- err return err } @@ -3847,24 +3858,24 @@ func (manager *ResourceManager) handleSetBatchStopGuestFail(batchID, guestID str return nil } -func (manager *ResourceManager) handleGetBatchStopGuestStatus(batchID string, respChan chan ResourceResult) (err error){ +func (manager *ResourceManager) handleGetBatchStopGuestStatus(batchID string, respChan chan ResourceResult) (err error) { task, exists := manager.batchStopTasks[batchID] - if !exists{ + if !exists { err = fmt.Errorf("invalid batch task '%s", batchID) - respChan <- ResourceResult{Error:err} + respChan <- ResourceResult{Error: err} return err } respChan <- ResourceResult{BatchStop: task.Guests} return nil } -func (manager *ResourceManager) handleUpdateInstanceMonitorSecret(instanceID, secret string, respChan chan error) (err error){ +func (manager *ResourceManager) handleUpdateInstanceMonitorSecret(instanceID, secret string, respChan chan error) (err error) { defer func() { respChan <- err }() var instance InstanceStatus var exists bool - if instance, exists = manager.instances[instanceID]; !exists{ + if instance, exists = manager.instances[instanceID]; !exists { err = fmt.Errorf("invalid instance '%s'", instanceID) return } @@ -3874,16 +3885,16 @@ func (manager *ResourceManager) handleUpdateInstanceMonitorSecret(instanceID, se return } -func (manager *ResourceManager) handleQuerySystemTemplates(respChan chan ResourceResult) (err error){ +func (manager *ResourceManager) handleQuerySystemTemplates(respChan chan ResourceResult) (err error) { defer func() { - if err != nil{ + if err != nil { respChan <- ResourceResult{Error: err} } }() var result = make([]SystemTemplate, 0) - for _, id := range manager.allTemplateID{ + for _, id := range manager.allTemplateID { template, exists := manager.templates[id] - if !exists{ + if !exists { err = fmt.Errorf("invalid template '%s'", id) return } @@ -3893,14 +3904,14 @@ func (manager *ResourceManager) handleQuerySystemTemplates(respChan chan Resourc return nil } -func (manager *ResourceManager) handleGetSystemTemplate(id string, respChan chan ResourceResult) (err error){ +func (manager *ResourceManager) handleGetSystemTemplate(id string, respChan chan ResourceResult) (err error) { defer func() { - if err != nil{ + if err != nil { respChan <- ResourceResult{Error: err} } }() template, exists := manager.templates[id] - if !exists{ + if !exists { err = fmt.Errorf("invalid template '%s'", id) return } @@ -3908,26 +3919,26 @@ func (manager *ResourceManager) handleGetSystemTemplate(id string, respChan chan return nil } -func (manager *ResourceManager) handleCreateSystemTemplate(config SystemTemplateConfig, respChan chan ResourceResult) (err error){ +func (manager *ResourceManager) handleCreateSystemTemplate(config SystemTemplateConfig, respChan chan ResourceResult) (err error) { defer func() { - if err != nil{ + if err != nil { respChan <- ResourceResult{Error: err} } }() - for _, t := range manager.templates{ - if t.Name == config.Name{ + for _, t := range manager.templates { + if t.Name == config.Name { err = fmt.Errorf("system template '%s' already exists", t.Name) return } } - if _, err = config.ToOptions(); err != nil{ + if _, err = config.ToOptions(); err != nil { err = fmt.Errorf("invalid template config: %s", err.Error()) return } var template = CreateSystemTemplate(config) manager.templates[template.ID] = template manager.allTemplateID = append(manager.allTemplateID, template.ID) - if err = manager.saveConfig(); err != nil{ + if err = manager.saveConfig(); err != nil { err = fmt.Errorf("add new template fail: %s", err.Error()) return } @@ -3936,16 +3947,16 @@ func (manager *ResourceManager) handleCreateSystemTemplate(config SystemTemplate return nil } -func (manager *ResourceManager) handleModifySystemTemplate(id string, config SystemTemplateConfig, respChan chan error) (err error){ +func (manager *ResourceManager) handleModifySystemTemplate(id string, config SystemTemplateConfig, respChan chan error) (err error) { defer func() { respChan <- err }() - if _, err = config.ToOptions(); err != nil{ + if _, err = config.ToOptions(); err != nil { err = fmt.Errorf("invalid template config: %s", err.Error()) return } template, exists := manager.templates[id] - if !exists{ + if !exists { err = fmt.Errorf("invalid template '%s'", id) return } @@ -3957,19 +3968,19 @@ func (manager *ResourceManager) handleModifySystemTemplate(id string, config Sys return } -func (manager *ResourceManager) handleDeleteSystemTemplate(id string, respChan chan error) (err error){ +func (manager *ResourceManager) handleDeleteSystemTemplate(id string, respChan chan error) (err error) { defer func() { respChan <- err }() template, exists := manager.templates[id] - if !exists{ + if !exists { err = fmt.Errorf("invalid template '%s'", id) return } delete(manager.templates, id) var newArray []string - for _, templateID := range manager.allTemplateID{ - if id != templateID{ + for _, templateID := range manager.allTemplateID { + if id != templateID { newArray = append(newArray, templateID) } } @@ -3978,28 +3989,29 @@ func (manager *ResourceManager) handleDeleteSystemTemplate(id string, respChan c err = manager.saveConfig() return } + //Security Policy Group -func (manager *ResourceManager) handleQuerySecurityPolicyGroups(condition SecurityPolicyGroupQueryCondition, respChan chan ResourceResult) (err error){ +func (manager *ResourceManager) handleQuerySecurityPolicyGroups(condition SecurityPolicyGroupQueryCondition, respChan chan ResourceResult) (err error) { var group managedSecurityPolicyGroup var exists bool var groupID string var result ResourceResult - for _, groupID = range manager.sortedPolicyGroupID{ - if group, exists = manager.policyGroups[groupID]; !exists{ + for _, groupID = range manager.sortedPolicyGroupID { + if group, exists = manager.policyGroups[groupID]; !exists { err = fmt.Errorf("invalid security policy group '%s' in index", groupID) respChan <- ResourceResult{Error: err} return } - if "" != condition.User && condition.User != group.User{ + if "" != condition.User && condition.User != group.User { continue } - if "" != condition.Group && condition.Group != group.Group{ + if "" != condition.Group && condition.Group != group.Group { continue } - if condition.EnabledOnly && !group.Enabled{ + if condition.EnabledOnly && !group.Enabled { continue } - if condition.GlobalOnly && !group.Global{ + if condition.GlobalOnly && !group.Global { continue } result.PolicyGroupList = append(result.PolicyGroupList, group.SecurityPolicyGroupStatus) @@ -4009,10 +4021,10 @@ func (manager *ResourceManager) handleQuerySecurityPolicyGroups(condition Securi return nil } -func (manager *ResourceManager) handleGetSecurityPolicyGroup(groupID string, respChan chan ResourceResult) (err error){ +func (manager *ResourceManager) handleGetSecurityPolicyGroup(groupID string, respChan chan ResourceResult) (err error) { var group managedSecurityPolicyGroup var exists bool - if group, exists = manager.policyGroups[groupID]; !exists{ + if group, exists = manager.policyGroups[groupID]; !exists { err = fmt.Errorf("invalid security policy group '%s'", groupID) respChan <- ResourceResult{Error: err} return @@ -4025,16 +4037,16 @@ func (manager *ResourceManager) handleGetSecurityPolicyGroup(groupID string, res return nil } -func (manager *ResourceManager) handleCreateSecurityPolicyGroup(config SecurityPolicyGroup, respChan chan ResourceResult) (err error){ +func (manager *ResourceManager) handleCreateSecurityPolicyGroup(config SecurityPolicyGroup, respChan chan ResourceResult) (err error) { var exists bool - if _, exists = manager.policyGroupNames[config.Name]; exists{ + if _, exists = manager.policyGroupNames[config.Name]; exists { err = fmt.Errorf("security policy group '%s' already exists in system", config.Name) respChan <- ResourceResult{Error: err} return } var newID = uuid.NewV4() var groupID = newID.String() - if _, exists = manager.policyGroups[groupID]; exists{ + if _, exists = manager.policyGroups[groupID]; exists { err = fmt.Errorf("security policy group '%s' already exists", groupID) respChan <- ResourceResult{Error: err} return @@ -4047,7 +4059,7 @@ func (manager *ResourceManager) handleCreateSecurityPolicyGroup(config SecurityP manager.sortedPolicyGroupID = append(manager.sortedPolicyGroupID, groupID) respChan <- ResourceResult{ PolicyGroup: SecurityPolicyGroupStatus{ - ID: groupID, + ID: groupID, SecurityPolicyGroup: config, }, } @@ -4055,10 +4067,10 @@ func (manager *ResourceManager) handleCreateSecurityPolicyGroup(config SecurityP return manager.saveConfig() } -func (manager *ResourceManager) handleModifySecurityPolicyGroup(groupID string, config SecurityPolicyGroup, respChan chan error) (err error){ +func (manager *ResourceManager) handleModifySecurityPolicyGroup(groupID string, config SecurityPolicyGroup, respChan chan error) (err error) { var group managedSecurityPolicyGroup var exists bool - if group, exists = manager.policyGroups[groupID]; !exists{ + if group, exists = manager.policyGroups[groupID]; !exists { err = fmt.Errorf("invalid security policy group '%s'", groupID) respChan <- err return @@ -4070,31 +4082,31 @@ func (manager *ResourceManager) handleModifySecurityPolicyGroup(groupID string, return manager.saveConfig() } -func (manager *ResourceManager) handleDeleteSecurityPolicyGroup(groupID string, respChan chan error) (err error){ +func (manager *ResourceManager) handleDeleteSecurityPolicyGroup(groupID string, respChan chan error) (err error) { var group managedSecurityPolicyGroup var exists bool - if group, exists = manager.policyGroups[groupID]; !exists{ + if group, exists = manager.policyGroups[groupID]; !exists { err = fmt.Errorf("invalid security policy group '%s'", groupID) respChan <- err return } var index = -1 - for offset, id := range manager.sortedPolicyGroupID{ - if id == groupID{ + for offset, id := range manager.sortedPolicyGroupID { + if id == groupID { index = offset break } } - if -1 == index{ + if -1 == index { err = fmt.Errorf("can not found security policy group '%s' in index", groupID) respChan <- err return } - if index == len(manager.sortedPolicyGroupID) - 1{ + if index == len(manager.sortedPolicyGroupID)-1 { //truncate tail manager.sortedPolicyGroupID = manager.sortedPolicyGroupID[:index] - }else{ - manager.sortedPolicyGroupID = append(manager.sortedPolicyGroupID[:index], manager.sortedPolicyGroupID[index + 1:]...) + } else { + manager.sortedPolicyGroupID = append(manager.sortedPolicyGroupID[:index], manager.sortedPolicyGroupID[index+1:]...) } delete(manager.policyGroupNames, group.Name) delete(manager.policyGroups, groupID) @@ -4103,10 +4115,10 @@ func (manager *ResourceManager) handleDeleteSecurityPolicyGroup(groupID string, return manager.saveConfig() } -func (manager *ResourceManager) handleGetSecurityPolicyRules(groupID string, respChan chan ResourceResult) (err error){ +func (manager *ResourceManager) handleGetSecurityPolicyRules(groupID string, respChan chan ResourceResult) (err error) { var group managedSecurityPolicyGroup var exists bool - if group, exists = manager.policyGroups[groupID]; !exists{ + if group, exists = manager.policyGroups[groupID]; !exists { err = fmt.Errorf("invalid security policy group '%s'", groupID) respChan <- ResourceResult{Error: err} return @@ -4115,16 +4127,16 @@ func (manager *ResourceManager) handleGetSecurityPolicyRules(groupID string, res return nil } -func (manager *ResourceManager) handleAddSecurityPolicyRule(groupID string, rule SecurityPolicyRule, respChan chan error) (err error){ +func (manager *ResourceManager) handleAddSecurityPolicyRule(groupID string, rule SecurityPolicyRule, respChan chan error) (err error) { var group managedSecurityPolicyGroup var exists bool - if group, exists = manager.policyGroups[groupID]; !exists{ + if group, exists = manager.policyGroups[groupID]; !exists { err = fmt.Errorf("invalid security policy group '%s'", groupID) respChan <- err return } - for _, current := range group.Rules{ - if rule.TargetPort == current.TargetPort && rule.Protocol == current.Protocol && rule.SourceAddress == current.SourceAddress{ + for _, current := range group.Rules { + if rule.TargetPort == current.TargetPort && rule.Protocol == current.Protocol && rule.SourceAddress == current.SourceAddress { err = fmt.Errorf("rule %s:%s:%d already defined in policy group '%s'", rule.Protocol, rule.SourceAddress, rule.TargetPort, group.Name) respChan <- err @@ -4139,28 +4151,28 @@ func (manager *ResourceManager) handleAddSecurityPolicyRule(groupID string, rule return manager.saveConfig() } -func (manager *ResourceManager) handleModifySecurityPolicyRule(groupID string, index int, rule SecurityPolicyRule, respChan chan error) (err error){ +func (manager *ResourceManager) handleModifySecurityPolicyRule(groupID string, index int, rule SecurityPolicyRule, respChan chan error) (err error) { var group managedSecurityPolicyGroup var exists bool - if group, exists = manager.policyGroups[groupID]; !exists{ + if group, exists = manager.policyGroups[groupID]; !exists { err = fmt.Errorf("invalid security policy group '%s'", groupID) respChan <- err return } - if index >= len(group.Rules){ + if index >= len(group.Rules) { err = fmt.Errorf("invalid index %d on security policy group '%s'", index, groupID) respChan <- err return } - for currentIndex, current := range group.Rules{ - if rule.TargetPort == current.TargetPort && rule.Protocol == current.Protocol && rule.SourceAddress == current.SourceAddress{ - if index == currentIndex{ - if rule.Accept == current.Accept{ + for currentIndex, current := range group.Rules { + if rule.TargetPort == current.TargetPort && rule.Protocol == current.Protocol && rule.SourceAddress == current.SourceAddress { + if index == currentIndex { + if rule.Accept == current.Accept { err = errors.New("no need to change") respChan <- err return } - }else{ + } else { err = fmt.Errorf("rule %s:%s:%d already defined in policy group '%s'", rule.Protocol, rule.SourceAddress, rule.TargetPort, group.Name) respChan <- err @@ -4177,24 +4189,24 @@ func (manager *ResourceManager) handleModifySecurityPolicyRule(groupID string, i return manager.saveConfig() } -func (manager *ResourceManager) handleRemoveSecurityPolicyRule(groupID string, index int, respChan chan error) (err error){ +func (manager *ResourceManager) handleRemoveSecurityPolicyRule(groupID string, index int, respChan chan error) (err error) { var group managedSecurityPolicyGroup var exists bool - if group, exists = manager.policyGroups[groupID]; !exists{ + if group, exists = manager.policyGroups[groupID]; !exists { err = fmt.Errorf("invalid security policy group '%s'", groupID) respChan <- err return } - if index >= len(group.Rules){ + if index >= len(group.Rules) { err = fmt.Errorf("invalid index %d on security policy group '%s'", index, groupID) respChan <- err return } - if index == len(group.Rules) - 1{ + if index == len(group.Rules)-1 { //last group.Rules = group.Rules[:index] - }else{ - group.Rules = append(group.Rules[:index], group.Rules[index + 1:]...) + } else { + group.Rules = append(group.Rules[:index], group.Rules[index+1:]...) } manager.policyGroups[groupID] = group respChan <- nil @@ -4203,30 +4215,30 @@ func (manager *ResourceManager) handleRemoveSecurityPolicyRule(groupID string, i return manager.saveConfig() } -func (manager *ResourceManager) handleMoveSecurityPolicyRule(groupID string, index int, moveUp bool, respChan chan error) (err error){ +func (manager *ResourceManager) handleMoveSecurityPolicyRule(groupID string, index int, moveUp bool, respChan chan error) (err error) { var group managedSecurityPolicyGroup var exists bool - if group, exists = manager.policyGroups[groupID]; !exists{ + if group, exists = manager.policyGroups[groupID]; !exists { err = fmt.Errorf("invalid security policy group '%s'", groupID) respChan <- err return } var ruleCount = len(group.Rules) - if index >= ruleCount{ + if index >= ruleCount { err = fmt.Errorf("invalid index %d on security policy group '%s'", index, groupID) respChan <- err return } var swapIndex int - if moveUp{ - if 0 == index{ + if moveUp { + if 0 == index { err = errors.New("already on top") respChan <- err return } swapIndex = index - 1 - }else{ - if ruleCount - 1 == index{ + } else { + if ruleCount-1 == index { err = errors.New("already on bottom") respChan <- err return @@ -4237,10 +4249,10 @@ func (manager *ResourceManager) handleMoveSecurityPolicyRule(groupID string, ind group.Rules[index] = group.Rules[swapIndex] group.Rules[swapIndex] = current respChan <- nil - if moveUp{ + if moveUp { log.Printf(" %dth rule of securiy policy group '%s'(%s) moved up", index, group.Name, groupID) - }else{ + } else { log.Printf(" %dth rule of securiy policy group '%s'(%s) moved down", index, group.Name, groupID) } @@ -4249,27 +4261,27 @@ func (manager *ResourceManager) handleMoveSecurityPolicyRule(groupID string, ind func (manager *ResourceManager) transferInstances(sourceName, targetName string, instances []string, monitorPorts []uint64) (err error) { sourceCell, exists := manager.cells[sourceName] - if !exists{ + if !exists { err = fmt.Errorf("invalid source cell '%s'", sourceName) return err } targetCell, exists := manager.cells[targetName] - if !exists{ + if !exists { err = fmt.Errorf("invalid target cell '%s'", targetName) return err } - if len(instances) != len(monitorPorts){ + if len(instances) != len(monitorPorts) { err = fmt.Errorf("unmatched port count %d/%d", len(monitorPorts), len(instances)) return err } - for i, instanceID := range instances{ + for i, instanceID := range instances { var monitor = monitorPorts[i] instance, exists := manager.instances[instanceID] - if !exists{ + if !exists { err = fmt.Errorf("invalid migrating instance '%s'", instanceID) return err } - if !instance.Migrating{ + if !instance.Migrating { err = fmt.Errorf("instance '%s' not in migrating", instance.Name) return err } @@ -4290,35 +4302,84 @@ func (manager *ResourceManager) transferInstances(sourceName, targetName string, return nil } -func (manager *ResourceManager) allocateNetworkAddress(pool ManagedComputePool, instanceID string) (internal, external string, err error){ +func (manager *ResourceManager) allocateNetworkAddress(pool ManagedComputePool, instanceID string) (internal, external string, err error) { + addresses, exists := manager.addressPools[pool.Network] + if !exists { + err = fmt.Errorf("invalid address pool '%s'", pool.Network) + return + } + { + //internal only + for _, startAddress := range addresses.rangeStartAddressed { + currentRange, exists := addresses.ranges[startAddress] + if !exists { + err = fmt.Errorf("invalid range '%s' in address pool '%s'", startAddress, pool.Network) + return + } + if len(currentRange.allocated) == int(currentRange.capacity) { + log.Printf(" debug: ignore depleted range '%s' of address pool '%s'", startAddress, pool.Network) + continue + } + var seekStart = IPv4ToNumber(currentRange.startAddress) + uint32(manager.generator.Intn(int(currentRange.capacity))) + var seekEnd = IPv4ToNumber(currentRange.endAddress) + var offset uint32 = 0 + for ; offset < currentRange.capacity; offset++ { + var selected = seekStart + offset + if selected > seekEnd { + selected -= currentRange.capacity + } + var ip = NumberToIPv4(selected) + var ipString = ip.String() + if _, exists := currentRange.allocated[ipString]; !exists { + var internalNetwork = net.IPNet{ip, currentRange.netmask} + internal = internalNetwork.String() + currentRange.allocated[ipString] = instanceID + addresses.ranges[startAddress] = currentRange + manager.addressPools[pool.Network] = addresses + log.Printf(" internal address '%s' allocated in range '%s~%s/%s'", + internal, currentRange.startAddress.String(), currentRange.endAddress.String(), IPv4MaskToString(currentRange.netmask)) + manager.saveConfig() + return + } else { + log.Printf(" debug: ignore allocated address '%s'", ipString) + } + } + } + } + err = fmt.Errorf("no address available in address pool '%s'", pool.Network) + return +} + +func (manager *ResourceManager) allocateAssignedNetworkAddress(pool ManagedComputePool, instanceID string, assignedIp string) (internal, external string, err error) { addresses, exists := manager.addressPools[pool.Network] - if !exists{ + if !exists { err = fmt.Errorf("invalid address pool '%s'", pool.Network) return } { //internal only - for _, startAddress := range addresses.rangeStartAddressed{ + for _, startAddress := range addresses.rangeStartAddressed { currentRange, exists := addresses.ranges[startAddress] - if !exists{ + if !exists { err = fmt.Errorf("invalid range '%s' in address pool '%s'", startAddress, pool.Network) return } - if len(currentRange.allocated) == int(currentRange.capacity){ + if len(currentRange.allocated) == int(currentRange.capacity) { log.Printf(" debug: ignore depleted range '%s' of address pool '%s'", startAddress, pool.Network) continue } var seekStart = IPv4ToNumber(currentRange.startAddress) + uint32(manager.generator.Intn(int(currentRange.capacity))) var seekEnd = IPv4ToNumber(currentRange.endAddress) var offset uint32 = 0 - for ; offset < currentRange.capacity; offset++{ + for ; offset < currentRange.capacity; offset++ { var selected = seekStart + offset - if selected > seekEnd{ + if selected > seekEnd { selected -= currentRange.capacity } var ip = NumberToIPv4(selected) var ipString = ip.String() - if _, exists := currentRange.allocated[ipString]; !exists{ + //ip must = assigned ip + if _, exists := currentRange.allocated[ipString]; !exists && ipString == assignedIp { var internalNetwork = net.IPNet{ip, currentRange.netmask} internal = internalNetwork.String() currentRange.allocated[ipString] = instanceID @@ -4328,7 +4389,7 @@ func (manager *ResourceManager) allocateNetworkAddress(pool ManagedComputePool, internal, currentRange.startAddress.String(), currentRange.endAddress.String(), IPv4MaskToString(currentRange.netmask)) manager.saveConfig() return - }else{ + } else { log.Printf(" debug: ignore allocated address '%s'", ipString) } } @@ -4338,13 +4399,13 @@ func (manager *ResourceManager) allocateNetworkAddress(pool ManagedComputePool, return } -func (manager *ResourceManager) deallocateNetworkAddress(pool ManagedComputePool, internalCIDR, external string) (err error){ +func (manager *ResourceManager) deallocateNetworkAddress(pool ManagedComputePool, internalCIDR, external string) (err error) { addresses, exists := manager.addressPools[pool.Network] - if !exists{ + if !exists { err = fmt.Errorf("invalid address pool '%s'", pool.Network) return } - if "" != external{ + if "" != external { err = errors.New("external address not supported") return } @@ -4353,19 +4414,19 @@ func (manager *ResourceManager) deallocateNetworkAddress(pool ManagedComputePool return } internalIP, _, err := net.ParseCIDR(internalCIDR) - if err != nil{ + if err != nil { err = fmt.Errorf("invalid internal address '%s'", internalCIDR) return } var internalString = internalIP.String() - for _, startAddress := range addresses.rangeStartAddressed{ + for _, startAddress := range addresses.rangeStartAddressed { currentRange, exists := addresses.ranges[startAddress] - if !exists{ + if !exists { err = fmt.Errorf("invalid range '%s' in address pool '%s'", startAddress, pool.Network) return } instanceID, exists := currentRange.allocated[internalString] - if !exists{ + if !exists { log.Printf(" debug: internal address '%s' not in range '%s'", internalCIDR, startAddress) continue } @@ -4396,46 +4457,46 @@ func (manager *ResourceManager) selectCell(poolName string, required InstanceRes var coreMeetsRequirement, memoryMeetsRequirement, diskMeetsRequirement = false, false, false for cellName, _ := range pool.Cells { cell, exists := manager.cells[cellName] - if !exists{ + if !exists { err = fmt.Errorf("invalid cell '%s' in pool '%s'", cellName, poolName) return } - if !cell.Alive{ + if !cell.Alive { log.Printf(" debug: ignore offline cell '%s' when select resource node", cellName) continue } - if !cell.Enabled{ + if !cell.Enabled { log.Printf(" debug: ignore disabled cell '%s' when select resource node", cellName) continue } - if mustFulfill{ + if mustFulfill { //check minimal resource - if cell.CpuUsage > HealthCpuUsage{ + if cell.CpuUsage > HealthCpuUsage { log.Printf(" debug: ignore cell '%s' due to cpu overload (%.2f%%)", cellName, cell.CpuUsage) continue - }else if !coreMeetsRequirement{ + } else if !coreMeetsRequirement { coreMeetsRequirement = true } - if cell.DiskAvailable < requiredDisk{ + if cell.DiskAvailable < requiredDisk { log.Printf(" debug: ignore cell '%s' due to insuffient disk (%s for %s)", cellName, bytesToString(cell.DiskAvailable), bytesToString(requiredDisk)) continue - }else if !diskMeetsRequirement{ + } else if !diskMeetsRequirement { diskMeetsRequirement = true } - if cell.MemoryAvailable < requiredMemory{ + if cell.MemoryAvailable < requiredMemory { log.Printf(" debug: ignore cell '%s' due to insuffient memory (%s for %s)", cellName, bytesToString(cell.MemoryAvailable), bytesToString(requiredMemory)) continue - }else if !memoryMeetsRequirement{ + } else if !memoryMeetsRequirement { memoryMeetsRequirement = true } } var realLoad = manager.evaluateRealTimeCapacity(cell, required.Cores, required.Memory, requiredDisk) configureLoad, err := manager.evaluateConfigureCapacity(cell, required.Cores, required.Memory, requiredDisk) - if err != nil{ + if err != nil { return "", err } var capacity = (realLoad + configureLoad) / 2 @@ -4445,14 +4506,14 @@ func (manager *ResourceManager) selectCell(poolName string, required InstanceRes selectedCapacity = capacity } } - if mustFulfill{ - if !diskMeetsRequirement{ + if mustFulfill { + if !diskMeetsRequirement { return "", fmt.Errorf("no cell has enough disk: %s", bytesToString(requiredDisk)) } - if !memoryMeetsRequirement{ + if !memoryMeetsRequirement { return "", fmt.Errorf("no cell has enough memory: %s", bytesToString(requiredMemory)) } - if !coreMeetsRequirement{ + if !coreMeetsRequirement { return "", fmt.Errorf("all cell cores are busy (load over %.2f%%)", HealthCpuUsage) } } @@ -4462,58 +4523,58 @@ func (manager *ResourceManager) selectCell(poolName string, required InstanceRes return selected, nil } -func (manager *ResourceManager) evaluateRealTimeCapacity(cell ManagedComputeCell, requireCore, requireMemory uint, requireDisk uint64) (capacity float32){ +func (manager *ResourceManager) evaluateRealTimeCapacity(cell ManagedComputeCell, requireCore, requireMemory uint, requireDisk uint64) (capacity float32) { const ( fullCPUUsage = 100 ) var availableCores float32 - if cell.CpuUsage >= fullCPUUsage{ + if cell.CpuUsage >= fullCPUUsage { availableCores = 0 - }else{ - availableCores = float32(cell.Cores) * float32(fullCPUUsage - cell.CpuUsage) / 100 + } else { + availableCores = float32(cell.Cores) * float32(fullCPUUsage-cell.CpuUsage) / 100 } var coreCapacity = availableCores / float32(requireCore) var memoryCapacity = float32(cell.MemoryAvailable) / float32(requireMemory) var diskCapacity = float32(cell.DiskAvailable / requireDisk) - capacity = evaluateCoreFactor* coreCapacity + evaluateMemoryFactor* memoryCapacity + evaluateDiskFactor* diskCapacity + capacity = evaluateCoreFactor*coreCapacity + evaluateMemoryFactor*memoryCapacity + evaluateDiskFactor*diskCapacity //log.Printf(" debug: real capacity %.2f, core %.2f / %d => %.2f, mem %d / %d => %.2f, disk %d / %d => %.2f", // capacity, availableCores, requireCore, coreCapacity, cell.MemoryAvailable >> 20, requireMemory >> 20, memoryCapacity, // cell.DiskAvailable >> 30, requireDisk >> 30, diskCapacity) return capacity } -func (manager *ResourceManager) evaluateConfigureCapacity(cell ManagedComputeCell, requireCore, requireMemory uint, requireDisk uint64) (capacity float32, err error){ +func (manager *ResourceManager) evaluateConfigureCapacity(cell ManagedComputeCell, requireCore, requireMemory uint, requireDisk uint64) (capacity float32, err error) { const ( configureScale = 3 ) var idList []string - for instanceID, _ := range cell.Instances{ + for instanceID, _ := range cell.Instances { idList = append(idList, instanceID) } - for instanceID, _ := range cell.Pending{ + for instanceID, _ := range cell.Pending { idList = append(idList, instanceID) } var availableCores = cell.Cores * configureScale var availableMemory = cell.Memory * configureScale var availableDisk = cell.Disk * configureScale - for _, instanceID := range idList{ + for _, instanceID := range idList { ins, exists := manager.instances[instanceID] - if !exists{ + if !exists { err = fmt.Errorf("invalid instance '%s' in cell '%s'", instanceID, cell.Name) return } availableCores -= ins.Cores availableMemory -= uint64(ins.Memory) - for _, diskSize := range ins.Disks{ + for _, diskSize := range ins.Disks { availableDisk -= diskSize } } - var coreCapacity = float32(availableCores/requireCore) - var memoryCapacity = float32(availableMemory/uint64(requireMemory)) - var diskCapacity = float32(availableDisk/requireDisk) - capacity = evaluateCoreFactor* coreCapacity + evaluateMemoryFactor* memoryCapacity + evaluateDiskFactor* diskCapacity + var coreCapacity = float32(availableCores / requireCore) + var memoryCapacity = float32(availableMemory / uint64(requireMemory)) + var diskCapacity = float32(availableDisk / requireDisk) + capacity = evaluateCoreFactor*coreCapacity + evaluateMemoryFactor*memoryCapacity + evaluateDiskFactor*diskCapacity //log.Printf(" debug: configure capacity %.2f, core %d / %d => %.2f, mem %d / %d => %.2f, disk %d / %d => %.2f", // capacity, availableCores, requireCore, coreCapacity, availableMemory >> 20, requireMemory >> 20, memoryCapacity, // availableDisk >> 30, requireDisk >> 30, diskCapacity) @@ -4525,7 +4586,7 @@ func (manager *ResourceManager) saveConfig() (err error) { var totalPools, totalCells = 0, 0 config.Zone = manager.zone.Name for poolName, poolStatus := range manager.pools { - var pool = poolDefine{Name: poolName, Enabled: poolStatus.Enabled, Network:poolStatus.Network, Storage:poolStatus.Storage, Failover:poolStatus.Failover} + var pool = poolDefine{Name: poolName, Enabled: poolStatus.Enabled, Network: poolStatus.Network, Storage: poolStatus.Storage, Failover: poolStatus.Failover} pool.Cells = map[string]cellDefine{} totalPools++ for cellName, _ := range poolStatus.Cells { @@ -4540,12 +4601,12 @@ func (manager *ResourceManager) saveConfig() (err error) { config.Pools = append(config.Pools, pool) } //storage pools - for poolName, pool := range manager.storagePools{ + for poolName, pool := range manager.storagePools { var storage = storageDefine{poolName, pool.Type, pool.Host, pool.Target} config.StoragePools = append(config.StoragePools, storage) } config.AddressPools = make([]addressPoolDefine, 0) - for poolName, pool := range manager.addressPools{ + for poolName, pool := range manager.addressPools { var define addressPoolDefine define.Name = poolName define.Gateway = pool.gateway @@ -4553,9 +4614,9 @@ func (manager *ResourceManager) saveConfig() (err error) { define.Provider = pool.provider define.Mode = pool.mode define.Ranges = make([]AddressRangeStatus, 0) - for _, startAddress := range pool.rangeStartAddressed{ + for _, startAddress := range pool.rangeStartAddressed { currentRange, exists := pool.ranges[startAddress] - if !exists{ + if !exists { return fmt.Errorf("invalid start address '%s' in pool '%s'", startAddress, poolName) } var status AddressRangeStatus @@ -4564,7 +4625,7 @@ func (manager *ResourceManager) saveConfig() (err error) { status.Netmask = IPv4MaskToString(currentRange.netmask) status.Capacity = currentRange.capacity status.Allocated = make([]AllocatedAddress, 0) - for address, instance := range currentRange.allocated{ + for address, instance := range currentRange.allocated { status.Allocated = append(status.Allocated, AllocatedAddress{address, instance}) } define.Ranges = append(define.Ranges, status) @@ -4573,16 +4634,16 @@ func (manager *ResourceManager) saveConfig() (err error) { } var template SystemTemplate var exists bool - for _, templateID := range manager.allTemplateID{ - if template, exists = manager.templates[templateID]; !exists{ + for _, templateID := range manager.allTemplateID { + if template, exists = manager.templates[templateID]; !exists { err = fmt.Errorf("invalid system template '%s'", templateID) return } config.SystemTemplates = append(config.SystemTemplates, template) } var policy managedSecurityPolicyGroup - for _, groupID := range manager.sortedPolicyGroupID{ - if policy, exists = manager.policyGroups[groupID]; !exists{ + for _, groupID := range manager.sortedPolicyGroupID { + if policy, exists = manager.policyGroups[groupID]; !exists { err = fmt.Errorf("invalid security policy '%s'", groupID) return } @@ -4602,12 +4663,12 @@ func (manager *ResourceManager) saveConfig() (err error) { return nil } -func (manager *ResourceManager) generateDefaultTemplates() (templates []SystemTemplate, err error){ +func (manager *ResourceManager) generateDefaultTemplates() (templates []SystemTemplate, err error) { templates = append(templates, CreateSystemTemplate(SystemTemplateConfig{ Name: "CentOS 7", Admin: "root", OperatingSystem: SystemNameLinux, - Disk: DiskBusSCSI, + Disk: DiskBusIDE, Network: NetworkModelVIRTIO, Display: DisplayDriverVGA, Control: RemoteControlVNC, @@ -4618,7 +4679,7 @@ func (manager *ResourceManager) generateDefaultTemplates() (templates []SystemTe Name: "CentOS 6", Admin: "root", OperatingSystem: SystemNameLinux, - Disk: DiskBusSATA, + Disk: DiskBusIDE, Network: NetworkModelVIRTIO, Display: DisplayDriverVGA, Control: RemoteControlVNC, @@ -4629,7 +4690,7 @@ func (manager *ResourceManager) generateDefaultTemplates() (templates []SystemTe Name: "Windows Server 2012", Admin: "Administrator", OperatingSystem: SystemNameWindows, - Disk: DiskBusSATA, + Disk: DiskBusIDE, Network: NetworkModelE1000, Display: DisplayDriverVGA, Control: RemoteControlVNC, @@ -4640,7 +4701,7 @@ func (manager *ResourceManager) generateDefaultTemplates() (templates []SystemTe Name: "General", Admin: "root", OperatingSystem: SystemNameLinux, - Disk: DiskBusSATA, + Disk: DiskBusIDE, Network: NetworkModelRTL8139, Display: DisplayDriverVGA, Control: RemoteControlVNC, @@ -4659,10 +4720,10 @@ func (manager *ResourceManager) generateDefaultTemplates() (templates []SystemTe Tablet: TabletBusNone, })) log.Printf(" %d default system template(s) generated", len(templates)) - return + return } -func (manager *ResourceManager) generateDefaultConfig() (err error){ +func (manager *ResourceManager) generateDefaultConfig() (err error) { const ( DefaultPoolName = "default" DefaultZoneName = "default" @@ -4677,11 +4738,11 @@ func (manager *ResourceManager) generateDefaultConfig() (err error){ defaultPool.InstanceNames = map[string]string{} manager.pools = map[string]ManagedComputePool{DefaultPoolName: defaultPool} var templates []SystemTemplate - if templates, err = manager.generateDefaultTemplates(); err != nil{ + if templates, err = manager.generateDefaultTemplates(); err != nil { err = fmt.Errorf("genereate templates fail: %s", err.Error()) return } - for _, template := range templates{ + for _, template := range templates { manager.templates[template.ID] = template manager.allTemplateID = append(manager.allTemplateID, template.ID) } @@ -4694,15 +4755,15 @@ func (manager *ResourceManager) generateDefaultConfig() (err error){ func (manager *ResourceManager) loadConfig() (err error) { var configChanged = false defer func() { - if configChanged{ - if err = manager.saveConfig(); err != nil{ + if configChanged { + if err = manager.saveConfig(); err != nil { log.Printf(" save config fail after load: %s", err.Error()) return } } }() if _, err = os.Stat(manager.dataFile); os.IsNotExist(err) { - if err = manager.generateDefaultConfig(); err != nil{ + if err = manager.generateDefaultConfig(); err != nil { err = fmt.Errorf("generate default config fail: %s", err.Error()) return } @@ -4719,7 +4780,7 @@ func (manager *ResourceManager) loadConfig() (err error) { if err = json.Unmarshal(data, &config); err != nil { return err } - for _, poolDefine := range config.AddressPools{ + for _, poolDefine := range config.AddressPools { var pool ManagedAddressPool pool.name = poolDefine.Name pool.gateway = poolDefine.Gateway @@ -4728,21 +4789,21 @@ func (manager *ResourceManager) loadConfig() (err error) { pool.mode = poolDefine.Mode pool.ranges = map[string]ManagedIPV4AddressRange{} pool.rangeStartAddressed = make([]string, 0) - for _, rangeDefine := range poolDefine.Ranges{ + for _, rangeDefine := range poolDefine.Ranges { var status ManagedIPV4AddressRange - if status.startAddress = net.ParseIP(rangeDefine.Start);nil == status.startAddress{ + if status.startAddress = net.ParseIP(rangeDefine.Start); nil == status.startAddress { return fmt.Errorf("invalid start address '%s' of pool '%s'", rangeDefine.Start, poolDefine.Name) } - if status.endAddress = net.ParseIP(rangeDefine.End);nil == status.endAddress{ + if status.endAddress = net.ParseIP(rangeDefine.End); nil == status.endAddress { return fmt.Errorf("invalid end address '%s' of pool '%s'", rangeDefine.End, poolDefine.Name) } status.netmask, err = IPv4ToMask(rangeDefine.Netmask) - if err != nil{ + if err != nil { return err } status.capacity = rangeDefine.Capacity status.allocated = map[string]string{} - for _, allocated := range rangeDefine.Allocated{ + for _, allocated := range rangeDefine.Allocated { status.allocated[allocated.Address] = allocated.Instance } pool.rangeStartAddressed = append(pool.rangeStartAddressed, rangeDefine.Start) @@ -4777,25 +4838,25 @@ func (manager *ResourceManager) loadConfig() (err error) { manager.pools[pool.Name] = poolStatus } //storage pools - for _, define := range config.StoragePools{ + for _, define := range config.StoragePools { var pool = StoragePoolInfo{define.Name, define.Type, define.Host, define.Target} manager.storagePools[pool.Name] = pool } var templates []SystemTemplate - if 0 != len(config.SystemTemplates){ + if 0 != len(config.SystemTemplates) { templates = config.SystemTemplates - }else{ - if templates, err = manager.generateDefaultTemplates(); err != nil{ + } else { + if templates, err = manager.generateDefaultTemplates(); err != nil { err = fmt.Errorf("generate templates fail: %s", err.Error()) return } configChanged = true } - for _, template := range templates{ + for _, template := range templates { manager.templates[template.ID] = template manager.allTemplateID = append(manager.allTemplateID, template.ID) } - for _, policy := range config.SecurityPolicyGroup{ + for _, policy := range config.SecurityPolicyGroup { manager.policyGroups[policy.ID] = policy manager.policyGroupNames[policy.Name] = true manager.sortedPolicyGroupID = append(manager.sortedPolicyGroupID, policy.ID) @@ -4808,35 +4869,35 @@ func (manager *ResourceManager) loadConfig() (err error) { return nil } -func (manager *ResourceManager) syncInstanceStatistic(cellName string) (err error){ +func (manager *ResourceManager) syncInstanceStatistic(cellName string) (err error) { var exists bool var cell ManagedComputeCell - if cell, exists = manager.cells[cellName]; !exists{ + if cell, exists = manager.cells[cellName]; !exists { err = fmt.Errorf("invalid cell '%s'", cellName) return } cell.InstanceStatistic.Reset() - for instanceID, _ := range cell.Instances{ + for instanceID, _ := range cell.Instances { var instance InstanceStatus - if instance, exists = manager.instances[instanceID]; !exists{ + if instance, exists = manager.instances[instanceID]; !exists { err = fmt.Errorf("invalid instance '%s' in cell '%s'", instanceID, cellName) return } - if instance.Migrating{ - cell.MigratingInstances ++ - }else if instance.Lost{ - cell.LostInstances ++ - }else if instance.Running{ - cell.RunningInstances ++ - }else{ - cell.StoppedInstances ++ + if instance.Migrating { + cell.MigratingInstances++ + } else if instance.Lost { + cell.LostInstances++ + } else if instance.Running { + cell.RunningInstances++ + } else { + cell.StoppedInstances++ } } manager.cells[cellName] = cell return nil } -func (cell *ManagedComputeCell) isInstanceConsistent() bool{ +func (cell *ManagedComputeCell) isInstanceConsistent() bool { var current = cell.InstanceStatistic.StoppedInstances + cell.InstanceStatistic.RunningInstances + cell.InstanceStatistic.LostInstances + cell.InstanceStatistic.MigratingInstances var required = uint64(len(cell.Instances)) @@ -4849,9 +4910,9 @@ func (cell *ManagedComputeCell) isInstanceConsistent() bool{ func (s *ResourceUsage) Accumulate(add ResourceUsage) { var totalCores = s.Cores + add.Cores - if 0 == totalCores{ + if 0 == totalCores { s.CpuUsage = 0.0 - }else{ + } else { s.CpuUsage = (s.CpuUsage*float64(s.Cores) + add.CpuUsage*float64(add.Cores)) / float64(totalCores) } s.Cores = totalCores @@ -4915,19 +4976,19 @@ func (p *PoolStatistic) Reset() { p.DisabledPools = 0 } -func IPv4ToNumber(ip net.IP) (number uint32){ +func IPv4ToNumber(ip net.IP) (number uint32) { number = binary.BigEndian.Uint32(ip[12:]) return number } -func NumberToIPv4(number uint32) (ip net.IP){ +func NumberToIPv4(number uint32) (ip net.IP) { var bytes = make([]byte, net.IPv4len) binary.BigEndian.PutUint32(bytes, number) ip = net.IPv4(bytes[0], bytes[1], bytes[2], bytes[3]) return ip } -func IPv4ToMask(stringValue string) (mask net.IPMask, err error){ +func IPv4ToMask(stringValue string) (mask net.IPMask, err error) { var ip = net.ParseIP(stringValue) if nil == ip { err = fmt.Errorf("invalid IP address '%s'", stringValue) @@ -4942,7 +5003,7 @@ func IPv4ToMask(stringValue string) (mask net.IPMask, err error){ return mask, nil } -func IPv4MaskToString(mask net.IPMask) (string){ +func IPv4MaskToString(mask net.IPMask) string { return net.IPv4(mask[0], mask[1], mask[2], mask[3]).String() } @@ -4955,25 +5016,25 @@ func bytesToString(sizeInBytes uint64) string { ) var value = float64(sizeInBytes) var unit string - if value < KB{ + if value < KB { return fmt.Sprintf("%d Bytes", sizeInBytes) - }else if value < MB{ + } else if value < MB { unit = "KB" value = value / KB - }else if value < GB{ + } else if value < GB { unit = "MB" value = value / MB - }else if value < TB { + } else if value < TB { unit = "GB" value = value / GB - }else{ + } else { unit = "TB" value = value / TB } - if value == math.Round(value){ + if value == math.Round(value) { //integer return fmt.Sprintf("%d %s", int(value), unit) - }else{ + } else { return fmt.Sprintf("%.02f %s", value, unit) } } diff --git a/src/task/create_guest.go b/src/task/create_guest.go index c8a9f1a..3bcb2ad 100644 --- a/src/task/create_guest.go +++ b/src/task/create_guest.go @@ -1,14 +1,15 @@ package task import ( - "github.com/project-nano/framework" + "errors" + "fmt" "log" - "time" - "github.com/project-nano/core/modules" "net/http" - "fmt" "strconv" - "errors" + "time" + + "github.com/project-nano/core/modules" + "github.com/project-nano/framework" ) type CreateGuestExecutor struct { @@ -17,7 +18,7 @@ type CreateGuestExecutor struct { Client *http.Client } -func (executor *CreateGuestExecutor)Execute(id framework.SessionID, request framework.Message, +func (executor *CreateGuestExecutor) Execute(id framework.SessionID, request framework.Message, incoming chan framework.Message, terminate chan bool) (err error) { resp, _ := framework.CreateJsonMessage(framework.CreateGuestResponse) resp.SetToSession(request.GetFromSession()) @@ -27,46 +28,46 @@ func (executor *CreateGuestExecutor)Execute(id framework.SessionID, request fram var config modules.InstanceStatus var guestName string - if guestName, err = request.GetString(framework.ParamKeyName); err != nil{ + if guestName, err = request.GetString(framework.ParamKeyName); err != nil { return err } - if config.User, err = request.GetString(framework.ParamKeyUser); err != nil{ + if config.User, err = request.GetString(framework.ParamKeyUser); err != nil { return err } - if config.Group, err = request.GetString(framework.ParamKeyGroup); err != nil{ + if config.Group, err = request.GetString(framework.ParamKeyGroup); err != nil { return err } - if config.Pool, err = request.GetString(framework.ParamKeyPool); err != nil{ + if config.Pool, err = request.GetString(framework.ParamKeyPool); err != nil { return err } - if config.Cores, err = request.GetUInt(framework.ParamKeyCore); err != nil{ + if config.Cores, err = request.GetUInt(framework.ParamKeyCore); err != nil { return err } - if config.Memory, err = request.GetUInt(framework.ParamKeyMemory); err != nil{ + if config.Memory, err = request.GetUInt(framework.ParamKeyMemory); err != nil { return err } - if config.Disks, err = request.GetUIntArray(framework.ParamKeyDisk); err != nil{ + if config.Disks, err = request.GetUIntArray(framework.ParamKeyDisk); err != nil { return err } - if 0 == len(config.Disks){ + if 0 == len(config.Disks) { err = errors.New("must specify disk size") return executor.ResponseFail(resp, err.Error(), request.GetSender()) } var systemDiskSize = uint(config.Disks[0]) - if config.AutoStart, err = request.GetBoolean(framework.ParamKeyOption); err != nil{ + if config.AutoStart, err = request.GetBoolean(framework.ParamKeyOption); err != nil { return err } var templateID string - if templateID, err = request.GetString(framework.ParamKeyTemplate); err != nil{ + if templateID, err = request.GetString(framework.ParamKeyTemplate); err != nil { err = fmt.Errorf("get template id fail: %s", err.Error()) return executor.ResponseFail(resp, err.Error(), request.GetSender()) - }else{ + } else { var respChan = make(chan modules.ResourceResult, 1) executor.ResourceModule.GetSystemTemplate(templateID, respChan) - var result = <- respChan - if result.Error != nil{ + var result = <-respChan + if result.Error != nil { err = fmt.Errorf("get template '%s' fail: %s", templateID, result.Error) return } @@ -74,11 +75,11 @@ func (executor *CreateGuestExecutor)Execute(id framework.SessionID, request fram config.System = t.OperatingSystem var currentAdmin string currentAdmin, _ = request.GetString(framework.ParamKeyAdmin) - if "" == currentAdmin{ + if "" == currentAdmin { request.SetString(framework.ParamKeyAdmin, t.Admin) } var options []uint64 - if options, err = t.ToOptions(); err != nil{ + if options, err = t.ToOptions(); err != nil { err = fmt.Errorf("invalid template: %s", err.Error()) return executor.ResponseFail(resp, err.Error(), request.GetSender()) } @@ -87,29 +88,29 @@ func (executor *CreateGuestExecutor)Execute(id framework.SessionID, request fram //Security policy { var policyID string - if policyID, err = request.GetString(framework.ParamKeyPolicy); nil == err && "" != policyID{ + if policyID, err = request.GetString(framework.ParamKeyPolicy); nil == err && "" != policyID { var respChan = make(chan modules.ResourceResult, 1) executor.ResourceModule.GetSecurityPolicyGroup(policyID, respChan) - var result = <- respChan - if result.Error != nil{ + var result = <-respChan + if result.Error != nil { err = fmt.Errorf("get security policy '%s' fail: %s", policyID, result.Error) return executor.ResponseFail(resp, err.Error(), request.GetSender()) } var policy = result.PolicyGroup request.SetBoolean(framework.ParamKeyAction, policy.Accept) executor.ResourceModule.GetSecurityPolicyRules(policyID, respChan) - result = <- respChan - if result.Error != nil{ + result = <-respChan + if result.Error != nil { err = fmt.Errorf("get security rules of policy '%s' fail: %s", policyID, result.Error) return executor.ResponseFail(resp, err.Error(), request.GetSender()) } var rules = result.PolicyRuleList //accept,protocol,from,to,port var policyParameters []uint64 - for index, rule := range rules{ - if rule.Accept{ + for index, rule := range rules { + if rule.Accept { policyParameters = append(policyParameters, modules.PolicyRuleActionAccept) - }else{ + } else { policyParameters = append(policyParameters, modules.PolicyRuleActionReject) } switch rule.Protocol { @@ -140,9 +141,9 @@ func (executor *CreateGuestExecutor)Execute(id framework.SessionID, request fram { priorityValue, _ := request.GetUInt(framework.ParamKeyPriority) config.CPUPriority = modules.PriorityEnum(priorityValue) - if limitParameters, err := request.GetUIntArray(framework.ParamKeyLimit); err == nil{ + if limitParameters, err := request.GetUIntArray(framework.ParamKeyLimit); err == nil { const ( - ReadSpeedOffset = iota + ReadSpeedOffset = iota WriteSpeedOffset ReadIOPSOffset WriteIOPSOffset @@ -151,7 +152,7 @@ func (executor *CreateGuestExecutor)Execute(id framework.SessionID, request fram ValidLimitParametersCount = 6 ) - if ValidLimitParametersCount != len(limitParameters){ + if ValidLimitParametersCount != len(limitParameters) { err = fmt.Errorf("invalid QoS parameters count %d", len(limitParameters)) return executor.ResponseFail(resp, err.Error(), request.GetSender()) } @@ -167,22 +168,20 @@ func (executor *CreateGuestExecutor)Execute(id framework.SessionID, request fram log.Printf("[%08X] request create guest '%s' from %s.[%08X]", id, guestName, request.GetSender(), request.GetFromSession()) - - - if err = QualifyNormalName(guestName); err != nil{ + if err = QualifyNormalName(guestName); err != nil { log.Printf("[%08X] invalid guest name '%s' : %s", id, guestName, err.Error()) err = fmt.Errorf("invalid guest name '%s': %s", guestName, err.Error()) resp.SetError(err.Error()) return executor.Sender.SendMessage(resp, request.GetSender()) } - if err = QualifyNormalName(config.User); err != nil{ + if err = QualifyNormalName(config.User); err != nil { log.Printf("[%08X] invalid owner name '%s' : %s", id, config.User, err.Error()) err = fmt.Errorf("invalid owner name '%s': %s", config.User, err.Error()) resp.SetError(err.Error()) return executor.Sender.SendMessage(resp, request.GetSender()) } - if err = QualifyNormalName(config.Group); err != nil{ + if err = QualifyNormalName(config.Group); err != nil { log.Printf("[%08X] invalid group name '%s' : %s", id, config.Group, err.Error()) err = fmt.Errorf("invalid group name '%s': %s", config.Group, err.Error()) resp.SetError(err.Error()) @@ -191,15 +190,15 @@ func (executor *CreateGuestExecutor)Execute(id framework.SessionID, request fram config.Name = fmt.Sprintf("%s.%s", config.Group, guestName) request.SetString(framework.ParamKeyName, config.Name) - if imageID, err := request.GetString(framework.ParamKeyImage); err == nil{ + if imageID, err := request.GetString(framework.ParamKeyImage); err == nil { //clone from image var respChan = make(chan modules.ResourceResult) var imageServer, mediaHost string var mediaPort int { executor.ResourceModule.GetImageServer(respChan) - var result = <- respChan - if result.Error != nil{ + var result = <-respChan + if result.Error != nil { log.Printf("[%08X] get image server fail: %s", id, result.Error.Error()) resp.SetError(result.Error.Error()) return executor.ResponseFail(resp, result.Error.Error(), request.GetSender()) @@ -212,7 +211,7 @@ func (executor *CreateGuestExecutor)Execute(id framework.SessionID, request fram query, _ := framework.CreateJsonMessage(framework.GetDiskImageRequest) query.SetFromSession(id) query.SetString(framework.ParamKeyImage, imageID) - if err = executor.Sender.SendMessage(query, imageServer); err != nil{ + if err = executor.Sender.SendMessage(query, imageServer); err != nil { log.Printf("[%08X] request get disk image fail: %s", id, err.Error()) resp.SetError(err.Error()) return executor.ResponseFail(resp, err.Error(), request.GetSender()) @@ -223,9 +222,9 @@ func (executor *CreateGuestExecutor)Execute(id framework.SessionID, request fram var imageCreated bool timer := time.NewTimer(modules.DefaultOperateTimeout) - select{ - case queryResp := <- incoming: - if !queryResp.IsSuccess(){ + select { + case queryResp := <-incoming: + if !queryResp.IsSuccess() { log.Printf("[%08X] get image info fail: %s", id, queryResp.GetError()) resp.SetError(queryResp.GetError()) return executor.ResponseFail(resp, queryResp.GetError(), request.GetSender()) @@ -234,25 +233,25 @@ func (executor *CreateGuestExecutor)Execute(id framework.SessionID, request fram imageSize, _ = queryResp.GetUInt(framework.ParamKeySize) imageCreated, _ = queryResp.GetBoolean(framework.ParamKeyEnable) - case <- timer.C: + case <-timer.C: //timeout log.Printf("[%08X] get image info timeout", id) resp.SetError("time out") return executor.ResponseFail(resp, err.Error(), request.GetSender()) } - if !imageCreated{ + if !imageCreated { err = fmt.Errorf("disk image '%s' not created", imageID) log.Printf("[%08X] get disk image fail: %s", id, err.Error()) return executor.ResponseFail(resp, err.Error(), request.GetSender()) } - if imageSize > systemDiskSize{ - err = fmt.Errorf("source image (%.2f GB) larger than system disk (%.2f GB)", float64(imageSize)/(1 << 30), float64(systemDiskSize)/(1 << 30)) + if imageSize > systemDiskSize { + err = fmt.Errorf("source image (%.2f GB) larger than system disk (%.2f GB)", float64(imageSize)/(1<<30), float64(systemDiskSize)/(1<<30)) log.Printf("[%08X] check image size fail: %s", err.Error()) return executor.ResponseFail(resp, err.Error(), request.GetSender()) } - log.Printf("[%08X] clone disk image '%s'(%d MB) from server '%s'(%s:%d)", id, imageName, imageSize >> 20, + log.Printf("[%08X] clone disk image '%s'(%d MB) from server '%s'(%s:%d)", id, imageName, imageSize>>20, imageServer, mediaHost, mediaPort) request.SetString(framework.ParamKeyHost, mediaHost) request.SetUInt(framework.ParamKeyPort, uint(mediaPort)) @@ -261,11 +260,17 @@ func (executor *CreateGuestExecutor)Execute(id framework.SessionID, request fram } { + //set assigned cell + config.Cell, _ = request.GetString(framework.ParamKeyCell) + + //set assigned address + config.InternalNetwork.AssignedAddress, _ = request.GetString(framework.ParamKeyInternal) + //allocate cell var respChan = make(chan modules.ResourceResult) executor.ResourceModule.AllocateInstance(config.Pool, config, respChan) - result := <- respChan - if result.Error != nil{ + result := <-respChan + if result.Error != nil { log.Printf("[%08X] allocate resource fail: %s", id, result.Error.Error()) return executor.ResponseFail(resp, result.Error.Error(), request.GetSender()) } @@ -282,18 +287,18 @@ func (executor *CreateGuestExecutor)Execute(id framework.SessionID, request fram request.SetUIntArray(framework.ParamKeyMode, []uint64{modules.NetworkModePlain, modules.StorageModeLocal}) request.SetString(framework.ParamKeyInstance, config.ID) - if err = executor.Sender.SendMessage(request, config.Cell); err != nil{ + if err = executor.Sender.SendMessage(request, config.Cell); err != nil { log.Printf("[%08X] redirect create guest to cell '%s' fail: %s", id, config.Cell, err.Error()) executor.CancelResource(config.ID) return executor.ResponseFail(resp, err.Error(), request.GetSender()) } timer := time.NewTimer(modules.DefaultOperateTimeout) - select{ - case cellResp := <- incoming: - if cellResp.IsSuccess(){ + select { + case cellResp := <-incoming: + if cellResp.IsSuccess() { log.Printf("[%08X] cell create guest success", id) - }else{ + } else { log.Printf("[%08X] cell create guest fail: %s", id, cellResp.GetError()) executor.CancelResource(config.ID) } @@ -302,7 +307,7 @@ func (executor *CreateGuestExecutor)Execute(id framework.SessionID, request fram cellResp.SetTransactionID(request.GetTransactionID()) //forward return executor.Sender.SendMessage(cellResp, request.GetSender()) - case <- timer.C: + case <-timer.C: //timeout log.Printf("[%08X] wait create response timeout", id) executor.CancelResource(config.ID) @@ -311,33 +316,33 @@ func (executor *CreateGuestExecutor)Execute(id framework.SessionID, request fram } } -func (executor *CreateGuestExecutor)ResponseFail(resp framework.Message, err , target string) error{ +func (executor *CreateGuestExecutor) ResponseFail(resp framework.Message, err, target string) error { resp.SetSuccess(false) resp.SetError(err) return executor.Sender.SendMessage(resp, target) } -func (executor *CreateGuestExecutor)CancelResource(id string) error{ +func (executor *CreateGuestExecutor) CancelResource(id string) error { var respChan = make(chan error) executor.ResourceModule.DeallocateInstance(id, nil, respChan) - err := <- respChan + err := <-respChan return err } -func (executor *CreateGuestExecutor) getImageSize(id, host string, port int) (size uint64, err error){ +func (executor *CreateGuestExecutor) getImageSize(id, host string, port int) (size uint64, err error) { const ( - Protocol = "https" - Resource = "disk_images" + Protocol = "https" + Resource = "disk_images" LengthHeaderName = "Content-Length" ) var fileURL = fmt.Sprintf("%s://%s:%d/%s/%s/file/", Protocol, host, port, Resource, id) resp, err := executor.Client.Head(fileURL) - if err != nil{ + if err != nil { return } defer resp.Body.Close() intValue, err := strconv.Atoi(resp.Header.Get(LengthHeaderName)) - if err != nil{ + if err != nil { err = fmt.Errorf("invalid length '%s'", resp.Header.Get(LengthHeaderName)) return }