Module: Pangea::Kubernetes::BackendRegistry
- Defined in:
- lib/pangea/kubernetes/backend_registry.rb
Overview
Lazy-loading backend registry. Provider gems are loaded on first use, so users only need the gems for backends they actually reference.
Constant Summary collapse
- BACKEND_MAP =
Backend matrix: cloud x tech
Each cloud provider can run multiple Kubernetes technologies:
- Managed K8s (EKS, GKE, AKS) — cloud-native control plane - NixOS K3s — lightweight K3s on NixOS VMs via blackmatter-kubernetes - NixOS K8s — vanilla Kubernetes on NixOS VMs (future)Naming: cloud_tech (e.g., aws_eks, aws_nixos_k3s, gcp_gke) Legacy aliases: :aws → :aws_eks, :aws_nixos → :aws_nixos_k3s
{ # ── AWS ─────────────────────────────────────────────────────── aws_eks: { module_path: 'pangea/kubernetes/backends/aws_eks', class_name: 'AwsEks' }, aws_nixos_k3s: { module_path: 'pangea/kubernetes/backends/aws_nixos', class_name: 'AwsNixos' }, # aws_nixos_k8s: { module_path: 'pangea/kubernetes/backends/aws_nixos_k8s', class_name: 'AwsNixosK8s' }, # ── GCP ─────────────────────────────────────────────────────── gcp_gke: { module_path: 'pangea/kubernetes/backends/gcp_gke', class_name: 'GcpGke' }, gcp_nixos_k3s: { module_path: 'pangea/kubernetes/backends/gcp_nixos', class_name: 'GcpNixos' }, # ── Azure ───────────────────────────────────────────────────── azure_aks: { module_path: 'pangea/kubernetes/backends/azure_aks', class_name: 'AzureAks' }, azure_nixos_k3s: { module_path: 'pangea/kubernetes/backends/azure_nixos', class_name: 'AzureNixos' }, # ── Hetzner ────────────────────────────────────────────────── hcloud_k3s: { module_path: 'pangea/kubernetes/backends/hcloud_k3s', class_name: 'HcloudK3s' }, }.freeze
- ALIASES =
Legacy aliases — backward compat with existing templates
{ aws: :aws_eks, aws_nixos: :aws_nixos_k3s, gcp: :gcp_gke, gcp_nixos: :gcp_nixos_k3s, azure: :azure_aks, azure_nixos: :azure_nixos_k3s, hcloud: :hcloud_k3s, }.freeze
Class Method Summary collapse
-
.all_names ⇒ Object
List all names including aliases.
-
.available_backends ⇒ Object
List all canonical backend names.
-
.backend_available?(name) ⇒ Boolean
Check if a backend’s provider gem is available.
-
.register(name, backend_module) ⇒ Object
Register a backend module for a given backend name.
-
.reset! ⇒ Object
Reset registry (for testing).
-
.resolve(name) ⇒ Object
Resolve a backend by name, lazy-loading if needed.
Class Method Details
.all_names ⇒ Object
List all names including aliases
89 90 91 |
# File 'lib/pangea/kubernetes/backend_registry.rb', line 89 def all_names (BACKEND_MAP.keys + ALIASES.keys).uniq end |
.available_backends ⇒ Object
List all canonical backend names
84 85 86 |
# File 'lib/pangea/kubernetes/backend_registry.rb', line 84 def available_backends BACKEND_MAP.keys end |
.backend_available?(name) ⇒ Boolean
Check if a backend’s provider gem is available
94 95 96 97 98 99 |
# File 'lib/pangea/kubernetes/backend_registry.rb', line 94 def backend_available?(name) resolve(name) true rescue LoadError false end |
.register(name, backend_module) ⇒ Object
Register a backend module for a given backend name
64 65 66 |
# File 'lib/pangea/kubernetes/backend_registry.rb', line 64 def register(name, backend_module) @backends[name.to_sym] = backend_module end |
.reset! ⇒ Object
Reset registry (for testing)
102 103 104 |
# File 'lib/pangea/kubernetes/backend_registry.rb', line 102 def reset! @backends = {} end |
.resolve(name) ⇒ Object
Resolve a backend by name, lazy-loading if needed. Supports both canonical names (aws_eks) and legacy aliases (aws).
70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/pangea/kubernetes/backend_registry.rb', line 70 def resolve(name) name = name.to_sym # Resolve alias to canonical name name = ALIASES[name] if ALIASES.key?(name) return @backends[name] if @backends.key?(name) entry = BACKEND_MAP[name] raise ArgumentError, "Unknown backend: #{name}. Available: #{available_backends.join(', ')}" unless entry load_backend(name, entry) end |