github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/worker/provisioner/manifold.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package provisioner
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  
     9  	"github.com/juju/juju/agent"
    10  	"github.com/juju/juju/api/base"
    11  	apiprovisioner "github.com/juju/juju/api/provisioner"
    12  	"github.com/juju/juju/worker"
    13  	"github.com/juju/juju/worker/dependency"
    14  )
    15  
    16  // ManifoldConfig defines an environment provisioner's dependencies. It's not
    17  // currently clear whether it'll be easier to extend this type to include all
    18  // provisioners, or to create separate (Environ|Container)Manifold[Config]s;
    19  // for now we dodge the question because we don't need container provisioners
    20  // in dependency engines. Yet.
    21  type ManifoldConfig struct {
    22  	AgentName     string
    23  	APICallerName string
    24  }
    25  
    26  // Manifold creates a manifold that runs an environemnt provisioner. See the
    27  // ManifoldConfig type for discussion about how this can/should evolve.
    28  func Manifold(config ManifoldConfig) dependency.Manifold {
    29  	return dependency.Manifold{
    30  		Inputs: []string{config.AgentName, config.APICallerName},
    31  		Start: func(context dependency.Context) (worker.Worker, error) {
    32  			var agent agent.Agent
    33  			if err := context.Get(config.AgentName, &agent); err != nil {
    34  				return nil, errors.Trace(err)
    35  			}
    36  			var apiCaller base.APICaller
    37  			if err := context.Get(config.APICallerName, &apiCaller); err != nil {
    38  				return nil, errors.Trace(err)
    39  			}
    40  			api := apiprovisioner.NewState(apiCaller)
    41  			config := agent.CurrentConfig()
    42  			w, err := NewEnvironProvisioner(api, config)
    43  			if err != nil {
    44  				return nil, errors.Trace(err)
    45  			}
    46  			return w, nil
    47  		},
    48  	}
    49  }