// StartInstance is specified in the Broker interface. func (broker *kvmBroker) StartInstance(args environs.StartInstanceParams) (instance.Instance, *instance.HardwareCharacteristics, []network.Info, error) { if args.MachineConfig.HasNetworks() { return nil, nil, nil, fmt.Errorf("starting kvm containers with networks is not supported yet.") } // TODO: refactor common code out of the container brokers. machineId := args.MachineConfig.MachineId kvmLogger.Infof("starting kvm container for machineId: %s", machineId) // TODO: Default to using the host network until we can configure. Yes, // this is using the LxcBridge value, we should put it in the api call for // container config. bridgeDevice := broker.agentConfig.Value(agent.LxcBridge) if bridgeDevice == "" { bridgeDevice = kvm.DefaultKvmBridge } network := container.BridgeNetworkConfig(bridgeDevice) series := args.Tools.OneSeries() args.MachineConfig.MachineContainerType = instance.KVM args.MachineConfig.Tools = args.Tools[0] config, err := broker.api.ContainerConfig() if err != nil { kvmLogger.Errorf("failed to get container config: %v", err) return nil, nil, nil, err } if err := environs.PopulateMachineConfig( args.MachineConfig, config.ProviderType, config.AuthorizedKeys, config.SSLHostnameVerification, config.Proxy, config.AptProxy, config.PreferIPv6, config.EnableOSRefreshUpdate, config.EnableOSUpgrade, ); err != nil { kvmLogger.Errorf("failed to populate machine config: %v", err) return nil, nil, nil, err } inst, hardware, err := broker.manager.CreateContainer(args.MachineConfig, series, network) if err != nil { kvmLogger.Errorf("failed to start container: %v", err) return nil, nil, nil, err } kvmLogger.Infof("started kvm container for machineId: %s, %s, %s", machineId, inst.Id(), hardware.String()) return inst, hardware, nil, nil }
// StartInstance is specified in the Broker interface. func (broker *lxcBroker) StartInstance(args environs.StartInstanceParams) (instance.Instance, *instance.HardwareCharacteristics, []network.Info, error) { if args.MachineConfig.HasNetworks() { return nil, nil, nil, fmt.Errorf("starting lxc containers with networks is not supported yet.") } // TODO: refactor common code out of the container brokers. machineId := args.MachineConfig.MachineId lxcLogger.Infof("starting lxc container for machineId: %s", machineId) // Default to using the host network until we can configure. bridgeDevice := broker.agentConfig.Value(agent.LxcBridge) if bridgeDevice == "" { bridgeDevice = lxc.DefaultLxcBridge } network := container.BridgeNetworkConfig(bridgeDevice) series := args.Tools.OneSeries() args.MachineConfig.MachineContainerType = instance.LXC args.MachineConfig.Tools = args.Tools[0] config, err := broker.api.ContainerConfig() if err != nil { lxcLogger.Errorf("failed to get container config: %v", err) return nil, nil, nil, err } if err := environs.PopulateMachineConfig( args.MachineConfig, config.ProviderType, config.AuthorizedKeys, config.SSLHostnameVerification, config.Proxy, config.AptProxy, ); err != nil { lxcLogger.Errorf("failed to populate machine config: %v", err) return nil, nil, nil, err } inst, hardware, err := broker.manager.CreateContainer(args.MachineConfig, series, network) if err != nil { lxcLogger.Errorf("failed to start container: %v", err) return nil, nil, nil, err } lxcLogger.Infof("started lxc container for machineId: %s, %s, %s", machineId, inst.Id(), hardware.String()) return inst, hardware, nil, nil }