Files
openlan/cmd/api/v5/config.go
Daniel Ding b025178053
Some checks failed
Coverage CI / build (push) Has been cancelled
CodeQL / Analyze (go) (push) Has been cancelled
Ubuntu CI / build (push) Has been cancelled
docs: update install.md
2025-04-24 17:03:41 +08:00

101 lines
2.1 KiB
Go
Executable File

package v5
import (
"fmt"
"github.com/luscis/openlan/cmd/api"
"github.com/luscis/openlan/pkg/config"
"github.com/luscis/openlan/pkg/schema"
"github.com/urfave/cli/v2"
)
type Config struct {
Cmd
}
func (u Config) Url(prefix, name string) string {
if name == "" {
return prefix + "/api/config"
}
return prefix + "/api/config/" + name
}
func (u Config) List(c *cli.Context) error {
url := u.Url(c.String("url"), "")
clt := u.NewHttp(c.String("token"))
cfg := &config.Switch{}
if err := clt.GetJSON(url, cfg); err == nil {
name := c.String("network")
format := c.String("format")
cfg.RemarshalNetworks(format)
if len(name) > 0 {
obj := cfg.GetNetwork(name)
return u.Out(obj, format, "")
} else {
return u.Out(cfg, format, "")
}
} else {
return err
}
}
func (u Config) Reload(c *cli.Context) error {
url := u.Url(c.String("url"), "reload")
clt := u.NewHttp(c.String("token"))
data := &schema.Message{}
if err := clt.PutJSON(url, nil, data); err == nil {
fmt.Println(data.Message)
return nil
} else {
return err
}
}
func (u Config) Save(c *cli.Context) error {
url := u.Url(c.String("url"), "save")
clt := u.NewHttp(c.String("token"))
data := &schema.Message{}
if err := clt.PutJSON(url, nil, data); err == nil {
fmt.Println(data.Message)
return nil
} else {
return err
}
}
func (u Config) Commands(app *api.App) {
app.Command(&cli.Command{
Name: "config",
Usage: "Switch configuration",
Subcommands: []*cli.Command{
{
Name: "list",
Usage: "Display all configuration",
Aliases: []string{"ls"},
Flags: []cli.Flag{
&cli.StringFlag{Name: "network", Value: ""},
},
Action: u.List,
},
{
Name: "reload",
Usage: "Reload configuration",
Aliases: []string{"re"},
Flags: []cli.Flag{
&cli.StringFlag{Name: "dir", Value: "/etc/openlan"},
},
Action: u.Reload,
},
{
Name: "save",
Usage: "Save configuration",
Aliases: []string{"sa"},
Flags: []cli.Flag{
&cli.StringFlag{Name: "dir", Value: "/etc/openlan"},
},
Action: u.Save,
},
},
})
}