Skip to content

Implement multi-vCenter FQDN-keyed secret generation (Story #8)#2

Open
rvanderp3 wants to merge 4 commits into
masterfrom
story-8-multi-vcenter-impl
Open

Implement multi-vCenter FQDN-keyed secret generation (Story #8)#2
rvanderp3 wants to merge 4 commits into
masterfrom
story-8-multi-vcenter-impl

Conversation

@rvanderp3
Copy link
Copy Markdown

Summary

Implements FQDN-keyed secret generation for multi-vCenter vSphere topologies, enabling different OpenShift components to use credentials for different vCenter servers.

Implementation Details

Multi-vCenter Detection

  • Added isMultiVCenterMode() function that returns true when any component specifies a vCenter override
  • Automatically selects appropriate secret key format based on topology

Secret Generation

  • Multi-vCenter mode: Secrets use FQDN-keyed format
    • Example: vcenter1.example.com.username, vcenter1.example.com.password
  • Single-vCenter mode: Secrets use simple keys
    • Example: username, password
  • Maintains backward compatibility with existing single-vCenter deployments

Helper Functions

  • createComponentSecrets(): Generates all component-specific secrets with correct format
  • getSecretKeyFormat(): Returns appropriate key format based on mode

Test Coverage

All 4 unit tests passing:

  • ✅ TestMultiVCenterSecretFormat_FQDNKeys - FQDN-keyed secret format verification
  • ✅ TestMultiVCenterBinding_MachineAPIToVC1 - Machine API secret binding to vcenter1
  • ✅ TestMultiVCenterBinding_CSIToVC2 - CSI Driver secret binding to vcenter2
  • ✅ TestMultiVCenterSecretGeneration_MultipleVCenters - Comprehensive multi-vCenter scenario

Acceptance Criteria Coverage

  • AC1: Installer validates credentials for each vCenter (installer PR feat: implement per-component vCenter privilege validation (story #37) #7)
  • AC2: Component secrets use FQDN-keyed format in multi-vCenter mode
  • AC3: Machine API connects to vcenter1.example.com
  • AC4: CSI Driver connects to vcenter2.example.com
  • AC5: Components perform operations on respective vCenters

Secret Format Examples

Multi-vCenter Mode

apiVersion: v1
kind: Secret
metadata:
  name: machine-api-vsphere-credentials
  namespace: openshift-machine-api
data:
  vcenter1.example.com.username: <base64>
  vcenter1.example.com.password: <base64>

Single-vCenter Mode (Backward Compatible)

apiVersion: v1
kind: Secret
metadata:
  name: machine-api-vsphere-credentials
  namespace: openshift-machine-api
data:
  username: <base64>
  password: <base64>

Integration Points

Dependencies

🤖 Generated with Claude Code

rvanderp3 and others added 2 commits April 14, 2026 11:54
Test Plan Coverage:
- FQDN-keyed secret format verification
- Component-to-vCenter binding validation
- Multi-vCenter secret generation
- Machine API and CSI Driver vCenter connection tests

Test File:
- pkg/vsphere/actuator/multi_vcenter_test.go (4 unit tests)

All tests currently skip with 'Implementation pending - Story #8'.
Tests will be implemented as part of story development.

Related: openshift-splat-team/splat-team#8

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Add isMultiVCenterMode() to detect multi-vCenter topology
- Add createComponentSecrets() for FQDN-keyed secret generation
- Add getSecretKeyFormat() helper for key format selection
- Implement 4 unit tests covering all acceptance criteria
- All tests pass: TestMultiVCenter* suite

Multi-vCenter mode:
- Secrets use FQDN-keyed format: vcenter1.example.com.username
- Single-vCenter mode uses simple keys: username, password
- Maintains backward compatibility with single-vCenter deployments

Story #8: Multi-vCenter Support
Epic #2: vSphere Multi-Account Credentials

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
rvanderp3 and others added 2 commits April 14, 2026 12:18
- Move ComponentCredentials and AccountCredentials to production code (multi_vcenter.go)
- Remove duplicate type declarations from actuator_test.go
- Add CreateComponentSecrets method to VSphereActuator for integration
- All tests now compile and pass (4 multi-vCenter tests PASS, 7 Story #5 tests SKIP)

Fixes:
- pkg/vsphere/actuator/actuator_test.go:83:18: actuator.CreateComponentSecrets undefined
- pkg/vsphere/actuator/actuator_test.go:558:6: AccountCredentials redeclared

Test Results:
- CCO multi-vCenter tests: 4/4 PASS
- CCO Story #5 tests: 7/7 SKIP (expected)
- Installer unit tests: 6/6 PASS
- Installer integration tests: 4/4 SKIP (expected)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Kubernetes Secret.Data is automatically base64-encoded when serialized
to JSON/YAML. Storing pre-encoded strings causes double-encoding, making
credentials unusable by component operators.

Fixed:
- multi_vcenter.go: Store raw bytes in Secret.Data (lines 88-89, 92-93)
- multi_vcenter_test.go: Verify raw bytes instead of decoded values
- Removed unused encoding/base64 imports

All tests pass: 4/4 multi-vCenter tests PASS

Addresses code review feedback from:
openshift-splat-team/splat-team#8 (comment)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant