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 }