本文整理汇总了Golang中github.com/BurntSushi/toml.MetaData类的典型用法代码示例。如果您正苦于以下问题:Golang MetaData类的具体用法?Golang MetaData怎么用?Golang MetaData使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了MetaData类的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: validateConfig
//check validation of config
func validateConfig(conf *Config, md *toml.MetaData) error {
//for protection when debugging on non production environment
var errStrings []string
format := "[%s]"
inValid := false
for _, keys := range checkTomlKeys {
if !md.IsDefined(keys...) {
switch len(keys) {
case 1:
format = "[%s]"
case 2:
format = "[%s] %s"
case 3:
format = "[%s.%s] %s"
default:
//invalid check string
inValid = true
break
}
keysIfc := u.SliceStrToInterface(keys)
errStrings = append(errStrings, fmt.Sprintf(format, keysIfc...))
}
}
// Error
if inValid {
return errors.New("Error: Check Text has wrong number of parameter")
}
if len(errStrings) != 0 {
return fmt.Errorf("Error: There are lacks of keys : %#v \n", errStrings)
}
return nil
}
示例2: printTypes
func printTypes(md toml.MetaData) {
tabw := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0)
for _, key := range md.Keys() {
fmt.Fprintf(tabw, "%s%s\t%s\n",
strings.Repeat(" ", len(key)-1), key, md.Type(key...))
}
tabw.Flush()
}
示例3: analyzeFmdConf
func analyzeFmdConf(config map[string]toml.Primitive, md *toml.MetaData) error {
if section, ok := config["ngxfmd"]; ok {
err := md.PrimitiveDecode(section, fmConf)
if err != nil {
fmt.Println(err.Error())
return err
}
fmt.Printf("(%+v)\n", *fmConf)
return nil
} else {
fmt.Println("analyze nginx files manager configuration failed")
return errors.New("does not specify fmd section configuration")
}
}
示例4: analyzeCmddConf
func analyzeCmddConf(config map[string]toml.Primitive, md *toml.MetaData) error {
if section, ok := config["cmdd"]; ok {
err := md.PrimitiveDecode(section, cmddConfig)
if err != nil {
fmt.Println(err.Error())
return err
}
fmt.Printf("(%+v)\n", *cmddConfig)
return nil
} else {
fmt.Println("analyze cmddConfig failed")
return errors.New("does not specify cmmd section configuration")
}
}
示例5: validateScriptsConf
func validateScriptsConf(scripts *ScriptsConf, meta toml.MetaData) error {
if scripts == nil {
return nil
}
if !meta.IsDefined("scripts", "path") {
return errors.New("scripts section provided without path.")
}
if !meta.IsDefined("scripts", "run_interval_ms") {
return errors.New("scripts section provided without run_interval_ms.")
}
if scripts.RunIntervalMS <= 0 {
return errors.New("scripts.run_interval_ms must be positive")
}
return nil
}
示例6: loadSystemConfig
func loadSystemConfig(conf string, isFileName bool) (*SystemConf, error) {
sc := newSystemConf()
var decodeMeta toml.MetaData
var err error
if isFileName {
decodeMeta, err = toml.DecodeFile(conf, &sc)
} else {
decodeMeta, err = toml.Decode(conf, &sc)
}
if err != nil {
return sc, err
}
if len(decodeMeta.Undecoded()) > 0 {
return sc, fmt.Errorf("undecoded fields in system configuration: %v", decodeMeta.Undecoded())
}
sc.md = decodeMeta
return sc, nil
}
示例7: main
func main() {
var cfg config
var md toml.MetaData
md, err := toml.DecodeFile(configFile, &cfg)
if err != nil {
log.Fatal(err)
}
for _, o := range cfg.Outs {
out_plugin := plugin.GetOut(o.Plugin)
out_cfg_prim := o.Config
var plugin_conf = out_plugin.GetConfig()
md.PrimitiveDecode(out_cfg_prim, plugin_conf)
}
out := plugin.GetOut("outfile")
result := out.Write("somestring")
fmt.Println(result)
}
示例8: InitHandlerConf
func InitHandlerConf(confs map[string]toml.Primitive, md *toml.MetaData) error {
var err error
for k, handler := range CmdHandlers {
if conf, ok := confs[k]; ok {
handlerConf := handler.ConfigStruct()
err = md.PrimitiveDecode(conf, handlerConf)
if err != nil {
cmdlog.EPrintln(err.Error())
return err
}
err = handler.Init(handlerConf)
if err != nil {
cmdlog.EPrintln(err.Error())
return err
}
}
}
return err
}
示例9: parseConfig
func parseConfig(configFile string) map[string]*Service {
var config Services
var md toml.MetaData
var err error
if md, err = toml.DecodeFile(configFile, &config); err != nil {
log.Fatal(err)
}
services := make(map[string]*Service)
for name, serv := range config {
s := NewService()
s.Name = name
services[name] = s
for _, k := range md.Keys() {
ks := strings.Split(k.String(), ".")
if len(ks) > 1 && ks[0] == name {
switch ks[1] {
case "srcport":
s.Srcport = serv.Srcport
case "srcflags":
s.Srcflags = serv.Srcflags
case "srcproto":
s.Srcproto = serv.Srcproto
case "dsthost":
s.Dsthost = serv.Dsthost
case "dstproto":
s.Dstproto = serv.Dstproto
case "dstport":
s.Dstport = serv.Dstport
case "enabled":
s.Enabled = serv.Enabled
}
}
}
}
log.Println("Found", len(services), "services")
return services
}
示例10: validateOSStatsConf
func validateOSStatsConf(osStats *OSStatsConf, meta toml.MetaData) error {
if osStats == nil {
return nil
}
if meta.IsDefined("os_stats", "check_interval_ms") {
if osStats.CheckIntervalMS <= 0 {
return errors.New("check_interval_ms must be positive")
}
}
if err := validateMemConf(osStats.Mem); err != nil {
return err
}
if err := validateCPUConf(osStats.CPU); err != nil {
return err
}
// For now, any parseable NetConf is valid.
for _, diskConf := range osStats.Disk {
if err := validateDiskConf(diskConf); err != nil {
return err
}
}
return nil
}
示例11: LoadContainerSettings
//Loads a container configuration object, overriding a base
//This function prevents empty TOML keys (anything you didn't specify) from overriding a preset value.
func LoadContainerSettings(base *Container, inc *Container, meta *toml.MetaData, key ...string) {
if meta.IsDefined(append(key, "command")...) {
base.Command = inc.Command
}
if meta.IsDefined(append(key, "folder")...) {
base.Folder = inc.Folder
}
if meta.IsDefined(append(key, "privileged")...) {
base.Privileged = inc.Privileged
}
if meta.IsDefined(append(key, "mounts")...) {
base.Mounts = append(base.Mounts, inc.Mounts...)
}
if meta.IsDefined(append(key, "ports")...) {
base.Ports = append(base.Ports, inc.Ports...)
}
if meta.IsDefined(append(key, "dns")...) {
base.DNS = append(base.DNS, inc.DNS...)
}
if meta.IsDefined(append(key, "attach")...) {
base.Attach = inc.Attach
}
if meta.IsDefined(append(key, "purge")...) {
base.Purge = inc.Purge
}
if meta.IsDefined(append(key, "environment")...) {
base.Environment = append(base.Environment, inc.Environment...)
}
}
示例12: SetDefaultConfigValues
func SetDefaultConfigValues(md toml.MetaData, bt *Bgp) error {
neighbors := []neighbor{}
global := make(map[string]bool)
for _, key := range md.Keys() {
if !strings.HasPrefix(key.String(), "Global") {
continue
}
if key.String() != "Global" {
global[key.String()] = true
}
}
if _, ok := global["Global.AfiSafis.AfiSafiList"]; !ok {
bt.Global.AfiSafis.AfiSafiList = []AfiSafi{
AfiSafi{AfiSafiName: "ipv4-unicast"},
AfiSafi{AfiSafiName: "ipv6-unicast"},
AfiSafi{AfiSafiName: "l3vpn-ipv4-unicast"},
AfiSafi{AfiSafiName: "l3vpn-ipv6-unicast"},
AfiSafi{AfiSafiName: "l2vpn-evpn"},
AfiSafi{AfiSafiName: "encap"},
AfiSafi{AfiSafiName: "rtc"},
AfiSafi{AfiSafiName: "ipv4-flowspec"},
AfiSafi{AfiSafiName: "l3vpn-ipnv4-flowspec"},
}
}
nidx := 0
for _, key := range md.Keys() {
if !strings.HasPrefix(key.String(), "Neighbors.NeighborList") {
continue
}
if key.String() == "Neighbors.NeighborList" {
neighbors = append(neighbors, neighbor{attributes: make(map[string]bool)})
nidx++
} else {
neighbors[nidx-1].attributes[key.String()] = true
}
}
for i, n := range neighbors {
neighbor := &bt.Neighbors.NeighborList[i]
timerConfig := &neighbor.Timers.TimersConfig
if _, ok := n.attributes["Neighbors.NeighborList.Timers.TimersConfig.ConnectRetry"]; !ok {
timerConfig.HoldTime = float64(DEFAULT_CONNECT_RETRY)
}
if _, ok := n.attributes["Neighbors.NeighborList.Timers.TimersConfig.HoldTime"]; !ok {
timerConfig.HoldTime = float64(DEFAULT_HOLDTIME)
}
if _, ok := n.attributes["Neighbors.NeighborList.Timers.TimersConfig.KeepaliveInterval"]; !ok {
timerConfig.KeepaliveInterval = timerConfig.HoldTime / 3
}
if _, ok := n.attributes["Neighbors.NeighborList.Timers.TimersConfig.IdleHoldTimeAfterReset"]; !ok {
timerConfig.IdleHoldTimeAfterReset = float64(DEFAULT_IDLE_HOLDTIME_AFTER_RESET)
}
if _, ok := n.attributes["Neighbors.NeighborList.AfiSafis.AfiSafiList"]; !ok {
if neighbor.NeighborConfig.NeighborAddress.To4() != nil {
neighbor.AfiSafis.AfiSafiList = []AfiSafi{
AfiSafi{AfiSafiName: "ipv4-unicast"}}
} else {
neighbor.AfiSafis.AfiSafiList = []AfiSafi{
AfiSafi{AfiSafiName: "ipv6-unicast"}}
}
} else {
for _, rf := range neighbor.AfiSafis.AfiSafiList {
_, err := bgp.GetRouteFamily(rf.AfiSafiName)
if err != nil {
return err
}
}
}
if _, ok := n.attributes["Neighbors.NeighborList.NeighborConfig.PeerType"]; !ok {
if neighbor.NeighborConfig.PeerAs != bt.Global.GlobalConfig.As {
neighbor.NeighborConfig.PeerType = PEER_TYPE_EXTERNAL
} else {
neighbor.NeighborConfig.PeerType = PEER_TYPE_INTERNAL
}
}
}
for _, r := range bt.RpkiServers.RpkiServerList {
if r.RpkiServerConfig.Port == 0 {
r.RpkiServerConfig.Port = bgp.RPKI_DEFAULT_PORT
}
}
return nil
}