# 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 1. **Provider Code**: The provider (`cmd/provider/main.go`) unconditionally registers controllers for: - `ProxmoxVMScaleSet` - For VM scaling operations - `ResourceDiscovery` - For resource discovery operations 2. **Missing CRDs**: The CRD YAML files for these resources don't exist: - `proxmox.sankofa.nexus_proxmoxvmscalesets.yaml` - Missing - `proxmox.sankofa.nexus_resourcediscoveries.yaml` - Missing 3. **Type Definitions Exist**: The Go type definitions exist in: - `apis/v1alpha1/vmscaleset_types.go` ✅ - `apis/v1alpha1/resourcediscovery_types.go` ✅ 4. **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**: 1. **Generate CRDs**: ```bash cd crossplane-provider-proxmox make manifests ``` This will generate: - `config/crd/bases/proxmox.sankofa.nexus_proxmoxvmscalesets.yaml` - `config/crd/bases/proxmox.sankofa.nexus_resourcediscoveries.yaml` 2. **Install CRDs**: ```bash kubectl apply -f config/crd/bases/ ``` 3. **Verify**: ```bash 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 ``` 4. **Check Logs**: ```bash 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**: ```go // 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 ```bash 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 1. **All CRDs Installed**: ```bash kubectl get crd | grep proxmox # 4 CRDs should be listed ``` 2. **Clean Logs**: ```bash kubectl logs -n crossplane-system -l app=crossplane-provider-proxmox --tail=100 | grep -i error # Should show no CRD-related errors ``` 3. **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)**