github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/worker/storageprovisioner/manifold_model.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package storageprovisioner 5 6 import ( 7 "github.com/juju/errors" 8 "github.com/juju/utils/clock" 9 "gopkg.in/juju/names.v2" 10 11 "github.com/juju/juju/api/base" 12 "github.com/juju/juju/api/storageprovisioner" 13 "github.com/juju/juju/environs" 14 "github.com/juju/juju/worker" 15 "github.com/juju/juju/worker/dependency" 16 ) 17 18 // ModelManifoldConfig defines a storage provisioner's configuration and dependencies. 19 type ModelManifoldConfig struct { 20 APICallerName string 21 ClockName string 22 EnvironName string 23 24 Scope names.Tag 25 StorageDir string 26 } 27 28 // ModelManifold returns a dependency.Manifold that runs a storage provisioner. 29 func ModelManifold(config ModelManifoldConfig) dependency.Manifold { 30 return dependency.Manifold{ 31 Inputs: []string{config.APICallerName, config.ClockName, config.EnvironName}, 32 Start: func(context dependency.Context) (worker.Worker, error) { 33 34 var clock clock.Clock 35 if err := context.Get(config.ClockName, &clock); err != nil { 36 return nil, errors.Trace(err) 37 } 38 var apiCaller base.APICaller 39 if err := context.Get(config.APICallerName, &apiCaller); err != nil { 40 return nil, errors.Trace(err) 41 } 42 var environ environs.Environ 43 if err := context.Get(config.EnvironName, &environ); err != nil { 44 return nil, errors.Trace(err) 45 } 46 47 api, err := storageprovisioner.NewState(apiCaller, config.Scope) 48 if err != nil { 49 return nil, errors.Trace(err) 50 } 51 w, err := NewStorageProvisioner(Config{ 52 Scope: config.Scope, 53 StorageDir: config.StorageDir, 54 Volumes: api, 55 Filesystems: api, 56 Life: api, 57 Registry: environ, 58 Machines: api, 59 Status: api, 60 Clock: clock, 61 }) 62 if err != nil { 63 return nil, errors.Trace(err) 64 } 65 return w, nil 66 }, 67 } 68 }