github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/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  // AddDefaultStoragePools adds the default storage pools for the given
    13  // provider to the given pool manager. This is called whenever a new
    14  // model is created.
    15  func AddDefaultStoragePools(p storage.Provider, pm PoolManager) error {
    16  	for _, pool := range p.DefaultPools() {
    17  		if err := addDefaultPool(pm, pool); err != nil {
    18  			return err
    19  		}
    20  	}
    21  	return nil
    22  }
    23  
    24  func addDefaultPool(pm PoolManager, pool *storage.Config) error {
    25  	_, err := pm.Get(pool.Name())
    26  	if err != nil && !errors.IsNotFound(err) {
    27  		return errors.Annotatef(err, "loading default pool %q", pool.Name())
    28  	}
    29  	if err != nil {
    30  		// We got a not found error, so default pool doesn't exist.
    31  		if _, err := pm.Create(pool.Name(), pool.Provider(), pool.Attrs()); err != nil {
    32  			return errors.Annotatef(err, "creating default pool %q", pool.Name())
    33  		}
    34  	}
    35  	return nil
    36  }