Skip to content
This repository has been archived by the owner on Feb 5, 2019. It is now read-only.

Commit

Permalink
feat: allow domain in repository name, simplify add by default
Browse files Browse the repository at this point in the history
Signed-off-by: Jean-Tiare Le Bigot <[email protected]>
  • Loading branch information
Jean-Tiare Le Bigot committed Sep 29, 2015
1 parent c4745c6 commit b136f1e
Show file tree
Hide file tree
Showing 6 changed files with 112 additions and 44 deletions.
55 changes: 55 additions & 0 deletions internal/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@ package internal
import (
"encoding/json"
"fmt"
"net/url"
"os"
"os/signal"
"strings"
"sync"
)

Expand Down Expand Up @@ -35,6 +37,59 @@ func DecodeMessage(data []byte) *Message {
return &m
}

// ParseResourceName normalizes repo or service name of the form [[cluster/]application/]name[:tag]
func ParseResourceName(repositoryName string) (host, application, repository, tag string, err error) {
// FIXME: duplicate run
ReadConfig()
host = ""
application = User
repository = ""
tag = ""
err = nil

// Split namespace and repository
split := strings.Split(repositoryName, "/")
if len(split) == 1 {
repository = split[0]
} else if len(split) == 2 {
application = split[0]
repository = split[1]
} else if len(split) == 3 {
host = split[0]
application = split[1]
repository = split[2]
} else {
err = fmt.Errorf("Invalid repository %s. Should be of form [[endpoint/]application/]name[:tag]", repositoryName)
return
}

// Split repo URL and tag
split = strings.Split(repository, ":")
if len(split) == 2 {
repository = split[0]
tag = split[1]
} else if len(split) > 2 {
err = fmt.Errorf("Invalid repository %s. Should be of form [[endpoint/]application/]name[:tag]", repositoryName)
return
}

return
}

// CheckHostConsistent with config. Assume config has already been parsed. Consider '' as OK
func CheckHostConsistent(host string) bool {
if host == "" {
return true
}

url, err := url.ParseRequestURI(Host)
if err != nil {
return false
}

return host == url.Host
}

// ExitAfterCtrlC will exit(0) as soon as Ctrl-C is pressed. Typically used when streaming console
func ExitAfterCtrlC() {
var endWaiter sync.WaitGroup
Expand Down
37 changes: 20 additions & 17 deletions service/add.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ var cmdAddRedeploy bool
var cmdAddBody Add
var cmdAddNetwork []string

const cmdAddUsage = "Invalid usage. sail service add [<application>/]<repository>[:tag] [<service>]. Please see sail service add --help"

func addCmd() *cobra.Command {

cmd := &cobra.Command{
Expand Down Expand Up @@ -108,27 +110,28 @@ func cmdAdd(cmd *cobra.Command, args []string) {
cmdAddBody.ContainerPorts = make(map[string][]PortConfig)
cmdAddBody.ContainerCommand = make([]string, 0)

if len(args) != 2 {
fmt.Fprintf(os.Stderr, "Invalid usage. sail service add <application>/<repository>[:tag] <service>. Please see sail service add --help\n")
return
if len(args) < 2 {
fmt.Fprintln(os.Stderr, cmdAddUsage)
os.Exit(1)
}

// Get args
cmdAddBody.Repository = args[0]
cmdAddBody.Service = args[1]

// Split repo URL and tag
split := strings.Split(cmdAddBody.Repository, ":")
if len(split) > 1 {
cmdAddBody.Repository = split[0]
cmdAddBody.RepositoryTag = split[1]
// Split namespace and repository
host, app, repo, tag, err := internal.ParseResourceName(args[0])
internal.Check(err)
cmdAddBody.Application = app
cmdAddBody.Repository = repo
cmdAddBody.RepositoryTag = tag

if !internal.CheckHostConsistent(host) {
fmt.Fprintf(os.Stderr, "Error: Invalid Host %s for endpoint %s\n", host, internal.Host)
os.Exit(1)
}

// Split namespace and repository
split = strings.Split(cmdAddBody.Repository, "/")
if len(split) > 1 {
cmdAddBody.Application = split[0]
cmdAddBody.Repository = split[1]
// Service name
if len(args) >= 2 {
cmdAddBody.Service = args[1]
} else {
cmdAddBody.Service = cmdAddBody.Repository
}

serviceAdd(cmdAddBody)
Expand Down
19 changes: 11 additions & 8 deletions service/logs.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import (
"text/tabwriter"

"github.com/google/go-querystring/query"
"github.com/spf13/cobra"
"github.com/runabove/sail/internal"
"github.com/spf13/cobra"
)

var (
Expand Down Expand Up @@ -47,21 +47,24 @@ type Logs struct {
}

func cmdLogs(cmd *cobra.Command, args []string) {
usage := "Invalid usage. sail service logs <applicationName>/<serviceId>. Please see sail service logs --help\n"
usage := "Invalid usage. sail service logs [<applicationName>/]<serviceId>. Please see sail service logs --help\n"
if len(args) != 1 {
fmt.Fprintf(os.Stderr, usage)
return
}

split := strings.Split(args[0], "/")
if len(split) != 2 {
fmt.Fprintf(os.Stderr, usage)
return
// Split namespace and service
host, app, service, _, err := internal.ParseResourceName(args[0])
internal.Check(err)

if !internal.CheckHostConsistent(host) {
fmt.Fprintf(os.Stderr, "Error: Invalid Host %s for endpoint %s\n", host, internal.Host)
os.Exit(1)
}

// Get args
logsBody.Application = split[0]
logsBody.Service = split[1]
logsBody.Application = app
logsBody.Service = service
serviceLogs(logsBody)
}

Expand Down
17 changes: 10 additions & 7 deletions service/redeploy.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,15 +82,18 @@ func cmdRedeploy(cmd *cobra.Command, args []string) {
return
}

split := strings.Split(args[0], "/")
if len(split) != 2 {
fmt.Fprintf(os.Stderr, usage)
return
// Split namespace and repository
host, app, service, _, err := internal.ParseResourceName(args[0])
internal.Check(err)
redeployBody.Application = app
redeployBody.Service = service

if !internal.CheckHostConsistent(host) {
fmt.Fprintf(os.Stderr, "Error: Invalid Host %s for endpoint %s\n", host, internal.Host)
os.Exit(1)
}

// Get args
redeployBody.Application = split[0]
redeployBody.Service = split[1]
// Redeploy
serviceRedeploy(redeployBody)
}

Expand Down
14 changes: 8 additions & 6 deletions service/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,14 @@ package service
import (
"fmt"
"os"
"strings"

"github.com/spf13/cobra"

"github.com/runabove/sail/internal"
)

var startBatch bool
var startUsage = "usage: sail services start [-h] [--batch] service"
var startUsage = "usage: sail services start [-h] [--batch] [<applicationName>/]<serviceId>"

func startCmd() *cobra.Command {

Expand All @@ -34,13 +33,16 @@ func cmdStart(cmd *cobra.Command, args []string) {
os.Exit(1)
}

t := strings.Split(args[0], "/")
if len(t) != 2 {
fmt.Fprintln(os.Stderr, startUsage)
// Split namespace and service
host, app, service, _, err := internal.ParseResourceName(args[0])
internal.Check(err)

if !internal.CheckHostConsistent(host) {
fmt.Fprintf(os.Stderr, "Error: Invalid Host %s for endpoint %s\n", host, internal.Host)
os.Exit(1)
}

serviceStart(t[0], t[1], startBatch)
serviceStart(app, service, startBatch)
}

// serviceStart start service (without attach)
Expand Down
14 changes: 8 additions & 6 deletions service/stop.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,13 @@ package service
import (
"fmt"
"os"
"strings"

"github.com/runabove/sail/internal"
"github.com/spf13/cobra"
)

var stopBatch bool
var stopUsage = "usage: sail services stop [-h] [--batch] <applicationName>/<serviceId>"
var stopUsage = "usage: sail services stop [-h] [--batch] [<applicationName>/]<serviceId>"

func stopCmd() *cobra.Command {

Expand All @@ -33,13 +32,16 @@ func cmdStop(cmd *cobra.Command, args []string) {
os.Exit(1)
}

t := strings.Split(args[0], "/")
if len(t) != 2 {
fmt.Fprintln(os.Stderr, stopUsage)
// Split namespace and service
host, app, service, _, err := internal.ParseResourceName(args[0])
internal.Check(err)

if !internal.CheckHostConsistent(host) {
fmt.Fprintf(os.Stderr, "Error: Invalid Host %s for endpoint %s\n", host, internal.Host)
os.Exit(1)
}

serviceStop(t[0], t[1], stopBatch)
serviceStop(app, service, stopBatch)
}

// serviceStop stop service (without attach)
Expand Down

0 comments on commit b136f1e

Please sign in to comment.