// NewContainerManager creates the entity that knows how to create and manage // LXD containers. // TODO(jam): This needs to grow support for things like LXC's ImageURLGetter // functionality. func NewContainerManager(conf container.ManagerConfig) (container.Manager, error) { name := conf.PopValue(container.ConfigName) if name == "" { return nil, errors.Errorf("name is required") } conf.WarnAboutUnused() return &containerManager{name: name}, 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 }
// NewContainerManager returns a manager object that can start and stop kvm // containers. func NewContainerManager(conf container.ManagerConfig) (container.Manager, error) { modelUUID := conf.PopValue(container.ConfigModelUUID) if modelUUID == "" { return nil, errors.Errorf("model UUID is required") } namespace, err := instance.NewNamespace(modelUUID) if err != nil { return nil, errors.Trace(err) } logDir := conf.PopValue(container.ConfigLogDir) if logDir == "" { logDir = agent.DefaultPaths.LogDir } conf.WarnAboutUnused() return &containerManager{namespace: namespace, logdir: logDir}, nil }
// NewContainerManager creates the entity that knows how to create and manage // LXD containers. // TODO(jam): This needs to grow support for things like LXC's ImageURLGetter // functionality. func NewContainerManager(conf container.ManagerConfig) (container.Manager, error) { modelUUID := conf.PopValue(container.ConfigModelUUID) if modelUUID == "" { return nil, errors.Errorf("model UUID is required") } namespace, err := instance.NewNamespace(modelUUID) if err != nil { return nil, errors.Trace(err) } conf.WarnAboutUnused() return &containerManager{ modelUUID: modelUUID, namespace: namespace, }, nil }
// NewContainerManager returns a manager object that can start and // stop lxc containers. The containers that are created are namespaced // by the name parameter inside the given ManagerConfig. func NewContainerManager( conf container.ManagerConfig, imageURLGetter container.ImageURLGetter, loopDeviceManager looputil.LoopDeviceManager, ) (container.Manager, error) { name := conf.PopValue(container.ConfigName) if name == "" { return nil, errors.Errorf("name is required") } logDir := conf.PopValue(container.ConfigLogDir) if logDir == "" { logDir = agent.DefaultLogDir } var useClone bool useCloneVal := conf.PopValue("use-clone") if useCloneVal != "" { // Explicitly ignore the error result from ParseBool. // If it fails to parse, the value is false, and this suits // us fine. useClone, _ = strconv.ParseBool(useCloneVal) } else { // If no lxc-clone value is explicitly set in config, then // see if the Ubuntu series we are running on supports it // and if it does, we will use clone. useClone = preferFastLXC(releaseVersion()) } 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, imageURLGetter: imageURLGetter, loopDeviceManager: loopDeviceManager, }, nil }