| package daemon |
| |
| import ( |
| "fmt" |
| "os" |
| "syscall" |
| |
| "github.com/Sirupsen/logrus" |
| "github.com/docker/docker/daemon/graphdriver" |
| // register the windows graph driver |
| _ "github.com/docker/docker/daemon/graphdriver/windows" |
| "github.com/docker/docker/pkg/parsers" |
| "github.com/docker/docker/runconfig" |
| "github.com/docker/libnetwork" |
| ) |
| |
| const ( |
| defaultVirtualSwitch = "Virtual Switch" |
| platformSupported = true |
| windowsMinCPUShares = 1 |
| windowsMaxCPUShares = 9 |
| ) |
| |
| func parseSecurityOpt(container *Container, config *runconfig.HostConfig) error { |
| return nil |
| } |
| |
| func setupInitLayer(initLayer string, rootUID, rootGID int) error { |
| return nil |
| } |
| |
| func checkKernel() error { |
| return nil |
| } |
| |
| // adaptContainerSettings is called during container creation to modify any |
| // settings necessary in the HostConfig structure. |
| func (daemon *Daemon) adaptContainerSettings(hostConfig *runconfig.HostConfig, adjustCPUShares bool) { |
| if hostConfig == nil { |
| return |
| } |
| |
| 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 |
| } |
| } |
| |
| // verifyPlatformContainerSettings performs platform-specific validation of the |
| // hostconfig and config structures. |
| func verifyPlatformContainerSettings(daemon *Daemon, hostConfig *runconfig.HostConfig, config *runconfig.Config) ([]string, error) { |
| return nil, nil |
| } |
| |
| // checkConfigOptions checks for mutually incompatible config options |
| func checkConfigOptions(config *Config) error { |
| return nil |
| } |
| |
| // checkSystem validates platform-specific requirements |
| 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, rootUID, rootGID int) (string, error) { |
| // TODO Windows. |
| return os.Getenv("TEMP"), nil |
| } |
| |
| func isBridgeNetworkDisabled(config *Config) bool { |
| return false |
| } |
| |
| func (daemon *Daemon) initNetworkController(config *Config) (libnetwork.NetworkController, error) { |
| // Set the name of the virtual switch if not specified by -b on daemon start |
| if config.Bridge.VirtualSwitchName == "" { |
| config.Bridge.VirtualSwitchName = defaultVirtualSwitch |
| } |
| return nil, nil |
| } |
| |
| // registerLinks sets up links between containers and writes the |
| // configuration out for persistence. |
| func (daemon *Daemon) registerLinks(container *Container, hostConfig *runconfig.HostConfig) error { |
| // 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 |
| } |
| child, err := daemon.Get(name) |
| 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) |
| } |
| if err := daemon.registerLink(container, child, alias); err != nil { |
| return err |
| } |
| } |
| |
| // After we load all the links into the daemon |
| // set them to nil on the hostconfig |
| hostConfig.Links = nil |
| if err := container.writeHostConfig(); err != nil { |
| return err |
| } |
| return nil |
| } |
| |
| func (daemon *Daemon) newBaseContainer(id string) Container { |
| return Container{ |
| CommonContainer: CommonContainer{ |
| ID: id, |
| State: NewState(), |
| execCommands: newExecStore(), |
| root: daemon.containerRoot(id), |
| }, |
| } |
| } |
| |
| func (daemon *Daemon) cleanupMounts() error { |
| return nil |
| } |