// NewContainerManager returns a manager object that can start and stop lxc // containers. The containers that are created are namespaced by the name // parameter. func NewContainerManager(conf container.ManagerConfig) (container.Manager, error) { name := conf.PopValue(container.ConfigName) if name == "" { return nil, fmt.Errorf("name is required") } logDir := conf.PopValue(container.ConfigLogDir) if logDir == "" { logDir = agent.DefaultLogDir } // Explicitly ignore the error result from ParseBool. // If it fails to parse, the value is false, and this suits // us fine. useClone, _ := strconv.ParseBool(conf.PopValue("use-clone")) useAUFS, _ := strconv.ParseBool(conf.PopValue("use-aufs")) backingFS, err := containerDirFilesystem() if err != nil { // Especially in tests, or a bot, the lxc dir may not exist // causing the test to fail. Since we only really care if the // backingFS is 'btrfs' and we treat the rest the same, just // call it 'unknown'. backingFS = "unknown" } logger.Tracef("backing filesystem: %q", backingFS) conf.WarnAboutUnused() return &containerManager{ name: name, logdir: logDir, createWithClone: useClone, useAUFS: useAUFS, backingFilesystem: backingFS, }, nil }
// NewContainerManager returns a manager object that can start and stop kvm // containers. The containers that are created are namespaced by the name // parameter. func NewContainerManager(conf container.ManagerConfig) (container.Manager, error) { name := conf.PopValue(container.ConfigName) if name == "" { return nil, fmt.Errorf("name is required") } logDir := conf.PopValue(container.ConfigLogDir) if logDir == "" { logDir = agent.DefaultLogDir } conf.WarnAboutUnused() return &containerManager{name: name, logdir: logDir}, nil }