123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- package main
- import (
- "bytes"
- "fmt"
- "os"
- "strconv"
- "strings"
- "text/template"
- )
- // 定义接口结构
- type InterfaceConfig struct {
- Name string
- MAC string
- IP string
- Prefix string
- Mask string
- Gateway string
- }
- // 定义模板内容
- const netplanTemplate = `network:
- version: 2
- ethernets:
- {{- range . }}
- {{ .Name }}:
- match:
- macaddress: {{ .MAC }}
- dhcp4: no
- addresses:
- - {{ .IP }}/{{ .Prefix }}
- gateway4: {{ .Gateway }}
- nameservers:
- addresses:
- - 8.8.8.8
- - 8.8.4.4
- {{- end }}
- `
- // GenerateNetCardConfig 生成网卡配置
- func GenerateNetCardConfig(netCardConfig []InterfaceConfig) (string, error) {
- // 创建模板
- for k, config := range netCardConfig {
- Prefix, err := maskToCIDR(config.Mask)
- if err != nil {
- return "", err
- }
- netCardConfig[k].Prefix = strconv.Itoa(Prefix)
- }
- tmpl, err := template.New("netplan").Parse(netplanTemplate)
- if err != nil {
- fmt.Println("Error parsing template:", err)
- return "", err
- }
- // 使用 bytes.Buffer 来捕获模板的输出
- var output bytes.Buffer
- // 执行模板并将结果写入到 output
- err = tmpl.Execute(&output, netCardConfig)
- if err != nil {
- fmt.Println("Error executing template:", err)
- return "", err
- }
- // 将生成的字符串打印出来
- return output.String(), nil
- }
- // 将子网掩码转换为CIDR前缀
- func maskToCIDR(mask string) (int, error) {
- parts := strings.Split(mask, ".")
- cidr := 0
- for _, part := range parts {
- num, err := strconv.Atoi(part)
- if err != nil {
- return 0, err
- }
- bits := fmt.Sprintf("%08b", num)
- cidr += strings.Count(bits, "1")
- }
- return cidr, nil
- }
- func main() {
- // 定义接口配置
- netCardConfig := []InterfaceConfig{
- {
- Name: "ens33",
- MAC: "00:0c:29:0e:4f:8e",
- IP: "192.168.1.1",
- Mask: "255.255.255.0",
- Gateway: "192.168.1.1",
- },
- {
- Name: "ens37",
- MAC: "00:0c:29:0e:4f:90",
- IP: "192.168.2.1",
- Mask: "255.255.255.0",
- Gateway: "192.168.2.1",
- },
- }
- // 生成网卡配置
- config, err := GenerateNetCardConfig(netCardConfig)
- if err != nil {
- fmt.Println("生成网络配置文件失败:", err)
- return
- }
- create, err := os.Create("network-config")
- if err != nil {
- fmt.Println("创建配置文件失败:", err)
- return
- }
- defer create.Close()
- _, _ = create.WriteString(config)
- }
|