Some checks failed
API CI / API Lint (push) Successful in 47s
API CI / API Type Check (push) Failing after 47s
API CI / API Test (push) Successful in 1m0s
API CI / API Build (push) Failing after 50s
API CI / Build Docker Image (push) Has been skipped
Build Crossplane Provider / build (push) Failing after 5m51s
CD Pipeline / Deploy to Staging (push) Failing after 29s
CI Pipeline / Lint and Type Check (push) Failing after 36s
CI Pipeline / Build (push) Has been skipped
CI Pipeline / Test Backend (push) Failing after 1m33s
CI Pipeline / Test Frontend (push) Failing after 30s
CI Pipeline / Security Scan (push) Failing after 1m16s
Crossplane Provider CI / Go Test (push) Failing after 3m23s
Crossplane Provider CI / Go Lint (push) Failing after 7m27s
Crossplane Provider CI / Go Build (push) Failing after 3m27s
Deploy to Staging / Deploy to Staging (push) Failing after 30s
Portal CI / Portal Lint (push) Failing after 21s
Portal CI / Portal Type Check (push) Failing after 21s
Portal CI / Portal Test (push) Failing after 21s
Portal CI / Portal Build (push) Failing after 22s
Test Suite / frontend-tests (push) Failing after 30s
Test Suite / api-tests (push) Failing after 49s
Test Suite / blockchain-tests (push) Failing after 30s
Type Check / type-check (map[directory:. name:root]) (push) Failing after 23s
Type Check / type-check (map[directory:api name:api]) (push) Failing after 21s
Type Check / type-check (map[directory:portal name:portal]) (push) Failing after 19s
Validate Configuration Files / validate (push) Failing after 1m52s
CD Pipeline / Deploy to Production (push) Has been skipped
Co-authored-by: Cursor <cursoragent@cursor.com>
249 lines
6.6 KiB
Markdown
249 lines
6.6 KiB
Markdown
# 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)**
|
|
|