github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/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/names" 9 "github.com/juju/utils/clock" 10 11 "github.com/juju/juju/api/base" 12 "github.com/juju/juju/api/storageprovisioner" 13 "github.com/juju/juju/worker" 14 "github.com/juju/juju/worker/dependency" 15 ) 16 17 // ModelManifoldConfig defines a storage provisioner's configuration and dependencies. 18 type ModelManifoldConfig struct { 19 APICallerName string 20 ClockName string 21 22 Scope names.Tag 23 StorageDir string 24 } 25 26 // ModelManifold returns a dependency.Manifold that runs a storage provisioner. 27 func ModelManifold(config ModelManifoldConfig) dependency.Manifold { 28 return dependency.Manifold{ 29 Inputs: []string{config.APICallerName, config.ClockName}, 30 Start: func(context dependency.Context) (worker.Worker, error) { 31 32 var clock clock.Clock 33 if err := context.Get(config.ClockName, &clock); 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 41 api, err := storageprovisioner.NewState(apiCaller, config.Scope) 42 if err != nil { 43 return nil, errors.Trace(err) 44 } 45 w, err := NewStorageProvisioner(Config{ 46 Scope: config.Scope, 47 StorageDir: config.StorageDir, 48 Volumes: api, 49 Filesystems: api, 50 Life: api, 51 Environ: api, 52 Machines: api, 53 Status: api, 54 Clock: clock, 55 }) 56 if err != nil { 57 return nil, errors.Trace(err) 58 } 59 return w, nil 60 }, 61 } 62 }