mirror of
https://github.com/docker/compose.git
synced 2025-07-13 08:44:33 +02:00
Split context comands into own files
This commit is contained in:
parent
0d3ddaa490
commit
42c72c365c
@ -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
|
|
||||||
}
|
|
51
cli/cmd/context/context.go
Normal file
51
cli/cmd/context/context.go
Normal file
@ -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
|
||||||
|
}
|
48
cli/cmd/context/create.go
Normal file
48
cli/cmd/context/create.go
Normal file
@ -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,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
20
cli/cmd/context/createaci.go
Normal file
20
cli/cmd/context/createaci.go
Normal file
@ -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,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
43
cli/cmd/context/ls.go
Normal file
43
cli/cmd/context/ls.go
Normal file
@ -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()
|
||||||
|
}
|
36
cli/cmd/context/rm.go
Normal file
36
cli/cmd/context/rm.go
Normal file
@ -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()
|
||||||
|
}
|
38
cli/cmd/context/use.go
Normal file
38
cli/cmd/context/use.go
Normal file
@ -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
|
||||||
|
}
|
@ -47,6 +47,7 @@ import (
|
|||||||
|
|
||||||
"github.com/docker/api/cli/cmd"
|
"github.com/docker/api/cli/cmd"
|
||||||
"github.com/docker/api/cli/cmd/compose"
|
"github.com/docker/api/cli/cmd/compose"
|
||||||
|
contextcmd "github.com/docker/api/cli/cmd/context"
|
||||||
"github.com/docker/api/cli/cmd/run"
|
"github.com/docker/api/cli/cmd/run"
|
||||||
cliconfig "github.com/docker/api/cli/config"
|
cliconfig "github.com/docker/api/cli/config"
|
||||||
cliopts "github.com/docker/api/cli/options"
|
cliopts "github.com/docker/api/cli/options"
|
||||||
@ -100,7 +101,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
root.AddCommand(
|
root.AddCommand(
|
||||||
cmd.ContextCommand(&opts),
|
contextcmd.Command(&opts),
|
||||||
cmd.PsCommand(),
|
cmd.PsCommand(),
|
||||||
cmd.ServeCommand(),
|
cmd.ServeCommand(),
|
||||||
run.Command(),
|
run.Command(),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user