github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/container/lxc/initialisation.go (about)

     1  // Copyright 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package lxc
     5  
     6  import (
     7  	"strings"
     8  
     9  	"github.com/juju/utils/packaging/config"
    10  	"github.com/juju/utils/packaging/manager"
    11  
    12  	"github.com/juju/juju/container"
    13  )
    14  
    15  var requiredPackages = []string{
    16  	"lxc",
    17  	"cloud-image-utils",
    18  }
    19  
    20  type containerInitialiser struct {
    21  	series string
    22  }
    23  
    24  // containerInitialiser implements container.Initialiser.
    25  var _ container.Initialiser = (*containerInitialiser)(nil)
    26  
    27  // NewContainerInitialiser returns an instance used to perform the steps
    28  // required to allow a host machine to run a LXC container.
    29  func NewContainerInitialiser(series string) container.Initialiser {
    30  	return &containerInitialiser{series}
    31  }
    32  
    33  // Initialise is specified on the container.Initialiser interface.
    34  func (ci *containerInitialiser) Initialise() error {
    35  	return ensureDependencies(ci.series)
    36  }
    37  
    38  // getPackageManager is a helper function which returns the
    39  // package manager implementation for the current system.
    40  func getPackageManager(series string) (manager.PackageManager, error) {
    41  	return manager.NewPackageManager(series)
    42  }
    43  
    44  // getPackagingConfigurer is a helper function which returns the
    45  // packaging configuration manager for the current system.
    46  func getPackagingConfigurer(series string) (config.PackagingConfigurer, error) {
    47  	return config.NewPackagingConfigurer(series)
    48  }
    49  
    50  // ensureDependencies creates a set of install packages using
    51  // apt.GetPreparePackages and runs each set of packages through
    52  // apt.GetInstall.
    53  func ensureDependencies(series string) error {
    54  	pacman, err := getPackageManager(series)
    55  	if err != nil {
    56  		return err
    57  	}
    58  	pacconfer, err := getPackagingConfigurer(series)
    59  	if err != nil {
    60  		return err
    61  	}
    62  
    63  	for _, pack := range requiredPackages {
    64  		pkg := pack
    65  		if config.SeriesRequiresCloudArchiveTools(series) &&
    66  			pacconfer.IsCloudArchivePackage(pack) {
    67  			pkg = strings.Join(pacconfer.ApplyCloudArchiveTarget(pack), " ")
    68  		}
    69  
    70  		if err := pacman.Install(pkg); err != nil {
    71  			return err
    72  		}
    73  	}
    74  
    75  	return err
    76  }