You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
259 lines
7.8 KiB
259 lines
7.8 KiB
/*
|
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
|
Authors:
|
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
/*
|
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
|
Orchestration Technology) with Terraform by Hashicorp.
|
|
|
|
Source code: https://repos.digitalenergy.online/BASIS/terraform-provider-decort
|
|
|
|
Please see README.md to learn where to place source code so that it
|
|
builds seamlessly.
|
|
|
|
Documentation: https://repos.digitalenergy.online/BASIS/terraform-provider-decort/wiki
|
|
*/
|
|
|
|
package k8s
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"strconv"
|
|
)
|
|
|
|
type K8sNodeRecord struct {
|
|
ID int `json:"id"`
|
|
Name string `json:"name"`
|
|
Disk int `json:"disk"`
|
|
Cpu int `json:"cpu"`
|
|
Num int `json:"num"`
|
|
Ram int `json:"ram"`
|
|
DetailedInfo []struct {
|
|
ID int `json:"id"`
|
|
Name string `json:"name"`
|
|
} `json:"detailedInfo"`
|
|
SepID int `json:"SepId"`
|
|
SepPool string `json:"SepPool"`
|
|
}
|
|
|
|
//K8sRecord represents k8s instance
|
|
type K8sRecord struct {
|
|
AccountID int `json:"accountId"`
|
|
AccountName string `json:"accountName"`
|
|
CI int `json:"ciId"`
|
|
ID int `json:"id"`
|
|
Groups struct {
|
|
Masters K8sNodeRecord `json:"masters"`
|
|
Workers []K8sNodeRecord `json:"workers"`
|
|
} `json:"k8sGroups"`
|
|
LbID int `json:"lbId"`
|
|
Name string `json:"name"`
|
|
RgID int `json:"rgId"`
|
|
RgName string `json:"rgName"`
|
|
VinsID int `json:"vinsId"`
|
|
}
|
|
|
|
type K8sRecordList []K8sRecord
|
|
|
|
//LbRecord represents load balancer instance
|
|
type LbRecord struct {
|
|
ID int `json:"id"`
|
|
Name string `json:"name"`
|
|
RgID int `json:"rgId"`
|
|
VinsID int `json:"vinsId"`
|
|
ExtNetID int `json:"extnetId"`
|
|
PrimaryNode struct {
|
|
BackendIP string `json:"backendIp"`
|
|
ComputeID int `json:"computeId"`
|
|
FrontendIP string `json:"frontendIp"`
|
|
NetworkID int `json:"networkId"`
|
|
} `json:"primaryNode"`
|
|
}
|
|
|
|
//Blasphemous workaround for parsing Result value
|
|
type TaskResult int
|
|
|
|
func (r *TaskResult) UnmarshalJSON(b []byte) error {
|
|
if b[0] == '"' {
|
|
b := b[1 : len(b)-1]
|
|
if len(b) == 0 {
|
|
*r = 0
|
|
return nil
|
|
}
|
|
n, err := strconv.Atoi(string(b))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
*r = TaskResult(n)
|
|
} else if b[0] == '[' {
|
|
res := []interface{}{}
|
|
if err := json.Unmarshal(b, &res); err != nil {
|
|
return err
|
|
}
|
|
if n, ok := res[0].(float64); ok {
|
|
*r = TaskResult(n)
|
|
} else {
|
|
return fmt.Errorf("could not unmarshal %v into int", res[0])
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
//AsyncTask represents a long task completion status
|
|
type AsyncTask struct {
|
|
AuditID string `json:"auditId"`
|
|
Completed bool `json:"completed"`
|
|
Error string `json:"error"`
|
|
Log []string `json:"log"`
|
|
Result TaskResult `json:"result"`
|
|
Stage string `json:"stage"`
|
|
Status string `json:"status"`
|
|
UpdateTime uint64 `json:"updateTime"`
|
|
UpdatedTime uint64 `json:"updatedTime"`
|
|
}
|
|
|
|
type SshKeyConfig struct {
|
|
User string
|
|
SshKey string
|
|
UserShell string
|
|
}
|
|
|
|
//FromSDK
|
|
type K8SGroup struct {
|
|
Annotations []string `json:"annotations"`
|
|
CPU uint64 `json:"cpu"`
|
|
DetailedInfo DetailedInfoList `json:"detailedInfo"`
|
|
Disk uint64 `json:"disk"`
|
|
GUID string `json:"guid"`
|
|
ID uint64 `json:"id"`
|
|
Labels []string `json:"labels"`
|
|
Name string `json:"name"`
|
|
Num uint64 `json:"num"`
|
|
RAM uint64 `json:"ram"`
|
|
Taints []string `json:"taints"`
|
|
}
|
|
|
|
type K8SGroupList []K8SGroup
|
|
|
|
type DetailedInfo struct {
|
|
ID uint64 `json:"id"`
|
|
Name string `json:"name"`
|
|
Status string `json:"status"`
|
|
TechStatus string `json:"techStatus"`
|
|
}
|
|
|
|
type DetailedInfoList []DetailedInfo
|
|
|
|
type K8SRecord struct {
|
|
ACL ACLGroup `json:"ACL"`
|
|
AccountID uint64 `json:"accountId"`
|
|
AccountName string `json:"accountName"`
|
|
BServiceID uint64 `json:"bserviceId"`
|
|
CIID uint64 `json:"ciId"`
|
|
CreatedBy string `json:"createdBy"`
|
|
CreatedTime uint64 `json:"createdTime"`
|
|
DeletedBy string `json:"deletedBy"`
|
|
DeletedTime uint64 `json:"deletedTime"`
|
|
ID uint64 `json:"id"`
|
|
K8CIName string `json:"k8ciName"`
|
|
K8SGroups K8SGroups `json:"k8sGroups"`
|
|
LBID uint64 `json:"lbId"`
|
|
Name string `json:"name"`
|
|
RGID uint64 `json:"rgId"`
|
|
RGName string `json:"rgName"`
|
|
Status string `json:"status"`
|
|
TechStatus string `json:"techStatus"`
|
|
UpdatedBy string `json:"updatedBy"`
|
|
UpdatedTime uint64 `json:"updatedTime"`
|
|
}
|
|
|
|
type K8SRecordList []K8SRecord
|
|
|
|
type K8SGroups struct {
|
|
Masters MasterGroup `json:"masters"`
|
|
Workers K8SGroupList `json:"workers"`
|
|
}
|
|
|
|
type MasterGroup struct {
|
|
CPU uint64 `json:"cpu"`
|
|
DetailedInfo DetailedInfoList `json:"detailedInfo"`
|
|
Disk uint64 `json:"disk"`
|
|
ID uint64 `json:"id"`
|
|
Name string `json:"name"`
|
|
Num uint64 `json:"num"`
|
|
RAM uint64 `json:"ram"`
|
|
}
|
|
|
|
type ACLGroup struct {
|
|
AccountACL ACLList `json:"accountAcl"`
|
|
K8SACL ACLList `json:"k8sAcl"`
|
|
RGACL ACLList `json:"rgAcl"`
|
|
}
|
|
|
|
type ACL struct {
|
|
Explicit bool `json:"explicit"`
|
|
GUID string `json:"guid"`
|
|
Right string `json:"right"`
|
|
Status string `json:"status"`
|
|
Type string `json:"type"`
|
|
UserGroupID string `json:"userGroupId"`
|
|
}
|
|
|
|
type ACLList []ACL
|
|
|
|
type K8SItem struct {
|
|
AccountID uint64 `json:"accountId"`
|
|
AccountName string `json:"accountName"`
|
|
ACL []interface{} `json:"acl"`
|
|
BServiceID uint64 `json:"bserviceId"`
|
|
CIID uint64 `json:"ciId"`
|
|
Config interface{} `json:"config"`
|
|
CreatedBy string `json:"createdBy"`
|
|
CreatedTime uint64 `json:"createdTime"`
|
|
DeletedBy string `json:"deletedBy"`
|
|
DeletedTime uint64 `json:"deletedTime"`
|
|
Description string `json:"desc"`
|
|
ExtNetID uint64 `json:"extnetId"`
|
|
GID uint64 `json:"gid"`
|
|
GUID uint64 `json:"guid"`
|
|
ID uint64 `json:"id"`
|
|
LBID uint64 `json:"lbId"`
|
|
Milestones uint64 `json:"milestones"`
|
|
Name string `json:"name"`
|
|
RGID uint64 `json:"rgId"`
|
|
RGName string `json:"rgName"`
|
|
ServiceAccount ServiceAccount `json:"serviceAccount"`
|
|
Status string `json:"status"`
|
|
TechStatus string `json:"techStatus"`
|
|
UpdatedBy string `json:"updatedBy"`
|
|
UpdatedTime uint64 `json:"updatedTime"`
|
|
VINSID uint64 `json:"vinsId"`
|
|
WorkersGroup K8SGroupList `json:"workersGroups"`
|
|
}
|
|
|
|
type ServiceAccount struct {
|
|
GUID string `json:"guid"`
|
|
Password string `json:"password"`
|
|
Username string `json:"username"`
|
|
}
|
|
|
|
type K8SList []K8SItem
|