123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- package opts
- import (
- "fmt"
- "strconv"
- "strings"
- "github.com/docker/docker/api/types/container"
- )
- // ReadKVStrings reads a file of line terminated key=value pairs, and overrides any keys
- // present in the file with additional pairs specified in the override parameter
- func ReadKVStrings(files []string, override []string) ([]string, error) {
- envVariables := []string{}
- for _, ef := range files {
- parsedVars, err := ParseEnvFile(ef)
- if err != nil {
- return nil, err
- }
- envVariables = append(envVariables, parsedVars...)
- }
- // parse the '-e' and '--env' after, to allow override
- envVariables = append(envVariables, override...)
- return envVariables, nil
- }
- // ConvertKVStringsToMap converts ["key=value"] to {"key":"value"}
- func ConvertKVStringsToMap(values []string) map[string]string {
- result := make(map[string]string, len(values))
- for _, value := range values {
- kv := strings.SplitN(value, "=", 2)
- if len(kv) == 1 {
- result[kv[0]] = ""
- } else {
- result[kv[0]] = kv[1]
- }
- }
- return result
- }
- // ConvertKVStringsToMapWithNil converts ["key=value"] to {"key":"value"}
- // but set unset keys to nil - meaning the ones with no "=" in them.
- // We use this in cases where we need to distinguish between
- // FOO= and FOO
- // where the latter case just means FOO was mentioned but not given a value
- func ConvertKVStringsToMapWithNil(values []string) map[string]*string {
- result := make(map[string]*string, len(values))
- for _, value := range values {
- kv := strings.SplitN(value, "=", 2)
- if len(kv) == 1 {
- result[kv[0]] = nil
- } else {
- result[kv[0]] = &kv[1]
- }
- }
- return result
- }
- // ParseRestartPolicy returns the parsed policy or an error indicating what is incorrect
- func ParseRestartPolicy(policy string) (container.RestartPolicy, error) {
- p := container.RestartPolicy{}
- if policy == "" {
- return p, nil
- }
- parts := strings.Split(policy, ":")
- if len(parts) > 2 {
- return p, fmt.Errorf("invalid restart policy format")
- }
- if len(parts) == 2 {
- count, err := strconv.Atoi(parts[1])
- if err != nil {
- return p, fmt.Errorf("maximum retry count must be an integer")
- }
- p.MaximumRetryCount = count
- }
- p.Name = parts[0]
- return p, nil
- }
|