github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/cmd/juju/authorisedkeys_delete.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  	"errors"
     8  	"fmt"
     9  
    10  	"launchpad.net/gnuflag"
    11  
    12  	"launchpad.net/juju-core/cmd"
    13  	"launchpad.net/juju-core/juju"
    14  )
    15  
    16  var deleteKeysDoc = `
    17  Delete existing authorised ssh keys to remove ssh access for the holder of those keys.
    18  The keys to delete are found by specifying either the "comment" portion of the ssh key,
    19  typically something like "user@host", or the key fingerprint found by using ssh-keygen.
    20  `
    21  
    22  // DeleteKeysCommand is used to delete authorized ssh keys for a user.
    23  type DeleteKeysCommand struct {
    24  	cmd.EnvCommandBase
    25  	user   string
    26  	keyIds []string
    27  }
    28  
    29  func (c *DeleteKeysCommand) Info() *cmd.Info {
    30  	return &cmd.Info{
    31  		Name:    "delete",
    32  		Args:    "<ssh key id> [...]",
    33  		Doc:     deleteKeysDoc,
    34  		Purpose: "delete authorized ssh keys for a Juju user",
    35  	}
    36  }
    37  
    38  func (c *DeleteKeysCommand) Init(args []string) error {
    39  	switch len(args) {
    40  	case 0:
    41  		return errors.New("no ssh key id specified")
    42  	default:
    43  		c.keyIds = args
    44  	}
    45  	return nil
    46  }
    47  
    48  func (c *DeleteKeysCommand) SetFlags(f *gnuflag.FlagSet) {
    49  	c.EnvCommandBase.SetFlags(f)
    50  	f.StringVar(&c.user, "user", "admin", "the user for which to delete the keys")
    51  }
    52  
    53  func (c *DeleteKeysCommand) Run(context *cmd.Context) error {
    54  	client, err := juju.NewKeyManagerClient(c.EnvName)
    55  	if err != nil {
    56  		return err
    57  	}
    58  	defer client.Close()
    59  
    60  	results, err := client.DeleteKeys(c.user, c.keyIds...)
    61  	if err != nil {
    62  		return err
    63  	}
    64  	for i, result := range results {
    65  		if result.Error != nil {
    66  			fmt.Fprintf(context.Stderr, "cannot delete key id %q: %v\n", c.keyIds[i], result.Error)
    67  		}
    68  	}
    69  	return nil
    70  }