Skip to content

Commit

Permalink
client: add app-router-update command
Browse files Browse the repository at this point in the history
  • Loading branch information
cezarsa committed Sep 26, 2017
1 parent b25cab2 commit bab1246
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 5 deletions.
59 changes: 58 additions & 1 deletion tsuru/client/router.go
Expand Up @@ -175,6 +175,63 @@ func (c *AppRoutersAdd) Run(context *cmd.Context, client *cmd.Client) error {
return nil
}

type AppRoutersUpdate struct {
cmd.GuessingCommand
opts cmd.MapFlag
fs *gnuflag.FlagSet
}

func (c *AppRoutersUpdate) Info() *cmd.Info {
return &cmd.Info{
Name: "app-router-update",
Usage: "app-router-update <router name> [-a/--app appname] [-o/--opts key=value]...",
Desc: "Update router opts in an application.",
MinArgs: 1,
MaxArgs: 1,
}
}

func (c *AppRoutersUpdate) Flags() *gnuflag.FlagSet {
if c.fs == nil {
c.fs = c.GuessingCommand.Flags()
optsMessage := "Custom options sent directly to router implementation."
c.fs.Var(&c.opts, "o", optsMessage)
c.fs.Var(&c.opts, "opts", optsMessage)
}
return c.fs
}

func (c *AppRoutersUpdate) Run(context *cmd.Context, client *cmd.Client) error {
appName, err := c.Guess()
if err != nil {
return err
}
routerName := context.Args[0]
url, err := cmd.GetURLVersion("1.5", fmt.Sprintf("/apps/%s/routers/%s", appName, routerName))
if err != nil {
return err
}
r := appTypes.AppRouter{
Name: routerName,
Opts: c.opts,
}
val, err := form.EncodeToValues(r)
if err != nil {
return err
}
request, err := http.NewRequest("PUT", url, strings.NewReader(val.Encode()))
if err != nil {
return err
}
request.Header.Set("Content-Type", "application/x-www-form-urlencoded")
_, err = client.Do(request)
if err != nil {
return err
}
fmt.Fprintln(context.Stdout, "Router successfully updated.")
return nil
}

type AppRoutersRemove struct {
cmd.GuessingCommand
}
Expand All @@ -194,7 +251,7 @@ func (c *AppRoutersRemove) Run(context *cmd.Context, client *cmd.Client) error {
if err != nil {
return err
}
url, err := cmd.GetURLVersion("1.5", fmt.Sprintf("/apps/%s/routers?name=%s", appName, context.Args[0]))
url, err := cmd.GetURLVersion("1.5", fmt.Sprintf("/apps/%s/routers/%s", appName, context.Args[0]))
if err != nil {
return err
}
Expand Down
33 changes: 29 additions & 4 deletions tsuru/client/router_test.go
Expand Up @@ -138,23 +138,48 @@ func (s *S) TestAppRoutersAddRun(c *check.C) {
c.Assert(stdout.String(), check.Equals, expected)
}

func (s *S) TestAppRoutersRemoveRun(c *check.C) {
func (s *S) TestAppRoutersUpdateRun(c *check.C) {
var stdout, stderr bytes.Buffer
context := cmd.Context{
Args: []string{"myrouter"},
Stdout: &stdout,
Stderr: &stderr,
}
expected := "Router successfully removed.\n"
expected := "Router successfully updated.\n"
trans := &cmdtest.ConditionalTransport{
Transport: cmdtest.Transport{Message: "", Status: http.StatusOK},
CondFunc: func(req *http.Request) bool {
err := req.ParseForm()
c.Assert(err, check.IsNil)
c.Assert(req.Form, check.DeepEquals, url.Values{
"name": []string{"myrouter"},
"Opts.a": []string{"b"},
"Opts.x": []string{"y"},
"Address": []string{""},
"Name": []string{"myrouter"},
})
return strings.HasSuffix(req.URL.Path, "/1.5/apps/myapp/routers") && req.Method == "DELETE"
return strings.HasSuffix(req.URL.Path, "/1.5/apps/myapp/routers/myrouter") && req.Method == "PUT"
},
}
client := cmd.NewClient(&http.Client{Transport: trans}, nil, manager)
command := AppRoutersUpdate{}
command.Flags().Parse(true, []string{"-a", "myapp", "-o", "a=b", "-o", "x=y"})
err := command.Run(&context, client)
c.Assert(err, check.IsNil)
c.Assert(stdout.String(), check.Equals, expected)
}

func (s *S) TestAppRoutersRemoveRun(c *check.C) {
var stdout, stderr bytes.Buffer
context := cmd.Context{
Args: []string{"myrouter"},
Stdout: &stdout,
Stderr: &stderr,
}
expected := "Router successfully removed.\n"
trans := &cmdtest.ConditionalTransport{
Transport: cmdtest.Transport{Message: "", Status: http.StatusOK},
CondFunc: func(req *http.Request) bool {
return strings.HasSuffix(req.URL.Path, "/1.5/apps/myapp/routers/myrouter") && req.Method == "DELETE"
},
}
client := cmd.NewClient(&http.Client{Transport: trans}, nil, manager)
Expand Down
1 change: 1 addition & 0 deletions tsuru/main.go
Expand Up @@ -161,6 +161,7 @@ func buildManager(name string) *cmd.Manager {
m.Register(&client.AppRoutersList{})
m.Register(&client.AppRoutersAdd{})
m.Register(&client.AppRoutersRemove{})
m.Register(&client.AppRoutersUpdate{})
m.RegisterRemoved("bs-env-set", "You should use `tsuru node-container-update big-sibling` instead.")
m.RegisterRemoved("bs-info", "You should use `tsuru node-container-info big-sibling` instead.")
m.RegisterRemoved("bs-upgrade", "You should use `tsuru node-container-upgrade big-sibling` instead.")
Expand Down

0 comments on commit bab1246

Please sign in to comment.