Skip to content

Commit 9ed1ed3

Browse files
committed
wip: portchannelconfig
1 parent e551f8e commit 9ed1ed3

File tree

13 files changed

+278
-9
lines changed

13 files changed

+278
-9
lines changed

PROJECT

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,4 +195,13 @@ resources:
195195
group: nx
196196
kind: VPCDomain
197197
path: github.com/ironcore-dev/network-operator/api/cisco/nx/v1alpha1
198+
- api:
199+
crdVersion: v1
200+
namespaced: true
201+
domain: cisco.networking.metal.ironcore.dev
202+
group: nx
203+
kind: PortChannelConfig
204+
controller: false
205+
path: github.com/ironcore-dev/network-operator/api/cisco/nx/v1alpha1
206+
version: v1alpha1
198207
version: "3"

Tiltfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ k8s_resource(new_name='eth1-10', objects=['eth1-10:interface'], trigger_mode=TRI
5252
k8s_resource(new_name='eth1-30', objects=['eth1-30:interface'], trigger_mode=TRIGGER_MODE_MANUAL, auto_init=False)
5353
k8s_resource(new_name='eth1-31', objects=['eth1-31:interface'], trigger_mode=TRIGGER_MODE_MANUAL, auto_init=False)
5454
k8s_resource(new_name='eth1-32', objects=['eth1-32:interface'], trigger_mode=TRIGGER_MODE_MANUAL, auto_init=False)
55+
k8s_resource(new_name='po1-cfg', objects=['po1-cfg:portchannelconfig'], trigger_mode=TRIGGER_MODE_MANUAL, auto_init=False)
5556
k8s_resource(new_name='po1', objects=['po1:interface'], trigger_mode=TRIGGER_MODE_MANUAL, auto_init=False)
5657
k8s_resource(new_name='po2', objects=['po2:interface'], trigger_mode=TRIGGER_MODE_MANUAL, auto_init=False)
5758

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// SPDX-FileCopyrightText: 2025 SAP SE or an SAP affiliate company and IronCore contributors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package v1alpha1
5+
6+
import (
7+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
8+
9+
v1alpha1 "github.com/ironcore-dev/network-operator/api/core/v1alpha1"
10+
)
11+
12+
// +kubebuilder:rbac:groups=nx.cisco.networking.metal.ironcore.dev,resources=portchannelconfigs,verbs=get;list;watch
13+
14+
// PortChannelConfig defines the desired state of a PortChannel.
15+
// Use as provider specific resource for core resources of type `Interface` (sub-type `Aggregate`).
16+
type PortChannelConfigSpec struct {
17+
// VPCPeerLink indicates whether this PortChannel is part of the vPC peer link.
18+
// +optional
19+
// +kubebuilder:default=false
20+
VPCPeerLink bool `json:"vpcPeerLink,omitempty"`
21+
}
22+
23+
// +kubebuilder:object:root=true
24+
// +kubebuilder:resource:path=portchannelconfigs
25+
// +kubebuilder:resource:singular=portchannelconfig
26+
// +kubebuilder:resource:shortName=pccfg
27+
28+
// PortChannelConfig is the Schema for the NVE API
29+
type PortChannelConfig struct {
30+
metav1.TypeMeta `json:",inline"`
31+
metav1.ObjectMeta `json:"metadata,omitempty,omitzero"`
32+
33+
// spec defines the desired state of NVE
34+
// +required
35+
Spec PortChannelConfigSpec `json:"spec"`
36+
}
37+
38+
// +kubebuilder:object:root=true
39+
40+
// NVEList contains a list of NVE
41+
type PortChannelConfigList struct {
42+
metav1.TypeMeta `json:",inline"`
43+
metav1.ListMeta `json:"metadata,omitempty"`
44+
Items []PortChannelConfig `json:"items"`
45+
}
46+
47+
// init registers the PortChannelConfig type with the core v1alpha1 scheme and sets
48+
// itself as a dependency for the NVE core type.
49+
func init() {
50+
v1alpha1.RegisterInterfaceDependency(v1alpha1.InterfaceTypeAggregate, GroupVersion.WithKind("PortChannelConfig"))
51+
SchemeBuilder.Register(&PortChannelConfig{}, &PortChannelConfigList{})
52+
}

api/cisco/nx/v1alpha1/zz_generated.deepcopy.go

Lines changed: 73 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/core/v1alpha1/groupversion_info.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,12 @@ const (
109109

110110
// WaitingForDependenciesReason indicates that the resource is waiting for its dependencies to be ready.
111111
WaitingForDependenciesReason = "WaitingForDependencies"
112+
113+
// IncompatibleProviderConfigRef indicates that the referenced provider configuration is not compatible with the target platform.
114+
IncompatibleProviderConfigRef = "IncompatibleProviderConfigRef"
115+
116+
// ProviderConfigFoundReason indicates that the referenced provider configuration is already assigned.
117+
ProviderConfigFoundReason = "ProviderConfigFound"
112118
)
113119

114120
// Reasons that are specific to [Interface] objects.

api/core/v1alpha1/interface_types.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44
package v1alpha1
55

66
import (
7+
"sync"
8+
79
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
10+
"k8s.io/apimachinery/pkg/runtime/schema"
811
)
912

1013
// InterfaceSpec defines the desired state of Interface.
@@ -311,6 +314,18 @@ type InterfaceList struct {
311314
Items []Interface `json:"items"`
312315
}
313316

317+
var (
318+
InterfaceDependencies = make(map[InterfaceType][]schema.GroupVersionKind)
319+
interfaceDependenciesMu sync.Mutex
320+
)
321+
322+
// RegisterInterfaceDependency adds GVKs to the interface dependency registry.
323+
func RegisterInterfaceDependency(t InterfaceType, gvk schema.GroupVersionKind) {
324+
interfaceDependenciesMu.Lock()
325+
defer interfaceDependenciesMu.Unlock()
326+
InterfaceDependencies[t] = append(InterfaceDependencies[t], gvk)
327+
}
328+
314329
func init() {
315330
SchemeBuilder.Register(&Interface{}, &InterfaceList{})
316331
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
---
2+
apiVersion: apiextensions.k8s.io/v1
3+
kind: CustomResourceDefinition
4+
metadata:
5+
annotations:
6+
controller-gen.kubebuilder.io/version: v0.19.0
7+
name: portchannelconfigs.nx.cisco.networking.metal.ironcore.dev
8+
spec:
9+
group: nx.cisco.networking.metal.ironcore.dev
10+
names:
11+
kind: PortChannelConfig
12+
listKind: PortChannelConfigList
13+
plural: portchannelconfigs
14+
shortNames:
15+
- pccfg
16+
singular: portchannelconfig
17+
scope: Namespaced
18+
versions:
19+
- name: v1alpha1
20+
schema:
21+
openAPIV3Schema:
22+
description: PortChannelConfig is the Schema for the NVE API
23+
properties:
24+
apiVersion:
25+
description: |-
26+
APIVersion defines the versioned schema of this representation of an object.
27+
Servers should convert recognized schemas to the latest internal value, and
28+
may reject unrecognized values.
29+
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
30+
type: string
31+
kind:
32+
description: |-
33+
Kind is a string value representing the REST resource this object represents.
34+
Servers may infer this from the endpoint the client submits requests to.
35+
Cannot be updated.
36+
In CamelCase.
37+
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
38+
type: string
39+
metadata:
40+
type: object
41+
spec:
42+
description: spec defines the desired state of NVE
43+
properties:
44+
vpcPeerLink:
45+
default: false
46+
description: VPCPeerLink indicates whether this PortChannel is part
47+
of the vPC peer link.
48+
type: boolean
49+
type: object
50+
required:
51+
- spec
52+
type: object
53+
served: true
54+
storage: true

config/rbac/role.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ rules:
113113
- nx.cisco.networking.metal.ironcore.dev
114114
resources:
115115
- managementaccessconfigs
116+
- portchannelconfigs
116117
verbs:
117118
- get
118119
- list
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
apiVersion: nx.cisco.networking.metal.ironcore.dev/v1alpha1
2+
kind: PortChannelConfig
3+
metadata:
4+
labels:
5+
app.kubernetes.io/name: network-operator
6+
app.kubernetes.io/managed-by: kustomize
7+
networking.metal.ironcore.dev/device-name: leaf1
8+
name: po1-cfg
9+
spec:
10+
vpcPeerLink: true

config/samples/kustomization.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,5 @@ resources:
2222
- cisco/nx/v1alpha1_system.yaml
2323
- cisco/nx/v1alpha1_managementaccessconfig.yaml
2424
- cisco/nx/v1alpha1_vpcdomain.yaml
25+
- cisco/nx/v1alpha1_portchannelconfig.yaml
2526
# +kubebuilder:scaffold:manifestskustomizesamples

0 commit comments

Comments
 (0)