首页 > 其他分享 >go text模板

go text模板

时间:2023-07-14 22:35:03浏览次数:39  
标签:return string text CriSocket envMap func go kubeadm 模板

package install

import (
"bytes"
"fmt"
"strings"
"text/template"

"github.com/fanux/sealos/pkg/logger"
"sigs.k8s.io/yaml"
)

var ConfigType string

func setKubeadmAPI(version string) {
major, _ := GetMajorMinorInt(version)
switch {
//
case major < 120:
KubeadmAPI = KubeadmV1beta1
CriSocket = DefaultDockerCRISocket
case major < 123 && major >= 120:
KubeadmAPI = KubeadmV1beta2
CriSocket = DefaultContainerdCRISocket
case major >= 123:
KubeadmAPI = KubeadmV1beta3
CriSocket = DefaultContainerdCRISocket
default:
KubeadmAPI = KubeadmV1beta3
CriSocket = DefaultContainerdCRISocket
}
logger.Debug("KubeadmApi: %s", KubeadmAPI)
logger.Debug("CriSocket: %s", CriSocket)
}

func Config() {
switch ConfigType {
case "kubeadm":
printlnKubeadmConfig()
case "join":
printlnJoinKubeadmConfig()
default:
printlnKubeadmConfig()
}
}

func joinKubeadmConfig() string {
var sb strings.Builder
sb.Write([]byte(JoinCPTemplateText))
return sb.String()
}

func printlnJoinKubeadmConfig() {
fmt.Println(joinKubeadmConfig())
}

func kubeadmConfig() string {
var sb strings.Builder
sb.Write([]byte(InitTemplateText))
return sb.String()
}

func printlnKubeadmConfig() {
fmt.Println(kubeadmConfig())
}

//Template is
func Template() []byte {
return TemplateFromTemplateContent(kubeadmConfig())
}

// JoinTemplate is generate JoinCP nodes configuration by master ip.
func JoinTemplate(ip string, cgroup string) []byte {
return JoinTemplateFromTemplateContent(joinKubeadmConfig(), ip, cgroup)
}

func JoinTemplateFromTemplateContent(templateContent, ip, cgroup string) []byte {
setKubeadmAPI(Version)
tmpl, err := template.New("text").Parse(templateContent)
defer func() {
if r := recover(); r != nil {
logger.Error("join template parse failed:", err)
}
}()
if err != nil {
panic(1)
}
var envMap = make(map[string]interface{})
envMap["Master0"] = IPFormat(MasterIPs[0])
envMap["Master"] = ip
envMap["TokenDiscovery"] = JoinToken
envMap["TokenDiscoveryCAHash"] = TokenCaCertHash
envMap["VIP"] = VIP
envMap["KubeadmApi"] = KubeadmAPI
envMap["CriSocket"] = CriSocket
envMap["CgroupDriver"] = cgroup
var buffer bytes.Buffer
_ = tmpl.Execute(&buffer, envMap)
return buffer.Bytes()
}

func TemplateFromTemplateContent(templateContent string) []byte {
setKubeadmAPI(Version)
tmpl, err := template.New("text").Parse(templateContent)
defer func() {
if r := recover(); r != nil {
logger.Error("template parse failed:", err)
}
}()
if err != nil {
panic(1)
}
var masters []string
getmasters := MasterIPs
for _, h := range getmasters {
masters = append(masters, IPFormat(h))
}
var envMap = make(map[string]interface{})
envMap["CertSANS"] = CertSANS
envMap["VIP"] = VIP
envMap["Masters"] = masters
envMap["Version"] = Version
envMap["ApiServer"] = APIServer
envMap["PodCIDR"] = PodCIDR
envMap["SvcCIDR"] = SvcCIDR
envMap["Repo"] = Repo
envMap["Master0"] = IPFormat(MasterIPs[0])
envMap["Network"] = Network
envMap["CgroupDriver"] = CgroupDriver
envMap["KubeadmApi"] = KubeadmAPI
envMap["CriSocket"] = CriSocket
var buffer bytes.Buffer
_ = tmpl.Execute(&buffer, envMap)
return buffer.Bytes()
}

//根据yaml转换kubeadm结构
func KubeadmDataFromYaml(context string) *KubeadmType {
yamls := strings.Split(context, "---")
if len(yamls) > 0 {
for _, y := range yamls {
cfg := strings.TrimSpace(y)
if cfg == "" {
continue
} else {
kubeadm := &KubeadmType{}
if err := yaml.Unmarshal([]byte(cfg), kubeadm); err == nil {
//
if kubeadm.Kind == "ClusterConfiguration" {
if kubeadm.Networking.DNSDomain == "" {
kubeadm.Networking.DNSDomain = "cluster.local"
}
return kubeadm
}
}
}
}
}
return nil
}

type KubeadmType struct {
Kind string `yaml:"kind,omitempty"`
APIServer struct {
CertSANs []string `yaml:"certSANs,omitempty"`
} `yaml:"apiServer"`
Networking struct {
DNSDomain string `yaml:"dnsDomain,omitempty"`
} `yaml:"networking"`
}

标签:return,string,text,CriSocket,envMap,func,go,kubeadm,模板
From: https://www.cnblogs.com/cheyunhua/p/17555144.html

相关文章

  • 用googletest写cpp单测
    框架概述GoogleTest(也称为googletest)是由Google开发的C++单元测试框架。它的首个版本是在2004年发布的,作为Google内部的测试框架使用。随后,GoogleTest在开源社区中得到广泛应用,并在许多项目和组织中成为首选的C++单元测试框架。GoogleTest提供了丰富的断言函数和......
  • 洛谷 P3372 【模板】线段树 1
    题目传送门题目描述如题,已知一个数列,你需要进行下面两种操作:1.将某一个数加上x2.求出某区间每一个数的和输入格式第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。接下来M行每行包含3......
  • 鸟类识别系统python+TensorFlow+Django网页界面+卷积网络算法+深度学习模型
    一、介绍鸟类识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Django框架,开发网页端操作平台,实现用户上传一张图片识别其名称。二、效果图片三、演示视频and代码视频+......
  • mongodb报错Sort exceeded memory limit of 104857600 bytes
    mongodb运行过程中,遇到错误信息:2023-07-14T09:29:33.853ERRFailedtoQueryBsPoolUnivStaterror="(QueryExceededMemoryLimitNoDiskUseAllowed)Executorerrorduringfindcommand::causedby::Sortexceededmemorylimitof104857600bytes,butdidnotoptinto......
  • 在批处理中使用【if】和【goto】的例子
    在批处理中使用【if】和【goto】的例子:@echooffremThisscriptassumesthatREAPERisinstalledinC:\ProgramFiles\REAPERremIfyouhaveitinstalledsomewhereelse,modifythisnextlinetopointtotherightfolderremORpassittothescriptlike:reap......
  • 根据模板自动匹配目标字符串
    好的,让我们模拟一下这段代码的运行,并打印出每一行的结果://声明一个静态的正则表达式模式,用于匹配大括号中的内容privatestaticfinalPatternpattern=Pattern.compile("\\{(.*?)\\}");privatestaticMatchermatcher;//字符串格式化替换方法publicStringformatStr......
  • mongodb4.4.22主从(副本集附仲裁节点)部署带认证模式
    环境:OS:CentOS7DB:4.4.22机器角色:192.168.1.102:29001主192.168.1.104:29001从192.168.1.105:29001仲裁节点 1.下载相应的版本https://www.mongodb.com/download-center/community我这里下载的是mongodb-linux-x86_64-rhel70-4.4.22.tgz 2.创建安装目录192.168.1.102......
  • dede共用同一个文章ID展示多个不同的模板页面
    DEDE共用同一个文章ID展示多个不同的模板页面,比如链接:http://jinmengqiang.cn/info-1.htmlhttp://jinmengqiang.cn/plus/show.php?aid=1以上2个链接可以使用不同的模板,其实内容可以相同也可以不同的进行调用(这个需要后台二次开发进行配合)。首先复制/m/view.php并且改名......
  • 微擎开发使用workerman时,使用微擎pdo_xxx提示MySQL server has gone away解决办法
    微擎开发使用workerman时,使用微擎pdo_xxx提示MySQLserverhasgoneaway解决办法#找到微擎的DB类ramework\class\db.class.phppublicfunctionreConnect($errorInfo,$params){ if(in_array($errorInfo[1],array(1317,2013))){ $this->pdo=null; $this->conne......
  • go 给一个切片,将其写入到一个单链表中
    packagemainimport"fmt"//功能:实现一个单链表(给一个切片,将其写入到一个单链表中)typeNodestruct{ValueintNext*Node}funccreate(slice[]int)*Node{iflen(slice)==0{returnnil}node:=new(Node)node.Value=sl......