From 22050bca71f7f4f8f769132cdc98e6801b185c13 Mon Sep 17 00:00:00 2001 From: Zexi Li Date: Sat, 1 Dec 2018 16:32:02 +0800 Subject: [PATCH] region: baremetal api compatible --- Gopkg.lock | 4 ++-- pkg/cloudcommon/db/standalone.go | 6 ++--- pkg/compute/models/hosts.go | 24 ++++++++++--------- pkg/compute/tasks/baremetal_delete_task.go | 5 +--- .../tasks/baremetal_maintenance_task.go | 5 +--- pkg/compute/tasks/baremetal_prepare_task.go | 5 +--- .../tasks/baremetal_server_reset_task.go | 4 +--- .../tasks/baremetal_server_start_task.go | 5 +--- .../tasks/baremetal_server_stop_task.go | 5 +--- .../baremetal_server_sync_status_task.go | 5 +--- .../tasks/baremetal_sync_status_task.go | 4 +--- .../tasks/baremetal_unmaintenance_task.go | 5 +--- vendor/yunion.io/x/sqlchemy/update.go | 5 +--- 13 files changed, 28 insertions(+), 54 deletions(-) diff --git a/Gopkg.lock b/Gopkg.lock index a1b81d3ba7..ef74322d9e 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -1368,11 +1368,11 @@ [[projects]] branch = "master" - digest = "1:66b13d3803b8ff8f26c3ca0422fb18ca0362dff62240e436b0aa0a921f833bb9" + digest = "1:5a3958d2f3c6c6510cc6b0e754cc45f6e98d8f8780ea04c1232a8f22fd6d91fc" name = "yunion.io/x/sqlchemy" packages = ["."] pruneopts = "UT" - revision = "7de55aae3ef9b019c47d21ff8fa4add1a9c80eb7" + revision = "30271a36b97155505642d6d3709a37600aade302" [[projects]] branch = "master" diff --git a/pkg/cloudcommon/db/standalone.go b/pkg/cloudcommon/db/standalone.go index cc73447c00..bcf99014c3 100644 --- a/pkg/cloudcommon/db/standalone.go +++ b/pkg/cloudcommon/db/standalone.go @@ -201,10 +201,10 @@ func (model *SStandaloneResourceBase) PerformMetadata(ctx context.Context, userC } dictStore := make(map[string]interface{}) for k, v := range dictMap { - dictStore[k] = v + dictStore[k], _ = v.GetString() } - model.SetAllMetadata(ctx, dictStore, userCred) - return nil, nil + err = model.SetAllMetadata(ctx, dictStore, userCred) + return nil, err } func (model *SStandaloneResourceBase) GetCustomizeColumns(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) *jsonutils.JSONDict { diff --git a/pkg/compute/models/hosts.go b/pkg/compute/models/hosts.go index 30c731bd3c..c46678fd82 100644 --- a/pkg/compute/models/hosts.go +++ b/pkg/compute/models/hosts.go @@ -2031,7 +2031,7 @@ func (manager *SHostManager) ValidateCreateData(ctx context.Context, userCred mc } accessMac, err := data.GetString("access_mac") if err == nil { - count := manager.TableSpec().Query().Equals("access_mac", accessMac).Count() + count := HostManager.Query().Equals("access_mac", accessMac).Count() if count > 0 { return nil, httperrors.NewDuplicateResourceError("Duplicate access_mac %s", accessMac) } @@ -2097,7 +2097,7 @@ func (self *SHost) ValidateUpdateData(ctx context.Context, userCred mcclient.Tok val := jsonutils.NewDict() val.Update(self.IpmiInfo) val.Update(ipmiInfo) - data.Set("impi_info", val) + data.Set("ipmi_info", val) } data, err = self.SEnabledStatusStandaloneResourceBase.ValidateUpdateData(ctx, userCred, query, data) if err != nil { @@ -2145,9 +2145,11 @@ func (self *SHost) FetchIpmiInfo(data *jsonutils.JSONDict) (*jsonutils.JSONDict, IPMI_KEY_PERFIX := "ipmi_" ipmiInfo := jsonutils.NewDict() kv, _ := data.GetMap() + var err error for key := range kv { - value, err := ipmiInfo.GetString(key) - if strings.HasPrefix(value, IPMI_KEY_PERFIX) { + if strings.HasPrefix(key, IPMI_KEY_PERFIX) { + value, _ := data.GetString(key) + log.Errorf("---------fetch ipmiinfo key: %s, val: %s", key, value) subkey := key[len(IPMI_KEY_PERFIX):] data.Remove(key) if subkey == "password" { @@ -2156,8 +2158,13 @@ func (self *SHost) FetchIpmiInfo(data *jsonutils.JSONDict) (*jsonutils.JSONDict, log.Errorf("encrypt password failed %s", err) return nil, err } + } else if subkey == "ip_addr" { + if !regutils.MatchIP4Addr(value) { + log.Errorf("%s: %s not match ip address", key, value) + continue + } } - ipmiInfo.Set(key, jsonutils.NewString(value)) + ipmiInfo.Set(subkey, jsonutils.NewString(value)) } } return ipmiInfo, nil @@ -2557,23 +2564,18 @@ func (self *SHost) addNetif(ctx context.Context, userCred mcclient.TokenCredenti netif.WireId = sw.Id } if rate != netif.Rate { - changed = true - netif.Rate = int(rate) + netif.Rate = rate } if nicType != netif.NicType { - changed = true netif.NicType = nicType } if index >= 0 && index != netif.Index { - changed = true netif.Index = int8(index) } if linkUp != netif.LinkUp { - changed = true netif.LinkUp = linkUp } if mtu != netif.Mtu { - changed = true netif.Mtu = int16(mtu) } return nil diff --git a/pkg/compute/tasks/baremetal_delete_task.go b/pkg/compute/tasks/baremetal_delete_task.go index 08dd848847..cdbb887fbd 100644 --- a/pkg/compute/tasks/baremetal_delete_task.go +++ b/pkg/compute/tasks/baremetal_delete_task.go @@ -3,7 +3,6 @@ package tasks import ( "context" "fmt" - "net/http" "yunion.io/x/jsonutils" "yunion.io/x/log" @@ -29,9 +28,7 @@ func (self *BaremetalDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneM return } url := fmt.Sprintf("/baremetals/%s/delete", baremetal.Id) - headers := http.Header{} - headers.Set("X-Auth-Token", self.UserCred.GetTokenString()) - headers.Set("X-Task-Id", self.GetTaskId()) + headers := self.GetTaskRequestHeader() self.SetStage("OnDeleteBaremetalComplete", nil) _, err := baremetal.BaremetalSyncRequest(ctx, "POST", url, headers, nil) if err != nil { diff --git a/pkg/compute/tasks/baremetal_maintenance_task.go b/pkg/compute/tasks/baremetal_maintenance_task.go index 4575d9c82f..23c50a49ea 100644 --- a/pkg/compute/tasks/baremetal_maintenance_task.go +++ b/pkg/compute/tasks/baremetal_maintenance_task.go @@ -3,7 +3,6 @@ package tasks import ( "context" "fmt" - "net/http" "yunion.io/x/jsonutils" "yunion.io/x/onecloud/pkg/cloudcommon/db" @@ -23,9 +22,7 @@ func init() { func (self *BaremetalMaintenanceTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { baremetal := obj.(*models.SHost) url := fmt.Sprintf("/baremetals/%s/maintenance", baremetal.Id) - headers := http.Header{} - headers.Set("X-Auth-Token", self.UserCred.GetTokenString()) - headers.Set("X-Task-Id", self.GetTaskId()) + headers := self.GetTaskRequestHeader() self.SetStage("OnEnterMaintenantModeSucc", nil) _, err := baremetal.BaremetalSyncRequest(ctx, "POST", url, headers, self.Params) if err != nil { diff --git a/pkg/compute/tasks/baremetal_prepare_task.go b/pkg/compute/tasks/baremetal_prepare_task.go index 83b9615021..79cd189345 100644 --- a/pkg/compute/tasks/baremetal_prepare_task.go +++ b/pkg/compute/tasks/baremetal_prepare_task.go @@ -3,7 +3,6 @@ package tasks import ( "context" "fmt" - "net/http" "yunion.io/x/jsonutils" "yunion.io/x/onecloud/pkg/cloudcommon/db" @@ -22,9 +21,7 @@ func init() { func (self *BaremetalPrepareTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { baremetal := obj.(*models.SHost) url := fmt.Sprintf("/baremetals/%s/prepare", baremetal.Id) - headers := http.Header{} - headers.Set("X-Auth-Token", self.UserCred.GetTokenString()) - headers.Set("X-Task-Id", self.GetTaskId()) + headers := self.GetTaskRequestHeader() self.SetStage("OnSyncConfigComplete", nil) _, err := baremetal.BaremetalSyncRequest(ctx, "POST", url, headers, self.Params) if err != nil { diff --git a/pkg/compute/tasks/baremetal_server_reset_task.go b/pkg/compute/tasks/baremetal_server_reset_task.go index 1f5f623163..af3f90945a 100644 --- a/pkg/compute/tasks/baremetal_server_reset_task.go +++ b/pkg/compute/tasks/baremetal_server_reset_task.go @@ -3,7 +3,6 @@ package tasks import ( "context" "fmt" - "net/http" "yunion.io/x/jsonutils" "yunion.io/x/log" @@ -23,8 +22,7 @@ func (self *BaremetalServerResetTask) OnInit(ctx context.Context, obj db.IStanda return } url := fmt.Sprintf("/baremetals/%s/servers/%s/reset", baremetal.Id, guest.Id) - headers := http.Header{} - headers.Set("X-Auth-Token", self.UserCred.GetTokenString()) + headers := self.GetTaskRequestHeader() _, err := baremetal.BaremetalSyncRequest(ctx, "POST", url, headers, nil) if err != nil { log.Errorf(err.Error()) diff --git a/pkg/compute/tasks/baremetal_server_start_task.go b/pkg/compute/tasks/baremetal_server_start_task.go index 90b43230c0..29c567b2f8 100644 --- a/pkg/compute/tasks/baremetal_server_start_task.go +++ b/pkg/compute/tasks/baremetal_server_start_task.go @@ -3,7 +3,6 @@ package tasks import ( "context" "fmt" - "net/http" "yunion.io/x/jsonutils" "yunion.io/x/log" @@ -33,9 +32,7 @@ func (self *BaremetalServerStartTask) OnInit(ctx context.Context, obj db.IStanda config := jsonutils.NewDict() config.Set("desc", desc) url := fmt.Sprintf("/baremetals/%s/servers/%s/start", baremetal.Id, guest.Id) - headers := http.Header{} - headers.Set("X-Auth-Token", self.UserCred.GetTokenString()) - headers.Set("X-Task-Id", self.GetTaskId()) + headers := self.GetTaskRequestHeader() self.SetStage("OnStartComplete", nil) _, err := baremetal.BaremetalSyncRequest(ctx, "POST", url, headers, config) if err != nil { diff --git a/pkg/compute/tasks/baremetal_server_stop_task.go b/pkg/compute/tasks/baremetal_server_stop_task.go index 40258c42fd..a963c147e1 100644 --- a/pkg/compute/tasks/baremetal_server_stop_task.go +++ b/pkg/compute/tasks/baremetal_server_stop_task.go @@ -3,7 +3,6 @@ package tasks import ( "context" "fmt" - "net/http" "yunion.io/x/jsonutils" "yunion.io/x/log" @@ -39,9 +38,7 @@ func (self *BaremetalServerStopTask) OnInit(ctx context.Context, obj db.IStandal } params.Set("timeout", jsonutils.NewInt(timeout)) url := fmt.Sprintf("/baremetals/%s/servers/%s/stop", baremetal.Id, guest.Id) - headers := http.Header{} - headers.Set("X-Auth-Token", self.UserCred.GetTokenString()) - headers.Set("X-Task-Id", self.GetTaskId()) + headers := self.GetTaskRequestHeader() self.SetStage("OnGuestStopTaskComplete", nil) _, err = baremetal.BaremetalSyncRequest(ctx, "POST", url, headers, params) if err != nil { diff --git a/pkg/compute/tasks/baremetal_server_sync_status_task.go b/pkg/compute/tasks/baremetal_server_sync_status_task.go index 8e07cb1ce2..db2aa58874 100644 --- a/pkg/compute/tasks/baremetal_server_sync_status_task.go +++ b/pkg/compute/tasks/baremetal_server_sync_status_task.go @@ -3,7 +3,6 @@ package tasks import ( "context" "fmt" - "net/http" "yunion.io/x/jsonutils" "yunion.io/x/log" @@ -31,9 +30,7 @@ func (self *BaremetalServerSyncStatusTask) OnInit(ctx context.Context, obj db.IS return } url := fmt.Sprintf("/baremetals/%s/servers/%s/status", baremetal.Id, guest.Id) - headers := http.Header{} - headers.Set("X-Auth-Token", self.GetUserCred().GetTokenString()) - headers.Set("X-Task-Id", self.GetId()) + headers := self.GetTaskRequestHeader() self.SetStage("OnGuestStatusTaskComplete", nil) _, err := baremetal.BaremetalSyncRequest(ctx, "POST", url, headers, nil) if err != nil { diff --git a/pkg/compute/tasks/baremetal_sync_status_task.go b/pkg/compute/tasks/baremetal_sync_status_task.go index 0fbaf408d1..56189a4b47 100644 --- a/pkg/compute/tasks/baremetal_sync_status_task.go +++ b/pkg/compute/tasks/baremetal_sync_status_task.go @@ -3,7 +3,6 @@ package tasks import ( "context" "fmt" - "net/http" "yunion.io/x/jsonutils" "yunion.io/x/onecloud/pkg/cloudcommon/db" @@ -26,8 +25,7 @@ func (self *BaremetalSyncStatusTask) OnInit(ctx context.Context, obj db.IStandal func (self *BaremetalSyncStatusTask) DoSyncStatus(ctx context.Context, baremetal *models.SHost) { url := fmt.Sprintf("/baremetals/%s/syncstatus", baremetal.Id) - headers := http.Header{} - headers.Set("X-Auth-Token", self.UserCred.GetTokenString()) + headers := self.GetTaskRequestHeader() _, err := baremetal.BaremetalSyncRequest(ctx, "POST", url, headers, nil) if err == nil { self.SetStageComplete(ctx, nil) diff --git a/pkg/compute/tasks/baremetal_unmaintenance_task.go b/pkg/compute/tasks/baremetal_unmaintenance_task.go index 992dd07c70..456e0b7335 100644 --- a/pkg/compute/tasks/baremetal_unmaintenance_task.go +++ b/pkg/compute/tasks/baremetal_unmaintenance_task.go @@ -3,7 +3,6 @@ package tasks import ( "context" "fmt" - "net/http" "yunion.io/x/jsonutils" "yunion.io/x/onecloud/pkg/cloudcommon/db" @@ -23,9 +22,7 @@ func init() { func (self *BaremetalUnmaintenanceTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { baremetal := obj.(*models.SHost) url := fmt.Sprintf("/baremetals/%s/unmaintenance", baremetal.Id) - headers := http.Header{} - headers.Set("X-Auth-Token", self.UserCred.GetTokenString()) - headers.Set("X-Task-Id", self.GetTaskId()) + headers := self.GetTaskRequestHeader() self.SetStage("OnUnmaintenantComplete", nil) action := self.Action() _, err := baremetal.BaremetalSyncRequest(ctx, "POST", url, headers, self.Params) diff --git a/vendor/yunion.io/x/sqlchemy/update.go b/vendor/yunion.io/x/sqlchemy/update.go index f88e1a6bde..43ac815135 100644 --- a/vendor/yunion.io/x/sqlchemy/update.go +++ b/vendor/yunion.io/x/sqlchemy/update.go @@ -83,10 +83,7 @@ func (us *SUpdateSession) saveUpdate(dt interface{}) (map[string]SUpdateDiff, er setters := make(map[string]SUpdateDiff) for _, c := range us.tableSpec.columns { k := c.Name() - of, ok := ofields[k] - if !ok { - continue - } + of := ofields[k] nf := fields[k] if c.IsPrimary() && !c.IsZero(of) { // skip update primary key primaries[k] = of