github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/storage/pool/defaultpools.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package pool 5 6 import ( 7 "path/filepath" 8 9 "github.com/juju/errors" 10 11 "github.com/juju/juju/agent" 12 "github.com/juju/juju/storage" 13 "github.com/juju/juju/storage/provider" 14 ) 15 16 // RegisterDefaultPools ensures that the required out of the box storage pools 17 // are registered. 18 func RegisterDefaultPools(pm PoolManager, agentConfig agent.Config) error { 19 if err := registerRootFsLoop(pm, agentConfig); err != nil { 20 return err 21 } 22 // TODO - register other pools 23 return nil 24 } 25 26 const RootFsLoopPoolName = "loop" 27 28 func registerRootFsLoop(pm PoolManager, agentConfig agent.Config) error { 29 rootfsPoolConfig := map[string]interface{}{ 30 provider.LoopDataDir: filepath.Join(agentConfig.DataDir(), "storage", "block", "loop"), 31 } 32 return RegisterPool(pm, RootFsLoopPoolName, provider.LoopProviderType, false, rootfsPoolConfig) 33 } 34 35 // RegisterPool creates a named pool for the provider type with the specified config. 36 func RegisterPool(pm PoolManager, name string, providerType storage.ProviderType, replace bool, cfg map[string]interface{}) error { 37 if _, err := pm.Get(name); err == nil { 38 // Already registered. 39 if !replace { 40 return nil 41 } 42 if err := pm.Delete(name); err != nil { 43 return errors.Annotatef(err, "deleting existing pool %q", name) 44 } 45 } 46 _, err := pm.Create(name, providerType, cfg) 47 return err 48 }