// Main registers subcommands for the jujud executable, and hands over control // to the cmd package. func jujuDMain(args []string, ctx *cmd.Context) (code int, err error) { // Assuming an average of 200 bytes per log message, use up to // 200MB for the log buffer. logCh, err := logsender.InstallBufferedLogWriter(1048576) if err != nil { return 1, errors.Trace(err) } jujud := jujucmd.NewSuperCommand(cmd.SuperCommandParams{ Name: "jujud", Doc: jujudDoc, }) jujud.Log.Factory = &writerFactory{} jujud.Register(NewBootstrapCommand()) // TODO(katco-): AgentConf type is doing too much. The // MachineAgent type has called out the separate concerns; the // AgentConf should be split up to follow suit. agentConf := agentcmd.NewAgentConf("") machineAgentFactory := agentcmd.MachineAgentFactoryFn( agentConf, logCh, looputil.NewLoopDeviceManager(), ) jujud.Register(agentcmd.NewMachineAgentCmd(ctx, machineAgentFactory, agentConf, agentConf)) jujud.Register(agentcmd.NewUnitAgent(ctx, logCh)) code = cmd.Main(jujud, ctx, args[1:]) return code, nil }
// NewContainerManager creates the appropriate container.Manager for the // specified container type. func NewContainerManager(forType instance.ContainerType, conf container.ManagerConfig, imageURLGetter container.ImageURLGetter) (container.Manager, error) { switch forType { case instance.LXC: return lxc.NewContainerManager(conf, imageURLGetter, looputil.NewLoopDeviceManager()) case instance.KVM: return kvm.NewContainerManager(conf) } return nil, errors.Errorf("unknown container type: %q", forType) }
// MachineAgentFactoryFn returns a function which instantiates a // MachineAgent given a machineId. func MachineAgentFactoryFn( agentConfWriter AgentConfigWriter, bufferedLogs logsender.LogRecordCh, rootDir string, ) func(string) *MachineAgent { return func(machineId string) *MachineAgent { return NewMachineAgent( machineId, agentConfWriter, bufferedLogs, worker.NewRunner(cmdutil.IsFatal, cmdutil.MoreImportant, worker.RestartDelay), looputil.NewLoopDeviceManager(), rootDir, ) } }
func newLxcBroker( api APICalls, agentConfig agent.Config, managerConfig container.ManagerConfig, imageURLGetter container.ImageURLGetter, enableNAT bool, defaultMTU int, ) (environs.InstanceBroker, error) { manager, err := lxc.NewContainerManager( managerConfig, imageURLGetter, looputil.NewLoopDeviceManager(), ) if err != nil { return nil, err } return &lxcBroker{ manager: manager, api: api, agentConfig: agentConfig, enableNAT: enableNAT, defaultMTU: defaultMTU, }, 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) (container.Manager, error) { return newContainerManager(conf, imageURLGetter, looputil.NewLoopDeviceManager()) }