diff --git a/Gopkg.lock b/Gopkg.lock index c15114d..9161152 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -42,12 +42,12 @@ version = "v1.4.7" [[projects]] - digest = "1:97df918963298c287643883209a2c3f642e6593379f97ab400c2a2e219ab647d" + digest = "1:318f1c959a8a740366fce4b1e1eb2fd914036b4af58fbd0a003349b305f118ad" name = "github.com/golang/protobuf" packages = ["proto"] pruneopts = "UT" - revision = "aa810b61a9c79d51363740d207bb46cf8e620ed5" - version = "v1.2.0" + revision = "c823c79ea1570fb5ff454033735a8e68575d1d0f" + version = "v1.3.0" [[projects]] digest = "1:c0d19ab64b32ce9fe5cf4ddceba78d5bc9807f0016db6b1183599da3dcc24d10" @@ -85,16 +85,16 @@ version = "v1.0" [[projects]] - digest = "1:0a69a1c0db3591fcefb47f115b224592c8dfa4368b7ba9fae509d5e16cdc95c8" + digest = "1:31e761d97c76151dde79e9d28964a812c46efc5baee4085b86f68f0c654450de" name = "github.com/konsorten/go-windows-terminal-sequences" packages = ["."] pruneopts = "UT" - revision = "5c8c8bd35d3832f5d134ae1e1e375b69a4d25242" - version = "v1.0.1" + revision = "f55edac94c9bbba5d6182a4be46d86a2c9b5b50e" + version = "v1.0.2" [[projects]] branch = "master" - digest = "1:8db850191e257810a54852e8fdd7834a2916e0f2e6e29a191313fecadd37651c" + digest = "1:6b08e8fbcc104cf85a0232586666d79c009f841657b2f00cf40f89226aca50aa" name = "github.com/lastbackend/lastbackend" packages = [ "pkg/api/client", @@ -119,7 +119,7 @@ "pkg/util/validator", ] pruneopts = "UT" - revision = "cd27b47a1410943a6f5bb27b76426a929995d20b" + revision = "2b1b56324631c74e034c2be93123ec20d3e65f78" [[projects]] branch = "master" @@ -191,12 +191,12 @@ version = "v1.2.0" [[projects]] - digest = "1:87c2e02fb01c27060ccc5ba7c5a407cc91147726f8f40b70cceeedbc52b1f3a8" + digest = "1:e4c72127d910a96daf869a44f3dd563b86dbe6931a172863a0e99c5ff04b59e4" name = "github.com/sirupsen/logrus" packages = ["."] pruneopts = "UT" - revision = "e1e72e9de974bd926e5c56f83753fba2df402ce5" - version = "v1.3.0" + revision = "dae0fa8d5b0c810a8ab733fbd5510c7cae84eca4" + version = "v1.4.0" [[projects]] digest = "1:3e39bafd6c2f4bf3c76c3bfd16a2e09e016510ad5db90dc02b88e2f565d6d595" @@ -218,20 +218,20 @@ version = "v1.3.0" [[projects]] - digest = "1:645cabccbb4fa8aab25a956cbcbdf6a6845ca736b2c64e197ca7cbb9d210b939" + digest = "1:22799aea8fe96dd5693abdd1eaa14b1b29e3eafbdc7733fa155b3cb556c8a7ae" name = "github.com/spf13/cobra" packages = ["."] pruneopts = "UT" - revision = "ef82de70bb3f60c65fb8eebacbb2d122ef517385" - version = "v0.0.3" + revision = "67fc4837d267bc9bfd6e47f77783fcc3dffc68de" + version = "v0.0.4" [[projects]] - digest = "1:68ea4e23713989dc20b1bded5d9da2c5f9be14ff9885beef481848edd18c26cb" + digest = "1:1b753ec16506f5864d26a28b43703c58831255059644351bbcb019b843950900" name = "github.com/spf13/jwalterweatherman" packages = ["."] pruneopts = "UT" - revision = "4a4406e478ca629068e7768fc33f3f044173c0a6" - version = "v1.0.0" + revision = "94f6ae3ed3bceceafa716478c5fbf8d29ca601a1" + version = "v1.1.0" [[projects]] digest = "1:c1b1102241e7f645bc8e0c22ae352e8f0dc6484b6cb4d132fa9f24174e0119e2" @@ -251,7 +251,7 @@ [[projects]] branch = "master" - digest = "1:fba9cce8d6c113fc2e49821ba4a9cc81c38aa7eac68d92955c3095e2c634cdd7" + digest = "1:0c75a1e88c2b1e0361102c133f2690fd1fd5ab5da829f60a9c2dd20b9c224c71" name = "golang.org/x/crypto" packages = [ "bcrypt", @@ -259,11 +259,11 @@ "ssh/terminal", ] pruneopts = "UT" - revision = "a4c6cb3142f211c99e4bf4cd769535b29a9b616f" + revision = "c2843e01d9a2bc60bb26ad24e09734fdc2d9ec58" [[projects]] branch = "master" - digest = "1:e480830d20470d74d24bc36a52d4152c420c2cab67503e54f8f08e2db52579c5" + digest = "1:a7e7d4a2763c58f27ccd9c712d073b3972ee8ba2780e652a8e918c7ef43149bf" name = "golang.org/x/net" packages = [ "http/httpguts", @@ -272,18 +272,18 @@ "idna", ] pruneopts = "UT" - revision = "3a22650c66bd7f4fb6d1e8072ffd7b75c8a27898" + revision = "d8887717615a059821345a5c23649351b52a1c0b" [[projects]] branch = "master" - digest = "1:80200f57d482f61334a482a046ddedbad77c04dbec6ab81a4e1b3c6adbdfadef" + digest = "1:944736317d4f2fb1c1015ef9ca05fd9313b4e19f1128901cc678f636435fa9b0" name = "golang.org/x/sys" packages = [ "unix", "windows", ] pruneopts = "UT" - revision = "cd391775e71e684db52b63df9affd58269495083" + revision = "fead79001313d15903fb4605b4a1b781532cd93e" [[projects]] digest = "1:a2ab62866c75542dd18d2b069fec854577a20211d7c0ea6ae746072a1dccdd18" @@ -316,6 +316,14 @@ revision = "51d6538a90f86fe93ac480b35f37b2be17fef232" version = "v2.2.2" +[[projects]] + branch = "v3" + digest = "1:e11e6a71536a7120d56ea0c0cbfb4cf2b24b328f3982e8d03ce6939f7fe8b14c" + name = "gopkg.in/yaml.v3" + packages = ["."] + pruneopts = "UT" + revision = "55513cacd4ae8b250e3a9084ab9d8c407b1ed618" + [solve-meta] analyzer-name = "dep" analyzer-version = 1 @@ -335,7 +343,7 @@ "github.com/mattn/go-runewidth", "github.com/pkg/errors", "github.com/spf13/cobra", - "gopkg.in/yaml.v2", + "gopkg.in/yaml.v3", ] solver-name = "gps-cdcl" solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml index e86423d..9b3b1b6 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -31,24 +31,24 @@ [[constraint]] name = "github.com/mattn/go-runewidth" - version = "0.0.3" + version = "0.0.4" [[constraint]] name = "github.com/spf13/cobra" - version = "0.0.3" + version = "0.0.4" [[constraint]] - name = "gopkg.in/yaml.v2" - version = "2.2.1" - -[[constraint]] - branch = "master" name = "github.com/lastbackend/lastbackend" + branch = "master" [[constraint]] branch = "master" name = "github.com/howeyc/gopass" +[[constraint]] + name = "gopkg.in/yaml.v3" + branch = "v3" + [prune] go-tests = true unused-packages = true diff --git a/contrib/examples/job-build.yml b/contrib/examples/job-build.yml index a962ed7..2041eca 100644 --- a/contrib/examples/job-build.yml +++ b/contrib/examples/job-build.yml @@ -3,8 +3,8 @@ version: v1 meta: name: build labels: - app: lastbackend type: job + app: lastbackend spec: enabled: true concurrency: @@ -15,37 +15,38 @@ spec: endpoint: "http://127.0.0.1:2965/task/manifest" method: GET headers: - X-LASTBACKEND-AUTH: "lstbknd" + X-LASTBACKEND-AUTH: "11c9ae503b8a46c6abba315c3f5e07db" hook: http: endpoint: "http://127.0.0.1:2965/task/status" method: PUT headers: - X-LASTBACKEND-AUTH: "lstbknd" + X-LASTBACKEND-AUTH: "11c9ae503b8a46c6abba315c3f5e07db" task: runtime: - services: [dind] + # services: [dind] + services: [] tasks: - - name: "build" - container: "git" - commands: - - command: "docker build -t index.lstbknd.net/undassa/alpine github.com/undassa/alpine" - - name: "push" - container: "git" - commands: - - command: "docker push index.lstbknd.net/undassa/alpine" + # - name: "build" + # container: "git" + # commands: + # - command: "docker build -t index.lstbknd.net/undassa/alpine github.com/undassa/alpine" + # - name: "push" + # container: "git" + # commands: + # - command: "docker push index.lstbknd.net/undassa/alpine" template: - containers: - - name: dind - image: - name: docker:18.09.1-dind - restart: - policy: always - security: - privileged: true - - name: git - image: - name: docker:18.09.1-git - env: - - name: DOCKER_HOST - value: "tcp://127.0.0.1:2375" \ No newline at end of file +# containers: +# - name: dind +# image: +# name: docker:18.09.1-dind +# restart: +# policy: always +# security: +# privileged: true +# - name: git +# image: +# name: docker:18.09.1-git +# env: +# - name: DOCKER_HOST +# value: "tcp://127.0.0.1:2375" \ No newline at end of file diff --git a/hack/build-cross.sh b/hack/build-cross.sh index b71e29f..104c644 100644 --- a/hack/build-cross.sh +++ b/hack/build-cross.sh @@ -1,12 +1,9 @@ #!/bin/bash -go get -u github.com/golang/dep/cmd/dep -dep ensure - mkdir -p build/linux && mkdir -p build/darwin ## declare an array of components variable -declare -a arr=("kit" "node" "cli") +declare -a arr=("cli") if [[ $1 != "" ]]; then arr=($1) diff --git a/pkg/cli/cmd/cluster_del.go b/pkg/cli/cmd/cluster_del.go index 86e3d5b..7e24bfa 100644 --- a/pkg/cli/cmd/cluster_del.go +++ b/pkg/cli/cmd/cluster_del.go @@ -49,8 +49,7 @@ var ClusterDelCmd = &cobra.Command{ Run: func(cmd *cobra.Command, args []string) { name := args[0] - err := storage.DelLocalCluster(name) - if err != nil { + if err := storage.DelLocalCluster(name); err != nil { panic(err) } diff --git a/pkg/cli/cmd/commands.go b/pkg/cli/cmd/commands.go index 2621c40..5096ebe 100644 --- a/pkg/cli/cmd/commands.go +++ b/pkg/cli/cmd/commands.go @@ -161,6 +161,7 @@ var RootCmd = &cobra.Command{ return } host = cluster.Endpoint + config.Token = cluster.Token case "r.": config.Headers = make(map[string]string, 0) config.Headers["X-Cluster-Name"] = cluster[2:] diff --git a/pkg/cli/cmd/job_logs.go b/pkg/cli/cmd/job_logs.go index 8b6deeb..c7d3fda 100644 --- a/pkg/cli/cmd/job_logs.go +++ b/pkg/cli/cmd/job_logs.go @@ -31,7 +31,9 @@ import ( ) func init() { - jobLogsCmd.Flags().StringP("task", "t", "", "read logs for particular task") + jobLogsCmd.Flags().IntP("tail", "t", 0, "tail last n lines") + jobLogsCmd.Flags().BoolP("follow", "f", false, "follow logs") + jobLogsCmd.Flags().String("task", "", "read logs for particular task") jobCmd.AddCommand(jobLogsCmd) } @@ -58,6 +60,18 @@ var jobLogsCmd = &cobra.Command{ return } + opts.Tail, err = cmd.Flags().GetInt("tail") + if err != nil { + fmt.Println(err.Error()) + return + } + + opts.Follow, err = cmd.Flags().GetBool("follow") + if err != nil { + fmt.Println(err.Error()) + return + } + if task != types.EmptyString { opts.Task = task } @@ -84,7 +98,9 @@ var jobLogsCmd = &cobra.Command{ os.Exit(1) } - fmt.Println(">", doc.Selflink, doc.Data) + if doc.ContainerType == types.ContainerTypeRuntimeTask { + fmt.Println(doc.Data) + } } }, } diff --git a/pkg/cli/cmd/namespace_apply.go b/pkg/cli/cmd/namespace_apply.go index 2297231..4fedc00 100644 --- a/pkg/cli/cmd/namespace_apply.go +++ b/pkg/cli/cmd/namespace_apply.go @@ -31,7 +31,7 @@ import ( "github.com/lastbackend/lastbackend/pkg/api/types/v1" "github.com/lastbackend/lastbackend/pkg/api/types/v1/request" "github.com/spf13/cobra" - "gopkg.in/yaml.v2" + "gopkg.in/yaml.v3" ) const applyExample = ` diff --git a/pkg/cli/cmd/service_logs.go b/pkg/cli/cmd/service_logs.go index 8bf75c5..3af2913 100644 --- a/pkg/cli/cmd/service_logs.go +++ b/pkg/cli/cmd/service_logs.go @@ -30,6 +30,8 @@ import ( ) func init() { + serviceLogsCmd.Flags().IntP("tail", "t", 0, "tail last n lines") + serviceLogsCmd.Flags().BoolP("follow", "f", false, "follow logs") serviceCmd.AddCommand(serviceLogsCmd) } @@ -47,6 +49,20 @@ var serviceLogsCmd = &cobra.Command{ opts := new(request.ServiceLogsOptions) + var err error + + opts.Tail, err = cmd.Flags().GetInt("tail") + if err != nil { + fmt.Println(err.Error()) + return + } + + opts.Follow, err = cmd.Flags().GetBool("follow") + if err != nil { + fmt.Println(err.Error()) + return + } + namespace, name, err := serviceParseSelfLink(args[0]) checkError(err) diff --git a/pkg/cli/cmd/service_utils.go b/pkg/cli/cmd/service_utils.go index 1f2b5c7..3aaa3ef 100644 --- a/pkg/cli/cmd/service_utils.go +++ b/pkg/cli/cmd/service_utils.go @@ -59,7 +59,8 @@ func serviceManifestFlags(cmd *cobra.Command) { cmd.Flags().StringArray("env-from-secret", make([]string, 0), "set service env from secret") cmd.Flags().StringArray("env-from-config", make([]string, 0), "set service env from config") cmd.Flags().StringP("image", "i", "", "set service image") - cmd.Flags().String("image-secret", "", "set service image auth") + cmd.Flags().String("image-secret-name", "", "set service image auth secret name") + cmd.Flags().String("image-secret-key", "", "set service image auth secret key") } func serviceParseManifest(cmd *cobra.Command, name, image string) (*request.ServiceManifest, error) { @@ -97,7 +98,10 @@ func serviceParseManifest(cmd *cobra.Command, name, image string) (*request.Serv replicas, err := cmd.Flags().GetInt("replicas") checkFlagParseError(err) - auth, err := cmd.Flags().GetString("image-secret") + authName, err := cmd.Flags().GetString("image-secret-name") + checkFlagParseError(err) + + authKey, err := cmd.Flags().GetString("image-secret-key") checkFlagParseError(err) opts := new(request.ServiceManifest) @@ -190,8 +194,12 @@ func serviceParseManifest(cmd *cobra.Command, name, image string) (*request.Serv opts.Meta.Description = &description cs.Image.Name = image - if auth != types.EmptyString { - cs.Image.Secret = auth + if authName != types.EmptyString { + cs.Image.Secret.Name = authName + } + + if authKey != types.EmptyString { + cs.Image.Secret.Key = authKey } css = append(css, cs) diff --git a/pkg/cli/storage/storage.go b/pkg/cli/storage/storage.go index 5c21372..c42abb0 100644 --- a/pkg/cli/storage/storage.go +++ b/pkg/cli/storage/storage.go @@ -123,6 +123,19 @@ func DelLocalCluster(name string) error { for i, item := range items { if item.Name == name { + + cl, err := GetCluster() + if err != nil { + return err + } + + match := strings.Split(cl, ".") + if match[0] == "l" && match[1] == name { + if err := SetCluster(""); err != nil { + return err + } + } + items = append(items[:i], items[i+1:]...) break } diff --git a/pkg/cli/view/job.go b/pkg/cli/view/job.go index ccaead5..844eb15 100644 --- a/pkg/cli/view/job.go +++ b/pkg/cli/view/job.go @@ -90,7 +90,7 @@ func (s *Job) Print() { if len(s.Tasks) > 0 { - taskTable := table.New([]string{"Name", "Status", "Age", "Message"}) + taskTable := table.New([]string{"Name", "State", "Status", "Age", "Message"}) taskTable.VisibleHeader = true for _, t := range s.Tasks { @@ -98,8 +98,10 @@ func (s *Job) Print() { var taskRow = map[string]interface{}{} got, _ := timeago.TimeAgoWithTime(time.Now(), t.Meta.Created) taskRow["Name"] = t.Meta.Name - taskRow["Status"] = t.Status.State + taskRow["State"] = t.Status.State + taskRow["Status"] = t.Status.Status taskRow["Age"] = got + taskRow["Message"] = t.Status.Message taskTable.AddRow(taskRow) } diff --git a/pkg/cli/view/task.go b/pkg/cli/view/task.go index e267037..0969e05 100644 --- a/pkg/cli/view/task.go +++ b/pkg/cli/view/task.go @@ -101,7 +101,7 @@ func (s *Task) Print() { fmt.Printf("Error: %s\n", step.Message) } - taskTable := table.New([]string{"Command", "Status", "Age", "Message"}) + taskTable := table.New([]string{"Command", "State", "Age", "Message"}) taskTable.VisibleHeader = true for _, cmd := range step.Commands {