diff --git a/.forgejo/workflows/prerelease.yml b/.forgejo/workflows/prerelease.yml index 42d3a75..f20ca66 100644 --- a/.forgejo/workflows/prerelease.yml +++ b/.forgejo/workflows/prerelease.yml @@ -37,7 +37,7 @@ jobs: - metadata - metacli - agent - - netns + - vpc uses: ./.forgejo/workflows/build.yml with: tag: ${{ needs.set-release-target.outputs.release_cible }} diff --git a/cmd/netns/main.go b/cmd/netns/main.go deleted file mode 100644 index e1729f7..0000000 --- a/cmd/netns/main.go +++ /dev/null @@ -1,40 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "os" - - "git.g3e.fr/syonad/two/internal/netns" -) - -var ( - netns_name = flag.String("netns", "", "Network namespace à faire") - action = flag.String("action", "", "Action a faire") -) - -func main() { - flag.Parse() - - switch *action { - case "create": - err := netns.Create(*netns_name) - if err != nil { - fmt.Println(err) - } - case "delete": - err := netns.Delete(*netns_name) - if err != nil { - fmt.Println(err) - } - case "check": - if netns.Exist(*netns_name) { - fmt.Printf("netns %s exist\n", *netns_name) - } else { - fmt.Printf("netns %s do not exist\n", *netns_name) - } - default: - fmt.Printf("Available commande:\n - create\n - delete\n - check\n") - os.Exit(1) - } -} diff --git a/cmd/vpc/main.go b/cmd/vpc/main.go index d18dabd..6d70f79 100644 --- a/cmd/vpc/main.go +++ b/cmd/vpc/main.go @@ -5,7 +5,7 @@ import ( "fmt" "os" - "git.g3e.fr/syonad/two/internal/netif" + "git.g3e.fr/syonad/two/internal/vpc" ) var ( @@ -19,8 +19,11 @@ func main() { switch *action { case "create": - err := netif.CreateVethToNetns("veth"+*name+"ext", "veth"+*name+"int", "/var/run/netns/"+*netns, 9000) - if err != nil { + if err := vpc.CreateVPC(*name); err != nil { + fmt.Println(err) + } + case "delete": + if err := vpc.DeleteVPC(*name); err != nil { fmt.Println(err) } default: diff --git a/internal/vpc/create.go b/internal/vpc/create.go new file mode 100644 index 0000000..55896ba --- /dev/null +++ b/internal/vpc/create.go @@ -0,0 +1,60 @@ +package vpc + +import ( + "git.g3e.fr/syonad/two/internal/netif" + "git.g3e.fr/syonad/two/internal/netns" +) + +func CreateVPC(name string) error { + // missing + // search data in db + // change state in db + + // create netns + if err := netns.Create(name); err != nil { + return err + } + + // create veth public for this netns + if err := netif.CreateVethToNetns(name+"-ext", "veth-"+name+"-int", "/var/run/netns/"+name, 9000); err != nil { + return err + } + + // create public bridge in netns + if err := netns.Call(name, func() error { + return netif.CreateBridge("br-public", 1500, false) + }); err != nil { + return err + } + + // set veth to ext public bridge + if err := netif.BridgeSetMaster(name+"-ext", "br-public"); err != nil { + return err + } + + // set veth to int public bridge + if err := netns.Call(name, func() error { + return netif.BridgeSetMaster("veth-"+name+"-int", "br-public") + }); err != nil { + return err + } + + // set set ext veth up + if err := netif.LinkSetUp(name + "-ext"); err != nil { + return nil + } + // set set int veth up + if err := netns.Call(name, func() error { + return netif.LinkSetUp("veth-" + name + "-int") + }); err != nil { + return err + } + // set set int bridge up + if err := netns.Call(name, func() error { + return netif.LinkSetUp("br-public") + }); err != nil { + return err + } + + return nil +} diff --git a/internal/vpc/delete.go b/internal/vpc/delete.go new file mode 100644 index 0000000..3daea61 --- /dev/null +++ b/internal/vpc/delete.go @@ -0,0 +1,18 @@ +package vpc + +import ( + "git.g3e.fr/syonad/two/internal/netif" + "git.g3e.fr/syonad/two/internal/netns" +) + +func DeleteVPC(name string) error { + if err := netif.DeleteLink(name + "-ext"); err != nil { + return err + } + + if err := netns.Delete(name); err != nil { + return err + } + + return nil +}