pkg/cni/conf/conf.go (35 lines of code) (raw):
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
package conf
import (
"encoding/json"
"fmt"
"github.com/containernetworking/cni/pkg/types"
"github.com/containernetworking/cni/pkg/version"
)
type CNIConfig struct {
types.NetConf
ExcludedCIDRs []string `json:"excludedCIDRs"`
SocketPath string `json:"socketPath"`
}
func ParseCNIConfig(stdin []byte) (*CNIConfig, error) {
conf := &CNIConfig{}
if err := json.Unmarshal(stdin, &conf); err != nil {
return nil, fmt.Errorf("failed to parse network configuration: %v", err)
}
// Parse previous result. This will parse, validate, and place the
// previous result object into conf.PrevResult. If you need to modify
// or inspect the PrevResult you will need to convert it to a concrete
// versioned Result struct.
if err := version.ParsePrevResult(&conf.NetConf); err != nil {
return nil, fmt.Errorf("could not parse prevResult: %v", err)
}
return conf, nil
}
// K8sArgs is the valid CNI_ARGS used for Kubernetes
type K8sConfig struct {
types.CommonArgs
K8S_POD_NAME types.UnmarshallableString
K8S_POD_NAMESPACE types.UnmarshallableString
K8S_POD_INFRA_CONTAINER_ID types.UnmarshallableString
}
func LoadK8sInfo(args string) (*K8sConfig, error) {
k8sInfo := &K8sConfig{}
if err := types.LoadArgs(args, k8sInfo); err != nil {
return k8sInfo, err
}
return k8sInfo, nil
}