github.com/mattyw/juju@v0.0.0-20140610034352-732aecd63861/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  	"github.com/juju/utils/apt"
     8  
     9  	"github.com/juju/juju/container"
    10  )
    11  
    12  var requiredPackages = []string{
    13  	"lxc",
    14  	"cloud-image-utils",
    15  }
    16  
    17  type containerInitialiser struct {
    18  	series string
    19  }
    20  
    21  // containerInitialiser implements container.Initialiser.
    22  var _ container.Initialiser = (*containerInitialiser)(nil)
    23  
    24  // NewContainerInitialiser returns an instance used to perform the steps
    25  // required to allow a host machine to run a LXC container.
    26  func NewContainerInitialiser(series string) container.Initialiser {
    27  	return &containerInitialiser{series}
    28  }
    29  
    30  // Initialise is specified on the container.Initialiser interface.
    31  func (ci *containerInitialiser) Initialise() error {
    32  	return ensureDependencies(ci.series)
    33  }
    34  
    35  // ensureDependencies creates a set of install packages using AptGetPreparePackages
    36  // and runs each set of packages through AptGetInstall
    37  func ensureDependencies(series string) error {
    38  	var err error
    39  	aptGetInstallCommandList := apt.GetPreparePackages(requiredPackages, series)
    40  	for _, commands := range aptGetInstallCommandList {
    41  		err = apt.GetInstall(commands...)
    42  		if err != nil {
    43  			return err
    44  		}
    45  	}
    46  	return err
    47  }