launchpad.net/~rogpeppe/juju-core/500-errgo-fix@v0.0.0-20140213181702-000000002356/state/api/keyupdater/authorisedkeys.go (about)

     1  // Copyright 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package keyupdater
     5  
     6  import (
     7  	"launchpad.net/errgo/errors"
     8  	"launchpad.net/juju-core/state/api/base"
     9  	"launchpad.net/juju-core/state/api/params"
    10  	"launchpad.net/juju-core/state/api/watcher"
    11  )
    12  
    13  // State provides access to a worker's view of the state.
    14  type State struct {
    15  	caller base.Caller
    16  }
    17  
    18  // NewState returns a version of the state that provides functionality required by the worker.
    19  func NewState(caller base.Caller) *State {
    20  	return &State{caller}
    21  }
    22  
    23  // AuthorisedKeys returns the authorised ssh keys for the machine specified by machineTag.
    24  func (st *State) AuthorisedKeys(machineTag string) ([]string, error) {
    25  	var results params.StringsResults
    26  	args := params.Entities{
    27  		Entities: []params.Entity{{Tag: machineTag}},
    28  	}
    29  	err := st.caller.Call("KeyUpdater", "", "AuthorisedKeys", args, &results)
    30  	if err != nil {
    31  		// TODO: Not directly tested
    32  		return nil, base.WrapError(err)
    33  	}
    34  	if len(results.Results) != 1 {
    35  		// TODO: Not directly tested
    36  		return nil, errors.Newf("expected one result, got %d", len(results.Results))
    37  	}
    38  	result := results.Results[0]
    39  	if err := result.Error; err != nil {
    40  		return nil, base.WrapError(err)
    41  	}
    42  	return result.Result, nil
    43  }
    44  
    45  // WatchAuthorisedKeys returns a notify watcher that looks for changes in the
    46  // authorised ssh keys for the machine specified by machineTag.
    47  func (st *State) WatchAuthorisedKeys(machineTag string) (watcher.NotifyWatcher, error) {
    48  	var results params.NotifyWatchResults
    49  	args := params.Entities{
    50  		Entities: []params.Entity{{Tag: machineTag}},
    51  	}
    52  	err := st.caller.Call("KeyUpdater", "", "WatchAuthorisedKeys", args, &results)
    53  	if err != nil {
    54  		// TODO: Not directly tested
    55  		return nil, base.WrapError(err)
    56  	}
    57  	if len(results.Results) != 1 {
    58  		// TODO: Not directly tested
    59  		return nil, errors.Newf("expected one result, got %d", len(results.Results))
    60  	}
    61  	result := results.Results[0]
    62  	if result.Error != nil {
    63  		//  TODO: Not directly tested
    64  		return nil, base.WrapError(result.Error)
    65  	}
    66  	w := watcher.NewNotifyWatcher(st.caller, result)
    67  	return w, nil
    68  }