f-25: code: move load data to dedicated function

Signed-off-by: GnomeZworc <nicolas.boufidjeline@g3e.fr>
This commit is contained in:
GnomeZworc 2026-04-26 17:57:16 +02:00
commit cc9998028d
Signed by: nicolas.boufideline
GPG key ID: 4406BBBF8845D632
6 changed files with 222 additions and 208 deletions

View file

@ -3,7 +3,6 @@ package subnet
import (
"fmt"
"os"
"strings"
"git.g3e.fr/syonad/two/internal/ebtables"
"git.g3e.fr/syonad/two/internal/netif"
@ -23,69 +22,49 @@ func DeleteSubnet(db *badger.DB, subnetName string) error {
return nil
}
vpcName, err := kv.GetFromDB(db, "subnet/"+subnetName+"/vpc")
d, err := loadSubnet(db, subnetName)
if err != nil {
return fmt.Errorf("get vpc: %w", err)
return err
}
vxlanIDStr, err := kv.GetFromDB(db, "subnet/"+subnetName+"/vxlan_id")
if err != nil {
return fmt.Errorf("get vxlan_id: %w", err)
}
vxlanIface := fmt.Sprintf("vxlan-%d", d.vxlanID)
gatewayIP, err := kv.GetFromDB(db, "subnet/"+subnetName+"/gateway_ip")
if err != nil {
return fmt.Errorf("get gateway_ip: %w", err)
}
subnetID := strings.SplitN(subnetName, "-", 2)[1]
bridge := "br-" + subnetID
vxlanIface := "vxlan-" + vxlanIDStr
// arrêt du service dnsmasq
svc, err := systemd.New()
if err != nil {
return fmt.Errorf("connect to systemd: %w", err)
}
defer svc.Close()
svcName := "dnsmasq@" + vpcName + "_" + bridge + ".service"
if err := svc.Stop(svcName); err != nil {
if err := svc.Stop("dnsmasq@" + d.vpc + "_" + d.bridge + ".service"); err != nil {
return fmt.Errorf("stop dnsmasq: %w", err)
}
// suppression de la config dnsmasq
if err := os.Remove("/etc/dnsmasq.d/" + vpcName + "_" + bridge + ".conf"); err != nil && !os.IsNotExist(err) {
if err := os.Remove("/etc/dnsmasq.d/" + d.vpc + "_" + d.bridge + ".conf"); err != nil && !os.IsNotExist(err) {
return fmt.Errorf("remove dnsmasq config: %w", err)
}
// suppression des règles ebtables
if err := ebtables.DeleteARPToGateway(bridge, gatewayIP); err != nil {
if err := ebtables.DeleteARPToGateway(d.bridge, d.gatewayIP.String()); err != nil {
return fmt.Errorf("delete ebtables arp rule: %w", err)
}
if err := ebtables.DeleteDHCP(bridge); err != nil {
if err := ebtables.DeleteDHCP(d.bridge); err != nil {
return fmt.Errorf("delete ebtables dhcp rule: %w", err)
}
// suppression du bridge dans le netns VPC
if err := netns.Call(vpcName, func() error {
return netif.DeleteLink(bridge)
if err := netns.Call(d.vpc, func() error {
return netif.DeleteLink(d.bridge)
}); err != nil {
return fmt.Errorf("delete bridge in netns: %w", err)
}
// suppression du vxlan
if err := netif.DeleteLink(vxlanIface); err != nil {
return fmt.Errorf("delete vxlan: %w", err)
}
// suppression du veth pair (supprime les deux côtés)
if err := netif.DeleteLink("v-" + subnetID + "-e"); err != nil {
if err := netif.DeleteLink("v-" + d.subnetID + "-e"); err != nil {
return fmt.Errorf("delete veth: %w", err)
}
// suppression du bridge dans le root netns
if err := netif.DeleteLink(bridge); err != nil {
if err := netif.DeleteLink(d.bridge); err != nil {
return fmt.Errorf("delete bridge: %w", err)
}