mirror of
https://github.com/k8snetworkplumbingwg/multus-cni.git
synced 2025-06-28 08:36:52 +00:00
Update vendor for network-attachment-definition-client update
Signed-off-by: Billy McFall <22157057+Billy99@users.noreply.github.com>
This commit is contained in:
parent
e064679967
commit
2cd91b6bad
@ -38,15 +38,74 @@ type DNS struct {
|
||||
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
|
||||
// +k8s:deepcopy-gen=false
|
||||
type NetworkStatus struct {
|
||||
Name string `json:"name"`
|
||||
Interface string `json:"interface,omitempty"`
|
||||
IPs []string `json:"ips,omitempty"`
|
||||
Mac string `json:"mac,omitempty"`
|
||||
Default bool `json:"default,omitempty"`
|
||||
DNS DNS `json:"dns,omitempty"`
|
||||
Name string `json:"name"`
|
||||
Interface string `json:"interface,omitempty"`
|
||||
IPs []string `json:"ips,omitempty"`
|
||||
Mac string `json:"mac,omitempty"`
|
||||
Default bool `json:"default,omitempty"`
|
||||
DNS DNS `json:"dns,omitempty"`
|
||||
DeviceInfo *DeviceInfo `json:"device-info,omitempty"`
|
||||
}
|
||||
|
||||
// PortMapEntry for CNI PortMapEntry
|
||||
|
@ -24,6 +24,58 @@ import (
|
||||
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.
|
||||
func (in *NetworkAttachmentDefinition) DeepCopyInto(out *NetworkAttachmentDefinition) {
|
||||
*out = *in
|
||||
@ -99,3 +151,51 @@ func (in *NetworkAttachmentDefinitionSpec) DeepCopy() *NetworkAttachmentDefiniti
|
||||
in.DeepCopyInto(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
|
||||
}
|
||||
|
@ -18,11 +18,20 @@ import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/containernetworking/cni/libcni"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
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)
|
||||
func GetCNIConfig(net *v1.NetworkAttachmentDefinition, confDir string) (config []byte, err error) {
|
||||
emptySpec := v1.NetworkAttachmentDefinitionSpec{}
|
||||
@ -117,3 +126,112 @@ func GetCNIConfigFromSpec(configData, netName string) ([]byte, error) {
|
||||
|
||||
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)
|
||||
}
|
||||
|
@ -122,7 +122,7 @@ func GetNetworkStatus(pod *corev1.Pod) ([]v1.NetworkStatus, error) {
|
||||
}
|
||||
|
||||
// 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.Name = networkName
|
||||
netStatus.Default = defaultNetwork
|
||||
@ -154,6 +154,10 @@ func CreateNetworkStatus(r cnitypes.Result, networkName string, defaultNetwork b
|
||||
v1dns := convertDNS(result.DNS)
|
||||
netStatus.DNS = *v1dns
|
||||
|
||||
if dev != nil {
|
||||
netStatus.DeviceInfo = dev
|
||||
}
|
||||
|
||||
return netStatus, nil
|
||||
}
|
||||
|
||||
|
2
vendor/modules.txt
vendored
2
vendor/modules.txt
vendored
@ -45,7 +45,7 @@ github.com/hpcloud/tail/winfile
|
||||
github.com/imdario/mergo
|
||||
# github.com/json-iterator/go v1.1.9
|
||||
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/v1
|
||||
github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/client/clientset/versioned
|
||||
|
Loading…
Reference in New Issue
Block a user