github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/juju/cloud/removecredential.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  	jujucmd "github.com/juju/juju/cmd"
    11  	"github.com/juju/juju/jujuclient"
    12  )
    13  
    14  type removeCredentialCommand struct {
    15  	cmd.CommandBase
    16  
    17  	store      jujuclient.CredentialStore
    18  	cloud      string
    19  	credential string
    20  }
    21  
    22  var usageRemoveCredentialSummary = `
    23  Removes locally stored credentials for a cloud.`[1:]
    24  
    25  var usageRemoveCredentialDetails = `
    26  The credentials to be removed are specified by a "credential name".
    27  Credential names, and optionally the corresponding authentication
    28  material, can be listed with `[1:] + "`juju credentials`" + `.
    29  
    30  Examples:
    31      juju remove-credential rackspace credential_name
    32  
    33  See also: 
    34      credentials
    35      add-credential
    36      set-default-credential
    37      autoload-credentials`
    38  
    39  // NewremoveCredentialCommand returns a command to remove a named credential for a cloud.
    40  func NewRemoveCredentialCommand() cmd.Command {
    41  	return &removeCredentialCommand{
    42  		store: jujuclient.NewFileCredentialStore(),
    43  	}
    44  }
    45  
    46  func (c *removeCredentialCommand) Info() *cmd.Info {
    47  	return jujucmd.Info(&cmd.Info{
    48  		Name:    "remove-credential",
    49  		Args:    "<cloud name> <credential name>",
    50  		Purpose: usageRemoveCredentialSummary,
    51  		Doc:     usageRemoveCredentialDetails,
    52  	})
    53  }
    54  
    55  func (c *removeCredentialCommand) Init(args []string) (err error) {
    56  	if len(args) < 2 {
    57  		return errors.New("Usage: juju remove-credential <cloud-name> <credential-name>")
    58  	}
    59  	c.cloud = args[0]
    60  	c.credential = args[1]
    61  	return cmd.CheckEmpty(args[2:])
    62  }
    63  
    64  func (c *removeCredentialCommand) Run(ctxt *cmd.Context) error {
    65  	cred, err := c.store.CredentialForCloud(c.cloud)
    66  	if errors.IsNotFound(err) {
    67  		ctxt.Infof("No locally stored credentials exist for cloud %q", c.cloud)
    68  		return nil
    69  	} else if err != nil {
    70  		return err
    71  	}
    72  	if _, ok := cred.AuthCredentials[c.credential]; !ok {
    73  		ctxt.Infof("No local credential called %q exists for cloud %q", c.credential, c.cloud)
    74  		return nil
    75  	}
    76  	delete(cred.AuthCredentials, c.credential)
    77  	if err := c.store.UpdateCredential(c.cloud, *cred); err != nil {
    78  		return err
    79  	}
    80  	ctxt.Infof("Local credential %q for cloud %q has been deleted.", c.credential, c.cloud)
    81  	return nil
    82  }