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

     1  // Copyright 2017 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package caasfirewaller
     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/caas"
    13  )
    14  
    15  // ManifoldConfig describes the resources used by the firewaller worker.
    16  type ManifoldConfig struct {
    17  	APICallerName string
    18  	BrokerName    string
    19  
    20  	ControllerUUID string
    21  	ModelUUID      string
    22  
    23  	NewClient func(base.APICaller) Client
    24  	NewWorker func(Config) (worker.Worker, error)
    25  }
    26  
    27  // Manifold returns a Manifold that encapsulates the firewaller worker.
    28  func Manifold(cfg ManifoldConfig) dependency.Manifold {
    29  	return dependency.Manifold{
    30  		Inputs: []string{
    31  			cfg.APICallerName,
    32  			cfg.BrokerName,
    33  		},
    34  		Start: cfg.start,
    35  	}
    36  }
    37  
    38  // Validate is called by start to check for bad configuration.
    39  func (config ManifoldConfig) Validate() error {
    40  	if config.ControllerUUID == "" {
    41  		return errors.NotValidf("empty ControllerUUID")
    42  	}
    43  	if config.ModelUUID == "" {
    44  		return errors.NotValidf("empty ModelUUID")
    45  	}
    46  	if config.APICallerName == "" {
    47  		return errors.NotValidf("empty APICallerName")
    48  	}
    49  	if config.BrokerName == "" {
    50  		return errors.NotValidf("empty BrokerName")
    51  	}
    52  	if config.NewClient == nil {
    53  		return errors.NotValidf("nil NewClient")
    54  	}
    55  	if config.NewWorker == nil {
    56  		return errors.NotValidf("nil NewWorker")
    57  	}
    58  	return nil
    59  }
    60  
    61  // start is a StartFunc for a Worker manifold.
    62  func (config ManifoldConfig) start(context dependency.Context) (worker.Worker, error) {
    63  	if err := config.Validate(); err != nil {
    64  		return nil, errors.Trace(err)
    65  	}
    66  
    67  	var apiCaller base.APICaller
    68  	if err := context.Get(config.APICallerName, &apiCaller); err != nil {
    69  		return nil, errors.Trace(err)
    70  	}
    71  
    72  	var broker caas.Broker
    73  	if err := context.Get(config.BrokerName, &broker); err != nil {
    74  		return nil, errors.Trace(err)
    75  	}
    76  
    77  	client := config.NewClient(apiCaller)
    78  	w, err := config.NewWorker(Config{
    79  		ControllerUUID:    config.ControllerUUID,
    80  		ModelUUID:         config.ModelUUID,
    81  		ApplicationGetter: client,
    82  		LifeGetter:        client,
    83  		ServiceExposer:    broker,
    84  	})
    85  	if err != nil {
    86  		return nil, errors.Trace(err)
    87  	}
    88  	return w, nil
    89  }