2017-12-04 06:30:39 -05:00
package stack
import (
"github.com/docker/cli/cli"
"github.com/docker/cli/cli/command"
"github.com/docker/cli/cli/command/stack/kubernetes"
2018-06-26 08:07:26 -04:00
"github.com/docker/cli/cli/command/stack/loader"
2017-12-04 06:30:39 -05:00
"github.com/docker/cli/cli/command/stack/options"
"github.com/docker/cli/cli/command/stack/swarm"
2018-06-26 08:07:26 -04:00
composetypes "github.com/docker/cli/cli/compose/types"
2017-12-04 06:30:39 -05:00
"github.com/spf13/cobra"
2018-06-26 08:07:26 -04:00
"github.com/spf13/pflag"
2017-12-04 06:30:39 -05:00
)
2018-06-20 08:48:50 -04:00
func newDeployCommand ( dockerCli command . Cli , common * commonOptions ) * cobra . Command {
2017-12-04 06:30:39 -05:00
var opts options . Deploy
cmd := & cobra . Command {
Use : "deploy [OPTIONS] STACK" ,
Aliases : [ ] string { "up" } ,
Short : "Deploy a new stack or update an existing stack" ,
Args : cli . ExactArgs ( 1 ) ,
RunE : func ( cmd * cobra . Command , args [ ] string ) error {
opts . Namespace = args [ 0 ]
2018-06-26 08:07:26 -04:00
if err := validateStackName ( opts . Namespace ) ; err != nil {
return err
}
config , err := loader . LoadComposefile ( dockerCli , opts )
if err != nil {
return err
}
2019-01-14 12:00:14 -05:00
return RunDeploy ( dockerCli , cmd . Flags ( ) , config , common . Orchestrator ( ) , opts )
2017-12-04 06:30:39 -05:00
} ,
}
flags := cmd . Flags ( )
2018-07-19 08:55:48 -04:00
flags . StringSliceVarP ( & opts . Composefiles , "compose-file" , "c" , [ ] string { } , ` Path to a Compose file, or "-" to read from stdin ` )
2017-12-04 06:30:39 -05:00
flags . SetAnnotation ( "compose-file" , "version" , [ ] string { "1.25" } )
flags . BoolVar ( & opts . SendRegistryAuth , "with-registry-auth" , false , "Send registry authentication details to Swarm agents" )
flags . SetAnnotation ( "with-registry-auth" , "swarm" , nil )
flags . BoolVar ( & opts . Prune , "prune" , false , "Prune services that are no longer referenced" )
flags . SetAnnotation ( "prune" , "version" , [ ] string { "1.27" } )
flags . SetAnnotation ( "prune" , "swarm" , nil )
flags . StringVar ( & opts . ResolveImage , "resolve-image" , swarm . ResolveImageAlways ,
` Query the registry to resolve image digest and supported platforms (" ` + swarm . ResolveImageAlways + ` "|" ` + swarm . ResolveImageChanged + ` "|" ` + swarm . ResolveImageNever + ` ") ` )
flags . SetAnnotation ( "resolve-image" , "version" , [ ] string { "1.30" } )
flags . SetAnnotation ( "resolve-image" , "swarm" , nil )
2018-04-26 05:13:14 -04:00
kubernetes . AddNamespaceFlag ( flags )
2017-12-04 06:30:39 -05:00
return cmd
}
2018-06-26 08:07:26 -04:00
// RunDeploy performs a stack deploy against the specified orchestrator
func RunDeploy ( dockerCli command . Cli , flags * pflag . FlagSet , config * composetypes . Config , commonOrchestrator command . Orchestrator , opts options . Deploy ) error {
2019-01-14 12:00:14 -05:00
return runOrchestratedCommand ( dockerCli , flags , commonOrchestrator ,
func ( ) error { return swarm . RunDeploy ( dockerCli , opts , config ) } ,
func ( kli * kubernetes . KubeCli ) error { return kubernetes . RunDeploy ( kli , opts , config ) } )
2018-06-26 08:07:26 -04:00
}