2015-05-15 19:34:26 -04:00
|
|
|
package daemon
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"os"
|
|
|
|
"syscall"
|
|
|
|
|
2015-09-22 19:05:00 -04:00
|
|
|
"github.com/Sirupsen/logrus"
|
2015-05-15 19:34:26 -04:00
|
|
|
"github.com/docker/docker/daemon/graphdriver"
|
2015-07-30 17:01:53 -04:00
|
|
|
// register the windows graph driver
|
2015-07-24 20:49:43 -04:00
|
|
|
_ "github.com/docker/docker/daemon/graphdriver/windows"
|
2015-06-23 13:13:42 -04:00
|
|
|
"github.com/docker/docker/pkg/parsers"
|
2015-05-15 19:34:26 -04:00
|
|
|
"github.com/docker/docker/runconfig"
|
|
|
|
"github.com/docker/libnetwork"
|
|
|
|
)
|
|
|
|
|
2015-08-07 12:33:29 -04:00
|
|
|
const (
|
2015-07-30 17:01:53 -04:00
|
|
|
defaultVirtualSwitch = "Virtual Switch"
|
2015-08-07 12:33:29 -04:00
|
|
|
platformSupported = true
|
2015-09-22 19:05:00 -04:00
|
|
|
windowsMinCPUShares = 1
|
|
|
|
windowsMaxCPUShares = 9
|
2015-08-07 12:33:29 -04:00
|
|
|
)
|
2015-07-13 15:34:58 -04:00
|
|
|
|
2015-05-15 19:34:26 -04:00
|
|
|
func parseSecurityOpt(container *Container, config *runconfig.HostConfig) error {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2015-07-24 20:49:43 -04:00
|
|
|
func setupInitLayer(initLayer string) error {
|
2015-05-15 19:34:26 -04:00
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func checkKernel() error {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2015-07-30 18:28:11 -04:00
|
|
|
// adaptContainerSettings is called during container creation to modify any
|
|
|
|
// settings necessary in the HostConfig structure.
|
2015-08-05 20:15:14 -04:00
|
|
|
func (daemon *Daemon) adaptContainerSettings(hostConfig *runconfig.HostConfig, adjustCPUShares bool) {
|
2015-09-24 15:10:41 -04:00
|
|
|
if hostConfig == nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2015-09-22 19:05:00 -04:00
|
|
|
if hostConfig.CPUShares < 0 {
|
|
|
|
logrus.Warnf("Changing requested CPUShares of %d to minimum allowed of %d", hostConfig.CPUShares, windowsMinCPUShares)
|
|
|
|
hostConfig.CPUShares = windowsMinCPUShares
|
|
|
|
} else if hostConfig.CPUShares > windowsMaxCPUShares {
|
|
|
|
logrus.Warnf("Changing requested CPUShares of %d to maximum allowed of %d", hostConfig.CPUShares, windowsMaxCPUShares)
|
|
|
|
hostConfig.CPUShares = windowsMaxCPUShares
|
|
|
|
}
|
2015-07-13 03:17:43 -04:00
|
|
|
}
|
|
|
|
|
2015-07-30 18:28:11 -04:00
|
|
|
// verifyPlatformContainerSettings performs platform-specific validation of the
|
|
|
|
// hostconfig and config structures.
|
2015-09-29 13:51:40 -04:00
|
|
|
func verifyPlatformContainerSettings(daemon *Daemon, hostConfig *runconfig.HostConfig, config *runconfig.Config) ([]string, error) {
|
2015-05-15 19:34:26 -04:00
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// checkConfigOptions checks for mutually incompatible config options
|
|
|
|
func checkConfigOptions(config *Config) error {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2015-07-11 15:32:08 -04:00
|
|
|
// checkSystem validates platform-specific requirements
|
2015-05-15 19:34:26 -04:00
|
|
|
func checkSystem() error {
|
|
|
|
var dwVersion uint32
|
|
|
|
|
|
|
|
// TODO Windows. May need at some point to ensure have elevation and
|
|
|
|
// possibly LocalSystem.
|
|
|
|
|
|
|
|
// Validate the OS version. Note that docker.exe must be manifested for this
|
|
|
|
// call to return the correct version.
|
|
|
|
dwVersion, err := syscall.GetVersion()
|
|
|
|
if err != nil {
|
|
|
|
return fmt.Errorf("Failed to call GetVersion()")
|
|
|
|
}
|
|
|
|
if int(dwVersion&0xFF) < 10 {
|
|
|
|
return fmt.Errorf("This version of Windows does not support the docker daemon")
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// configureKernelSecuritySupport configures and validate security support for the kernel
|
|
|
|
func configureKernelSecuritySupport(config *Config, driverName string) error {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func migrateIfDownlevel(driver graphdriver.Driver, root string) error {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func configureSysInit(config *Config) (string, error) {
|
|
|
|
// TODO Windows.
|
|
|
|
return os.Getenv("TEMP"), nil
|
|
|
|
}
|
|
|
|
|
2015-06-30 13:34:15 -04:00
|
|
|
func isBridgeNetworkDisabled(config *Config) bool {
|
2015-05-15 19:34:26 -04:00
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
func initNetworkController(config *Config) (libnetwork.NetworkController, error) {
|
2015-07-13 15:34:58 -04:00
|
|
|
// Set the name of the virtual switch if not specified by -b on daemon start
|
|
|
|
if config.Bridge.VirtualSwitchName == "" {
|
2015-07-30 17:01:53 -04:00
|
|
|
config.Bridge.VirtualSwitchName = defaultVirtualSwitch
|
2015-07-13 15:34:58 -04:00
|
|
|
}
|
2015-05-15 19:34:26 -04:00
|
|
|
return nil, nil
|
|
|
|
}
|
2015-06-23 13:13:42 -04:00
|
|
|
|
2015-07-30 17:01:53 -04:00
|
|
|
// registerLinks sets up links between containers and writes the
|
|
|
|
// configuration out for persistence.
|
2015-09-29 13:51:40 -04:00
|
|
|
func (daemon *Daemon) registerLinks(container *Container, hostConfig *runconfig.HostConfig) error {
|
2015-06-23 13:13:42 -04:00
|
|
|
// TODO Windows. Factored out for network modes. There may be more
|
|
|
|
// refactoring required here.
|
|
|
|
|
|
|
|
if hostConfig == nil || hostConfig.Links == nil {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, l := range hostConfig.Links {
|
|
|
|
name, alias, err := parsers.ParseLink(l)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2015-09-29 13:51:40 -04:00
|
|
|
child, err := daemon.Get(name)
|
2015-06-23 13:13:42 -04:00
|
|
|
if err != nil {
|
|
|
|
//An error from daemon.Get() means this name could not be found
|
|
|
|
return fmt.Errorf("Could not get container for %s", name)
|
|
|
|
}
|
2015-07-30 17:01:53 -04:00
|
|
|
if err := daemon.registerLink(container, child, alias); err != nil {
|
2015-06-23 13:13:42 -04:00
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// After we load all the links into the daemon
|
|
|
|
// set them to nil on the hostconfig
|
|
|
|
hostConfig.Links = nil
|
2015-07-30 17:01:53 -04:00
|
|
|
if err := container.writeHostConfig(); err != nil {
|
2015-06-23 13:13:42 -04:00
|
|
|
return err
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
2015-07-16 17:14:58 -04:00
|
|
|
|
|
|
|
func (daemon *Daemon) newBaseContainer(id string) Container {
|
|
|
|
return Container{
|
|
|
|
CommonContainer: CommonContainer{
|
|
|
|
ID: id,
|
|
|
|
State: NewState(),
|
|
|
|
execCommands: newExecStore(),
|
|
|
|
root: daemon.containerRoot(id),
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
2015-08-03 18:05:34 -04:00
|
|
|
|
|
|
|
func (daemon *Daemon) cleanupMounts() error {
|
|
|
|
return nil
|
|
|
|
}
|