美文网首页
golang 模板使用示例

golang 模板使用示例

作者: jojo1313 | 来源:发表于2019-10-30 18:42 被阅读0次

生产环境keepalived.conf 文件使用golang模板渲染示例

//执行渲染代码样例
import "text/template"
type LvsData struct {
    Laddr_v4    []string
    Laddr_v6    []string
    Naddr_v4    string
    Naddr_v6    string
    Static_addr []string
    Channel     []common.Lvsmap
    //special_channel []map[string]interface{}
}
type Lvsmap struct {
    Ip_type string `json:"ip_type"`
    Nat_type string `json:"nat_type"`
    Remark string `json:"remark"`
    Proto string `json:"proto"`
    Port string `json:"port"`
    Rport string `json:"rport"`
    Vip []string `json:"vip"`
    Sch_type string `json:"sch_type"`
    Rs []map[string]string `json:"rs"`
    rstag map[string]int
}
func RenderKeepalivedFile(nodeinfo common.NodeInfo) {
    temp := "D:\\GOPATH\\src\\github.com\\tele_test\\template\\keepalived.txt"
    keepfile := "D:\\GOPATH\\src\\github.com\\tele_test\\template\\keepalived.temp"
    responsefile := "D:\\GOPATH\\src\\github.com\\tele_test\\template\\keepalived.conf"

    v := LvsData{}
    v.Channel = nodeinfo.Channel
    v.Laddr_v4 = common.GenAddrInfo().LaddrIpv4 // 获取lvs用于流量转发ipv4的ip
    v.Laddr_v6 = common.GenAddrInfo().LaddrIpv6
    v.Naddr_v4,_ = common.Config.String("Node","NodeIp4")
    v.Naddr_v6,_ = common.Config.String("Node","NodeIp6")
    v.Static_addr = common.GenAddrInfo().StaticIpaddress

    tmpl, err := template.ParseFiles(temp)
    if err != nil {
        panic(err)
    }
    err = tmpl.Execute(os.Stdout, v)
    if err != nil {
        panic(err)
    }
    file, err := os.OpenFile(keepfile, os.O_CREATE|os.O_WRONLY, 0755)
    if err != nil {
        panic(err)
    }
    tmpl.Execute(file, v)
    err = common.DeleteBlankFile(keepfile, responsefile)
    if err != nil {
        panic(err)
    }
}

模板文件编写示例:

{{$proto := "TCP"}} {{$ip_type :="ipv4"}} {{$remark :="backtosource"}} {{$Survi1 := "TCP_CHECK" }} {{$Survi2 := "HTTP_GET" }} {{$Survi3 := "SSL_GET" }}
local_address_group laddr_v4 {
    {{ range .Laddr_v4 }}
    {{ . }}
    {{ end }}
}

local_address_group laddr_v6 {
    {{ range .Laddr_v6 }}
    {{ . }}
    {{ end }}
}
local_address_group naddr_v4 {
    {{.Naddr_v4}}
}
local_address_group naddr_v6 {
    {{.Naddr_v6}}
}

static_ipaddress {
    {{ range .Static_addr }}
    {{ . }}
    {{ end }}
}

{{ range .Channel }}
  {{$port:=.Port}}
  virtual_server_group ipv4_vip_group_{{.Port}}_{{.Rport}} {
    {{ range .Vip }}
    {{.}} {{$port}}
    {{end}}
  }
  virtual_server group ipv4_vip_group_{{ .Port }}_{{.Rport}} {
    delay_loop 5
    lb_algo {{ .Sch_type }}
    lb_kind {{ .Nat_type }}
    protocol TCP
    {{if eq .Proto $proto }}
    syn_proxy
    virtualhost lvscheck.xitong.net
    {{ end }}
    {{if eq .Ip_type $ip_type}}
     {{if eq .Remark $remark}}
    laddr_group_name naddr_v4
     {{else}}
    laddr_group_name laddr_v4
     {{end}}
    {{else}}
     {{if eq .Remark $remark}}
    laddr_group_name naddr_v6
     {{else}}
    laddr_group_name laddr_v6
     {{end}}
    {{end}}

    {{ range .Rs }}
     real_server {{ .ip }} {{ .port }} {
      weight {{ .weight }}
      {{ if eq .survi $Survi1}}
       TCP_CHECK {
        connect_port {{ .port }}
        connect_timeout 5
      }
      {{ end }}
      {{ if eq .survi $Survi2}}
        HTTP_GET {
         url {
             path /status.html
             digest {{ .md5 }}
         }
         connect_port {{ .port }}
         connect_timeout 3
         nb_get_retry 3
         delay_before_retry 3
        }
      {{ end }}
      {{ if eq .survi $Survi3}}
       SSL_GET {
        url {
            path /status.html
            digest {{ .md5 }}
        }
        connect_port {{ .port }}
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
        }
      {{ end }}
     }
    {{ end }}
  }

{{ end }}

相关文章

  • golang 模板使用示例

    生产环境keepalived.conf 文件使用golang模板渲染示例 模板文件编写示例:

  • go问题整理

    初学golang,记录下日常遇到的问题 golang struct 字段是否被赋值 使用指针类型解决,代码示例 g...

  • 1.docker 安装(含 docker compose)

    docekr history (构建历史) 简单使用 参数说明 Golang的template(模板引擎)简明教程...

  • groupcache 使用示例

    一个缓存系统,memcached的golang版本,这里先了解一下使用方式 使用示例 groupcache由于是框...

  • golang代码分析

    1.golang并行示例(1)

  • 【C++ Templates(2)】类模板

    类模板示例 使用类模板 模板实参可以是任何类型 成员函数只有被调用到时才实例化 如果类模板有static数据成员,...

  • 02 类模板

    类模板示例 使用类模板 模板实参可以是任何类型 成员函数只有被调用到时才实例化 如果类模板有static数据成员,...

  • gin框架的简单使用

    Golang Gin框架 涉及到的context和middleware的使用示例 用到的库:go get -u g...

  • 01 函数模板

    函数模板示例 最简单的例子如下。使用作用域运算符(::)表示指定使用全局命名空间中的 max 模板,而非 std:...

  • golang sync.WaitGroup使用示例

    golang中同步方式 golang中有2种方式同步程序 一种使用channel 另一种使用锁机制。 sync.W...

网友评论

      本文标题:golang 模板使用示例

      本文链接:https://www.haomeiwen.com/subject/ubravctx.html