Co-authored-by: Cursor <cursoragent@cursor.com>
6.6 KiB
Provider Warnings Analysis and Fix Instructions
Date: 2025-12-13
Status: ⚠️ WARNINGS IDENTIFIED - FIX REQUIRES GO ENVIRONMENT
Summary
The provider logs show repeated errors about missing CRDs. These are non-critical and don't affect basic VM operations, but they create log noise and should be fixed.
Issue Details
Error Messages
Repeating every 10 seconds:
ERROR controller-runtime.source.EventHandler if kind is a CRD, it should be installed before calling Start
{"kind": "ProxmoxVMScaleSet.proxmox.sankofa.nexus", "error": "no matches for kind \"ProxmoxVMScaleSet\" in version \"proxmox.sankofa.nexus/v1alpha1\""}
ERROR controller-runtime.source.EventHandler if kind is a CRD, it should be installed before calling Start
{"kind": "ResourceDiscovery.proxmox.sankofa.nexus", "error": "no matches for kind \"ResourceDiscovery\" in version \"proxmox.sankofa.nexus/v1alpha1\""}
Root Cause
-
Provider Code: The provider (
cmd/provider/main.go) unconditionally registers controllers for:ProxmoxVMScaleSet- For VM scaling operationsResourceDiscovery- For resource discovery operations
-
Missing CRDs: The CRD YAML files for these resources don't exist:
proxmox.sankofa.nexus_proxmoxvmscalesets.yaml- Missingproxmox.sankofa.nexus_resourcediscoveries.yaml- Missing
-
Type Definitions Exist: The Go type definitions exist in:
apis/v1alpha1/vmscaleset_types.go✅apis/v1alpha1/resourcediscovery_types.go✅
-
CRDs Not Generated: The CRDs were never generated from the type definitions.
Impact
| Aspect | Impact | Severity |
|---|---|---|
| VM Operations | ✅ Working perfectly | None |
| Log Noise | ⚠️ Errors every 10 seconds | Low |
| Resource Usage | ⚠️ Minor (retry attempts) | Low |
| Functionality | ✅ All basic features work | None |
Conclusion: Non-critical but should be fixed for production.
Fix Instructions
Option 1: Generate and Install Missing CRDs (Recommended)
Prerequisites:
- Go 1.21+ installed
- Access to build environment
Steps:
-
Generate CRDs:
cd crossplane-provider-proxmox make manifestsThis will generate:
config/crd/bases/proxmox.sankofa.nexus_proxmoxvmscalesets.yamlconfig/crd/bases/proxmox.sankofa.nexus_resourcediscoveries.yaml
-
Install CRDs:
kubectl apply -f config/crd/bases/ -
Verify:
kubectl get crd | grep proxmox # Should show all 4 CRDs: # - providerconfigs.proxmox.sankofa.nexus # - proxmoxvms.proxmox.sankofa.nexus # - proxmoxvmscalesets.proxmox.sankofa.nexus # - resourcediscoveries.proxmox.sankofa.nexus -
Check Logs:
kubectl logs -n crossplane-system -l app=crossplane-provider-proxmox --tail=50 # Should show no CRD-related errors
Result: All errors resolved, all features available.
Option 2: Make Controller Registration Conditional (Code Change)
If you don't need scaling/discovery features, modify the provider code to only register controllers if CRDs exist.
File: crossplane-provider-proxmox/cmd/provider/main.go
Change:
// Instead of unconditional registration:
// Register ProxmoxVMScaleSet controller
if err = (&vmscaleset.ProxmoxVMScaleSetReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
}).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "ProxmoxVMScaleSet")
os.Exit(1)
}
// Use conditional registration:
// Only register if CRD exists
if crdExists("proxmoxvmscalesets.proxmox.sankofa.nexus") {
if err = (&vmscaleset.ProxmoxVMScaleSetReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
}).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "ProxmoxVMScaleSet")
os.Exit(1)
}
} else {
setupLog.Info("ProxmoxVMScaleSet CRD not found, skipping controller registration")
}
Note: This requires:
- Implementing
crdExists()helper function - Rebuilding the provider image
- Redeploying the provider
Option 3: Accept Log Noise (Temporary)
If you don't need these features and can't fix immediately:
- Filter logs to ignore these specific errors
- Accept the log noise (doesn't affect functionality)
- Fix later when Go environment is available
Current Status
Installed CRDs
kubectl get crd | grep proxmox
Current:
- ✅
providerconfigs.proxmox.sankofa.nexus - ✅
proxmoxvms.proxmox.sankofa.nexus - ❌
proxmoxvmscalesets.proxmox.sankofa.nexus- Missing - ❌
resourcediscoveries.proxmox.sankofa.nexus- Missing
Provider Functionality
- ✅ Basic VM Operations: Working perfectly
- ✅ ProviderConfig: Working
- ⚠️ VM Scaling: Not available (CRD missing)
- ⚠️ Resource Discovery: Not available (CRD missing)
Recommendation
For Development/Testing
Priority: Low
- Can be ignored for now
- Basic VM operations work fine
- Fix when convenient
For Production
Priority: Medium
- Should be fixed to reduce log noise
- Enables additional features (scaling, discovery)
- Improves operational clarity
Recommended Action: Generate and install missing CRDs (Option 1)
Verification After Fix
Expected Results
-
All CRDs Installed:
kubectl get crd | grep proxmox # 4 CRDs should be listed -
Clean Logs:
kubectl logs -n crossplane-system -l app=crossplane-provider-proxmox --tail=100 | grep -i error # Should show no CRD-related errors -
All Features Available:
- Basic VM management ✅
- VM scaling ✅
- Resource discovery ✅
Additional Notes
Why This Happened
- CRD generation is part of the build process
- Type definitions exist but CRDs weren't generated
- Provider code assumes all CRDs are installed
- Controller-runtime requires CRDs before watching
Prevention
- Include CRD generation in CI/CD pipeline
- Verify all CRDs are installed during deployment
- Make controller registration conditional (best practice)
Conclusion
Status: ⚠️ Warnings present but non-critical
- Basic functionality: ✅ Working
- Log noise: ⚠️ Present (can be filtered)
- Additional features: ⚠️ Not available (until CRDs installed)
- Fix required: ✅ Yes (for production)
Action: Generate and install missing CRDs when Go environment is available.
Last Updated: 2025-12-13
Status: ⚠️ FIX REQUIRED (NON-CRITICAL)