github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/worker/storageprovisioner/config.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 12 // Config holds configuration and dependencies for a storageprovisioner worker. 13 type Config struct { 14 Scope names.Tag 15 StorageDir string 16 Volumes VolumeAccessor 17 Filesystems FilesystemAccessor 18 Life LifecycleManager 19 Environ ModelAccessor 20 Machines MachineAccessor 21 Status StatusSetter 22 Clock clock.Clock 23 } 24 25 // Validate returns an error if the config cannot be relied upon to start a worker. 26 func (config Config) Validate() error { 27 switch config.Scope.(type) { 28 case nil: 29 return errors.NotValidf("nil Scope") 30 case names.ModelTag: 31 if config.StorageDir != "" { 32 return errors.NotValidf("environ Scope with non-empty StorageDir") 33 } 34 case names.MachineTag: 35 if config.StorageDir == "" { 36 return errors.NotValidf("machine Scope with empty StorageDir") 37 } 38 default: 39 return errors.NotValidf("%T Scope", config.Scope) 40 } 41 if config.Volumes == nil { 42 return errors.NotValidf("nil Volumes") 43 } 44 if config.Filesystems == nil { 45 return errors.NotValidf("nil Filesystems") 46 } 47 if config.Life == nil { 48 return errors.NotValidf("nil Life") 49 } 50 if config.Environ == nil { 51 return errors.NotValidf("nil Environ") 52 } 53 if config.Machines == nil { 54 return errors.NotValidf("nil Machines") 55 } 56 if config.Status == nil { 57 return errors.NotValidf("nil Status") 58 } 59 if config.Clock == nil { 60 return errors.NotValidf("nil Clock") 61 } 62 return nil 63 }