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  }