From dad762db6143a7475176d36bf4592cd21094d94a Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Mon, 3 Sep 2018 21:06:54 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=A2=9E=E5=8A=A0network-set-static-routes?= =?UTF-8?q?=E7=AD=89=E5=91=BD=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/climc/shell/hosts.go | 34 ++++++++++++ cmd/climc/shell/networks.go | 107 ++++++++++++++++++++++++++++++++++++ 2 files changed, 141 insertions(+) diff --git a/cmd/climc/shell/hosts.go b/cmd/climc/shell/hosts.go index c7a44ccf07..5644f29465 100644 --- a/cmd/climc/shell/hosts.go +++ b/cmd/climc/shell/hosts.go @@ -474,4 +474,38 @@ func init() { return nil }) + type HostCreateOptions struct { + ZONE string `help:"Zone where the host is located"` + NAME string `help:"Name of baremetal"` + MAC string `help:"Default MAC address of baremetal"` + Rack string `help:"Rack number of baremetal"` + Slots string `help:"Slots number of baremetal"` + IpmiPasswd string `help:"IPMI user password"` + IpmiAddr string `help:"IPMI IP address"` + } + R(&HostCreateOptions{}, "host-create", "Create a baremetal host", func(s *mcclient.ClientSession, args *HostCreateOptions) error { + params := jsonutils.NewDict() + params.Add(jsonutils.NewString(args.NAME), "name") + params.Add(jsonutils.NewString(args.MAC), "access_mac") + params.Add(jsonutils.NewString("baremetal"), "host_type") + if len(args.Rack) > 0 { + params.Add(jsonutils.NewString(args.Rack), "rack") + } + if len(args.Slots) > 0 { + params.Add(jsonutils.NewString(args.Slots), "slots") + } + if len(args.IpmiPasswd) > 0 { + params.Add(jsonutils.NewString(args.IpmiPasswd), "ipmi_password") + } + if len(args.IpmiAddr) > 0 { + params.Add(jsonutils.NewString(args.IpmiAddr), "ipmi_ip_addr") + } + result, err := modules.Hosts.CreateInContext(s, params, &modules.Zones, args.ZONE) + if err != nil { + return err + } + printObject(result) + return nil + }) + } diff --git a/cmd/climc/shell/networks.go b/cmd/climc/shell/networks.go index 0e093b50a3..4fb19e8143 100644 --- a/cmd/climc/shell/networks.go +++ b/cmd/climc/shell/networks.go @@ -142,6 +142,15 @@ func init() { return nil }) + R(&NetworkShowOptions{}, "network-metadata", "Show metadata of a network", func(s *mcclient.ClientSession, args *NetworkShowOptions) error { + result, err := modules.Networks.GetMetadata(s, args.ID, nil) + if err != nil { + return err + } + printObject(result) + return nil + }) + R(&NetworkShowOptions{}, "network-private", "Make a network private", func(s *mcclient.ClientSession, args *NetworkShowOptions) error { result, err := modules.Networks.PerformAction(s, args.ID, "private", nil) if err != nil { @@ -288,4 +297,102 @@ func init() { return nil }) + type NetworkStaticRoutesOptions struct { + NETWORK string `help:"ID or name of the network"` + Net []string `help:"destination network of static route"` + Gw []string `help:"gateway address for the static route"` + } + R(&NetworkStaticRoutesOptions{}, "network-set-static-routes", "Set static routes for a network", func(s *mcclient.ClientSession, args *NetworkStaticRoutesOptions) error { + params := jsonutils.NewDict() + if len(args.Net) > 0 && len(args.Gw) > 0 { + if len(args.Net) != len(args.Gw) { + return fmt.Errorf("Inconsistent network and gateway pairs") + } + routes := jsonutils.NewDict() + for i := 0; i < len(args.Net); i += 1 { + routes.Add(jsonutils.NewString(args.Gw[i]), args.Net[i]) + } + params.Add(routes, "static_routes") + } else { + params.Add(jsonutils.JSONNull, "static_routes") + } + result, err := modules.Networks.PerformAction(s, args.NETWORK, "metadata", params) + if err != nil { + return err + } + printObject(result) + return nil + }) + + type NetworkAddDnsUpdateTargetOptions struct { + ID string `help:"Network ID or name"` + DNS string `help:"DNS server address" metavar:"DNS_SERVER"` + KEY string `help:"DNS update key name" metavar:"DNS_UPDATE_KEY"` + SECRET string `help:"DNS update key secret" metavar:"DNS_UPDATE_SECRET"` + } + R(&NetworkAddDnsUpdateTargetOptions{}, "network-add-dns-update-target", "Add a dns update target to a network", func(s *mcclient.ClientSession, args *NetworkAddDnsUpdateTargetOptions) error { + params := jsonutils.NewDict() + params.Add(jsonutils.NewString(args.DNS), "server") + params.Add(jsonutils.NewString(args.KEY), "key") + params.Add(jsonutils.NewString(args.SECRET), "secret") + result, err := modules.Networks.PerformAction(s, args.ID, "add-dns-update-target", params) + if err != nil { + return err + } + printObject(result) + return nil + }) + + type NetworkRemoveDnsUpdateTargetOptions struct { + ID string `help:"Network ID or name"` + DNS string `help:"DNS server address" metavar:"DNS_SERVER"` + KEY string `help:"DNS update key name" metavar:"DNS_UPDATE_KEY"` + } + R(&NetworkRemoveDnsUpdateTargetOptions{}, "network-remove-dns-update-target", "Remove a dns update target from a network", func(s *mcclient.ClientSession, args *NetworkRemoveDnsUpdateTargetOptions) error { + params := jsonutils.NewDict() + params.Add(jsonutils.NewString(args.DNS), "server") + params.Add(jsonutils.NewString(args.KEY), "key") + result, err := modules.Networks.PerformAction(s, args.ID, "remove-dns-update-target", params) + if err != nil { + return err + } + printObject(result) + return nil + }) + + type NetworkSetDnsUpdateKeyOptions struct { + ID string `help:"ID of virtual network to update"` + KEY string `help:"Key name of secret" metavar:"KEYNAME"` + SECRET string `help:"Key secret"` + SERVER string `help:"Alternate DNS update server"` + } + R(&NetworkSetDnsUpdateKeyOptions{}, "network-set-dns-update-key", "Set DNS update key info for a virtual network", func(s *mcclient.ClientSession, args *NetworkSetDnsUpdateKeyOptions) error { + params := jsonutils.NewDict() + params.Add(jsonutils.NewString(args.KEY), "dns_update_key_name") + params.Add(jsonutils.NewString(args.SECRET), "dns_update_key_secret") + params.Add(jsonutils.NewString(args.SERVER), "dns_update_server") + result, err := modules.Networks.PerformAction(s, args.ID, "metadata", params) + if err != nil { + return err + } + printObject(result) + return nil + }) + + type NetworkRemoveDnsUpdateKeyOptions struct { + ID string `help:"ID of virtual network"` + } + R(&NetworkRemoveDnsUpdateKeyOptions{}, "network-remove-dns-update-key", "Set DNS update key info for a virtual network", func(s *mcclient.ClientSession, args *NetworkRemoveDnsUpdateKeyOptions) error { + params := jsonutils.NewDict() + params.Add(jsonutils.JSONNull, "dns_update_key_name") + params.Add(jsonutils.JSONNull, "dns_update_key_secret") + params.Add(jsonutils.JSONNull, "dns_update_server") + result, err := modules.Networks.PerformAction(s, args.ID, "metadata", params) + if err != nil { + return err + } + printObject(result) + return nil + }) + } From 77d4b477bf739700b95934bc85624bb2ece83c4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Mon, 3 Sep 2018 17:51:13 +0800 Subject: [PATCH 2/2] =?UTF-8?q?storage-list=E6=98=BE=E7=A4=BA=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/compute/models/storages.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/pkg/compute/models/storages.go b/pkg/compute/models/storages.go index 3797e8a33e..313797ab1d 100644 --- a/pkg/compute/models/storages.go +++ b/pkg/compute/models/storages.go @@ -101,6 +101,30 @@ func (manager *SStorageManager) AllowListItems(ctx context.Context, userCred mcc return true } +func (self *SStorage) getMoreDetails(extra *jsonutils.JSONDict) *jsonutils.JSONDict { + used := self.GetUsedCapacity(tristate.True) + waste := self.GetUsedCapacity(tristate.False) + vcapa := float32(self.GetCapacity()) * self.GetOvercommitBound() + extra.Add(jsonutils.NewInt(int64(used)), "used_capacity") + extra.Add(jsonutils.NewInt(int64(waste)), "waste_capacity") + extra.Add(jsonutils.NewFloat(float64(vcapa)), "virtual_capacity") + extra.Add(jsonutils.NewFloat(float64(vcapa-float32(used)-float32(waste))), "free_capacity") + if self.GetCapacity() > 0 { + value := float64(used * 1.0 / self.GetCapacity()) + value = float64(int(value*100+0.5) / 100.0) + extra.Add(jsonutils.NewFloat(value), "commit_rate") + } else { + extra.Add(jsonutils.NewFloat(0.0), "commit_rate") + } + extra.Add(jsonutils.NewFloat(float64(self.GetOvercommitBound())), "commit_bound") + return extra +} + +func (self *SStorage) GetCustomizeColumns(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) *jsonutils.JSONDict { + extra := self.SEnabledStatusStandaloneResourceBase.GetCustomizeColumns(ctx, userCred, query) + return self.getMoreDetails(extra) +} + func (self *SStorage) GetUsedCapacity(isReady tristate.TriState) int { disks := DiskManager.Query().SubQuery() q := disks.Query(sqlchemy.SUM("sum", disks.Field("disk_size"))).Equals("storage_id", self.Id)