mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
Merge pull request #5725 from yousong/automated-cherry-pick-of-#5724-upstream-release-3.1
Automated cherry pick of #5724: lbagents: deploy: deploy public type auth_url
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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"`
|
||||
}
|
||||
|
||||
@@ -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
|
||||
})
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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")
|
||||
|
||||
|
||||
@@ -30,13 +30,19 @@ type ProxySettingUpdateOptions struct {
|
||||
ID string `json:"-"`
|
||||
Name string
|
||||
|
||||
BackendGroup string
|
||||
HTTPProxy string
|
||||
HTTPSProxy string
|
||||
NoProxy string
|
||||
}
|
||||
|
||||
type ProxySettingDeleteOptions struct {
|
||||
ID string `json:"-"`
|
||||
}
|
||||
|
||||
type ProxySettingTestOptions struct {
|
||||
ID string `json:"-"`
|
||||
}
|
||||
|
||||
type ProxySettingListOptions struct {
|
||||
BaseListOptions
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user