github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/instancepoller/manifold.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package instancepoller
     5  
     6  import (
     7  	"time"
     8  
     9  	"github.com/juju/clock"
    10  	"github.com/juju/errors"
    11  	"gopkg.in/juju/worker.v1"
    12  	"gopkg.in/juju/worker.v1/dependency"
    13  
    14  	"github.com/juju/juju/api/base"
    15  	"github.com/juju/juju/api/instancepoller"
    16  	"github.com/juju/juju/environs"
    17  	"github.com/juju/juju/worker/common"
    18  )
    19  
    20  // ManifoldConfig describes the resources used by the instancepoller worker.
    21  type ManifoldConfig struct {
    22  	APICallerName string
    23  	ClockName     string
    24  	Delay         time.Duration
    25  	EnvironName   string
    26  
    27  	NewCredentialValidatorFacade func(base.APICaller) (common.CredentialAPI, error)
    28  }
    29  
    30  func (config ManifoldConfig) start(context dependency.Context) (worker.Worker, error) {
    31  	var clock clock.Clock
    32  	if err := context.Get(config.ClockName, &clock); err != nil {
    33  		return nil, errors.Trace(err)
    34  	}
    35  	var environ environs.Environ
    36  	if err := context.Get(config.EnvironName, &environ); err != nil {
    37  		return nil, errors.Trace(err)
    38  	}
    39  
    40  	var apiCaller base.APICaller
    41  	if err := context.Get(config.APICallerName, &apiCaller); err != nil {
    42  		return nil, errors.Trace(err)
    43  	}
    44  	facade := instancepoller.NewAPI(apiCaller)
    45  
    46  	credentialAPI, err := config.NewCredentialValidatorFacade(apiCaller)
    47  	if err != nil {
    48  		return nil, errors.Trace(err)
    49  	}
    50  
    51  	w, err := NewWorker(Config{
    52  		Clock:         clock,
    53  		Delay:         config.Delay,
    54  		Facade:        facade,
    55  		Environ:       environ,
    56  		CredentialAPI: credentialAPI,
    57  	})
    58  	if err != nil {
    59  		return nil, errors.Trace(err)
    60  	}
    61  	return w, nil
    62  }
    63  
    64  // Manifold returns a Manifold that encapsulates the instancepoller worker.
    65  func Manifold(config ManifoldConfig) dependency.Manifold {
    66  	return dependency.Manifold{
    67  		Inputs: []string{
    68  			config.APICallerName,
    69  			config.EnvironName,
    70  			config.ClockName,
    71  		},
    72  		Start: config.start,
    73  	}
    74  }