github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/container/directory.go (about)

     1  // Copyright 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package container
     5  
     6  import (
     7  	"os"
     8  	"path/filepath"
     9  
    10  	"github.com/juju/loggo"
    11  	"github.com/juju/utils"
    12  )
    13  
    14  var (
    15  	logger              = loggo.GetLogger("juju.container")
    16  	ContainerDir        = "/var/lib/juju/containers"
    17  	RemovedContainerDir = "/var/lib/juju/removed-containers"
    18  )
    19  
    20  // NewDirectory creates a new directory for the container name in the
    21  // directory identified by `ContainerDir`.
    22  func NewDirectory(containerName string) (directory string, err error) {
    23  	directory = dirForName(containerName)
    24  	logger.Tracef("create directory: %s", directory)
    25  	if err = os.MkdirAll(directory, 0755); err != nil {
    26  		logger.Errorf("failed to create container directory: %v", err)
    27  		return "", err
    28  	}
    29  	return directory, nil
    30  }
    31  
    32  // RemoveDirectory moves the container directory from `ContainerDir`
    33  // to `RemovedContainerDir` and makes sure that the names don't clash.
    34  func RemoveDirectory(containerName string) error {
    35  	// Move the directory.
    36  	logger.Tracef("create old container dir: %s", RemovedContainerDir)
    37  	if err := os.MkdirAll(RemovedContainerDir, 0755); err != nil {
    38  		logger.Errorf("failed to create removed container directory: %v", err)
    39  		return err
    40  	}
    41  	removedDir, err := utils.UniqueDirectory(RemovedContainerDir, containerName)
    42  	if err != nil {
    43  		logger.Errorf("was not able to generate a unique directory: %v", err)
    44  		return err
    45  	}
    46  	if err := os.Rename(dirForName(containerName), removedDir); err != nil {
    47  		logger.Errorf("failed to rename container directory: %v", err)
    48  		return err
    49  	}
    50  	return nil
    51  
    52  }
    53  
    54  func dirForName(containerName string) string {
    55  	return filepath.Join(ContainerDir, containerName)
    56  }