github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/storage/poolmanager/defaultpool.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package poolmanager 5 6 import ( 7 "github.com/juju/errors" 8 9 "github.com/juju/juju/storage" 10 ) 11 12 var defaultPools []*storage.Config 13 14 // RegisterDefaultStoragePools registers pool information to be saved to 15 // state when AddDefaultStoragePools is called. 16 func RegisterDefaultStoragePools(pools []*storage.Config) { 17 defaultPools = append(defaultPools, pools...) 18 } 19 20 // AddDefaultStoragePools is run at bootstrap and on upgrade to ensure that 21 // out of the box storage pools are created. 22 func AddDefaultStoragePools(settings SettingsManager) error { 23 pm := New(settings) 24 for _, pool := range defaultPools { 25 if err := addDefaultPool(pm, pool); err != nil { 26 return err 27 } 28 } 29 return nil 30 } 31 32 func addDefaultPool(pm PoolManager, pool *storage.Config) error { 33 _, err := pm.Get(pool.Name()) 34 if err != nil && !errors.IsNotFound(err) { 35 return errors.Annotatef(err, "loading default pool %q", pool.Name()) 36 } 37 if err != nil { 38 // We got a not found error, so default pool doesn't exist. 39 if _, err := pm.Create(pool.Name(), pool.Provider(), pool.Attrs()); err != nil { 40 return errors.Annotatef(err, "creating default pool %q", pool.Name()) 41 } 42 } 43 return nil 44 }