github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/cmd/juju/removeservice.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package main 5 6 import ( 7 "fmt" 8 9 "github.com/juju/cmd" 10 "github.com/juju/names" 11 12 "github.com/juju/juju/cmd/envcmd" 13 "github.com/juju/juju/cmd/juju/block" 14 ) 15 16 // RemoveServiceCommand causes an existing service to be destroyed. 17 type RemoveServiceCommand struct { 18 envcmd.EnvCommandBase 19 ServiceName string 20 } 21 22 func (c *RemoveServiceCommand) Info() *cmd.Info { 23 return &cmd.Info{ 24 Name: "remove-service", 25 Args: "<service>", 26 Purpose: "remove a service from the environment", 27 Doc: "Removing a service will remove all its units and relations.", 28 Aliases: []string{"destroy-service"}, 29 } 30 } 31 32 func (c *RemoveServiceCommand) Init(args []string) error { 33 if len(args) == 0 { 34 return fmt.Errorf("no service specified") 35 } 36 if !names.IsValidService(args[0]) { 37 return fmt.Errorf("invalid service name %q", args[0]) 38 } 39 c.ServiceName, args = args[0], args[1:] 40 return cmd.CheckEmpty(args) 41 } 42 43 func (c *RemoveServiceCommand) Run(_ *cmd.Context) error { 44 client, err := c.NewAPIClient() 45 if err != nil { 46 return err 47 } 48 defer client.Close() 49 return block.ProcessBlockedError(client.ServiceDestroy(c.ServiceName), block.BlockRemove) 50 }