net.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. "os"
  6. "github.com/Sirupsen/logrus"
  7. "github.com/cad/ovpm/pb"
  8. "github.com/olekukonko/tablewriter"
  9. "github.com/urfave/cli"
  10. )
  11. var netDefineCommand = cli.Command{
  12. Name: "define",
  13. Usage: "Define a network.",
  14. Flags: []cli.Flag{
  15. cli.StringFlag{
  16. Name: "cidr, c",
  17. Usage: "CIDR of the network",
  18. },
  19. cli.StringFlag{
  20. Name: "name, n",
  21. Usage: "name of the network",
  22. },
  23. },
  24. Action: func(c *cli.Context) error {
  25. action = "net:create"
  26. name := c.String("name")
  27. cidr := c.String("cidr")
  28. if name == "" || cidr == "" {
  29. fmt.Println(cli.ShowSubcommandHelp(c))
  30. os.Exit(1)
  31. }
  32. conn := getConn(c.GlobalString("daemon-port"))
  33. defer conn.Close()
  34. netSvc := pb.NewNetworkServiceClient(conn)
  35. response, err := netSvc.Create(context.Background(), &pb.NetworkCreateRequest{Name: name, CIDR: cidr})
  36. if err != nil {
  37. logrus.Errorf("network can not be created '%s': %v", name, err)
  38. os.Exit(1)
  39. return err
  40. }
  41. logrus.Infof("network created: %s (%s)", response.Network.Name, response.Network.CIDR)
  42. return nil
  43. },
  44. }
  45. var netListCommand = cli.Command{
  46. Name: "list",
  47. Usage: "List network definitions.",
  48. Flags: []cli.Flag{
  49. cli.StringFlag{
  50. Name: "cidr, c",
  51. Usage: "CIDR of the network",
  52. },
  53. },
  54. Action: func(c *cli.Context) error {
  55. action = "net:list"
  56. conn := getConn(c.GlobalString("daemon-port"))
  57. defer conn.Close()
  58. netSvc := pb.NewNetworkServiceClient(conn)
  59. resp, err := netSvc.List(context.Background(), &pb.NetworkListRequest{})
  60. if err != nil {
  61. logrus.Errorf("networks can not be fetched: %v", err)
  62. os.Exit(1)
  63. return err
  64. }
  65. table := tablewriter.NewWriter(os.Stdout)
  66. table.SetHeader([]string{"#", "name", "cidr", "created at"})
  67. //table.SetBorder(false)
  68. for i, network := range resp.Networks {
  69. data := []string{fmt.Sprintf("%v", i+1), network.Name, network.CIDR, network.CreatedAt}
  70. table.Append(data)
  71. }
  72. table.Render()
  73. return nil
  74. },
  75. }
  76. var netUndefineCommand = cli.Command{
  77. Name: "undefine",
  78. Usage: "Undefine an existing network.",
  79. Flags: []cli.Flag{
  80. cli.StringFlag{
  81. Name: "name, n",
  82. Usage: "name of the network",
  83. },
  84. },
  85. Action: func(c *cli.Context) error {
  86. action = "net:delete"
  87. name := c.String("name")
  88. if name == "" {
  89. fmt.Println(cli.ShowSubcommandHelp(c))
  90. os.Exit(1)
  91. }
  92. conn := getConn(c.GlobalString("daemon-port"))
  93. defer conn.Close()
  94. netSvc := pb.NewNetworkServiceClient(conn)
  95. resp, err := netSvc.Delete(context.Background(), &pb.NetworkDeleteRequest{Name: name})
  96. if err != nil {
  97. logrus.Errorf("networks can not be deleted: %v", err)
  98. os.Exit(1)
  99. return err
  100. }
  101. logrus.Infof("network deleted: %s (%s)", resp.Network.Name, resp.Network.CIDR)
  102. return nil
  103. },
  104. }