Skip to content

Commit

Permalink
Add HostDeviceNetwork basic support
Browse files Browse the repository at this point in the history
This patch adds HostDeviceNetwork CRD support and basic
transformation to NetworkAttachmentDefinition to allow
Multus create secondary network.

SR-IOV Network Device Plugin is deployed using Network Operator
Helm chart with default configuration.

NOTE: temporary added "//nolint:dupl" before code will be
refactored.

Closes: #44

Signed-off-by: Ivan Kolodiazhnyi <ikolodiazhny@nvidia.com>
  • Loading branch information
e0ne committed Mar 12, 2021
1 parent 2bc16f6 commit d81d36a
Show file tree
Hide file tree
Showing 28 changed files with 1,132 additions and 13 deletions.
76 changes: 76 additions & 0 deletions api/v1alpha1/hostdevicenetwork_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
/*
Copyright 2021 NVIDIA
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1alpha1

import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

const (
HostDeviceNetworkCRDName = "HostDeviceNetwork"
)

// HostDeviceNetworkSpec defines the desired state of HostDeviceNetwork
type HostDeviceNetworkSpec struct {
// Namespace of the NetworkAttachmentDefinition custom resource
NetworkNamespace string `json:"networkNamespace,omitempty"`
// configuration to be used for this network.
IPAM string `json:"ipam,omitempty"`
}

// HostDeviceNetworkStatus defines the observed state of HostDeviceNetwork
type HostDeviceNetworkStatus struct {
// Reflects the state of the MacvlanNetwork
// +kubebuilder:validation:Enum={"notReady", "ready", "error"}
State State `json:"state"`
// Network attachment definition generated from HostDeviceNetworkSpec
HostDeviceNetworkAttachmentDef string `json:"hostDeviceNetworkAttachmentDef,omitempty"`
// Informative string in case the observed state is error
Reason string `json:"reason,omitempty"`
// AppliedStates provide a finer view of the observed state
AppliedStates []AppliedState `json:"appliedStates,omitempty"`
}

// +kubebuilder:object:root=true
// + =true
// +kubebuilder:subresource:status
// +kubebuilder:resource:scope=Cluster
// +kubebuilder:printcolumn:name="Status",type=string,JSONPath=`.status.state`,priority=0
// +kubebuilder:printcolumn:name="Age",type=string,JSONPath=`.metadata.creationTimestamp`,priority=0

// HostDeviceNetwork is the Schema for the hostdevicenetworks API
type HostDeviceNetwork struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`

Spec HostDeviceNetworkSpec `json:"spec,omitempty"`
Status HostDeviceNetworkStatus `json:"status,omitempty"`
}

// +kubebuilder:object:root=true
// +kubebuilder:object:generate=true

// HostDeviceNetworkList contains a list of HostDeviceNetwork
type HostDeviceNetworkList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []HostDeviceNetwork `json:"items"`
}

func init() {
SchemeBuilder.Register(&HostDeviceNetwork{}, &HostDeviceNetworkList{})
}
3 changes: 2 additions & 1 deletion api/v1alpha1/nicclusterpolicy_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ type NicClusterPolicySpec struct {
OFEDDriver *OFEDDriverSpec `json:"ofedDriver,omitempty"`
NVPeerDriver *NVPeerDriverSpec `json:"nvPeerDriver,omitempty"`
RdmaSharedDevicePlugin *DevicePluginSpec `json:"rdmaSharedDevicePlugin,omitempty"`
SriovDevicePlugin *DevicePluginSpec `json:"sriovDevicePlugin,omitempty"`
SecondaryNetwork *SecondaryNetworkSpec `json:"secondaryNetwork,omitempty"`
}

Expand All @@ -120,7 +121,7 @@ type NicClusterPolicyStatus struct {
}

// +kubebuilder:object:root=true
// kubebuilder:object:generate
// +kubebuilder:object:generate=true
// +kubebuilder:subresource:status
// +kubebuilder:resource:scope=Cluster
// +kubebuilder:printcolumn:name="Status",type=string,JSONPath=`.status.state`,priority=0
Expand Down
99 changes: 99 additions & 0 deletions api/v1alpha1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

103 changes: 103 additions & 0 deletions config/crd/bases/mellanox.com_hostdevicenetworks.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@

---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.4.1
creationTimestamp: null
name: hostdevicenetworks.mellanox.com
spec:
group: mellanox.com
names:
kind: HostDeviceNetwork
listKind: HostDeviceNetworkList
plural: hostdevicenetworks
singular: hostdevicenetwork
scope: Cluster
versions:
- additionalPrinterColumns:
- jsonPath: .status.state
name: Status
type: string
- jsonPath: .metadata.creationTimestamp
name: Age
type: string
name: v1alpha1
schema:
openAPIV3Schema:
description: MacvlanNetwork is the Schema for the macvlannetworks API
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: HostDeviceNetworkSpec defines the desired state of HostDeviceNetwork
properties:
ipam:
description: ' configuration to be used for this network.'
type: string
networkNamespace:
description: Namespace of the NetworkAttachmentDefinition custom resource
type: string
type: object
status:
description: HostDeviceNetworkStatus defines the observed state of HostDeviceNetwork
properties:
appliedStates:
description: AppliedStates provide a finer view of the observed state
items:
description: AppliedState defines a finer-grained view of the observed
state of NicClusterPolicy
properties:
name:
type: string
state:
description: Represents reconcile state of the system
enum:
- ready
- notReady
- ignore
- error
type: string
required:
- name
- state
type: object
type: array
hostDeviceNetworkAttachmentDef:
description: Network attachment definition generated from HostDeviceNetworkSpec
type: string
reason:
description: Informative string in case the observed state is error
type: string
state:
description: Reflects the state of the MacvlanNetwork
enum:
- notReady
- ready
- error
type: string
required:
- state
type: object
type: object
served: true
storage: true
subresources:
status: {}
status:
acceptedNames:
kind: ""
plural: ""
conditions: []
storedVersions: []
22 changes: 22 additions & 0 deletions config/crd/bases/mellanox.com_nicclusterpolicies.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,28 @@ spec:
- version
type: object
type: object
sriovDevicePlugin:
description: DevicePluginSpec describes configuration options for
device plugin
properties:
config:
description: Device plugin configuration
type: string
image:
pattern: '[a-zA-Z0-9\-]+'
type: string
repository:
pattern: '[a-zA-Z0-9\.\-\/]+'
type: string
version:
pattern: '[a-zA-Z0-9\.-]+'
type: string
required:
- config
- image
- repository
- version
type: object
type: object
status:
description: NicClusterPolicyStatus defines the observed state of NicClusterPolicy
Expand Down
20 changes: 20 additions & 0 deletions config/rbac/role.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,26 @@ metadata:
creationTimestamp: null
name: manager-role
rules:
- apiGroups:
- mellanox.com
resources:
- hostdevicenetworks
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
- apiGroups:
- mellanox.com
resources:
- hostdevicenetworks/status
verbs:
- get
- patch
- update
- apiGroups:
- mellanox.com
resources:
Expand Down
Loading

0 comments on commit d81d36a

Please sign in to comment.