forked from JointCloud/pcm-openstack
openstack 修改兼容多集群热加载
This commit is contained in:
parent
9a69ae0a12
commit
f4089bf62a
|
@ -2,6 +2,7 @@ package common
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"crypto/tls"
|
||||||
"fmt"
|
"fmt"
|
||||||
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/config"
|
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/config"
|
||||||
"io"
|
"io"
|
||||||
|
@ -21,10 +22,10 @@ var C config.Config
|
||||||
var (
|
var (
|
||||||
token string
|
token string
|
||||||
expiredAt time.Time
|
expiredAt time.Time
|
||||||
Platform string
|
// Platform string
|
||||||
)
|
)
|
||||||
|
|
||||||
func GenerateToken() (string, string, time.Time) {
|
/*func GenerateToken() (string, string, time.Time) {
|
||||||
a := Auth{}
|
a := Auth{}
|
||||||
var (
|
var (
|
||||||
TokenUrl string
|
TokenUrl string
|
||||||
|
@ -45,7 +46,7 @@ func GenerateToken() (string, string, time.Time) {
|
||||||
a.Auth.Identity.Password.User.Name = C.OpenstackConfig.Nudt.USER
|
a.Auth.Identity.Password.User.Name = C.OpenstackConfig.Nudt.USER
|
||||||
a.Auth.Identity.Password.User.Password = C.OpenstackConfig.Nudt.PASSWORD
|
a.Auth.Identity.Password.User.Password = C.OpenstackConfig.Nudt.PASSWORD
|
||||||
a.Auth.Identity.Password.User.Domain.Name = C.OpenstackConfig.Nudt.DOMAIN
|
a.Auth.Identity.Password.User.Domain.Name = C.OpenstackConfig.Nudt.DOMAIN
|
||||||
TokenUrl = C.OpenstackConfig.ZhiJiang.TokenUrl
|
TokenUrl = C.OpenstackConfig.Nudt.TokenUrl
|
||||||
default:
|
default:
|
||||||
//return nil, fmt.Errorf("platform %s not supported", Platform)
|
//return nil, fmt.Errorf("platform %s not supported", Platform)
|
||||||
}
|
}
|
||||||
|
@ -75,13 +76,102 @@ func GenerateToken() (string, string, time.Time) {
|
||||||
json.Unmarshal(result, &t)
|
json.Unmarshal(result, &t)
|
||||||
|
|
||||||
return Platform, respUrl.Header.Get(C.OpenstackConfig.TokenHeader), t.Token.ExpiresAt
|
return Platform, respUrl.Header.Get(C.OpenstackConfig.TokenHeader), t.Token.ExpiresAt
|
||||||
|
}*/
|
||||||
|
|
||||||
|
func SignClient(r *http.Request, Platform string) (*http.Client, error) {
|
||||||
|
a := Auth{}
|
||||||
|
var (
|
||||||
|
TokenUrl string
|
||||||
|
)
|
||||||
|
switch Platform {
|
||||||
|
case C.OpenstackConfig.ZhiJiang.Platform:
|
||||||
|
a.Auth.Scope.Project.Name = C.OpenstackConfig.ZhiJiang.USER
|
||||||
|
a.Auth.Scope.Project.Domain.Id = C.OpenstackConfig.ZhiJiang.Id
|
||||||
|
a.Auth.Identity.Methods = append(a.Auth.Identity.Methods, C.OpenstackConfig.ZhiJiang.AuthMethod)
|
||||||
|
a.Auth.Identity.Password.User.Name = C.OpenstackConfig.ZhiJiang.USER
|
||||||
|
a.Auth.Identity.Password.User.Password = C.OpenstackConfig.ZhiJiang.PASSWORD
|
||||||
|
a.Auth.Identity.Password.User.Domain.Name = C.OpenstackConfig.ZhiJiang.DOMAIN
|
||||||
|
TokenUrl = C.OpenstackConfig.ZhiJiang.TokenUrl
|
||||||
|
case C.OpenstackConfig.Nudt.Platform:
|
||||||
|
a.Auth.Scope.Project.Name = C.OpenstackConfig.Nudt.USER
|
||||||
|
a.Auth.Scope.Project.Domain.Id = C.OpenstackConfig.Nudt.Id
|
||||||
|
a.Auth.Identity.Methods = append(a.Auth.Identity.Methods, C.OpenstackConfig.Nudt.AuthMethod)
|
||||||
|
a.Auth.Identity.Password.User.Name = C.OpenstackConfig.Nudt.USER
|
||||||
|
a.Auth.Identity.Password.User.Password = C.OpenstackConfig.Nudt.PASSWORD
|
||||||
|
a.Auth.Identity.Password.User.Domain.Name = C.OpenstackConfig.Nudt.DOMAIN
|
||||||
|
TokenUrl = C.OpenstackConfig.Nudt.TokenUrl
|
||||||
|
default:
|
||||||
|
return nil, fmt.Errorf("platform %s not supported", Platform)
|
||||||
|
}
|
||||||
|
jsonStr, _ := json.Marshal(a)
|
||||||
|
req_url, err := http.NewRequest("POST", TokenUrl, bytes.NewBuffer(jsonStr))
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
c := http.Client{Timeout: time.Duration(3) * time.Second}
|
||||||
|
|
||||||
|
respUrl, err := c.Do(req_url)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if respUrl.StatusCode != C.OpenstackConfig.Status_created {
|
||||||
|
panic("获取token失败")
|
||||||
|
}
|
||||||
|
|
||||||
|
defer respUrl.Body.Close()
|
||||||
|
|
||||||
|
var t Token
|
||||||
|
|
||||||
|
result, _ := io.ReadAll(respUrl.Body)
|
||||||
|
json.Unmarshal(result, &t)
|
||||||
|
|
||||||
|
//设置client信任所有证书
|
||||||
|
tr := &http.Transport{
|
||||||
|
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
|
||||||
|
}
|
||||||
|
client := &http.Client{
|
||||||
|
Transport: tr,
|
||||||
|
}
|
||||||
|
return client, nil
|
||||||
|
|
||||||
|
//return Platform, respUrl.Header.Get(C.OpenstackConfig.TokenHeader), t.Token.ExpiresAt
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetToken() string {
|
/*func GetToken() string {
|
||||||
if time.Now().After(expiredAt) {
|
if time.Now().After(expiredAt) {
|
||||||
Platform, token, expiredAt = GenerateToken()
|
Platform, token, expiredAt = GenerateToken()
|
||||||
}
|
}
|
||||||
return token
|
return token
|
||||||
|
}*/
|
||||||
|
|
||||||
|
func SendRequest(method, url string, in io.Reader, Platform string) (*[]byte, error) {
|
||||||
|
r, err := http.NewRequest(method, url, in)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error creating new request:", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
signedR, err := SignClient(r, Platform)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error signing request:", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err := signedR.Do(r)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error sending request:", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer res.Body.Close()
|
||||||
|
|
||||||
|
body, err := io.ReadAll(res.Body)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error reading response body:", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &body, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetOpenstackConfWithPlatform(platform string) (*config.Conf, error) {
|
func GetOpenstackConfWithPlatform(platform string) (*config.Conf, error) {
|
||||||
|
|
Loading…
Reference in New Issue