Update vendor for network-attachment-definition-client update

Signed-off-by: Billy McFall <22157057+Billy99@users.noreply.github.com>
This commit is contained in:
Billy McFall 2020-11-10 15:17:02 -05:00
parent e064679967
commit 2cd91b6bad
5 changed files with 289 additions and 8 deletions

View File

@ -38,15 +38,74 @@ type DNS struct {
Options []string `json:"options,omitempty"` Options []string `json:"options,omitempty"`
} }
const (
DeviceInfoTypePCI = "pci"
DeviceInfoTypeVHostUser = "vhost-user"
DeviceInfoTypeMemif = "memif"
DeviceInfoTypeVDPA = "vdpa"
DeviceInfoVersion = "1.0.0"
)
// DeviceInfo contains the information of the device associated
// with this network (if any)
type DeviceInfo struct {
Type string `json:"type,omitempty"`
Version string `json:"version,omitempty"`
Pci *PciDevice `json:"pci,omitempty"`
Vdpa *VdpaDevice `json:"vdpa,omitempty"`
VhostUser *VhostDevice `json:"vhost-user,omitempty"`
Memif *MemifDevice `json:"memif,omitempty"`
}
type PciDevice struct {
PciAddress string `json:"pci-address,omitempty"`
Vhostnet string `json:"vhost-net,omitempty"`
RdmaDevice string `json:"rdma-device,omitempty"`
PfPciAddress string `json:"pf-pci-address,omitempty"`
}
type VdpaDevice struct {
ParentDevice string `json:"parent-device,omitempty"`
Driver string `json:"driver,omitempty"`
Path string `json:"path,omitempty"`
PciAddress string `json:"pci-address,omitempty"`
PfPciAddress string `json:"pf-pci-address,omitempty"`
}
const (
VhostDeviceModeClient = "client"
VhostDeviceModeServer = "server"
)
type VhostDevice struct {
Mode string `json:"mode,omitempty"`
Path string `json:"path,omitempty"`
}
const (
MemifDeviceRoleMaster = "master"
MemitDeviceRoleSlave = "slave"
MemifDeviceModeEthernet = "ethernet"
MemitDeviceModeIP = "ip"
MemitDeviceModePunt = "punt"
)
type MemifDevice struct {
Role string `json:"role,omitempty"`
Path string `json:"path,omitempty"`
Mode string `json:"mode,omitempty"`
}
// NetworkStatus is for network status annotation for pod // NetworkStatus is for network status annotation for pod
// +k8s:deepcopy-gen=false // +k8s:deepcopy-gen=false
type NetworkStatus struct { type NetworkStatus struct {
Name string `json:"name"` Name string `json:"name"`
Interface string `json:"interface,omitempty"` Interface string `json:"interface,omitempty"`
IPs []string `json:"ips,omitempty"` IPs []string `json:"ips,omitempty"`
Mac string `json:"mac,omitempty"` Mac string `json:"mac,omitempty"`
Default bool `json:"default,omitempty"` Default bool `json:"default,omitempty"`
DNS DNS `json:"dns,omitempty"` DNS DNS `json:"dns,omitempty"`
DeviceInfo *DeviceInfo `json:"device-info,omitempty"`
} }
// PortMapEntry for CNI PortMapEntry // PortMapEntry for CNI PortMapEntry

View File

@ -24,6 +24,58 @@ import (
runtime "k8s.io/apimachinery/pkg/runtime" runtime "k8s.io/apimachinery/pkg/runtime"
) )
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *DeviceInfo) DeepCopyInto(out *DeviceInfo) {
*out = *in
if in.Pci != nil {
in, out := &in.Pci, &out.Pci
*out = new(PciDevice)
**out = **in
}
if in.Vdpa != nil {
in, out := &in.Vdpa, &out.Vdpa
*out = new(VdpaDevice)
**out = **in
}
if in.VhostUser != nil {
in, out := &in.VhostUser, &out.VhostUser
*out = new(VhostDevice)
**out = **in
}
if in.Memif != nil {
in, out := &in.Memif, &out.Memif
*out = new(MemifDevice)
**out = **in
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceInfo.
func (in *DeviceInfo) DeepCopy() *DeviceInfo {
if in == nil {
return nil
}
out := new(DeviceInfo)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *MemifDevice) DeepCopyInto(out *MemifDevice) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MemifDevice.
func (in *MemifDevice) DeepCopy() *MemifDevice {
if in == nil {
return nil
}
out := new(MemifDevice)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *NetworkAttachmentDefinition) DeepCopyInto(out *NetworkAttachmentDefinition) { func (in *NetworkAttachmentDefinition) DeepCopyInto(out *NetworkAttachmentDefinition) {
*out = *in *out = *in
@ -99,3 +151,51 @@ func (in *NetworkAttachmentDefinitionSpec) DeepCopy() *NetworkAttachmentDefiniti
in.DeepCopyInto(out) in.DeepCopyInto(out)
return out return out
} }
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *PciDevice) DeepCopyInto(out *PciDevice) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PciDevice.
func (in *PciDevice) DeepCopy() *PciDevice {
if in == nil {
return nil
}
out := new(PciDevice)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *VdpaDevice) DeepCopyInto(out *VdpaDevice) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VdpaDevice.
func (in *VdpaDevice) DeepCopy() *VdpaDevice {
if in == nil {
return nil
}
out := new(VdpaDevice)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *VhostDevice) DeepCopyInto(out *VhostDevice) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VhostDevice.
func (in *VhostDevice) DeepCopy() *VhostDevice {
if in == nil {
return nil
}
out := new(VhostDevice)
in.DeepCopyInto(out)
return out
}

View File

@ -18,11 +18,20 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"github.com/containernetworking/cni/libcni" "github.com/containernetworking/cni/libcni"
"io/ioutil"
"os"
"path/filepath"
"strings" "strings"
v1 "github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/apis/k8s.cni.cncf.io/v1" v1 "github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/apis/k8s.cni.cncf.io/v1"
) )
const (
baseDevInfoPath = "/var/run/k8s.cni.cncf.io/devinfo"
dpDevInfoSubDir = "dp"
cniDevInfoSubDir = "cni"
)
// GetCNIConfig (from annotation string to CNI JSON bytes) // GetCNIConfig (from annotation string to CNI JSON bytes)
func GetCNIConfig(net *v1.NetworkAttachmentDefinition, confDir string) (config []byte, err error) { func GetCNIConfig(net *v1.NetworkAttachmentDefinition, confDir string) (config []byte, err error) {
emptySpec := v1.NetworkAttachmentDefinitionSpec{} emptySpec := v1.NetworkAttachmentDefinitionSpec{}
@ -117,3 +126,112 @@ func GetCNIConfigFromSpec(configData, netName string) ([]byte, error) {
return configBytes, nil return configBytes, nil
} }
// loadDeviceInfo loads a Device Information file
func loadDeviceInfo(path string) (*v1.DeviceInfo, error) {
var devInfo v1.DeviceInfo
bytes, err := ioutil.ReadFile(path)
if err != nil {
return nil, err
}
err = json.Unmarshal(bytes, &devInfo)
if err != nil {
return nil, err
}
return &devInfo, nil
}
// cleanDeviceInfo removes a Device Information file
func cleanDeviceInfo(path string) error {
if _, err := os.Stat(path); !os.IsNotExist(err) {
return os.Remove(path)
}
return nil
}
// saveDeviceInfo writes a Device Information file
func saveDeviceInfo(devInfo *v1.DeviceInfo, path string) error {
if devInfo == nil {
return fmt.Errorf("Device Information is null")
}
dir := filepath.Dir(path)
if _, err := os.Stat(dir); os.IsNotExist(err) {
if err := os.MkdirAll(dir, os.ModeDir); err != nil {
return err
}
}
if _, err := os.Stat(path); !os.IsNotExist(err) {
return fmt.Errorf("Device Information file already exists: %s", path)
}
devInfoJSON, err := json.Marshal(devInfo)
if err != nil {
return err
}
if err := ioutil.WriteFile(path, devInfoJSON, 0444); err != nil {
return err
}
return nil
}
// getDPDeviceInfoPath returns the standard Device Plugin DevInfo filename
// This filename is fixed because Device Plugin and NPWG Implementation need
// to both access file and name is not passed between them. So name is generated
// from Resource Name and DeviceID.
func getDPDeviceInfoPath(resourceName string, deviceID string) string {
return filepath.Join(baseDevInfoPath, dpDevInfoSubDir, fmt.Sprintf("%s-%s-device.json",
strings.ReplaceAll(resourceName, "/", "-"), strings.ReplaceAll(deviceID, "/", "-")))
}
// GetCNIDeviceInfoPath returns the standard Device Plugin DevInfo filename
// The path is fixed but the filename is flexible and determined by the caller.
func GetCNIDeviceInfoPath(filename string) string {
return filepath.Join(baseDevInfoPath, cniDevInfoSubDir, strings.ReplaceAll(filename, "/", "-"))
}
// LoadDeviceInfoFromDP loads a DeviceInfo structure from file created by a Device Plugin
// Returns an error if the device information is malformed and (nil, nil) if it does not exist
func LoadDeviceInfoFromDP(resourceName string, deviceID string) (*v1.DeviceInfo, error) {
return loadDeviceInfo(getDPDeviceInfoPath(resourceName, deviceID))
}
// SaveDeviceInfoForDP saves a DeviceInfo structure created by a Device Plugin
func SaveDeviceInfoForDP(resourceName string, deviceID string, devInfo *v1.DeviceInfo) error {
return saveDeviceInfo(devInfo, getDPDeviceInfoPath(resourceName, deviceID))
}
// CleanDeviceInfoForDP removes a DeviceInfo DP File.
func CleanDeviceInfoForDP(resourceName string, deviceID string) error {
return cleanDeviceInfo(getDPDeviceInfoPath(resourceName, deviceID))
}
// LoadDeviceInfoFromCNI loads a DeviceInfo structure from created by a CNI.
// Returns an error if the device information is malformed and (nil, nil) if it does not exist
func LoadDeviceInfoFromCNI(cniPath string) (*v1.DeviceInfo, error) {
return loadDeviceInfo(cniPath)
}
// SaveDeviceInfoForCNI saves a DeviceInfo structure created by a CNI
func SaveDeviceInfoForCNI(cniPath string, devInfo *v1.DeviceInfo) error {
return saveDeviceInfo(devInfo, cniPath)
}
// CopyDeviceInfoForCNIFromDP saves a DeviceInfo structure created by a DP to a CNI File.
func CopyDeviceInfoForCNIFromDP(cniPath string, resourceName string, deviceID string) error {
devInfo, err := loadDeviceInfo(getDPDeviceInfoPath(resourceName, deviceID))
if err != nil {
return err
}
return saveDeviceInfo(devInfo, cniPath)
}
// CleanDeviceInfoForCNI removes a DeviceInfo CNI File.
func CleanDeviceInfoForCNI(cniPath string) error {
return cleanDeviceInfo(cniPath)
}

View File

@ -122,7 +122,7 @@ func GetNetworkStatus(pod *corev1.Pod) ([]v1.NetworkStatus, error) {
} }
// CreateNetworkStatus create NetworkStatus from CNI result // CreateNetworkStatus create NetworkStatus from CNI result
func CreateNetworkStatus(r cnitypes.Result, networkName string, defaultNetwork bool) (*v1.NetworkStatus, error) { func CreateNetworkStatus(r cnitypes.Result, networkName string, defaultNetwork bool, dev *v1.DeviceInfo) (*v1.NetworkStatus, error) {
netStatus := &v1.NetworkStatus{} netStatus := &v1.NetworkStatus{}
netStatus.Name = networkName netStatus.Name = networkName
netStatus.Default = defaultNetwork netStatus.Default = defaultNetwork
@ -154,6 +154,10 @@ func CreateNetworkStatus(r cnitypes.Result, networkName string, defaultNetwork b
v1dns := convertDNS(result.DNS) v1dns := convertDNS(result.DNS)
netStatus.DNS = *v1dns netStatus.DNS = *v1dns
if dev != nil {
netStatus.DeviceInfo = dev
}
return netStatus, nil return netStatus, nil
} }

2
vendor/modules.txt vendored
View File

@ -45,7 +45,7 @@ github.com/hpcloud/tail/winfile
github.com/imdario/mergo github.com/imdario/mergo
# github.com/json-iterator/go v1.1.9 # github.com/json-iterator/go v1.1.9
github.com/json-iterator/go github.com/json-iterator/go
# github.com/k8snetworkplumbingwg/network-attachment-definition-client v0.0.0-20200626054723-37f83d1996bc # github.com/k8snetworkplumbingwg/network-attachment-definition-client v1.1.1-0.20201119153432-9d213757d22d
github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/apis/k8s.cni.cncf.io github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/apis/k8s.cni.cncf.io
github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/apis/k8s.cni.cncf.io/v1 github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/apis/k8s.cni.cncf.io/v1
github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/client/clientset/versioned github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/client/clientset/versioned