-
Notifications
You must be signed in to change notification settings - Fork 1.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
import environment variables that are present #1019
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -21,7 +21,7 @@ func (e ErrBadKey) Error() string { | |
return fmt.Sprintf("poorly formatted environment: %s", e.msg) | ||
} | ||
|
||
func parseKeyValueFile(filename string, emptyFn func(string) string) ([]string, error) { | ||
func parseKeyValueFile(filename string, emptyFn func(string) (string, bool)) ([]string, error) { | ||
fh, err := os.Open(filename) | ||
if err != nil { | ||
return []string{}, err | ||
|
@@ -53,17 +53,23 @@ func parseKeyValueFile(filename string, emptyFn func(string) string) ([]string, | |
if strings.ContainsAny(variable, whiteSpaces) { | ||
return []string{}, ErrBadKey{fmt.Sprintf("variable '%s' has white spaces", variable)} | ||
} | ||
if len(variable) == 0 { | ||
return []string{}, ErrBadKey{fmt.Sprintf("no variable name on line '%s'", line)} | ||
} | ||
|
||
if len(data) > 1 { | ||
// pass the value through, no trimming | ||
lines = append(lines, fmt.Sprintf("%s=%s", variable, data[1])) | ||
} else { | ||
var value string | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: if emptyFn != nil{
if value, isSet := emptyFn(line); isSet{
// if only a pass-through variable is given, clean it up.
lines = append(lines, fmt.Sprintf("%s=%s", strings.TrimSpace(line), value))
}
} There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It's not suggested within POSIX that a well-formed variable name may contain a space character, however: "Other characters may be permitted by an implementation; applications shall tolerate the presence of such names." - so either refuse or accept but not alter (like trimming spaces). (quote from: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. At least needs tests against There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes, we had some validation in the past, but there's no strict rule what's "allowed" as variable name, so we decided to remove validation and leave it to the container's process to decide what's valid and what not. Having said the above; trimming trailing whitespace in variable names could be an exception (i.e., I don't think it's possible to define a var with leading/trailing whitespace, as the whitespace would be stripped by the shell), but I'm not sure we should; for example, the following would produce an error in your shell as well; $ export foo = bar
bash: export: `=': not a valid identifier Leading whitespace in the value leads to "no value being set"; $ export bar= bar
$ env | grep bar
bar= This looks to be something where we differ, because the shell requires quotes for that: $ export baz=" bla"
$ env | grep baz
baz= bla There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. My nit was only a small refactor and should be equivalent with your version. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Or maybe were you answering to @thaJeztah previous comment 😅 |
||
var present bool | ||
if emptyFn != nil { | ||
value = emptyFn(line) | ||
value, present = emptyFn(line) | ||
} | ||
if present { | ||
// if only a pass-through variable is given, clean it up. | ||
lines = append(lines, fmt.Sprintf("%s=%s", strings.TrimSpace(line), value)) | ||
} | ||
// if only a pass-through variable is given, clean it up. | ||
lines = append(lines, fmt.Sprintf("%s=%s", strings.TrimSpace(line), value)) | ||
} | ||
} | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also testing the validation, using this env-file;
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added the test for the fix in question before the fix. signed both commits. I rbased fresh on master, I guess this goes easily into the RC but I don't know of the Docker projects internal workflow regarding versioning, so just FYI. Let me know if you'd like to get TESTING.md cleaned up or about any back ports.