diff --git a/internal/cloning/cloning_service.go b/internal/cloning/cloning_service.go index c97a8b4..be31fd6 100644 --- a/internal/cloning/cloning_service.go +++ b/internal/cloning/cloning_service.go @@ -291,7 +291,7 @@ func (cs *CloningService) CloneTemplate(req CloneRequest) error { for _, target := range req.Targets { vnetName := fmt.Sprintf("kamino%d", target.PodNumber) log.Printf("Setting VNet %s for pool %s (target: %s)", vnetName, target.PoolName, target.Name) - err = cs.ProxmoxService.SetPodVnet(target.PoolName, vnetName) + err = cs.ProxmoxService.SetPodVnet(target.PoolName, vnetName, target.VMIDs[0]) if err != nil { errors = append(errors, fmt.Sprintf("failed to update pod vnet for %s: %v", target.Name, err)) } diff --git a/internal/proxmox/networking.go b/internal/proxmox/networking.go index ff0947b..9a809dd 100644 --- a/internal/proxmox/networking.go +++ b/internal/proxmox/networking.go @@ -4,7 +4,6 @@ import ( "fmt" "log" "math" - "regexp" "strings" "time" @@ -140,7 +139,7 @@ func (s *ProxmoxService) ConfigurePodRouter(podNumber int, node string, vmid int return nil } -func (s *ProxmoxService) SetPodVnet(poolName string, vnetName string) error { +func (s *ProxmoxService) SetPodVnet(poolName string, vnetName string, routerVMID int) error { // Get all VMs in the pool vms, err := s.GetPoolVMs(poolName) if err != nil { @@ -153,14 +152,13 @@ func (s *ProxmoxService) SetPodVnet(poolName string, vnetName string) error { log.Printf("Setting VNet %s for %d VMs in pool %s", vnetName, len(vms), poolName) - routerRegex := regexp.MustCompile(`(?i).*(router|pfsense|vyos).*`) var errors []string for _, vm := range vms { vnet := "net0" - // Detect if VM is a router based on its name (lazy way but requires fewer API calls) - if routerRegex.MatchString(vm.Name) { + // Identify the router by its VMID + if vm.VmId == routerVMID { vnet = "net1" log.Printf("Detected router VM %s (VMID: %d), using %s interface", vm.Name, vm.VmId, vnet) } else { diff --git a/internal/proxmox/pools.go b/internal/proxmox/pools.go index d53513c..6b7780b 100644 --- a/internal/proxmox/pools.go +++ b/internal/proxmox/pools.go @@ -406,7 +406,7 @@ func (s *ProxmoxService) CreateTemplatePool(creator string, name string, addRout vnet := fmt.Sprintf("templ%d", templateID) log.Printf("Configuring VNet %s for pool %s", vnet, poolName) - err = s.SetPodVnet(poolName, vnet) + err = s.SetPodVnet(poolName, vnet, routerVMID) if err != nil { return fmt.Errorf("failed to set VNet for pool %s: %w", poolName, err) } diff --git a/internal/proxmox/types.go b/internal/proxmox/types.go index 6a98323..15ae039 100644 --- a/internal/proxmox/types.go +++ b/internal/proxmox/types.go @@ -77,7 +77,7 @@ type Service interface { // Networking GetRouterType(router VM) (string, error) ConfigurePodRouter(podNumber int, node string, vmid int, routerType string) error - SetPodVnet(poolName string, vnetName string) error + SetPodVnet(poolName string, vnetName string, routerVMID int) error GetUsedVNets() ([]VNet, error) CreateTemplatePool(creator string, name string, addRouter bool, vms []VM) error