175 lines
6.1 KiB
Go
175 lines
6.1 KiB
Go
package common
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"gitlink.org.cn/JointCloud/pcm-openstack/internal/config"
|
|
"io"
|
|
"k8s.io/apimachinery/pkg/util/json"
|
|
"log"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
var FileName string
|
|
var C config.Config
|
|
|
|
//var (
|
|
// token, expiredAt = GenerateToken()
|
|
//)
|
|
|
|
var (
|
|
token string
|
|
expiredAt time.Time
|
|
platform string
|
|
)
|
|
|
|
/*func GenerateToken() (string, string, time.Time) {
|
|
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)
|
|
|
|
return Platform, respUrl.Header.Get(C.OpenstackConfig.TokenHeader), t.Token.ExpiresAt
|
|
}*/
|
|
|
|
/*func GetToken() string {
|
|
if time.Now().After(expiredAt) {
|
|
Platform, token, expiredAt = GenerateToken()
|
|
}
|
|
return token
|
|
}*/
|
|
|
|
func GetOpenstackConfWithPlatform(platform string) (*config.Conf, error) {
|
|
var conf config.Conf
|
|
switch platform {
|
|
case C.OpenstackConfig.Nudt_Openstack_R.Platform:
|
|
conf = C.OpenstackConfig.Nudt_Openstack_R
|
|
case C.OpenstackConfig.ZhiJiang_Openstack_T.Platform:
|
|
conf = C.OpenstackConfig.ZhiJiang_Openstack_T
|
|
case C.OpenstackConfig.Keylin_Openstack_T.Platform:
|
|
conf = C.OpenstackConfig.Keylin_Openstack_T
|
|
case C.OpenstackConfig.DianKe_Openstack_R.Platform:
|
|
conf = C.OpenstackConfig.DianKe_Openstack_R
|
|
default:
|
|
return nil, fmt.Errorf("platform not supported")
|
|
}
|
|
return &conf, nil
|
|
}
|
|
|
|
func GetToken(Platform string) (token string) {
|
|
a := Auth{}
|
|
var (
|
|
TokenUrl string
|
|
)
|
|
switch Platform {
|
|
case C.OpenstackConfig.ZhiJiang_Openstack_T.Platform:
|
|
a.Auth.Scope.Project.Name = C.OpenstackConfig.ZhiJiang_Openstack_T.USER
|
|
a.Auth.Scope.Project.Domain.Id = C.OpenstackConfig.ZhiJiang_Openstack_T.Id
|
|
a.Auth.Identity.Methods = append(a.Auth.Identity.Methods, C.OpenstackConfig.ZhiJiang_Openstack_T.AuthMethod)
|
|
a.Auth.Identity.Password.User.Name = C.OpenstackConfig.ZhiJiang_Openstack_T.USER
|
|
a.Auth.Identity.Password.User.Password = C.OpenstackConfig.ZhiJiang_Openstack_T.PASSWORD
|
|
a.Auth.Identity.Password.User.Domain.Name = C.OpenstackConfig.ZhiJiang_Openstack_T.DOMAIN
|
|
TokenUrl = C.OpenstackConfig.ZhiJiang_Openstack_T.TokenUrl
|
|
case C.OpenstackConfig.Nudt_Openstack_R.Platform:
|
|
a.Auth.Scope.Project.Name = C.OpenstackConfig.Nudt_Openstack_R.USER
|
|
a.Auth.Scope.Project.Domain.Id = C.OpenstackConfig.Nudt_Openstack_R.Id
|
|
a.Auth.Identity.Methods = append(a.Auth.Identity.Methods, C.OpenstackConfig.Nudt_Openstack_R.AuthMethod)
|
|
a.Auth.Identity.Password.User.Name = C.OpenstackConfig.Nudt_Openstack_R.USER
|
|
a.Auth.Identity.Password.User.Password = C.OpenstackConfig.Nudt_Openstack_R.PASSWORD
|
|
a.Auth.Identity.Password.User.Domain.Name = C.OpenstackConfig.Nudt_Openstack_R.DOMAIN
|
|
TokenUrl = C.OpenstackConfig.Nudt_Openstack_R.TokenUrl
|
|
case C.OpenstackConfig.Keylin_Openstack_T.Platform:
|
|
a.Auth.Scope.Project.Name = C.OpenstackConfig.Keylin_Openstack_T.USER
|
|
a.Auth.Scope.Project.Domain.Id = C.OpenstackConfig.Keylin_Openstack_T.Id
|
|
a.Auth.Identity.Methods = append(a.Auth.Identity.Methods, C.OpenstackConfig.Keylin_Openstack_T.AuthMethod)
|
|
a.Auth.Identity.Password.User.Name = C.OpenstackConfig.Keylin_Openstack_T.USER
|
|
a.Auth.Identity.Password.User.Password = C.OpenstackConfig.Keylin_Openstack_T.PASSWORD
|
|
a.Auth.Identity.Password.User.Domain.Name = C.OpenstackConfig.Keylin_Openstack_T.DOMAIN
|
|
TokenUrl = C.OpenstackConfig.Keylin_Openstack_T.TokenUrl
|
|
case C.OpenstackConfig.DianKe_Openstack_R.Platform:
|
|
a.Auth.Scope.Project.Name = C.OpenstackConfig.DianKe_Openstack_R.USER
|
|
a.Auth.Scope.Project.Domain.Id = C.OpenstackConfig.DianKe_Openstack_R.Id
|
|
a.Auth.Identity.Methods = append(a.Auth.Identity.Methods, C.OpenstackConfig.DianKe_Openstack_R.AuthMethod)
|
|
a.Auth.Identity.Password.User.Name = C.OpenstackConfig.DianKe_Openstack_R.USER
|
|
a.Auth.Identity.Password.User.Password = C.OpenstackConfig.DianKe_Openstack_R.PASSWORD
|
|
a.Auth.Identity.Password.User.Domain.Name = C.OpenstackConfig.DianKe_Openstack_R.DOMAIN
|
|
TokenUrl = C.OpenstackConfig.DianKe_Openstack_R.TokenUrl
|
|
default:
|
|
|
|
}
|
|
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)
|
|
respUrl.Header.Get(C.OpenstackConfig.TokenHeader)
|
|
fmt.Println("Token###########:", respUrl.Header.Get(C.OpenstackConfig.TokenHeader))
|
|
|
|
json.Unmarshal(result, &t)
|
|
|
|
return respUrl.Header.Get(C.OpenstackConfig.TokenHeader)
|
|
}
|