github.com/rentongzhang/docker@v1.8.2-rc1/daemon/execdriver/windows/windows.go (about)

     1  // +build windows
     2  
     3  package windows
     4  
     5  import (
     6  	"fmt"
     7  	"strings"
     8  	"sync"
     9  
    10  	"github.com/Sirupsen/logrus"
    11  	"github.com/docker/docker/autogen/dockerversion"
    12  	"github.com/docker/docker/daemon/execdriver"
    13  	"github.com/docker/docker/pkg/parsers"
    14  )
    15  
    16  // This is a daemon development variable only and should not be
    17  // used for running production containers on Windows.
    18  var dummyMode bool
    19  
    20  // This allows the daemon to terminate containers rather than shutdown
    21  var terminateMode bool
    22  
    23  var (
    24  	DriverName = "Windows 1854"
    25  	Version    = dockerversion.VERSION + " " + dockerversion.GITCOMMIT
    26  )
    27  
    28  type activeContainer struct {
    29  	command *execdriver.Command
    30  }
    31  
    32  type driver struct {
    33  	root             string
    34  	initPath         string
    35  	activeContainers map[string]*activeContainer
    36  	sync.Mutex
    37  }
    38  
    39  func (d *driver) Name() string {
    40  	return fmt.Sprintf("%s %s", DriverName, Version)
    41  }
    42  
    43  func NewDriver(root, initPath string, options []string) (*driver, error) {
    44  
    45  	for _, option := range options {
    46  		key, val, err := parsers.ParseKeyValueOpt(option)
    47  		if err != nil {
    48  			return nil, err
    49  		}
    50  		key = strings.ToLower(key)
    51  		switch key {
    52  
    53  		case "dummy":
    54  			switch val {
    55  			case "1":
    56  				dummyMode = true
    57  				logrus.Warn("Using dummy mode in Windows exec driver. This is for development use only!")
    58  			}
    59  
    60  		case "terminate":
    61  			switch val {
    62  			case "1":
    63  				terminateMode = true
    64  				logrus.Warn("Using terminate mode in Windows exec driver. This is for testing purposes only.")
    65  			}
    66  
    67  		default:
    68  			return nil, fmt.Errorf("Unrecognised exec driver option %s\n", key)
    69  		}
    70  	}
    71  
    72  	return &driver{
    73  		root:             root,
    74  		initPath:         initPath,
    75  		activeContainers: make(map[string]*activeContainer),
    76  	}, nil
    77  }
    78  
    79  // setupEnvironmentVariables convert a string array of environment variables
    80  // into a map as required by the HCS. Source array is in format [v1=k1] [v2=k2] etc.
    81  func setupEnvironmentVariables(a []string) map[string]string {
    82  	r := make(map[string]string)
    83  	for _, s := range a {
    84  		arr := strings.Split(s, "=")
    85  		if len(arr) == 2 {
    86  			r[arr[0]] = arr[1]
    87  		}
    88  	}
    89  	return r
    90  }