From c8f17ac392f3aa71822ff978a32345e9cfb11191 Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Mon, 15 Jul 2019 22:51:12 +0800 Subject: [PATCH] fix: server-change-ipaddr may ignore errors when changing ipaddr --- cmd/climc/shell/servernetworks.go | 7 +- cmd/climc/shell/servers.go | 25 ++++++ pkg/apis/compute/api.go | 2 + pkg/cloudcommon/cmdline/parser.go | 2 + pkg/compute/guestdrivers/virtualization.go | 19 ++++- pkg/compute/models/cloudsync.go | 2 +- pkg/compute/models/guest_actions.go | 47 ++++++++++ pkg/compute/models/guestnetworks.go | 8 +- pkg/compute/models/guests.go | 85 ++++++++++++++----- pkg/compute/models/hosts.go | 2 +- pkg/compute/models/loadbalancernetworks.go | 2 +- pkg/compute/models/loadbalancers.go | 2 +- pkg/compute/models/networks.go | 10 +-- .../models/networks_id_change_handlers.go | 12 +-- pkg/compute/models/wires.go | 4 +- pkg/compute/tasks/eip_allocate_task.go | 2 +- 16 files changed, 189 insertions(+), 42 deletions(-) diff --git a/cmd/climc/shell/servernetworks.go b/cmd/climc/shell/servernetworks.go index bb04b361a9..616b5134cc 100644 --- a/cmd/climc/shell/servernetworks.go +++ b/cmd/climc/shell/servernetworks.go @@ -21,6 +21,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/pkg/util/regutils" + "yunion.io/x/onecloud/pkg/cloudcommon/cmdline" "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/modules" "yunion.io/x/onecloud/pkg/mcclient/options" @@ -220,7 +221,11 @@ func init() { } else { return fmt.Errorf("Please specify Ip or Mac") } - params.Add(jsonutils.NewString(args.NETDESC), "net_desc") + conf, err := cmdline.ParseNetworkConfig(args.NETDESC, 0) + if err != nil { + return err + } + params.Add(conf.JSON(conf), "net_desc") srv, err := modules.Servers.PerformAction(s, args.SERVER, "change-ipaddr", params) if err != nil { return err diff --git a/cmd/climc/shell/servers.go b/cmd/climc/shell/servers.go index 1099c50eea..57d717af19 100644 --- a/cmd/climc/shell/servers.go +++ b/cmd/climc/shell/servers.go @@ -984,4 +984,29 @@ func init() { printObject(result) return nil }) + + R(&options.ServerIdOptions{}, "server-remote-nics", "Show remote nics of a server", func(s *mcclient.ClientSession, opts *options.ServerIdOptions) error { + result, err := modules.Servers.GetSpecific(s, opts.ID, "remote-nics", nil) + if err != nil { + return err + } + listResult := modules.ListResult{} + listResult.Data, _ = result.GetArray() + printList(&listResult, nil) + return nil + }) + + type ServerSyncFixNicsOptions struct { + ID string `help:"ID or name of VM" json:"-"` + IP []string `help:"IP address of each NIC" json:"ip"` + } + R(&ServerSyncFixNicsOptions{}, "server-sync-fix-nics", "Fix missing IP for each nics after syncing VNICS", func(s *mcclient.ClientSession, opts *ServerSyncFixNicsOptions) error { + params := jsonutils.Marshal(opts) + result, err := modules.Servers.PerformAction(s, opts.ID, "sync-fix-nics", params) + if err != nil { + return err + } + printObject(result) + return nil + }) } diff --git a/pkg/apis/compute/api.go b/pkg/apis/compute/api.go index 4b0dd4e8c8..fd3646d326 100644 --- a/pkg/apis/compute/api.go +++ b/pkg/apis/compute/api.go @@ -45,6 +45,8 @@ type NetworkConfig struct { Reserved bool `json:"reserved"` NetType string `json:"net_type"` + RequireDesignatedIP bool `json:"require_designated_ip"` + RequireTeaming bool `json:"require_teaming"` TryTeaming bool `json:"try_teaming"` diff --git a/pkg/cloudcommon/cmdline/parser.go b/pkg/cloudcommon/cmdline/parser.go index 62a6f6c39f..e43d1dec47 100644 --- a/pkg/cloudcommon/cmdline/parser.go +++ b/pkg/cloudcommon/cmdline/parser.go @@ -153,6 +153,8 @@ func ParseNetworkConfig(desc string, idx int) (*compute.NetworkConfig, error) { netConfig.Mac = netutils.MacUnpackHex(p) } else if strings.HasPrefix(p, "wire=") { netConfig.Wire = p[len("wire="):] + } else if p == "[require_designated_ip]" { + netConfig.RequireDesignatedIP = true } else if p == "[random_exit]" { netConfig.Exit = true } else if p == "[random]" { diff --git a/pkg/compute/guestdrivers/virtualization.go b/pkg/compute/guestdrivers/virtualization.go index f5bc43efa7..94c41ac36a 100644 --- a/pkg/compute/guestdrivers/virtualization.go +++ b/pkg/compute/guestdrivers/virtualization.go @@ -21,6 +21,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/log" + "yunion.io/x/pkg/util/netutils" api "yunion.io/x/onecloud/pkg/apis/compute" "yunion.io/x/onecloud/pkg/cloudcommon/db/quotas" @@ -112,6 +113,22 @@ func (self *SVirtualizedGuestDriver) Attach2RandomNetwork(guest *models.SGuest, if len(netsAvaiable) == 0 { return nil, fmt.Errorf("No appropriate host virtual network...") } + if len(netConfig.Address) > 0 { + addr, _ := netutils.NewIPV4Addr(netConfig.Address) + netsAvaiableForAddr := make([]models.SNetwork, 0) + for i := range netsAvaiable { + if netsAvaiable[i].IsAddressInRange(addr) { + netsAvaiableForAddr = append(netsAvaiableForAddr, netsAvaiable[i]) + } + } + if len(netsAvaiableForAddr) == 0 { + if netConfig.RequireDesignatedIP { + return nil, fmt.Errorf("No virtual network for IP %s", netConfig.Address) + } + } else { + netsAvaiable = netsAvaiableForAddr + } + } selNet := models.ChooseCandidateNetworks(netsAvaiable, netConfig.Exit, netTypes) if selNet == nil { return nil, fmt.Errorf("Not enough address in virtual network") @@ -130,7 +147,7 @@ func (self *SVirtualizedGuestDriver) Attach2RandomNetwork(guest *models.SGuest, } nicConfs = append(nicConfs, nicConf) } - gn, err := guest.Attach2Network(ctx, userCred, selNet, pendingUsage, netConfig.Address, netConfig.Driver, netConfig.BwLimit, netConfig.Vip, netConfig.Reserved, models.IPAllocationDefault, false, nicConfs) + gn, err := guest.Attach2Network(ctx, userCred, selNet, pendingUsage, netConfig.Address, netConfig.Driver, netConfig.BwLimit, netConfig.Vip, netConfig.Reserved, models.IPAllocationDefault, netConfig.RequireDesignatedIP, nicConfs) return gn, err } diff --git a/pkg/compute/models/cloudsync.go b/pkg/compute/models/cloudsync.go index b76ec988f5..bca9a4b030 100644 --- a/pkg/compute/models/cloudsync.go +++ b/pkg/compute/models/cloudsync.go @@ -583,7 +583,7 @@ func syncVMNics(ctx context.Context, userCred mcclient.TokenCredential, provider log.Errorf(msg) return } - result := localVM.SyncVMNics(ctx, userCred, host, nics) + result := localVM.SyncVMNics(ctx, userCred, host, nics, nil) msg := result.Result() notes := fmt.Sprintf("syncVMNics for VM %s result: %s", localVM.Name, msg) log.Infof(notes) diff --git a/pkg/compute/models/guest_actions.go b/pkg/compute/models/guest_actions.go index 8b6db54d2d..d68a981608 100644 --- a/pkg/compute/models/guest_actions.go +++ b/pkg/compute/models/guest_actions.go @@ -1580,6 +1580,9 @@ func (self *SGuest) findGuestnetworkByInfo(ipStr string, macStr string, index in } } +// Change IPaddress of a guestnetwork +// first detach the network, then attach a network with identity mac address but different IP configurations +// TODO change IP address of a teaming NIC may fail!! func (self *SGuest) PerformChangeIpaddr(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) { if self.Status != api.VM_READY && self.Status != api.VM_RUNNING { return nil, httperrors.NewInvalidStatusError("Cannot change network ip_addr in status %s", self.Status) @@ -1654,6 +1657,15 @@ func (self *SGuest) PerformChangeIpaddr(ctx context.Context, userCred mcclient.T conf.Ifname = gn.Ifname ngn, err := self.attach2NetworkDesc(ctx, userCred, host, conf, nil, nil) if err != nil { + // recover detached guestnetwork + conf2 := gn.ToNetworkConfig() + if reserve { + conf2.Reserved = true + } + _, err2 := self.attach2NetworkDesc(ctx, userCred, host, conf2, nil, nil) + if err2 != nil { + log.Errorf("recover detached network fail %s", err2) + } return nil, httperrors.NewBadRequestError(err.Error()) } @@ -3399,3 +3411,38 @@ func (self *SGuest) GenerateVirtInstallCommandLine( cmd += "-d" return cmd, nil } + +func (self *SGuest) AllowPerformSyncFixNics(ctx context.Context, + userCred mcclient.TokenCredential, + query jsonutils.JSONObject, + data jsonutils.JSONObject) bool { + return db.IsAdminAllowPerform(userCred, self, "sync-fix-nics") +} + +func (self *SGuest) PerformSyncFixNics(ctx context.Context, + userCred mcclient.TokenCredential, + query jsonutils.JSONObject, + data jsonutils.JSONObject) (jsonutils.JSONObject, error) { + iVM, err := self.GetIVM() + if err != nil { + return nil, httperrors.NewGeneralError(err) + } + vnics, err := iVM.GetINics() + if err != nil { + return nil, httperrors.NewGeneralError(err) + } + host := self.GetHost() + if host == nil { + return nil, httperrors.NewInternalServerError("host not found???") + } + iplistArray, err := data.Get("ip") + if err != nil { + return nil, httperrors.NewInputParameterError("missing field ip, list of ip") + } + iplist := iplistArray.(*jsonutils.JSONArray).GetStringArray() + result := self.SyncVMNics(ctx, userCred, host, vnics, iplist) + if result.IsError() { + return nil, httperrors.NewInternalServerError(result.Result()) + } + return nil, nil +} diff --git a/pkg/compute/models/guestnetworks.go b/pkg/compute/models/guestnetworks.go index 11b92e4fb0..894dfaab34 100644 --- a/pkg/compute/models/guestnetworks.go +++ b/pkg/compute/models/guestnetworks.go @@ -188,7 +188,7 @@ func (manager *SGuestnetworkManager) newGuestNetwork(ctx context.Context, userCr return nil, err } if len(address) > 0 && ipAddr != address && requiredDesignatedIp { - return nil, fmt.Errorf("candidate ip %s is occupoed!", address) + return nil, fmt.Errorf("candidate ip %s is occupied!", address) } gn.IpAddr = ipAddr } @@ -698,8 +698,14 @@ func (self *SGuestnetwork) ToNetworkConfig() *api.NetworkConfig { Index: int(self.Index), Network: net.Id, Wire: net.GetWire().Id, + Mac: self.MacAddr, Address: self.IpAddr, + Driver: self.Driver, + BwLimit: self.BwLimit, Project: net.ProjectId, + Domain: net.DomainId, + Ifname: self.Ifname, + NetType: net.ServerType, } return ret } diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index 8b1c9d8fd8..517f0b9399 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -25,10 +25,11 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/log" + "yunion.io/x/pkg/errors" "yunion.io/x/pkg/gotypes" "yunion.io/x/pkg/tristate" "yunion.io/x/pkg/util/compare" - "yunion.io/x/pkg/util/errors" + errors_aggr "yunion.io/x/pkg/util/errors" "yunion.io/x/pkg/util/netutils" "yunion.io/x/pkg/util/osprofile" "yunion.io/x/pkg/util/regutils" @@ -2231,7 +2232,7 @@ func (self *SGuest) Attach2Network(ctx context.Context, userCred mcclient.TokenC firstNic, err := self.attach2NetworkOnce(ctx, userCred, network, pendingUsage, address, driver, bwLimit, virtual, reserved, allocDir, requireDesignatedIP, nicConfs[0], "") if err != nil { - return nil, err + return nil, errors.Wrap(err, "self.attach2NetworkOnce") } retNics := []SGuestnetwork{*firstNic} if len(nicConfs) > 1 { @@ -2243,7 +2244,7 @@ func (self *SGuest) Attach2Network(ctx context.Context, userCred mcclient.TokenC gn, err := self.attach2NetworkOnce(ctx, userCred, network, pendingUsage, "", firstNic.Driver, 0, true, false, allocDir, false, nicConfs[i], firstNic.MacAddr) if err != nil { - return retNics, err + return retNics, errors.Wrap(err, "self.attach2NetworkOnce") } retNics = append(retNics, *gn) } @@ -2277,7 +2278,7 @@ func (self *SGuest) attach2NetworkOnce(ctx context.Context, userCred mcclient.To nicConf.Index, address, nicConf.Mac, driver, bwLimit, virtual, reserved, allocDir, requireDesignatedIP, nicConf.Ifname, teamWithMac) if err != nil { - return nil, err + return nil, errors.Wrap(err, "GuestnetworkManager.newGuestNetwork") } network.updateDnsRecord(guestnic, true) network.updateGuestNetmap(guestnic) @@ -2310,21 +2311,26 @@ type sRemoveGuestnic struct { } type sAddGuestnic struct { + index int nic cloudprovider.ICloudNic net *SNetwork reserve bool } -func getCloudNicNetwork(vnic cloudprovider.ICloudNic, host *SHost) (*SNetwork, error) { +func getCloudNicNetwork(vnic cloudprovider.ICloudNic, host *SHost, ipList []string, index int) (*SNetwork, error) { vnet := vnic.GetINetwork() if vnet == nil { ip := vnic.GetIP() if len(ip) == 0 { - return nil, fmt.Errorf("Cannot find inetwork for vnics %s %s", vnic.GetMAC(), vnic.GetIP()) - } else { - // find network by IP - return host.getNetworkOfIPOnHost(ip) + if index < len(ipList) { + ip = ipList[index] + } + if len(ip) == 0 { + return nil, fmt.Errorf("Cannot find inetwork for vnics %s: no ip", vnic.GetMAC()) + } } + // find network by IP + return host.getNetworkOfIPOnHost(ip) } localNetObj, err := db.FetchByExternalId(NetworkManager, vnet.GetGlobalId()) if err != nil { @@ -2334,7 +2340,7 @@ func getCloudNicNetwork(vnic cloudprovider.ICloudNic, host *SHost) (*SNetwork, e return localNet, nil } -func (self *SGuest) SyncVMNics(ctx context.Context, userCred mcclient.TokenCredential, host *SHost, vnics []cloudprovider.ICloudNic) compare.SyncResult { +func (self *SGuest) SyncVMNics(ctx context.Context, userCred mcclient.TokenCredential, host *SHost, vnics []cloudprovider.ICloudNic, ipList []string) compare.SyncResult { result := compare.SyncResult{} guestnics, err := self.GetNetworks("") @@ -2348,7 +2354,7 @@ func (self *SGuest) SyncVMNics(ctx context.Context, userCred mcclient.TokenCrede for i := 0; i < len(guestnics) || i < len(vnics); i += 1 { if i < len(guestnics) && i < len(vnics) { - localNet, err := getCloudNicNetwork(vnics[i], host) + localNet, err := getCloudNicNetwork(vnics[i], host, ipList, i) if err != nil { log.Errorf("%s", err) result.Error(err) @@ -2361,7 +2367,7 @@ func (self *SGuest) SyncVMNics(ctx context.Context, userCred mcclient.TokenCrede } else if len(vnics[i].GetIP()) > 0 { // ip changed removed = append(removed, sRemoveGuestnic{nic: &guestnics[i]}) - adds = append(adds, sAddGuestnic{nic: vnics[i], net: localNet}) + adds = append(adds, sAddGuestnic{index: i, nic: vnics[i], net: localNet}) } else { // do nothing // vm maybe turned off, ignore the case @@ -2373,20 +2379,20 @@ func (self *SGuest) SyncVMNics(ctx context.Context, userCred mcclient.TokenCrede reserve = true } removed = append(removed, sRemoveGuestnic{nic: &guestnics[i], reserve: reserve}) - adds = append(adds, sAddGuestnic{nic: vnics[i], net: localNet, reserve: reserve}) + adds = append(adds, sAddGuestnic{index: i, nic: vnics[i], net: localNet, reserve: reserve}) } } else { removed = append(removed, sRemoveGuestnic{nic: &guestnics[i]}) - adds = append(adds, sAddGuestnic{nic: vnics[i], net: localNet}) + adds = append(adds, sAddGuestnic{index: i, nic: vnics[i], net: localNet}) } } else if i < len(guestnics) { removed = append(removed, sRemoveGuestnic{nic: &guestnics[i]}) } else if i < len(vnics) { - localNet, err := getCloudNicNetwork(vnics[i], host) + localNet, err := getCloudNicNetwork(vnics[i], host, ipList, i) if err != nil { log.Errorf("%s", err) // ignore this case } else { - adds = append(adds, sAddGuestnic{nic: vnics[i], net: localNet}) + adds = append(adds, sAddGuestnic{index: i, nic: vnics[i], net: localNet}) } } } @@ -2401,14 +2407,18 @@ func (self *SGuest) SyncVMNics(ctx context.Context, userCred mcclient.TokenCrede } for _, add := range adds { - if len(add.nic.GetIP()) == 0 { + if len(add.nic.GetIP()) == 0 && len(ipList) <= add.index { continue // cannot determine which network it attached to } if add.net == nil { continue // cannot determine which network it attached to } + ipStr := add.nic.GetIP() + if len(ipStr) == 0 { + ipStr = ipList[add.index] + } // check if the IP has been occupied, if yes, release the IP - gn, err := GuestnetworkManager.getGuestNicByIP(add.nic.GetIP(), add.net.Id) + gn, err := GuestnetworkManager.getGuestNicByIP(ipStr, add.net.Id) if err != nil { result.AddError(err) continue @@ -2425,7 +2435,7 @@ func (self *SGuest) SyncVMNics(ctx context.Context, userCred mcclient.TokenCrede Index: -1, Ifname: "", } - _, err = self.Attach2Network(ctx, userCred, add.net, nil, add.nic.GetIP(), + _, err = self.Attach2Network(ctx, userCred, add.net, nil, ipStr, add.nic.GetDriver(), 0, false, add.reserve, IPAllocationDefault, true, []SNicConfig{nicConf}) if err != nil { result.AddError(err) @@ -2775,7 +2785,7 @@ func (self *SGuest) attach2NetworkDesc( } errs = append(errs, err) } - return nil, errors.NewAggregate(errs) + return nil, errors_aggr.NewAggregate(errs) } else { netConfig.Network = "" return self.attach2RandomNetwork(ctx, userCred, host, netConfig, pendingUsage) @@ -2789,7 +2799,7 @@ func (self *SGuest) attach2NamedNetworkDesc(ctx context.Context, userCred mcclie if len(nicConfs) == 0 { return nil, fmt.Errorf("no avaialble network interface?") } - gn, err := self.Attach2Network(ctx, userCred, net, pendingUsage, netConfig.Address, netConfig.Driver, netConfig.BwLimit, netConfig.Vip, netConfig.Reserved, allocDir, false, nicConfs) + gn, err := self.Attach2Network(ctx, userCred, net, pendingUsage, netConfig.Address, netConfig.Driver, netConfig.BwLimit, netConfig.Vip, netConfig.Reserved, allocDir, netConfig.RequireDesignatedIP, nicConfs) if err != nil { log.Errorf("Attach2Network fail %s", err) return nil, err @@ -4518,3 +4528,36 @@ func (self *SGuest) ToIsolatedDevicesConfig() []*api.IsolatedDeviceConfig { func (self *SGuest) IsImport(userCred mcclient.TokenCredential) bool { return self.GetMetadata("__is_import", userCred) == "true" } + +func (guest *SGuest) AllowGetDetailsRemoteNics(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) bool { + return db.IsAdminAllowGetSpec(userCred, guest, "remote-nics") +} + +func (guest *SGuest) GetDetailsRemoteNics(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (jsonutils.JSONObject, error) { + iVM, err := guest.GetIVM() + if err != nil { + return nil, httperrors.NewGeneralError(err) + } + iNics, err := iVM.GetINics() + if err != nil { + return nil, httperrors.NewGeneralError(err) + } + type SVNic struct { + Index int + Ip string + Mac string + Driver string + } + nics := make([]SVNic, len(iNics)) + for i := range iNics { + nics[i] = SVNic{ + Index: i, + Ip: iNics[i].GetIP(), + Mac: iNics[i].GetMAC(), + Driver: iNics[i].GetDriver(), + } + } + // ret := jsonutils.NewDict() + // ret.Set("vnics", jsonutils.Marshal(nics)) + return jsonutils.Marshal(nics), nil +} diff --git a/pkg/compute/models/hosts.go b/pkg/compute/models/hosts.go index 4c01b355ae..1db4a1ca48 100644 --- a/pkg/compute/models/hosts.go +++ b/pkg/compute/models/hosts.go @@ -3147,7 +3147,7 @@ func (self *SHost) addNetif(ctx context.Context, userCred mcclient.TokenCredenti return httperrors.NewInputParameterError("no networks on wire %s", wire) } for i := range swNets { - if swNets[i].isAddressInRange(iIpAddr) { + if swNets[i].IsAddressInRange(iIpAddr) { findAddr = true break } diff --git a/pkg/compute/models/loadbalancernetworks.go b/pkg/compute/models/loadbalancernetworks.go index 20502ffbbf..f3abf4ceeb 100644 --- a/pkg/compute/models/loadbalancernetworks.go +++ b/pkg/compute/models/loadbalancernetworks.go @@ -160,7 +160,7 @@ func (m *SLoadbalancernetworkManager) syncLoadbalancerNetwork(ctx context.Contex if err != nil { return err } - if !network.isAddressInRange(ip) { + if !network.IsAddressInRange(ip) { return fmt.Errorf("address %s is not in the range of network %s(%s)", req.Address, network.Id, network.Name) } q := m.Query().Equals("loadbalancer_id", req.Loadbalancer.Id).Equals("network_id", req.NetworkId) diff --git a/pkg/compute/models/loadbalancers.go b/pkg/compute/models/loadbalancers.go index 504cdc84fa..3b8a5399df 100644 --- a/pkg/compute/models/loadbalancers.go +++ b/pkg/compute/models/loadbalancers.go @@ -165,7 +165,7 @@ func (man *SLoadbalancerManager) ValidateCreateData(ctx context.Context, userCre if err != nil { return nil, err } - if !network.isAddressInRange(ip) { + if !network.IsAddressInRange(ip) { return nil, httperrors.NewInputParameterError("address %s is not in the range of network %s(%s)", ipS, network.Name, network.Id) } diff --git a/pkg/compute/models/networks.go b/pkg/compute/models/networks.go index 8cc12eae62..778fa2a12d 100644 --- a/pkg/compute/models/networks.go +++ b/pkg/compute/models/networks.go @@ -624,7 +624,7 @@ func (manager *SNetworkManager) newFromCloudNetwork(ctx context.Context, userCre return &net, nil } -func (self *SNetwork) isAddressInRange(address netutils.IPV4Addr) bool { +func (self *SNetwork) IsAddressInRange(address netutils.IPV4Addr) bool { return self.getIPRange().Contains(address) } @@ -675,7 +675,7 @@ func (manager *SNetworkManager) GetOnPremiseNetworkOfIP(ipAddr string, serverTyp return nil, err } for _, n := range nets { - if n.isAddressInRange(address) { + if n.IsAddressInRange(address) { return &n, nil } } @@ -797,7 +797,7 @@ func isValidNetworkInfo(userCred mcclient.TokenCredential, netConfig *api.Networ if err != nil { return err } - if !net.isAddressInRange(ipAddr) { + if !net.IsAddressInRange(ipAddr) { return httperrors.NewInputParameterError("Address %s not in range", netConfig.Address) } if netConfig.Reserved { @@ -966,7 +966,7 @@ func (self *SNetwork) PerformReserveIp(ctx context.Context, userCred mcclient.To if err != nil { return nil, httperrors.NewInputParameterError("not a valid ip address %s: %s", ipstr, err) } - if !self.isAddressInRange(ipAddr) { + if !self.IsAddressInRange(ipAddr) { return nil, httperrors.NewInputParameterError("Address %s not in network", ipstr) } used, err := self.isAddressUsed(ipstr) @@ -1768,7 +1768,7 @@ func (self *SNetwork) PerformSplit(ctx context.Context, userCred mcclient.TokenC if err != nil { return nil, err } - if !self.isAddressInRange(iSplitIp) { + if !self.IsAddressInRange(iSplitIp) { return nil, httperrors.NewInputParameterError("Split IP %s out of range", splitIp) } diff --git a/pkg/compute/models/networks_id_change_handlers.go b/pkg/compute/models/networks_id_change_handlers.go index 4ecaa0836b..762ad7b3d2 100644 --- a/pkg/compute/models/networks_id_change_handlers.go +++ b/pkg/compute/models/networks_id_change_handlers.go @@ -45,7 +45,7 @@ func (manager *SGuestnetworkManager) handleNetworkIdChange(ctx context.Context, } for _, gn := range gns { addr, _ := netutils.NewIPV4Addr(gn.IpAddr) - if args.newNet.isAddressInRange(addr) { + if args.newNet.IsAddressInRange(addr) { _, err = db.Update(&gn, func() error { gn.NetworkId = args.newNet.Id return nil @@ -67,7 +67,7 @@ func (manager *SHostnetworkManager) handleNetworkIdChange(ctx context.Context, a } for _, hn := range hns { addr, _ := netutils.NewIPV4Addr(hn.IpAddr) - if args.newNet.isAddressInRange(addr) { + if args.newNet.IsAddressInRange(addr) { _, err = db.Update(&hn, func() error { hn.NetworkId = args.newNet.Id return nil @@ -89,7 +89,7 @@ func (manager *SReservedipManager) handleNetworkIdChange(ctx context.Context, ar } for _, ri := range ris { addr, _ := netutils.NewIPV4Addr(ri.IpAddr) - if args.newNet.isAddressInRange(addr) { + if args.newNet.IsAddressInRange(addr) { _, err = db.Update(&ri, func() error { ri.NetworkId = args.newNet.Id return nil @@ -111,7 +111,7 @@ func (manager *SGroupnetworkManager) handleNetworkIdChange(ctx context.Context, } for _, gn := range gns { addr, _ := netutils.NewIPV4Addr(gn.IpAddr) - if args.newNet.isAddressInRange(addr) { + if args.newNet.IsAddressInRange(addr) { _, err = db.Update(&gn, func() error { gn.NetworkId = args.newNet.Id return nil @@ -133,7 +133,7 @@ func (manager *SLoadbalancernetworkManager) handleNetworkIdChange(ctx context.Co } for _, lbn := range lbns { addr, _ := netutils.NewIPV4Addr(lbn.IpAddr) - if args.newNet.isAddressInRange(addr) { + if args.newNet.IsAddressInRange(addr) { _, err = db.Update(&lbn, func() error { lbn.NetworkId = args.newNet.Id return nil @@ -155,7 +155,7 @@ func (manager *SLoadbalancerManager) handleNetworkIdChange(ctx context.Context, } for _, lb := range lbs { addr, _ := netutils.NewIPV4Addr(lb.Address) - if args.newNet.isAddressInRange(addr) { + if args.newNet.IsAddressInRange(addr) { _, err = db.Update(&lb, func() error { lb.NetworkId = args.newNet.Id return nil diff --git a/pkg/compute/models/wires.go b/pkg/compute/models/wires.go index bba6530619..8d0d354a69 100644 --- a/pkg/compute/models/wires.go +++ b/pkg/compute/models/wires.go @@ -536,7 +536,7 @@ func (self *SWire) GetCandidateNetworkForIp(userCred mcclient.TokenCredential, i return nil, err } for _, net := range netPrivates { - if net.isAddressInRange(ip) { + if net.IsAddressInRange(ip) { return &net, nil } } @@ -545,7 +545,7 @@ func (self *SWire) GetCandidateNetworkForIp(userCred mcclient.TokenCredential, i return nil, err } for _, net := range netPublics { - if net.isAddressInRange(ip) { + if net.IsAddressInRange(ip) { return &net, nil } } diff --git a/pkg/compute/tasks/eip_allocate_task.go b/pkg/compute/tasks/eip_allocate_task.go index 51658b872b..ae1d798e13 100644 --- a/pkg/compute/tasks/eip_allocate_task.go +++ b/pkg/compute/tasks/eip_allocate_task.go @@ -112,7 +112,7 @@ func (self *EipAllocateTask) OnInit(ctx context.Context, obj db.IStandaloneModel return } if ipAddr != ip { - msg := fmt.Sprintf("candidate ip %s is occupoed!", ip) + msg := fmt.Sprintf("candidate ip %s is occupied!", ip) self.onFailed(ctx, eip, msg) return }