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  }