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  }