Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
21cf64a
Adding AAA TACACS Support
weneghawi Feb 4, 2026
2dbbcd2
Fix golangci-lint issues
weneghawi Feb 5, 2026
bd190c3
Restructure AAA API to OpenConfig system/aaa model
weneghawi Feb 17, 2026
74d0c8b
[NX-OS] Add RADIUS support to AAA
weneghawi Feb 18, 2026
659d6da
Fix unused nolint:gosec directives
weneghawi Mar 12, 2026
5f593cc
fix: address felix review comments on AAA
weneghawi Mar 26, 2026
9172bab
fix: address felix review comments
weneghawi Mar 27, 2026
3a2b86f
fix: remove embedded Duration field from selector
weneghawi Mar 27, 2026
391d7d0
[NXOS] Add `DHCPRelay` provider implementation
nikatza Mar 25, 2026
25fbb52
fix: address AAA PR review comments
weneghawi Apr 13, 2026
e69026a
Regenerate CRDs, RBAC, and API docs for AAA/TACACS support
weneghawi Apr 16, 2026
009cb2b
Rename NXOSMethodList to AAAMethodList per review feedback
weneghawi Apr 16, 2026
25abd56
Simplify DeleteAAA: delete container nodes instead of individual entries
weneghawi Apr 16, 2026
3f10d45
Fix TACACS+/RADIUS struct fields to avoid perpetual reconcile drift
weneghawi Apr 16, 2026
3c05690
Address remaining review comments from felix
weneghawi Apr 16, 2026
9c93229
Fix RBAC drift after main merge
weneghawi Apr 16, 2026
eeb59e3
Update overview page and architecture runtime flow/sequence diagrams …
elinalin Apr 17, 2026
21a0d2c
Ignore shorthands in mermaid diagrams inside documentation
felix-kaestner Apr 17, 2026
45339b0
Fix missing AAA CRD entries in kustomization.yaml
weneghawi Apr 20, 2026
88737f7
Fix AAA stale server cleanup and providerGroup serialization
weneghawi Apr 21, 2026
453fc13
Rename AAA sample and split provider config into separate file
weneghawi Apr 21, 2026
caed82f
Add RBAC helper roles for AAA and AAAConfig CRDs
weneghawi Apr 21, 2026
391ad3b
Remove unused authProtocol field from AAA auth structs
weneghawi Apr 21, 2026
ba34f7b
Refactor EnsureAAA and DeleteAAA per review
weneghawi Apr 22, 2026
597a204
Use context-aware exec.CommandContext in e2e tests
felix-kaestner Apr 17, 2026
181344e
Fix deviceutil: remove spurious NewGrpcClient block from rebase conflict
weneghawi Apr 30, 2026
e52e379
charts: regenerate via make charts
weneghawi Apr 30, 2026
bf3a5ea
Reduce EnsureAAA cyclomatic complexity below linter threshold
weneghawi Apr 30, 2026
491e1b3
Revert chart changes that should not have been modified
weneghawi May 4, 2026
3f2c035
Regenerate codegen after rebase onto main (controller-gen v0.21.0)
weneghawi May 21, 2026
fdad12f
Regenerate charts after rebase onto main
weneghawi May 21, 2026
6d26ff0
Fix gofumpt formatting in provider.go
weneghawi May 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,4 @@ charts/**/*.tgz
*.swp
*.swo
*~
config/samples/test-aaa-qa.yaml
16 changes: 16 additions & 0 deletions PROJECT
Original file line number Diff line number Diff line change
Expand Up @@ -289,4 +289,20 @@ resources:
kind: DHCPRelay
path: github.com/ironcore-dev/network-operator/api/core/v1alpha1
version: v1alpha1
- api:
crdVersion: v1
namespaced: true
controller: true
domain: networking.metal.ironcore.dev
kind: AAA
path: github.com/ironcore-dev/network-operator/api/core/v1alpha1
version: v1alpha1
- api:
crdVersion: v1
namespaced: true
domain: cisco.networking.metal.ironcore.dev
group: nx
kind: AAAConfig
path: github.com/ironcore-dev/network-operator/api/cisco/nx/v1alpha1
version: v1alpha1
version: "3"
6 changes: 6 additions & 0 deletions Tiltfile
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,12 @@ k8s_resource(new_name='lldp', objects=['leaf1-lldp:lldp'], trigger_mode=TRIGGER_
k8s_yaml('./config/samples/v1alpha1_dhcprelay.yaml')
k8s_resource(new_name='dhcprelay', objects=['dhcprelay:dhcprelay'], resource_deps=['eth1-1'], trigger_mode=TRIGGER_MODE_MANUAL, auto_init=False)

k8s_yaml('./config/samples/v1alpha1_aaa.yaml')
k8s_resource(new_name='aaa', objects=['aaa-tacacs:aaa'], trigger_mode=TRIGGER_MODE_MANUAL, auto_init=False)
# Uncomment the following lines for NX-OS specific AAA config
# k8s_yaml('./config/samples/cisco/nx/v1alpha1_aaaconfig.yaml')
# k8s_resource(new_name='aaaconfig', objects=['aaa-tacacs-nxos:aaaconfig'], trigger_mode=TRIGGER_MODE_MANUAL, auto_init=False)

print('🚀 network-operator development environment')
print('👉 Edit the code inside the api/, cmd/, or internal/ directories')
print('👉 Tilt will automatically rebuild and redeploy when changes are detected')
Expand Down
101 changes: 101 additions & 0 deletions api/cisco/nx/v1alpha1/aaaconfig_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
// SPDX-FileCopyrightText: 2025 SAP SE or an SAP affiliate company and IronCore contributors
// SPDX-License-Identifier: Apache-2.0

package v1alpha1

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

"github.com/ironcore-dev/network-operator/api/core/v1alpha1"
)

// +kubebuilder:rbac:groups=nx.cisco.networking.metal.ironcore.dev,resources=aaaconfigs,verbs=get;list;watch

// AAAConfigSpec defines the desired state of AAAConfig
type AAAConfigSpec struct {
// LoginErrorEnable enables login error messages.
// +optional
LoginErrorEnable bool `json:"loginErrorEnable,omitempty"`

// KeyEncryption specifies the default encryption type for TACACS+ keys.
// +kubebuilder:default=Type7
KeyEncryption TACACSKeyEncryption `json:"keyEncryption,omitempty"`

// RADIUSKeyEncryption specifies the default encryption type for RADIUS server keys.
// +kubebuilder:default=Type7
RADIUSKeyEncryption RADIUSKeyEncryption `json:"radiusKeyEncryption,omitempty"`

// ConsoleAuthentication defines console-specific authentication methods.
// +optional
ConsoleAuthentication *AAAMethodList `json:"consoleAuthentication,omitempty"`

// ConfigCommandsAuthorization defines config-commands authorization methods.
// +optional
ConfigCommandsAuthorization *AAAMethodList `json:"configCommandsAuthorization,omitempty"`
}

// TACACSKeyEncryption defines the encryption type for TACACS+ server keys.
// +kubebuilder:validation:Enum=Type6;Type7;Clear
type TACACSKeyEncryption string

const (
// TACACSKeyEncryptionType6 uses AES encryption (more secure).
TACACSKeyEncryptionType6 TACACSKeyEncryption = "Type6"
// TACACSKeyEncryptionType7 uses Cisco Type 7 encryption (reversible).
TACACSKeyEncryptionType7 TACACSKeyEncryption = "Type7"
// TACACSKeyEncryptionClear sends the key in cleartext.
TACACSKeyEncryptionClear TACACSKeyEncryption = "Clear"
)

// RADIUSKeyEncryption defines the encryption type for RADIUS server keys.
// +kubebuilder:validation:Enum=Type6;Type7;Clear
type RADIUSKeyEncryption string

const (
// RADIUSKeyEncryptionType6 uses AES encryption (more secure).
RADIUSKeyEncryptionType6 RADIUSKeyEncryption = "Type6"
// RADIUSKeyEncryptionType7 uses Cisco Type 7 encryption (reversible).
RADIUSKeyEncryptionType7 RADIUSKeyEncryption = "Type7"
// RADIUSKeyEncryptionClear sends the key in cleartext.
RADIUSKeyEncryptionClear RADIUSKeyEncryption = "Clear"
)

// AAAMethodList defines an ordered list of AAA methods.
type AAAMethodList struct {
// Methods is the ordered list of methods.
// +required
// +listType=atomic
// +kubebuilder:validation:MinItems=1
// +kubebuilder:validation:MaxItems=4
Methods []v1alpha1.AAAMethod `json:"methods"`
}

// +kubebuilder:object:root=true
// +kubebuilder:resource:path=aaaconfigs
// +kubebuilder:resource:singular=aaaconfig
// +kubebuilder:resource:shortName=nxaaa

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

// Specification of the desired state of the resource.
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
// +required
Spec AAAConfigSpec `json:"spec"`
}

// +kubebuilder:object:root=true

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

func init() {
v1alpha1.RegisterAAADependency(GroupVersion.WithKind("AAAConfig"))
SchemeBuilder.Register(&AAAConfig{}, &AAAConfigList{})
}
103 changes: 103 additions & 0 deletions api/cisco/nx/v1alpha1/zz_generated.deepcopy.go

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

Loading
Loading