美文网首页
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 模板使用示例

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