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

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package machineundertaker
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  	"gopkg.in/juju/worker.v1"
     9  	"gopkg.in/juju/worker.v1/dependency"
    10  
    11  	"github.com/juju/juju/api/base"
    12  	"github.com/juju/juju/api/machineundertaker"
    13  	"github.com/juju/juju/api/watcher"
    14  	"github.com/juju/juju/environs"
    15  	"github.com/juju/juju/worker/common"
    16  )
    17  
    18  // ManifoldConfig defines the machine undertaker's configuration and
    19  // dependencies.
    20  type ManifoldConfig struct {
    21  	APICallerName string
    22  	EnvironName   string
    23  
    24  	NewWorker                    func(Facade, environs.Environ, common.CredentialAPI) (worker.Worker, error)
    25  	NewCredentialValidatorFacade func(base.APICaller) (common.CredentialAPI, error)
    26  }
    27  
    28  // Manifold returns a dependency.Manifold that runs a machine
    29  // undertaker.
    30  func Manifold(config ManifoldConfig) dependency.Manifold {
    31  	return dependency.Manifold{
    32  		Inputs: []string{config.APICallerName, config.EnvironName},
    33  		Start: func(context dependency.Context) (worker.Worker, error) {
    34  			var apiCaller base.APICaller
    35  			if err := context.Get(config.APICallerName, &apiCaller); err != nil {
    36  				return nil, errors.Trace(err)
    37  			}
    38  			var environ environs.Environ
    39  			if err := context.Get(config.EnvironName, &environ); err != nil {
    40  				return nil, errors.Trace(err)
    41  			}
    42  			api, err := machineundertaker.NewAPI(apiCaller, watcher.NewNotifyWatcher)
    43  			if err != nil {
    44  				return nil, errors.Trace(err)
    45  			}
    46  
    47  			credentialAPI, err := config.NewCredentialValidatorFacade(apiCaller)
    48  			if err != nil {
    49  				return nil, errors.Trace(err)
    50  			}
    51  
    52  			w, err := config.NewWorker(api, environ, credentialAPI)
    53  			if err != nil {
    54  				return nil, errors.Trace(err)
    55  			}
    56  			return w, nil
    57  		},
    58  	}
    59  }