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 }