pcm-coordinator/pkg/utils/cloud.go

81 lines
1.8 KiB
Go

package utils
import (
"bufio"
"fmt"
"io"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/restmapper"
"os"
"sigs.k8s.io/yaml"
"strings"
)
type PConfig struct {
ParticipantId int64
}
// GetGVR 获取GVR
func GetGVR(clientSet *kubernetes.Clientset, gvk schema.GroupVersionKind) (schema.GroupVersionResource, error) {
gr, err := restmapper.GetAPIGroupResources(clientSet)
if err != nil {
return schema.GroupVersionResource{}, err
}
mapper := restmapper.NewDiscoveryRESTMapper(gr)
mapping, err := mapper.RESTMapping(gvk.GroupKind(), gvk.Version)
if err != nil {
return schema.GroupVersionResource{}, err
}
return mapping.Resource, nil
}
// UpdateParticipantId 更新本地配置文件ParticipantId
func UpdateParticipantId(filePath string, value string) error {
file, err := os.OpenFile(filePath, os.O_RDWR, 0)
if err != nil {
return err
}
reader := bufio.NewReader(file)
pos := int64(0)
for {
//读取每一行内容
line, err := reader.ReadString('\n')
if err != nil && err != io.EOF {
fmt.Println("Read file error!", err)
return err
}
//根据关键词覆盖当前行
if strings.Contains(line, "ParticipantId") {
bytes := []byte("ParticipantId: " + value)
file.WriteAt(bytes, pos)
}
//每一行读取完后记录位置
pos += int64(len(line))
//读到末尾
if err != nil && err == io.EOF {
fmt.Println("File read ok!")
break
}
}
return nil
}
// GetParticipantId 获取本地配置文件中的ParticipantId
func GetParticipantId(filePath string) (int64, error) {
pConfig := PConfig{}
file, err := os.OpenFile(filePath, os.O_RDONLY, 0)
if err != nil {
return 0, err
}
bytes, err := io.ReadAll(file)
if err != nil {
return 0, err
}
yaml.Unmarshal(bytes, &pConfig)
return pConfig.ParticipantId, nil
}