Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
6f8ef9b
Adding AAA TACACS Support
weneghawi Feb 4, 2026
a25dc50
Fix golangci-lint issues
weneghawi Feb 5, 2026
f2fadc9
Restructure AAA API to OpenConfig system/aaa model
weneghawi Feb 17, 2026
04a676c
[NX-OS] Add RADIUS support to AAA
weneghawi Feb 18, 2026
312670f
Fix unused nolint:gosec directives
weneghawi Mar 12, 2026
3d1ea9a
fix: address felix review comments on AAA
weneghawi Mar 26, 2026
f30c259
fix: address felix review comments
weneghawi Mar 27, 2026
2ababb3
fix: remove embedded Duration field from selector
weneghawi Mar 27, 2026
3a0c2a3
[NXOS] Add `DHCPRelay` provider implementation
nikatza Mar 25, 2026
a352196
fix: address AAA PR review comments
weneghawi Apr 13, 2026
1b40ab0
Regenerate CRDs, RBAC, and API docs for AAA/TACACS support
weneghawi Apr 16, 2026
f7b36f8
Rename NXOSMethodList to AAAMethodList per review feedback
weneghawi Apr 16, 2026
51bab9a
Simplify DeleteAAA: delete container nodes instead of individual entries
weneghawi Apr 16, 2026
49ae75e
Fix TACACS+/RADIUS struct fields to avoid perpetual reconcile drift
weneghawi Apr 16, 2026
93dcf37
Address remaining review comments from felix
weneghawi Apr 16, 2026
861127f
Fix RBAC drift after main merge
weneghawi Apr 16, 2026
f0ecee7
Update overview page and architecture runtime flow/sequence diagrams …
elinalin Apr 17, 2026
c44ce8c
Ignore shorthands in mermaid diagrams inside documentation
felix-kaestner Apr 17, 2026
6b5b492
Fix missing AAA CRD entries in kustomization.yaml
weneghawi Apr 20, 2026
06b86c6
Fix AAA stale server cleanup and providerGroup serialization
weneghawi Apr 21, 2026
22e8600
Rename AAA sample and split provider config into separate file
weneghawi Apr 21, 2026
eb9afa8
Add RBAC helper roles for AAA and AAAConfig CRDs
weneghawi Apr 21, 2026
8974e89
Remove unused authProtocol field from AAA auth structs
weneghawi Apr 21, 2026
53ab470
Refactor EnsureAAA and DeleteAAA per review
weneghawi Apr 22, 2026
41a3bb3
Use context-aware exec.CommandContext in e2e tests
felix-kaestner Apr 17, 2026
313acb1
Fix deviceutil: remove spurious NewGrpcClient block from rebase conflict
weneghawi Apr 30, 2026
3cf815f
charts: regenerate via make charts
weneghawi Apr 30, 2026
d2ad370
Reduce EnsureAAA cyclomatic complexity below linter threshold
weneghawi Apr 30, 2026
8c94601
Revert chart changes that should not have been modified
weneghawi May 4, 2026
abfd459
Merge branch 'main' into feature/aaa-tacacs-support
weneghawi May 6, 2026
225e0cd
Merge branch 'main' into feature/aaa-tacacs-support
weneghawi May 6, 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