From b1c84895e519d5f802daa570f575388ef8e1f31a Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Wed, 8 Apr 2020 16:19:19 +0800 Subject: [PATCH 1/8] lbagents: deploy: deploy public type auth_url --- pkg/compute/models/loadbalanceragents_deploy.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/pkg/compute/models/loadbalanceragents_deploy.go b/pkg/compute/models/loadbalanceragents_deploy.go index 1005255d96..05a6c1667c 100644 --- a/pkg/compute/models/loadbalanceragents_deploy.go +++ b/pkg/compute/models/loadbalanceragents_deploy.go @@ -29,6 +29,7 @@ import ( ansible_apis "yunion.io/x/onecloud/pkg/apis/ansible" compute_apis "yunion.io/x/onecloud/pkg/apis/compute" + identity_apis "yunion.io/x/onecloud/pkg/apis/identity" "yunion.io/x/onecloud/pkg/cloudcommon/db" "yunion.io/x/onecloud/pkg/compute/options" "yunion.io/x/onecloud/pkg/httperrors" @@ -294,6 +295,7 @@ func (lbagent *SLoadbalancerAgent) PerformDeploy(ctx context.Context, userCred m return nil, httperrors.NewBadRequestError("empty host %s field", k) } } + authURL := options.Options.AuthURL { cli := mcclient.NewClient(options.Options.AuthURL, 10, false, true, "", "") token, err := cli.Authenticate(host.Vars["user"], host.Vars["pass"], "", host.Vars["proj"], "") @@ -303,12 +305,23 @@ func (lbagent *SLoadbalancerAgent) PerformDeploy(ctx context.Context, userCred m if !token.HasSystemAdminPrivilege() { return nil, httperrors.NewBadRequestError("user must have system admin privileges") } + authURL, err = token.GetServiceURL( + identity_apis.SERVICE_TYPE, + options.Options.Region, + "", + identity_apis.EndpointInterfacePublic) + if err != nil { + return nil, httperrors.NewClientError("get %s service %s url: %v", + identity_apis.SERVICE_TYPE, + identity_apis.EndpointInterfacePublic, + err) + } } if err := lbagent.validateHost(ctx, userCred, &host); err != nil { return nil, err } host.SetVar("region", options.Options.Region) - host.SetVar("auth_uri", options.Options.AuthURL) + host.SetVar("auth_uri", authURL) host.SetVar("id", lbagent.Id) host.SetVar("ansible_become", "yes") From fdfe3bb374f1cc8bad2d8f7567c81303fe26c1da Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Wed, 8 Apr 2020 17:00:28 +0800 Subject: [PATCH 2/8] db_dispatcher: default action log for create & update --- pkg/cloudcommon/db/db_dispatcher.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pkg/cloudcommon/db/db_dispatcher.go b/pkg/cloudcommon/db/db_dispatcher.go index c0fecf70f1..9d50b19e01 100644 --- a/pkg/cloudcommon/db/db_dispatcher.go +++ b/pkg/cloudcommon/db/db_dispatcher.go @@ -40,6 +40,7 @@ import ( "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/auth" "yunion.io/x/onecloud/pkg/mcclient/modulebase" + "yunion.io/x/onecloud/pkg/util/logclient" "yunion.io/x/onecloud/pkg/util/rbacutils" "yunion.io/x/onecloud/pkg/util/stringutils2" ) @@ -1168,7 +1169,11 @@ func (dispatcher *DBModelDispatcher) Create(ctx context.Context, query jsonutils model.PostCreate(ctx, userCred, ownerId, query, data) }() - OpsLog.LogEvent(model, ACT_CREATE, model.GetShortDesc(ctx), userCred) + { + notes := model.GetShortDesc(ctx) + OpsLog.LogEvent(model, ACT_CREATE, notes, userCred) + logclient.AddActionLogWithContext(ctx, model, logclient.ACT_CREATE, notes, userCred, true) + } dispatcher.modelManager.OnCreateComplete(ctx, []IModel{model}, userCred, ownerId, query, data) return getItemDetails(dispatcher.modelManager, model, ctx, userCred, query) } @@ -1549,6 +1554,7 @@ func updateItem(manager IModelManager, item IModel, ctx context.Context, userCre return nil, httperrors.NewGeneralError(err) } OpsLog.LogEvent(item, ACT_UPDATE, diff, userCred) + logclient.AddActionLogWithContext(ctx, item, logclient.ACT_UPDATE, diff, userCred, true) item.PostUpdate(ctx, userCred, query, data) From 1914e2b054b04de672e2a605534d7daf161953b8 Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Wed, 8 Apr 2020 17:05:10 +0800 Subject: [PATCH 3/8] climc: proxysetting-update: fix update option --- pkg/mcclient/options/proxysettings.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/mcclient/options/proxysettings.go b/pkg/mcclient/options/proxysettings.go index f8838014ff..a7cac24562 100644 --- a/pkg/mcclient/options/proxysettings.go +++ b/pkg/mcclient/options/proxysettings.go @@ -30,7 +30,9 @@ type ProxySettingUpdateOptions struct { ID string `json:"-"` Name string - BackendGroup string + HTTPProxy string + HTTPSProxy string + NoProxy string } type ProxySettingDeleteOptions struct { From 860030929de140de49f77894db658a8d25f459cd Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Wed, 8 Apr 2020 17:08:27 +0800 Subject: [PATCH 4/8] apis: proxy: fix sanitizing empty proxy string --- pkg/apis/cloudcommon/proxy/setting.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/apis/cloudcommon/proxy/setting.go b/pkg/apis/cloudcommon/proxy/setting.go index 14935acfb2..352aa0d8ae 100644 --- a/pkg/apis/cloudcommon/proxy/setting.go +++ b/pkg/apis/cloudcommon/proxy/setting.go @@ -19,14 +19,14 @@ func (v *ProxySetting) Sanitize() error { v.HttpProxy = strings.TrimSpace(v.HttpProxy) if u, err := parseProxy(v.HttpProxy); err != nil { return errors.Wrap(err, "invalid https_proxy url") - } else { + } else if u != nil { v.HttpProxy = u.String() } v.HttpsProxy = strings.TrimSpace(v.HttpsProxy) if u, err := parseProxy(v.HttpsProxy); err != nil { return errors.Wrap(err, "invalid http_proxy url") - } else { + } else if u != nil { v.HttpsProxy = u.String() } From 7f9bb72ce3def9951e3a6df34e28976035eab33f Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Wed, 8 Apr 2020 17:58:20 +0800 Subject: [PATCH 5/8] proxysetting: add test api --- pkg/cloudcommon/db/proxy/proxysetting.go | 66 ++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/pkg/cloudcommon/db/proxy/proxysetting.go b/pkg/cloudcommon/db/proxy/proxysetting.go index 6320127b32..d2e246ac38 100644 --- a/pkg/cloudcommon/db/proxy/proxysetting.go +++ b/pkg/cloudcommon/db/proxy/proxysetting.go @@ -3,8 +3,11 @@ package proxy import ( "context" "database/sql" + "fmt" + "net" "net/http" "net/url" + "time" "golang.org/x/net/http/httpproxy" @@ -99,6 +102,69 @@ func (ps *SProxySetting) ValidateDeleteCondition(ctx context.Context) error { return nil } +func (ps *SProxySetting) AllowPerformTest(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) bool { + return db.IsAdminAllowPerform(userCred, ps, "test") +} + +func (ps *SProxySetting) PerformTest(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) { + type TestURLResult struct { + Ok bool `json:"ok"` + Reason string `json:"reason"` + } + var ( + r = map[string]TestURLResult{} + m = map[string]string{ + "http_proxy": ps.HTTPProxy, + "https_proxy": ps.HTTPSProxy, + } + ) + for k, v := range m { + if v == "" { + r[k] = TestURLResult{Ok: true} + continue + } + u, err := url.Parse(v) + if err != nil { + r[k] = TestURLResult{ + Reason: err.Error(), + } + } else if u == nil { + r[k] = TestURLResult{ + Reason: fmt.Sprintf("bad url: %q", v), + } + } else { + host := u.Hostname() + port := u.Port() + if port == "" { + switch u.Scheme { + case "http": + port = "80" + case "https": + port = "443" + case "socks5": + port = "1080" + default: + r[k] = TestURLResult{ + Reason: fmt.Sprintf("bad url scheme: %s", u.Scheme), + } + continue + } + } + addr := net.JoinHostPort(host, port) + conn, err := net.DialTimeout("tcp", addr, 7*time.Second) + if err != nil { + r[k] = TestURLResult{ + Reason: err.Error(), + } + } else { + r[k] = TestURLResult{Ok: true} + conn.Close() + } + } + } + return jsonutils.Marshal(r), nil +} + func (man *SProxySettingManager) InitializeData() error { _, err := man.FetchById(proxyapi.ProxySettingId_DIRECT) if err == nil { From 799b7eacb7106e100d132441d40c4336e49061b1 Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Wed, 8 Apr 2020 18:00:39 +0800 Subject: [PATCH 6/8] climc: add command proxysetting-test --- cmd/climc/shell/proxysettings.go | 8 ++++++++ pkg/mcclient/options/proxysettings.go | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/cmd/climc/shell/proxysettings.go b/cmd/climc/shell/proxysettings.go index f3f0d7bf81..dbee6aefc3 100644 --- a/cmd/climc/shell/proxysettings.go +++ b/cmd/climc/shell/proxysettings.go @@ -70,4 +70,12 @@ func init() { printObject(proxysetting) return nil }) + R(&options.ProxySettingTestOptions{}, "proxysetting-test", "Test proxysetting", func(s *mcclient.ClientSession, opts *options.ProxySettingTestOptions) error { + proxysetting, err := modules.ProxySettings.PerformAction(s, opts.ID, "test", nil) + if err != nil { + return err + } + printObject(proxysetting) + return nil + }) } diff --git a/pkg/mcclient/options/proxysettings.go b/pkg/mcclient/options/proxysettings.go index a7cac24562..22a98ac920 100644 --- a/pkg/mcclient/options/proxysettings.go +++ b/pkg/mcclient/options/proxysettings.go @@ -39,6 +39,10 @@ type ProxySettingDeleteOptions struct { ID string `json:"-"` } +type ProxySettingTestOptions struct { + ID string `json:"-"` +} + type ProxySettingListOptions struct { BaseListOptions } From 3d705eee3f90f1943c4afa152f62d895cc91a324 Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Wed, 8 Apr 2020 18:02:00 +0800 Subject: [PATCH 7/8] climc: fix router-route-xx command description --- cmd/climc/shell/cloudnet/routes.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cmd/climc/shell/cloudnet/routes.go b/cmd/climc/shell/cloudnet/routes.go index 7773ed881b..8724bea383 100644 --- a/cmd/climc/shell/cloudnet/routes.go +++ b/cmd/climc/shell/cloudnet/routes.go @@ -22,7 +22,7 @@ import ( ) func init() { - R(&options.RouteCreateOptions{}, "router-route-create", "Create router", func(s *mcclient.ClientSession, opts *options.RouteCreateOptions) error { + R(&options.RouteCreateOptions{}, "router-route-create", "Create router route", func(s *mcclient.ClientSession, opts *options.RouteCreateOptions) error { params, err := base_options.StructToParams(opts) if err != nil { return err @@ -34,7 +34,7 @@ func init() { printObject(router) return nil }) - R(&options.RouteGetOptions{}, "router-route-show", "Show router", func(s *mcclient.ClientSession, opts *options.RouteGetOptions) error { + R(&options.RouteGetOptions{}, "router-route-show", "Show router route", func(s *mcclient.ClientSession, opts *options.RouteGetOptions) error { router, err := modules.Routes.Get(s, opts.ID, nil) if err != nil { return err @@ -42,7 +42,7 @@ func init() { printObject(router) return nil }) - R(&options.RouteListOptions{}, "router-route-list", "List routers", func(s *mcclient.ClientSession, opts *options.RouteListOptions) error { + R(&options.RouteListOptions{}, "router-route-list", "List router routes", func(s *mcclient.ClientSession, opts *options.RouteListOptions) error { params, err := base_options.ListStructToParams(opts) if err != nil { return err @@ -54,7 +54,7 @@ func init() { printList(result, modules.Routes.GetColumns(s)) return nil }) - R(&options.RouteUpdateOptions{}, "router-route-update", "Update router", func(s *mcclient.ClientSession, opts *options.RouteUpdateOptions) error { + R(&options.RouteUpdateOptions{}, "router-route-update", "Update router route", func(s *mcclient.ClientSession, opts *options.RouteUpdateOptions) error { params, err := base_options.StructToParams(opts) router, err := modules.Routes.Update(s, opts.ID, params) if err != nil { @@ -63,7 +63,7 @@ func init() { printObject(router) return nil }) - R(&options.RouteDeleteOptions{}, "router-route-delete", "Delete router", func(s *mcclient.ClientSession, opts *options.RouteDeleteOptions) error { + R(&options.RouteDeleteOptions{}, "router-route-delete", "Delete router route", func(s *mcclient.ClientSession, opts *options.RouteDeleteOptions) error { router, err := modules.Routes.Delete(s, opts.ID, nil) if err != nil { return err From 721b80e2fe86898cf1316965b502ac89dfb310dd Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Wed, 8 Apr 2020 18:04:11 +0800 Subject: [PATCH 8/8] climc: networks: remove stale dns related commands --- cmd/climc/shell/networks.go | 71 ------------------------------------- 1 file changed, 71 deletions(-) diff --git a/cmd/climc/shell/networks.go b/cmd/climc/shell/networks.go index 8e5639f3ed..093a8053c1 100644 --- a/cmd/climc/shell/networks.go +++ b/cmd/climc/shell/networks.go @@ -346,77 +346,6 @@ func init() { 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 - }) - type NetworkAddressOptions struct { NETWORK string `help:"id or name of network to query"` }