From 42c72c365c83f01da94e3951f3c3b8e3e90cafb6 Mon Sep 17 00:00:00 2001 From: Djordje Lukic Date: Thu, 14 May 2020 20:55:40 +0200 Subject: [PATCH 1/4] Split context comands into own files --- cli/cmd/context.go | 193 ----------------------------------- cli/cmd/context/context.go | 51 +++++++++ cli/cmd/context/create.go | 48 +++++++++ cli/cmd/context/createaci.go | 20 ++++ cli/cmd/context/ls.go | 43 ++++++++ cli/cmd/context/rm.go | 36 +++++++ cli/cmd/context/use.go | 38 +++++++ cli/main.go | 3 +- 8 files changed, 238 insertions(+), 194 deletions(-) delete mode 100644 cli/cmd/context.go create mode 100644 cli/cmd/context/context.go create mode 100644 cli/cmd/context/create.go create mode 100644 cli/cmd/context/createaci.go create mode 100644 cli/cmd/context/ls.go create mode 100644 cli/cmd/context/rm.go create mode 100644 cli/cmd/context/use.go diff --git a/cli/cmd/context.go b/cli/cmd/context.go deleted file mode 100644 index 52ac4b8d2..000000000 --- a/cli/cmd/context.go +++ /dev/null @@ -1,193 +0,0 @@ -/* - Copyright (c) 2020 Docker Inc. - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation - files (the "Software"), to deal in the Software without - restriction, including without limitation the rights to use, copy, - modify, merge, publish, distribute, sublicense, and/or sell copies - of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, - INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, - TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH - THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -package cmd - -import ( - "context" - "fmt" - "os" - "text/tabwriter" - - "github.com/spf13/cobra" - - cliconfig "github.com/docker/api/cli/config" - cliopts "github.com/docker/api/cli/options" - "github.com/docker/api/context/store" - "github.com/docker/api/multierror" -) - -// ContextCommand manages contexts -func ContextCommand(opts *cliopts.GlobalOpts) *cobra.Command { - cmd := &cobra.Command{ - Use: "context", - Short: "Manage contexts", - } - - cmd.AddCommand( - createCommand(), - listCommand(), - removeCommand(), - useCommand(opts), - ) - - return cmd -} - -type createOpts struct { - description string - aciLocation string - aciSubscriptionID string - aciResourceGroup string -} - -func createCommand() *cobra.Command { - var opts createOpts - cmd := &cobra.Command{ - Use: "create CONTEXT BACKEND [OPTIONS]", - Short: "Create a context", - Args: cobra.ExactArgs(2), - RunE: func(cmd *cobra.Command, args []string) error { - return runCreate(cmd.Context(), opts, args[0], args[1]) - }, - } - - cmd.Flags().StringVar(&opts.description, "description", "", "Description of the context") - cmd.Flags().StringVar(&opts.aciLocation, "aci-location", "eastus", "Location") - cmd.Flags().StringVar(&opts.aciSubscriptionID, "aci-subscription-id", "", "Location") - cmd.Flags().StringVar(&opts.aciResourceGroup, "aci-resource-group", "", "Resource group") - - return cmd -} - -func listCommand() *cobra.Command { - cmd := &cobra.Command{ - Use: "list", - Short: "List available contexts", - Aliases: []string{"ls"}, - Args: cobra.NoArgs, - RunE: func(cmd *cobra.Command, args []string) error { - return runList(cmd.Context()) - }, - } - return cmd -} - -func removeCommand() *cobra.Command { - return &cobra.Command{ - Use: "rm CONTEXT [CONTEXT...]", - Short: "Remove one or more contexts", - Aliases: []string{"remove"}, - Args: cobra.MinimumNArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - return runRemove(cmd.Context(), args) - }, - } -} - -func useCommand(opts *cliopts.GlobalOpts) *cobra.Command { - return &cobra.Command{ - Use: "use CONTEXT", - Short: "Set the default context", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - return runUse(cmd.Context(), opts.Config, args[0]) - }, - } -} - -func runCreate(ctx context.Context, opts createOpts, name string, contextType string) error { - switch contextType { - case "aci": - return createACIContext(ctx, name, opts) - default: - s := store.ContextStore(ctx) - return s.Create(name, store.TypedContext{ - Type: contextType, - Description: opts.description, - }) - } -} - -func createACIContext(ctx context.Context, name string, opts createOpts) error { - s := store.ContextStore(ctx) - return s.Create(name, store.TypedContext{ - Type: "aci", - Description: opts.description, - Data: store.AciContext{ - SubscriptionID: opts.aciSubscriptionID, - Location: opts.aciLocation, - ResourceGroup: opts.aciResourceGroup, - }, - }) -} - -func runList(ctx context.Context) error { - s := store.ContextStore(ctx) - contexts, err := s.List() - if err != nil { - return err - } - - w := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', 0) - fmt.Fprintln(w, "NAME\tDESCRIPTION\tTYPE") - format := "%s\t%s\t%s\n" - - for _, c := range contexts { - fmt.Fprintf(w, format, c.Name, c.Metadata.Description, c.Metadata.Type) - } - - return w.Flush() -} - -func runRemove(ctx context.Context, args []string) error { - s := store.ContextStore(ctx) - var errs *multierror.Error - for _, n := range args { - if err := s.Remove(n); err != nil { - errs = multierror.Append(errs, err) - } else { - fmt.Println(n) - } - } - return errs.ErrorOrNil() -} - -func runUse(ctx context.Context, configDir string, name string) error { - s := store.ContextStore(ctx) - // Match behavior of existing CLI - if name != store.DefaultContextName { - if _, err := s.Get(name, nil); err != nil { - return err - } - } - if err := cliconfig.WriteCurrentContext(configDir, name); err != nil { - return err - } - fmt.Println(name) - return nil -} diff --git a/cli/cmd/context/context.go b/cli/cmd/context/context.go new file mode 100644 index 000000000..aea5e7bf3 --- /dev/null +++ b/cli/cmd/context/context.go @@ -0,0 +1,51 @@ +/* + Copyright (c) 2020 Docker Inc. + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, copy, + modify, merge, publish, distribute, sublicense, and/or sell copies + of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, + INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH + THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +package context + +import ( + "github.com/spf13/cobra" + + cliopts "github.com/docker/api/cli/options" +) + +// Command manages contexts +func Command(opts *cliopts.GlobalOpts) *cobra.Command { + cmd := &cobra.Command{ + Use: "context", + Short: "Manage contexts", + } + + cmd.AddCommand( + createCommand(), + listCommand(), + removeCommand(), + useCommand(opts), + ) + + return cmd +} diff --git a/cli/cmd/context/create.go b/cli/cmd/context/create.go new file mode 100644 index 000000000..4c1a260da --- /dev/null +++ b/cli/cmd/context/create.go @@ -0,0 +1,48 @@ +package context + +import ( + "context" + + "github.com/spf13/cobra" + + "github.com/docker/api/context/store" +) + +type createOpts struct { + description string + aciLocation string + aciSubscriptionID string + aciResourceGroup string +} + +func createCommand() *cobra.Command { + var opts createOpts + cmd := &cobra.Command{ + Use: "create CONTEXT BACKEND [OPTIONS]", + Short: "Create a context", + Args: cobra.ExactArgs(2), + RunE: func(cmd *cobra.Command, args []string) error { + return runCreate(cmd.Context(), opts, args[0], args[1]) + }, + } + + cmd.Flags().StringVar(&opts.description, "description", "", "Description of the context") + cmd.Flags().StringVar(&opts.aciLocation, "aci-location", "eastus", "Location") + cmd.Flags().StringVar(&opts.aciSubscriptionID, "aci-subscription-id", "", "Location") + cmd.Flags().StringVar(&opts.aciResourceGroup, "aci-resource-group", "", "Resource group") + + return cmd +} + +func runCreate(ctx context.Context, opts createOpts, name string, contextType string) error { + switch contextType { + case "aci": + return createACIContext(ctx, name, opts) + default: + s := store.ContextStore(ctx) + return s.Create(name, store.TypedContext{ + Type: contextType, + Description: opts.description, + }) + } +} diff --git a/cli/cmd/context/createaci.go b/cli/cmd/context/createaci.go new file mode 100644 index 000000000..63a21edac --- /dev/null +++ b/cli/cmd/context/createaci.go @@ -0,0 +1,20 @@ +package context + +import ( + "context" + + "github.com/docker/api/context/store" +) + +func createACIContext(ctx context.Context, name string, opts createOpts) error { + s := store.ContextStore(ctx) + return s.Create(name, store.TypedContext{ + Type: "aci", + Description: opts.description, + Data: store.AciContext{ + SubscriptionID: opts.aciSubscriptionID, + Location: opts.aciLocation, + ResourceGroup: opts.aciResourceGroup, + }, + }) +} diff --git a/cli/cmd/context/ls.go b/cli/cmd/context/ls.go new file mode 100644 index 000000000..6240d1383 --- /dev/null +++ b/cli/cmd/context/ls.go @@ -0,0 +1,43 @@ +package context + +import ( + "context" + "fmt" + "os" + "text/tabwriter" + + "github.com/spf13/cobra" + + "github.com/docker/api/context/store" +) + +func listCommand() *cobra.Command { + cmd := &cobra.Command{ + Use: "list", + Short: "List available contexts", + Aliases: []string{"ls"}, + Args: cobra.NoArgs, + RunE: func(cmd *cobra.Command, args []string) error { + return runList(cmd.Context()) + }, + } + return cmd +} + +func runList(ctx context.Context) error { + s := store.ContextStore(ctx) + contexts, err := s.List() + if err != nil { + return err + } + + w := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', 0) + fmt.Fprintln(w, "NAME\tDESCRIPTION\tTYPE") + format := "%s\t%s\t%s\n" + + for _, c := range contexts { + fmt.Fprintf(w, format, c.Name, c.Metadata.Description, c.Metadata.Type) + } + + return w.Flush() +} diff --git a/cli/cmd/context/rm.go b/cli/cmd/context/rm.go new file mode 100644 index 000000000..fd22e7b78 --- /dev/null +++ b/cli/cmd/context/rm.go @@ -0,0 +1,36 @@ +package context + +import ( + "context" + "fmt" + + "github.com/spf13/cobra" + + "github.com/docker/api/context/store" + "github.com/docker/api/multierror" +) + +func removeCommand() *cobra.Command { + return &cobra.Command{ + Use: "rm CONTEXT [CONTEXT...]", + Short: "Remove one or more contexts", + Aliases: []string{"remove"}, + Args: cobra.MinimumNArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + return runRemove(cmd.Context(), args) + }, + } +} + +func runRemove(ctx context.Context, args []string) error { + s := store.ContextStore(ctx) + var errs *multierror.Error + for _, n := range args { + if err := s.Remove(n); err != nil { + errs = multierror.Append(errs, err) + } else { + fmt.Println(n) + } + } + return errs.ErrorOrNil() +} diff --git a/cli/cmd/context/use.go b/cli/cmd/context/use.go new file mode 100644 index 000000000..8d3b625b4 --- /dev/null +++ b/cli/cmd/context/use.go @@ -0,0 +1,38 @@ +package context + +import ( + "context" + "fmt" + + "github.com/spf13/cobra" + + cliconfig "github.com/docker/api/cli/config" + cliopts "github.com/docker/api/cli/options" + "github.com/docker/api/context/store" +) + +func useCommand(opts *cliopts.GlobalOpts) *cobra.Command { + return &cobra.Command{ + Use: "use CONTEXT", + Short: "Set the default context", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + return runUse(cmd.Context(), opts.Config, args[0]) + }, + } +} + +func runUse(ctx context.Context, configDir string, name string) error { + s := store.ContextStore(ctx) + // Match behavior of existing CLI + if name != store.DefaultContextName { + if _, err := s.Get(name, nil); err != nil { + return err + } + } + if err := cliconfig.WriteCurrentContext(configDir, name); err != nil { + return err + } + fmt.Println(name) + return nil +} diff --git a/cli/main.go b/cli/main.go index 649a799e6..bf9e9bdee 100644 --- a/cli/main.go +++ b/cli/main.go @@ -47,6 +47,7 @@ import ( "github.com/docker/api/cli/cmd" "github.com/docker/api/cli/cmd/compose" + contextcmd "github.com/docker/api/cli/cmd/context" "github.com/docker/api/cli/cmd/run" cliconfig "github.com/docker/api/cli/config" cliopts "github.com/docker/api/cli/options" @@ -100,7 +101,7 @@ func main() { } root.AddCommand( - cmd.ContextCommand(&opts), + contextcmd.Command(&opts), cmd.PsCommand(), cmd.ServeCommand(), run.Command(), From 962efef48cd5b408c51829826ed3915a4c133149 Mon Sep 17 00:00:00 2001 From: Djordje Lukic Date: Thu, 14 May 2020 20:58:14 +0200 Subject: [PATCH 2/4] Commands run and rm only call a func --- cli/cmd/rm.go | 37 +++++++++++++++++++++---------------- cli/cmd/run/run.go | 13 +++++++------ 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/cli/cmd/rm.go b/cli/cmd/rm.go index 6d7452f8f..f63866f2d 100644 --- a/cli/cmd/rm.go +++ b/cli/cmd/rm.go @@ -1,6 +1,7 @@ package cmd import ( + "context" "fmt" "github.com/pkg/errors" @@ -23,22 +24,7 @@ func RmCommand() *cobra.Command { Short: "Remove containers", Args: cobra.MinimumNArgs(1), RunE: func(cmd *cobra.Command, args []string) error { - c, err := client.New(cmd.Context()) - if err != nil { - return errors.Wrap(err, "cannot connect to backend") - } - - var errs *multierror.Error - for _, id := range args { - err := c.ContainerService().Delete(cmd.Context(), id, opts.force) - if err != nil { - errs = multierror.Append(errs, err) - continue - } - fmt.Println(id) - } - - return errs.ErrorOrNil() + return runRm(cmd.Context(), args, opts) }, } @@ -46,3 +32,22 @@ func RmCommand() *cobra.Command { return cmd } + +func runRm(ctx context.Context, args []string, opts rmOpts) error { + c, err := client.New(ctx) + if err != nil { + return errors.Wrap(err, "cannot connect to backend") + } + + var errs *multierror.Error + for _, id := range args { + err := c.ContainerService().Delete(ctx, id, opts.force) + if err != nil { + errs = multierror.Append(errs, err) + continue + } + fmt.Println(id) + } + + return errs.ErrorOrNil() +} diff --git a/cli/cmd/run/run.go b/cli/cmd/run/run.go index b28b6de71..656e774a0 100644 --- a/cli/cmd/run/run.go +++ b/cli/cmd/run/run.go @@ -46,11 +46,7 @@ func Command() *cobra.Command { Short: "Run a container", Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { - if err := runRun(cmd.Context(), args[0], opts); err != nil { - return err - } - fmt.Println(opts.name) - return nil + return runRun(cmd.Context(), args[0], opts) }, } @@ -71,7 +67,12 @@ func runRun(ctx context.Context, image string, opts runOpts) error { return err } - return c.ContainerService().Run(ctx, project) + if err = c.ContainerService().Run(ctx, project); err != nil { + return err + } + fmt.Println(opts.name) + return nil + } func getRandomName() string { From 0765b08309796df5abfad22c5909dc597c435b0f Mon Sep 17 00:00:00 2001 From: Djordje Lukic Date: Thu, 14 May 2020 21:04:38 +0200 Subject: [PATCH 3/4] Put each compose command in own file --- cli/cmd/compose/compose.go | 44 ++------------------------------------ cli/cmd/compose/down.go | 40 ++++++++++++++++++++++++++++++++++ cli/cmd/compose/up.go | 41 +++++++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 42 deletions(-) create mode 100644 cli/cmd/compose/down.go create mode 100644 cli/cmd/compose/up.go diff --git a/cli/cmd/compose/compose.go b/cli/cmd/compose/compose.go index 63dc08526..0fbf695ec 100644 --- a/cli/cmd/compose/compose.go +++ b/cli/cmd/compose/compose.go @@ -2,9 +2,6 @@ package compose import ( "github.com/spf13/cobra" - - "github.com/docker/api/client" - "github.com/docker/api/compose" ) // Command returns the compose command with its child commands @@ -13,48 +10,11 @@ func Command() *cobra.Command { Short: "Docker Compose", Use: "compose", } + command.AddCommand( upCommand(), downCommand(), ) + return command } - -func upCommand() *cobra.Command { - opts := &compose.ProjectOptions{} - upCmd := &cobra.Command{ - Use: "up", - RunE: func(cmd *cobra.Command, args []string) error { - c, err := client.New(cmd.Context()) - if err != nil { - return err - } - return c.ComposeService().Up(cmd.Context(), *opts) - }, - } - upCmd.Flags().StringVar(&opts.Name, "name", "", "Project name") - upCmd.Flags().StringVar(&opts.WorkDir, "workdir", ".", "Work dir") - upCmd.Flags().StringArrayVarP(&opts.ConfigPaths, "file", "f", []string{}, "Compose configuration files") - upCmd.Flags().StringArrayVarP(&opts.Environment, "environment", "e", []string{}, "Environment variables") - - return upCmd -} - -func downCommand() *cobra.Command { - opts := &compose.ProjectOptions{} - downCmd := &cobra.Command{ - Use: "down", - RunE: func(cmd *cobra.Command, args []string) error { - c, err := client.New(cmd.Context()) - if err != nil { - return err - } - return c.ComposeService().Down(cmd.Context(), *opts) - }, - } - downCmd.Flags().StringVar(&opts.Name, "name", "", "Project name") - downCmd.Flags().StringVar(&opts.WorkDir, "workdir", ".", "Work dir") - downCmd.Flags().StringArrayVarP(&opts.ConfigPaths, "file", "f", []string{}, "Compose configuration files") - - return downCmd -} diff --git a/cli/cmd/compose/down.go b/cli/cmd/compose/down.go new file mode 100644 index 000000000..1924fd579 --- /dev/null +++ b/cli/cmd/compose/down.go @@ -0,0 +1,40 @@ +package compose + +import ( + "context" + "errors" + + "github.com/spf13/cobra" + + "github.com/docker/api/client" + "github.com/docker/api/compose" +) + +func downCommand() *cobra.Command { + opts := compose.ProjectOptions{} + downCmd := &cobra.Command{ + Use: "down", + RunE: func(cmd *cobra.Command, args []string) error { + return runDown(cmd.Context(), opts) + }, + } + downCmd.Flags().StringVar(&opts.Name, "name", "", "Project name") + downCmd.Flags().StringVar(&opts.WorkDir, "workdir", ".", "Work dir") + downCmd.Flags().StringArrayVarP(&opts.ConfigPaths, "file", "f", []string{}, "Compose configuration files") + + return downCmd +} + +func runDown(ctx context.Context, opts compose.ProjectOptions) error { + c, err := client.New(ctx) + if err != nil { + return err + } + + composeService := c.ComposeService() + if composeService == nil { + return errors.New("compose not implemented in current context") + } + + return composeService.Down(ctx, opts) +} diff --git a/cli/cmd/compose/up.go b/cli/cmd/compose/up.go new file mode 100644 index 000000000..9ab0f63a6 --- /dev/null +++ b/cli/cmd/compose/up.go @@ -0,0 +1,41 @@ +package compose + +import ( + "context" + "errors" + + "github.com/spf13/cobra" + + "github.com/docker/api/client" + "github.com/docker/api/compose" +) + +func upCommand() *cobra.Command { + opts := compose.ProjectOptions{} + upCmd := &cobra.Command{ + Use: "up", + RunE: func(cmd *cobra.Command, args []string) error { + return runUp(cmd.Context(), opts) + }, + } + upCmd.Flags().StringVar(&opts.Name, "name", "", "Project name") + upCmd.Flags().StringVar(&opts.WorkDir, "workdir", ".", "Work dir") + upCmd.Flags().StringArrayVarP(&opts.ConfigPaths, "file", "f", []string{}, "Compose configuration files") + upCmd.Flags().StringArrayVarP(&opts.Environment, "environment", "e", []string{}, "Environment variables") + + return upCmd +} + +func runUp(ctx context.Context, opts compose.ProjectOptions) error { + c, err := client.New(ctx) + if err != nil { + return err + } + + composeService := c.ComposeService() + if composeService == nil { + return errors.New("compose not implemented in current context") + } + + return composeService.Up(ctx, opts) +} From 15fb6f63c3f938769d88c77fca971eb616210bce Mon Sep 17 00:00:00 2001 From: Djordje Lukic Date: Thu, 14 May 2020 21:13:07 +0200 Subject: [PATCH 4/4] Add licenses --- cli/cmd/compose/compose.go | 27 +++++++++++++++++++++++++++ cli/cmd/compose/down.go | 27 +++++++++++++++++++++++++++ cli/cmd/compose/up.go | 27 +++++++++++++++++++++++++++ cli/cmd/context/create.go | 27 +++++++++++++++++++++++++++ cli/cmd/context/createaci.go | 27 +++++++++++++++++++++++++++ cli/cmd/context/ls.go | 27 +++++++++++++++++++++++++++ cli/cmd/context/rm.go | 27 +++++++++++++++++++++++++++ cli/cmd/context/use.go | 27 +++++++++++++++++++++++++++ 8 files changed, 216 insertions(+) diff --git a/cli/cmd/compose/compose.go b/cli/cmd/compose/compose.go index 0fbf695ec..e22eca14e 100644 --- a/cli/cmd/compose/compose.go +++ b/cli/cmd/compose/compose.go @@ -1,3 +1,30 @@ +/* + Copyright (c) 2020 Docker Inc. + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, copy, + modify, merge, publish, distribute, sublicense, and/or sell copies + of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, + INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH + THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + package compose import ( diff --git a/cli/cmd/compose/down.go b/cli/cmd/compose/down.go index 1924fd579..9de338048 100644 --- a/cli/cmd/compose/down.go +++ b/cli/cmd/compose/down.go @@ -1,3 +1,30 @@ +/* + Copyright (c) 2020 Docker Inc. + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, copy, + modify, merge, publish, distribute, sublicense, and/or sell copies + of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, + INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH + THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + package compose import ( diff --git a/cli/cmd/compose/up.go b/cli/cmd/compose/up.go index 9ab0f63a6..78f66b0a7 100644 --- a/cli/cmd/compose/up.go +++ b/cli/cmd/compose/up.go @@ -1,3 +1,30 @@ +/* + Copyright (c) 2020 Docker Inc. + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, copy, + modify, merge, publish, distribute, sublicense, and/or sell copies + of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, + INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH + THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + package compose import ( diff --git a/cli/cmd/context/create.go b/cli/cmd/context/create.go index 4c1a260da..18ab10518 100644 --- a/cli/cmd/context/create.go +++ b/cli/cmd/context/create.go @@ -1,3 +1,30 @@ +/* + Copyright (c) 2020 Docker Inc. + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, copy, + modify, merge, publish, distribute, sublicense, and/or sell copies + of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, + INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH + THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + package context import ( diff --git a/cli/cmd/context/createaci.go b/cli/cmd/context/createaci.go index 63a21edac..02771ea6e 100644 --- a/cli/cmd/context/createaci.go +++ b/cli/cmd/context/createaci.go @@ -1,3 +1,30 @@ +/* + Copyright (c) 2020 Docker Inc. + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, copy, + modify, merge, publish, distribute, sublicense, and/or sell copies + of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, + INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH + THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + package context import ( diff --git a/cli/cmd/context/ls.go b/cli/cmd/context/ls.go index 6240d1383..192a3e432 100644 --- a/cli/cmd/context/ls.go +++ b/cli/cmd/context/ls.go @@ -1,3 +1,30 @@ +/* + Copyright (c) 2020 Docker Inc. + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, copy, + modify, merge, publish, distribute, sublicense, and/or sell copies + of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, + INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH + THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + package context import ( diff --git a/cli/cmd/context/rm.go b/cli/cmd/context/rm.go index fd22e7b78..b6b3a8727 100644 --- a/cli/cmd/context/rm.go +++ b/cli/cmd/context/rm.go @@ -1,3 +1,30 @@ +/* + Copyright (c) 2020 Docker Inc. + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, copy, + modify, merge, publish, distribute, sublicense, and/or sell copies + of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, + INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH + THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + package context import ( diff --git a/cli/cmd/context/use.go b/cli/cmd/context/use.go index 8d3b625b4..5a0c36001 100644 --- a/cli/cmd/context/use.go +++ b/cli/cmd/context/use.go @@ -1,3 +1,30 @@ +/* + Copyright (c) 2020 Docker Inc. + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, copy, + modify, merge, publish, distribute, sublicense, and/or sell copies + of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, + INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH + THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + package context import (