github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/juju/cloud/remove.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package cloud
     5  
     6  import (
     7  	"github.com/juju/cmd"
     8  	"github.com/juju/errors"
     9  
    10  	"github.com/juju/juju/cloud"
    11  	jujucmd "github.com/juju/juju/cmd"
    12  )
    13  
    14  var usageRemoveCloudSummary = `
    15  Removes a user-defined cloud from Juju.`[1:]
    16  
    17  var usageRemoveCloudDetails = `
    18  Remove a named, user-defined cloud from Juju.
    19  
    20  Examples:
    21      juju remove-cloud mycloud
    22  
    23  See also:
    24      add-cloud
    25      list-clouds`
    26  
    27  type removeCloudCommand struct {
    28  	cmd.CommandBase
    29  
    30  	// Cloud is the name fo the cloud to remove.
    31  	Cloud string
    32  }
    33  
    34  // NewRemoveCloudCommand returns a command to remove cloud information.
    35  func NewRemoveCloudCommand() cmd.Command {
    36  	return &removeCloudCommand{}
    37  }
    38  
    39  func (c *removeCloudCommand) Info() *cmd.Info {
    40  	return jujucmd.Info(&cmd.Info{
    41  		Name:    "remove-cloud",
    42  		Args:    "<cloud name>",
    43  		Purpose: usageRemoveCloudSummary,
    44  		Doc:     usageRemoveCloudDetails,
    45  	})
    46  }
    47  
    48  func (c *removeCloudCommand) Init(args []string) (err error) {
    49  	if len(args) < 1 {
    50  		return errors.New("Usage: juju remove-cloud <cloud name>")
    51  	}
    52  	c.Cloud = args[0]
    53  	return cmd.CheckEmpty(args[1:])
    54  }
    55  
    56  func (c *removeCloudCommand) Run(ctxt *cmd.Context) error {
    57  	personalClouds, err := cloud.PersonalCloudMetadata()
    58  	if err != nil {
    59  		return err
    60  	}
    61  	if _, ok := personalClouds[c.Cloud]; !ok {
    62  		ctxt.Infof("No personal cloud called %q exists", c.Cloud)
    63  		return nil
    64  	}
    65  	delete(personalClouds, c.Cloud)
    66  	if err := cloud.WritePersonalCloudMetadata(personalClouds); err != nil {
    67  		return errors.Trace(err)
    68  	}
    69  	ctxt.Infof("Removed details of personal cloud %q", c.Cloud)
    70  	return nil
    71  }