openstack 修改兼容多集群热加载

This commit is contained in:
qiwang 2023-12-26 20:42:06 +08:00
parent 9a69ae0a12
commit f4089bf62a
1 changed files with 94 additions and 4 deletions

View File

@ -2,6 +2,7 @@ package common
import (
"bytes"
"crypto/tls"
"fmt"
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/config"
"io"
@ -21,10 +22,10 @@ var C config.Config
var (
token string
expiredAt time.Time
Platform string
// Platform string
)
func GenerateToken() (string, string, time.Time) {
/*func GenerateToken() (string, string, time.Time) {
a := Auth{}
var (
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.Password = C.OpenstackConfig.Nudt.PASSWORD
a.Auth.Identity.Password.User.Domain.Name = C.OpenstackConfig.Nudt.DOMAIN
TokenUrl = C.OpenstackConfig.ZhiJiang.TokenUrl
TokenUrl = C.OpenstackConfig.Nudt.TokenUrl
default:
//return nil, fmt.Errorf("platform %s not supported", Platform)
}
@ -75,13 +76,102 @@ func GenerateToken() (string, string, time.Time) {
json.Unmarshal(result, &t)
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) {
Platform, token, expiredAt = GenerateToken()
}
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) {