@ -14,12 +14,12 @@ import (
"sync"
"sync"
"time"
"time"
"github.com/google/go-querystring/query"
"repository.basistech.ru/BASIS/decort-golang-sdk/config"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi"
k8s_ca "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/k8s"
k8s_ca "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/k8s"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker"
k8s_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/k8s"
k8s_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/k8s"
"github.com/google/go-querystring/query"
"repository.basistech.ru/BASIS/decort-golang-sdk/config"
)
)
// HTTP-client for platform
// HTTP-client for platform
@ -73,128 +73,31 @@ func (dc *DecortClient) CloudBroker() *cloudbroker.CloudBroker {
func ( dc * DecortClient ) DecortApiCall ( ctx context . Context , method , url string , params interface { } ) ( [ ] byte , error ) {
func ( dc * DecortClient ) DecortApiCall ( ctx context . Context , method , url string , params interface { } ) ( [ ] byte , error ) {
k8sCaCreateReq , okCa := params . ( k8s_ca . CreateRequest )
k8sCaCreateReq , okCa := params . ( k8s_ca . CreateRequest )
k8sCbCreateReq , okCb := params . ( k8s_cb . CreateRequest )
k8sCbCreateReq , okCb := params . ( k8s_cb . CreateRequest )
var body * bytes . Buffer
var ctype string
if okCa {
if okCa {
reqBody := & bytes . Buffer { }
body , ctype = createK8sCloudApi ( k8sCaCreateReq )
writer := multipart . NewWriter ( reqBody )
} else if okCb {
if k8sCaCreateReq . OidcCertificate != "" {
body , ctype = createK8sCloudBroker ( k8sCbCreateReq )
part , _ := writer . CreateFormFile ( "oidcCertificate" , "ca.crt" )
} else {
_ , _ = io . Copy ( part , strings . NewReader ( k8sCaCreateReq . OidcCertificate ) )
values , err := query . Values ( params )
}
if err != nil {
return nil , err
_ = writer . WriteField ( "name" , k8sCaCreateReq . Name )
_ = writer . WriteField ( "rgId" , strconv . FormatUint ( k8sCaCreateReq . RGID , 10 ) )
_ = writer . WriteField ( "k8ciId" , strconv . FormatUint ( k8sCaCreateReq . K8SCIID , 10 ) )
_ = writer . WriteField ( "workerGroupName" , k8sCaCreateReq . WorkerGroupName )
_ = writer . WriteField ( "networkPlugin" , k8sCaCreateReq . NetworkPlugin )
if k8sCaCreateReq . MasterSEPID != 0 {
_ = writer . WriteField ( "masterSepId" , strconv . FormatUint ( k8sCaCreateReq . MasterSEPID , 10 ) )
}
if k8sCaCreateReq . MasterSEPPool != "" {
_ = writer . WriteField ( "masterSepPool" , k8sCaCreateReq . MasterSEPPool )
}
if k8sCaCreateReq . WorkerSEPID != 0 {
_ = writer . WriteField ( "workerSepId" , strconv . FormatUint ( k8sCaCreateReq . WorkerSEPID , 10 ) )
}
if k8sCaCreateReq . WorkerSEPPool != "" {
_ = writer . WriteField ( "workerSepPool" , k8sCaCreateReq . WorkerSEPPool )
}
if k8sCaCreateReq . Labels != nil {
for _ , v := range k8sCaCreateReq . Labels {
_ = writer . WriteField ( "labels" , v )
}
}
if k8sCaCreateReq . Taints != nil {
for _ , v := range k8sCaCreateReq . Taints {
_ = writer . WriteField ( "taints" , v )
}
}
if k8sCaCreateReq . Annotations != nil {
for _ , v := range k8sCaCreateReq . Annotations {
_ = writer . WriteField ( "annotations" , v )
}
}
if k8sCaCreateReq . MasterCPU != 0 {
_ = writer . WriteField ( "masterCpu" , strconv . FormatUint ( uint64 ( k8sCaCreateReq . MasterCPU ) , 10 ) )
}
if k8sCaCreateReq . MasterNum != 0 {
_ = writer . WriteField ( "masterNum" , strconv . FormatUint ( uint64 ( k8sCaCreateReq . MasterNum ) , 10 ) )
}
if k8sCaCreateReq . MasterRAM != 0 {
_ = writer . WriteField ( "masterRam" , strconv . FormatUint ( uint64 ( k8sCaCreateReq . MasterRAM ) , 10 ) )
}
if k8sCaCreateReq . MasterDisk != 0 {
_ = writer . WriteField ( "masterDisk" , strconv . FormatUint ( uint64 ( k8sCaCreateReq . MasterDisk ) , 10 ) )
}
if k8sCaCreateReq . WorkerCPU != 0 {
_ = writer . WriteField ( "workerCpu" , strconv . FormatUint ( uint64 ( k8sCaCreateReq . WorkerCPU ) , 10 ) )
}
if k8sCaCreateReq . WorkerNum != 0 {
_ = writer . WriteField ( "workerNum" , strconv . FormatUint ( uint64 ( k8sCaCreateReq . WorkerNum ) , 10 ) )
}
if k8sCaCreateReq . WorkerRAM != 0 {
_ = writer . WriteField ( "workerRam" , strconv . FormatUint ( uint64 ( k8sCaCreateReq . WorkerRAM ) , 10 ) )
}
if k8sCaCreateReq . WorkerDisk != 0 {
_ = writer . WriteField ( "workerDisk" , strconv . FormatUint ( uint64 ( k8sCaCreateReq . WorkerDisk ) , 10 ) )
}
if k8sCaCreateReq . ExtNetID != 0 {
_ = writer . WriteField ( "extnetId" , strconv . FormatUint ( k8sCaCreateReq . ExtNetID , 10 ) )
}
if k8sCaCreateReq . VinsId != 0 {
_ = writer . WriteField ( "vinsId" , strconv . FormatUint ( k8sCaCreateReq . VinsId , 10 ) )
}
if ! k8sCaCreateReq . WithLB {
_ = writer . WriteField ( "withLB" , strconv . FormatBool ( k8sCaCreateReq . WithLB ) )
}
_ = writer . WriteField ( "highlyAvailableLB" , strconv . FormatBool ( k8sCaCreateReq . HighlyAvailable ) )
if k8sCaCreateReq . AdditionalSANs != nil {
for _ , v := range k8sCaCreateReq . AdditionalSANs {
_ = writer . WriteField ( "additionalSANs" , v )
}
}
if k8sCaCreateReq . InitConfiguration != "" {
_ = writer . WriteField ( "initConfiguration" , k8sCaCreateReq . InitConfiguration )
}
if k8sCaCreateReq . ClusterConfiguration != "" {
_ = writer . WriteField ( "clusterConfiguration" , k8sCaCreateReq . ClusterConfiguration )
}
if k8sCaCreateReq . KubeletConfiguration != "" {
_ = writer . WriteField ( "kubeletConfiguration" , k8sCaCreateReq . KubeletConfiguration )
}
if k8sCaCreateReq . KubeProxyConfiguration != "" {
_ = writer . WriteField ( "kubeProxyConfiguration" , k8sCaCreateReq . KubeProxyConfiguration )
}
if k8sCaCreateReq . JoinConfiguration != "" {
_ = writer . WriteField ( "joinConfiguration" , k8sCaCreateReq . JoinConfiguration )
}
if k8sCaCreateReq . Description != "" {
_ = writer . WriteField ( "desc" , k8sCaCreateReq . Description )
}
}
if k8sCaCreateReq . UserData != "" {
body = bytes . NewBufferString ( values . Encode ( ) )
_ = writer . WriteField ( "userData" , k8sCaCreateReq . UserData )
}
}
_ = writer . WriteField ( "extnetOnly" , strconv . FormatBool ( k8sCaCreateReq . ExtNetOnly ) )
req , err := http . NewRequestWithContext ( ctx , method , dc . decortURL + "/restmachine" + url , body )
_ = writer . FormDataContentType ( )
ct := writer . FormDataContentType ( )
writer . Close ( )
req , err := http . NewRequestWithContext ( ctx , method , dc . decortURL + "/restmachine" + url , reqBody )
if err != nil {
if err != nil {
return nil , err
return nil , err
}
}
if err = dc . getToken ( ctx ) ; err != nil {
if err = dc . getToken ( ctx ) ; err != nil {
return nil , err
return nil , err
}
}
resp , err := dc . do mp ( req , ct )
resp , err := dc . do ( req , ctype )
if err != nil {
if err != nil {
return nil , err
return nil , err
}
}
@ -210,261 +113,298 @@ func (dc *DecortClient) DecortApiCall(ctx context.Context, method, url string, p
}
}
return respBytes , nil
return respBytes , nil
} else if okCb {
}
func ( dc * DecortClient ) getToken ( ctx context . Context ) error {
dc . mutex . Lock ( )
defer dc . mutex . Unlock ( )
if dc . cfg . Token == "" || time . Now ( ) . After ( dc . expiryTime ) {
body := fmt . Sprintf ( "grant_type=client_credentials&client_id=%s&client_secret=%s&response_type=id_token" , dc . cfg . AppID , dc . cfg . AppSecret )
bodyReader := strings . NewReader ( body )
dc . cfg . SSOURL = strings . TrimSuffix ( dc . cfg . SSOURL , "/" )
req , _ := http . NewRequestWithContext ( ctx , "POST" , dc . cfg . SSOURL + "/v1/oauth/access_token" , bodyReader )
req . Header . Add ( "Content-Type" , "application/x-www-form-urlencoded" )
resp , err := dc . client . Do ( req )
if err != nil {
return fmt . Errorf ( "cannot get token: %w" , err )
}
tokenBytes , _ := io . ReadAll ( resp . Body )
resp . Body . Close ( )
if resp . StatusCode != 200 {
return fmt . Errorf ( "cannot get token: %s" , tokenBytes )
}
token := string ( tokenBytes )
dc . cfg . Token = token
dc . expiryTime = time . Now ( ) . AddDate ( 0 , 0 , 1 )
}
return nil
}
func ( dc * DecortClient ) do ( req * http . Request , ctype string ) ( * http . Response , error ) {
if ctype != "" {
req . Header . Add ( "Content-Type" , ctype )
} else {
req . Header . Add ( "Content-Type" , "application/x-www-form-urlencoded" )
}
req . Header . Add ( "Authorization" , "bearer " + dc . cfg . Token )
req . Header . Set ( "Accept" , "application/json" )
// var resp *http.Response
// var err error
buf , _ := io . ReadAll ( req . Body )
// req = req.Clone(req.Context())
// for i := uint64(0); i < dc.cfg.Retries; i++ {
req . Body = io . NopCloser ( bytes . NewBuffer ( buf ) )
resp , err := dc . client . Do ( req )
// if err == nil {
if resp . StatusCode == 200 {
return resp , err
}
respBytes , _ := io . ReadAll ( resp . Body )
err = fmt . Errorf ( "%s" , respBytes )
resp . Body . Close ( )
// }
// }
return nil , fmt . Errorf ( "could not execute request: %w" , err )
}
func createK8sCloudApi ( req k8s_ca . CreateRequest ) ( * bytes . Buffer , string ) {
reqBody := & bytes . Buffer { }
reqBody := & bytes . Buffer { }
writer := multipart . NewWriter ( reqBody )
writer := multipart . NewWriter ( reqBody )
if k8sCbCreateReq . OidcCertificate != "" {
if req. OidcCertificate != "" {
part , _ := writer . CreateFormFile ( "oidcCertificate" , "ca.crt" )
part , _ := writer . CreateFormFile ( "oidcCertificate" , "ca.crt" )
_ , _ = io . Copy ( part , strings . NewReader ( k8sCbCreateReq . OidcCertificate ) )
_ , _ = io . Copy ( part , strings . NewReader ( req. OidcCertificate ) )
}
}
_ = writer . WriteField ( "name" , k8sCbCreateReq . Name )
_ = writer . WriteField ( "name" , req. Name )
_ = writer . WriteField ( "rgId" , strconv . FormatUint ( k8sCbCreateReq . RGID , 10 ) )
_ = writer . WriteField ( "rgId" , strconv . FormatUint ( req. RGID , 10 ) )
_ = writer . WriteField ( "k8ciId" , strconv . FormatUint ( k8sCbCreateReq . K8CIID , 10 ) )
_ = writer . WriteField ( "k8ciId" , strconv . FormatUint ( req. K8 S CIID, 10 ) )
_ = writer . WriteField ( "workerGroupName" , k8sCbCreateReq . WorkerGroupName )
_ = writer . WriteField ( "workerGroupName" , req. WorkerGroupName )
_ = writer . WriteField ( "networkPlugin" , k8sCbCreateReq . NetworkPlugin )
_ = writer . WriteField ( "networkPlugin" , req. NetworkPlugin )
if k8sCbCreateReq . MasterSEPID != 0 {
if req. MasterSEPID != 0 {
_ = writer . WriteField ( "masterSepId" , strconv . FormatUint ( k8sCbCreateReq . MasterSEPID , 10 ) )
_ = writer . WriteField ( "masterSepId" , strconv . FormatUint ( req. MasterSEPID , 10 ) )
}
}
if k8sCbCreateReq . MasterSEPPool != "" {
if req. MasterSEPPool != "" {
_ = writer . WriteField ( "masterSepPool" , k8sCbCreateReq . MasterSEPPool )
_ = writer . WriteField ( "masterSepPool" , req. MasterSEPPool )
}
}
if k8sCbCreateReq . WorkerSEPID != 0 {
if req. WorkerSEPID != 0 {
_ = writer . WriteField ( "workerSepId" , strconv . FormatUint ( k8sCbCreateReq . WorkerSEPID , 10 ) )
_ = writer . WriteField ( "workerSepId" , strconv . FormatUint ( req. WorkerSEPID , 10 ) )
}
}
if k8sCbCreateReq . WorkerSEPPool != "" {
if req. WorkerSEPPool != "" {
_ = writer . WriteField ( "workerSepPool" , k8sCbCreateReq . WorkerSEPPool )
_ = writer . WriteField ( "workerSepPool" , req. WorkerSEPPool )
}
}
if k8sCbCreateReq . Labels != nil {
if req. Labels != nil {
for _ , v := range k8sCbCreateReq . Labels {
for _ , v := range req. Labels {
_ = writer . WriteField ( "labels" , v )
_ = writer . WriteField ( "labels" , v )
}
}
}
}
if k8sCbCreateReq . Taints != nil {
if req. Taints != nil {
for _ , v := range k8sCbCreateReq . Taints {
for _ , v := range req. Taints {
_ = writer . WriteField ( "taints" , v )
_ = writer . WriteField ( "taints" , v )
}
}
}
}
if k8sCbCreateReq . Annotations != nil {
if req. Annotations != nil {
for _ , v := range k8sCbCreateReq . Annotations {
for _ , v := range req. Annotations {
_ = writer . WriteField ( "annotations" , v )
_ = writer . WriteField ( "annotations" , v )
}
}
}
}
if k8sCbCreateReq . MasterCPU != 0 {
if req. MasterCPU != 0 {
_ = writer . WriteField ( "masterCpu" , strconv . FormatUint ( k8sCbCreateReq . MasterCPU , 10 ) )
_ = writer . WriteField ( "masterCpu" , strconv . FormatUint ( uint64 ( req. MasterCPU ) , 10 ) )
}
}
if k8sCbCreateReq . MasterNum != 0 {
if req. MasterNum != 0 {
_ = writer . WriteField ( "masterNum" , strconv . FormatUint ( k8sCbCreateReq . MasterNum , 10 ) )
_ = writer . WriteField ( "masterNum" , strconv . FormatUint ( uint64 ( req. MasterNum ) , 10 ) )
}
}
if k8sCbCreateReq . MasterRAM != 0 {
if req. MasterRAM != 0 {
_ = writer . WriteField ( "masterRam" , strconv . FormatUint ( k8sCbCreateReq . MasterRAM , 10 ) )
_ = writer . WriteField ( "masterRam" , strconv . FormatUint ( uint64 ( req. MasterRAM ) , 10 ) )
}
}
if k8sCbCreateReq . MasterDisk != 0 {
if req. MasterDisk != 0 {
_ = writer . WriteField ( "masterDisk" , strconv . FormatUint ( k8sCbCreateReq . MasterDisk , 10 ) )
_ = writer . WriteField ( "masterDisk" , strconv . FormatUint ( uint64 ( req. MasterDisk ) , 10 ) )
}
}
if k8sCbCreateReq . WorkerCPU != 0 {
if req. WorkerCPU != 0 {
_ = writer . WriteField ( "workerCpu" , strconv . FormatUint ( k8sCbCreateReq . WorkerCPU , 10 ) )
_ = writer . WriteField ( "workerCpu" , strconv . FormatUint ( uint64 ( req. WorkerCPU ) , 10 ) )
}
}
if k8sCbCreateReq . WorkerNum != 0 {
if req. WorkerNum != 0 {
_ = writer . WriteField ( "workerNum" , strconv . FormatUint ( k8sCbCreateReq . WorkerNum , 10 ) )
_ = writer . WriteField ( "workerNum" , strconv . FormatUint ( uint64 ( req. WorkerNum ) , 10 ) )
}
}
if k8sCbCreateReq . WorkerRAM != 0 {
if req. WorkerRAM != 0 {
_ = writer . WriteField ( "workerRam" , strconv . FormatUint ( k8sCbCreateReq . WorkerRAM , 10 ) )
_ = writer . WriteField ( "workerRam" , strconv . FormatUint ( uint64 ( req. WorkerRAM ) , 10 ) )
}
}
if k8sCbCreateReq . WorkerDisk != 0 {
if req. WorkerDisk != 0 {
_ = writer . WriteField ( "workerDisk" , strconv . FormatUint ( k8sCbCreateReq . WorkerDisk , 10 ) )
_ = writer . WriteField ( "workerDisk" , strconv . FormatUint ( uint64 ( req. WorkerDisk ) , 10 ) )
}
}
if k8sCbCreateReq . ExtNetID != 0 {
if req. ExtNetID != 0 {
_ = writer . WriteField ( "extnetId" , strconv . FormatUint ( k8sCbCreateReq . ExtNetID , 10 ) )
_ = writer . WriteField ( "extnetId" , strconv . FormatUint ( req. ExtNetID , 10 ) )
}
}
if k8sCbC reateR eq. VinsId != 0 {
if req. VinsId != 0 {
_ = writer . WriteField ( "vinsId" , strconv . FormatUint ( k8sCbC reateR eq. VinsId , 10 ) )
_ = writer . WriteField ( "vinsId" , strconv . FormatUint ( req. VinsId , 10 ) )
}
}
if ! k8sCbC reateR eq. WithLB {
if ! req. WithLB {
_ = writer . WriteField ( "withLB" , strconv . FormatBool ( k8sCbC reateR eq. WithLB ) )
_ = writer . WriteField ( "withLB" , strconv . FormatBool ( req. WithLB ) )
}
}
_ = writer . WriteField ( "highlyAvailableLB" , strconv . FormatBool ( k8sCbC reateR eq. HighlyAvailable ) )
_ = writer . WriteField ( "highlyAvailableLB" , strconv . FormatBool ( req. HighlyAvailable ) )
if k8sCbC reateR eq. AdditionalSANs != nil {
if req. AdditionalSANs != nil {
for _ , v := range k8sCbC reateR eq. AdditionalSANs {
for _ , v := range req. AdditionalSANs {
_ = writer . WriteField ( "additionalSANs" , v )
_ = writer . WriteField ( "additionalSANs" , v )
}
}
}
}
if k8sCbC reateR eq. InitConfiguration != "" {
if req. InitConfiguration != "" {
_ = writer . WriteField ( "initConfiguration" , k8sCbC reateR eq. InitConfiguration )
_ = writer . WriteField ( "initConfiguration" , req. InitConfiguration )
}
}
if k8sCbC reateR eq. ClusterConfiguration != "" {
if req. ClusterConfiguration != "" {
_ = writer . WriteField ( "clusterConfiguration" , k8sCbC reateR eq. ClusterConfiguration )
_ = writer . WriteField ( "clusterConfiguration" , req. ClusterConfiguration )
}
}
if k8sCbC reateR eq. KubeletConfiguration != "" {
if req. KubeletConfiguration != "" {
_ = writer . WriteField ( "kubeletConfiguration" , k8sCbC reateR eq. KubeletConfiguration )
_ = writer . WriteField ( "kubeletConfiguration" , req. KubeletConfiguration )
}
}
if k8sCbC reateR eq. KubeProxyConfiguration != "" {
if req. KubeProxyConfiguration != "" {
_ = writer . WriteField ( "kubeProxyConfiguration" , k8sCbC reateR eq. KubeProxyConfiguration )
_ = writer . WriteField ( "kubeProxyConfiguration" , req. KubeProxyConfiguration )
}
}
if k8sCbC reateR eq. JoinConfiguration != "" {
if req. JoinConfiguration != "" {
_ = writer . WriteField ( "joinConfiguration" , k8sCbC reateR eq. JoinConfiguration )
_ = writer . WriteField ( "joinConfiguration" , req. JoinConfiguration )
}
}
if k8sCbC reateR eq. Description != "" {
if req. Description != "" {
_ = writer . WriteField ( "desc" , k8sCbC reateR eq. Description )
_ = writer . WriteField ( "desc" , req. Description )
}
}
if k8sCbC reateR eq. UserData != "" {
if req. UserData != "" {
_ = writer . WriteField ( "userData" , k8sCbC reateR eq. UserData )
_ = writer . WriteField ( "userData" , req. UserData )
}
}
_ = writer . WriteField ( "extnetOnly" , strconv . FormatBool ( k8sCbCreateReq . ExtNetOnly ) )
_ = writer . WriteField ( "extnetOnly" , strconv . FormatBool ( req . ExtNetOnly ) )
_ = writer . FormDataContentType ( )
ct := writer . FormDataContentType ( )
ct := writer . FormDataContentType ( )
writer . Close ( )
writer . Close ( )
req , err := http . NewRequestWithContext ( ctx , method , dc . decortURL + "/restmachine" + url , reqBody )
if err != nil {
return nil , err
}
if err = dc . getToken ( ctx ) ; err != nil {
return nil , err
}
resp , err := dc . domp ( req , ct )
return reqBody , ct
if err != nil {
return nil , err
}
}
defer resp . Body . Close ( )
respBytes , err := io . ReadAll ( resp . Body )
func createK8sCloudBroker ( req k8s_cb . CreateRequest ) ( * bytes . Buffer , string ) {
if err != nil {
reqBody := & bytes . Buffer { }
return nil , err
writer := multipart . NewWriter ( reqBody )
if req . OidcCertificate != "" {
part , _ := writer . CreateFormFile ( "oidcCertificate" , "ca.crt" )
_ , _ = io . Copy ( part , strings . NewReader ( req . OidcCertificate ) )
}
}
if resp . StatusCode != 200 {
_ = writer . WriteField ( "name" , req . Name )
return nil , errors . New ( string ( respBytes ) )
_ = writer . WriteField ( "rgId" , strconv . FormatUint ( req . RGID , 10 ) )
}
_ = writer . WriteField ( "k8ciId" , strconv . FormatUint ( req . K8CIID , 10 ) )
_ = writer . WriteField ( "workerGroupName" , req . WorkerGroupName )
_ = writer . WriteField ( "networkPlugin" , req . NetworkPlugin )
return respBytes , nil
if req . MasterSEPID != 0 {
_ = writer . WriteField ( "masterSepId" , strconv . FormatUint ( req . MasterSEPID , 10 ) )
}
}
if req . MasterSEPPool != "" {
values , err := query . Values ( params )
_ = writer . WriteField ( "masterSepPool" , req . MasterSEPPool )
if err != nil {
return nil , err
}
}
if req . WorkerSEPID != 0 {
body := strings . NewReader ( values . Encode ( ) )
_ = writer . WriteField ( "workerSepId" , strconv . FormatUint ( req . WorkerSEPID , 10 ) )
req , err := http . NewRequestWithContext ( ctx , method , dc . decortURL + "/restmachine" + url , body )
if err != nil {
return nil , err
}
}
if req . WorkerSEPPool != "" {
if err = dc . getToken ( ctx ) ; err != nil {
_ = writer . WriteField ( "workerSepPool" , req . WorkerSEPPool )
return nil , err
}
}
resp , err := dc . do ( req )
if req . Labels != nil {
if err != nil {
for _ , v := range req . Labels {
return nil , err
_ = writer . WriteField ( "labels" , v )
}
}
defer resp . Body . Close ( )
respBytes , err := io . ReadAll ( resp . Body )
if err != nil {
return nil , err
}
}
if req . Taints != nil {
if resp . StatusCode != 200 {
for _ , v := range req . Taints {
return nil , errors . New ( string ( respBytes ) )
_ = writer . WriteField ( "taints" , v )
}
}
return respBytes , nil
}
}
if req . Annotations != nil {
func ( dc * DecortClient ) getToken ( ctx context . Context ) error {
for _ , v := range req . Annotations {
dc . mutex . Lock ( )
_ = writer . WriteField ( "annotations" , v )
defer dc . mutex . Unlock ( )
if dc . cfg . Token == "" || time . Now ( ) . After ( dc . expiryTime ) {
body := fmt . Sprintf ( "grant_type=client_credentials&client_id=%s&client_secret=%s&response_type=id_token" , dc . cfg . AppID , dc . cfg . AppSecret )
bodyReader := strings . NewReader ( body )
dc . cfg . SSOURL = strings . TrimSuffix ( dc . cfg . SSOURL , "/" )
req , _ := http . NewRequestWithContext ( ctx , "POST" , dc . cfg . SSOURL + "/v1/oauth/access_token" , bodyReader )
req . Header . Add ( "Content-Type" , "application/x-www-form-urlencoded" )
resp , err := dc . client . Do ( req )
if err != nil {
return fmt . Errorf ( "cannot get token: %w" , err )
}
}
tokenBytes , _ := io . ReadAll ( resp . Body )
resp . Body . Close ( )
if resp . StatusCode != 200 {
return fmt . Errorf ( "cannot get token: %s" , tokenBytes )
}
}
token := string ( tokenBytes )
if req . MasterCPU != 0 {
_ = writer . WriteField ( "masterCpu" , strconv . FormatUint ( req . MasterCPU , 10 ) )
dc . cfg . Token = token
dc . expiryTime = time . Now ( ) . AddDate ( 0 , 0 , 1 )
}
}
if req . MasterNum != 0 {
return nil
_ = writer . WriteField ( "masterNum" , strconv . FormatUint ( req . MasterNum , 10 ) )
}
}
if req . MasterRAM != 0 {
func ( dc * DecortClient ) do ( req * http . Request ) ( * http . Response , error ) {
_ = writer . WriteField ( "masterRam" , strconv . FormatUint ( req . MasterRAM , 10 ) )
req . Header . Add ( "Content-Type" , "application/x-www-form-urlencoded" )
req . Header . Add ( "Authorization" , "bearer " + dc . cfg . Token )
req . Header . Set ( "Accept" , "application/json" )
// var resp *http.Response
// var err error
buf , _ := io . ReadAll ( req . Body )
// req = req.Clone(req.Context())
// for i := uint64(0); i < dc.cfg.Retries; i++ {
req . Body = io . NopCloser ( bytes . NewBuffer ( buf ) )
resp , err := dc . client . Do ( req )
// if err == nil {
if resp . StatusCode == 200 {
return resp , err
}
}
respBytes , _ := io . ReadAll ( resp . Body )
if req . MasterDisk != 0 {
err = fmt . Errorf ( "%s" , respBytes )
_ = writer . WriteField ( "masterDisk" , strconv . FormatUint ( req . MasterDisk , 10 ) )
resp . Body . Close ( )
}
// }
if req . WorkerCPU != 0 {
// }
_ = writer . WriteField ( "workerCpu" , strconv . FormatUint ( req . WorkerCPU , 10 ) )
}
return nil , fmt . Errorf ( "could not execute request: %w" , err )
if req . WorkerNum != 0 {
_ = writer . WriteField ( "workerNum" , strconv . FormatUint ( req . WorkerNum , 10 ) )
}
if req . WorkerRAM != 0 {
_ = writer . WriteField ( "workerRam" , strconv . FormatUint ( req . WorkerRAM , 10 ) )
}
if req . WorkerDisk != 0 {
_ = writer . WriteField ( "workerDisk" , strconv . FormatUint ( req . WorkerDisk , 10 ) )
}
if req . ExtNetID != 0 {
_ = writer . WriteField ( "extnetId" , strconv . FormatUint ( req . ExtNetID , 10 ) )
}
if req . VinsId != 0 {
_ = writer . WriteField ( "vinsId" , strconv . FormatUint ( req . VinsId , 10 ) )
}
if ! req . WithLB {
_ = writer . WriteField ( "withLB" , strconv . FormatBool ( req . WithLB ) )
}
}
func ( dc * DecortClient ) domp ( req * http . Request , ctype string ) ( * http . Response , error ) {
_ = writer . WriteField ( "highlyAvailableLB" , strconv . FormatBool ( req . HighlyAvailable ) )
req . Header . Add ( "Content-Type" , ctype )
req . Header . Add ( "Authorization" , "bearer " + dc . cfg . Token )
req . Header . Set ( "Accept" , "application/json" )
// var resp *http.Response
if req . AdditionalSANs != nil {
// var err error
for _ , v := range req . AdditionalSANs {
buf , _ := io . ReadAll ( req . Body )
_ = writer . WriteField ( "additionalSANs" , v )
// req = req.Clone(req.Context())
}
}
if req . InitConfiguration != "" {
_ = writer . WriteField ( "initConfiguration" , req . InitConfiguration )
}
if req . ClusterConfiguration != "" {
_ = writer . WriteField ( "clusterConfiguration" , req . ClusterConfiguration )
}
if req . KubeletConfiguration != "" {
_ = writer . WriteField ( "kubeletConfiguration" , req . KubeletConfiguration )
}
if req . KubeProxyConfiguration != "" {
_ = writer . WriteField ( "kubeProxyConfiguration" , req . KubeProxyConfiguration )
}
if req . JoinConfiguration != "" {
_ = writer . WriteField ( "joinConfiguration" , req . JoinConfiguration )
}
if req . Description != "" {
_ = writer . WriteField ( "desc" , req . Description )
}
if req . UserData != "" {
_ = writer . WriteField ( "userData" , req . UserData )
}
// for i := uint64(0); i < dc.cfg.Retries; i++ {
_ = writer . WriteField ( "extnetOnly" , strconv . FormatBool ( req . ExtNetOnly ) )
req . Body = io . NopCloser ( bytes . NewBuffer ( buf ) )
resp , err := dc . client . Do ( req )
// if err == nil {
ct := writer . FormDataContentType ( )
if resp . StatusCode == 200 {
return resp , err
}
respBytes , _ := io . ReadAll ( resp . Body )
err = fmt . Errorf ( "%s" , respBytes )
resp . Body . Close ( )
// }
// }
return nil , fmt . Errorf ( "could not execute request: %w" , err )
writer . Close ( )
return reqBody , ct
}
}