github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/api/common/modelwatcher.go (about)

     1  // Copyright 2014 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package common
     5  
     6  import (
     7  	"github.com/juju/juju/api/base"
     8  	apiwatcher "github.com/juju/juju/api/watcher"
     9  	"github.com/juju/juju/apiserver/params"
    10  	"github.com/juju/juju/environs/config"
    11  	"github.com/juju/juju/watcher"
    12  )
    13  
    14  // ModelWatcher provides common client-side API functions
    15  // to call into apiserver.common.ModelWatcher.
    16  type ModelWatcher struct {
    17  	facade base.FacadeCaller
    18  }
    19  
    20  // NewModelWatcher creates a ModelWatcher on the specified facade,
    21  // and uses this name when calling through the caller.
    22  func NewModelWatcher(facade base.FacadeCaller) *ModelWatcher {
    23  	return &ModelWatcher{facade}
    24  }
    25  
    26  // WatchForModelConfigChanges return a NotifyWatcher waiting for the
    27  // model configuration to change.
    28  func (e *ModelWatcher) WatchForModelConfigChanges() (watcher.NotifyWatcher, error) {
    29  	var result params.NotifyWatchResult
    30  	err := e.facade.FacadeCall("WatchForModelConfigChanges", nil, &result)
    31  	if err != nil {
    32  		return nil, err
    33  	}
    34  	return apiwatcher.NewNotifyWatcher(e.facade.RawAPICaller(), result), nil
    35  }
    36  
    37  // ModelConfig returns the current model configuration.
    38  func (e *ModelWatcher) ModelConfig() (*config.Config, error) {
    39  	var result params.ModelConfigResult
    40  	err := e.facade.FacadeCall("ModelConfig", nil, &result)
    41  	if err != nil {
    42  		return nil, err
    43  	}
    44  	conf, err := config.New(config.NoDefaults, result.Config)
    45  	if err != nil {
    46  		return nil, err
    47  	}
    48  	return conf, nil
    49  }