Merge pull request #38586 from robin-thoni/labels-regex
Use a regex to match labels
This commit is contained in:
commit
9a2c263743
12 changed files with 39 additions and 11 deletions
|
@ -192,6 +192,7 @@ func ValidateLogOpt(cfg map[string]string) error {
|
|||
case "env":
|
||||
case "env-regex":
|
||||
case "labels":
|
||||
case "labels-regex":
|
||||
case "tag":
|
||||
case addressKey:
|
||||
case bufferLimitKey:
|
||||
|
|
|
@ -18,14 +18,15 @@ import (
|
|||
const (
|
||||
name = "gcplogs"
|
||||
|
||||
projectOptKey = "gcp-project"
|
||||
logLabelsKey = "labels"
|
||||
logEnvKey = "env"
|
||||
logEnvRegexKey = "env-regex"
|
||||
logCmdKey = "gcp-log-cmd"
|
||||
logZoneKey = "gcp-meta-zone"
|
||||
logNameKey = "gcp-meta-name"
|
||||
logIDKey = "gcp-meta-id"
|
||||
projectOptKey = "gcp-project"
|
||||
logLabelsKey = "labels"
|
||||
logLabelsRegexKey = "labels-regex"
|
||||
logEnvKey = "env"
|
||||
logEnvRegexKey = "env-regex"
|
||||
logCmdKey = "gcp-log-cmd"
|
||||
logZoneKey = "gcp-meta-zone"
|
||||
logNameKey = "gcp-meta-name"
|
||||
logIDKey = "gcp-meta-id"
|
||||
)
|
||||
|
||||
var (
|
||||
|
@ -210,7 +211,7 @@ func New(info logger.Info) (logger.Logger, error) {
|
|||
func ValidateLogOpts(cfg map[string]string) error {
|
||||
for k := range cfg {
|
||||
switch k {
|
||||
case projectOptKey, logLabelsKey, logEnvKey, logEnvRegexKey, logCmdKey, logZoneKey, logNameKey, logIDKey:
|
||||
case projectOptKey, logLabelsKey, logLabelsRegexKey, logEnvKey, logEnvRegexKey, logCmdKey, logZoneKey, logNameKey, logIDKey:
|
||||
default:
|
||||
return fmt.Errorf("%q is not a valid option for the gcplogs driver", k)
|
||||
}
|
||||
|
|
|
@ -207,6 +207,7 @@ func ValidateLogOpt(cfg map[string]string) error {
|
|||
case "gelf-address":
|
||||
case "tag":
|
||||
case "labels":
|
||||
case "labels-regex":
|
||||
case "env":
|
||||
case "env-regex":
|
||||
case "gelf-compression-level":
|
||||
|
|
|
@ -98,6 +98,7 @@ func TestUDPValidateLogOpt(t *testing.T) {
|
|||
"gelf-address": "udp://127.0.0.1:12201",
|
||||
"tag": "testtag",
|
||||
"labels": "testlabel",
|
||||
"labels-regex": "testlabel-regex",
|
||||
"env": "testenv",
|
||||
"env-regex": "testenv-regex",
|
||||
"gelf-compression-level": "9",
|
||||
|
|
|
@ -90,6 +90,7 @@ func validateLogOpt(cfg map[string]string) error {
|
|||
for key := range cfg {
|
||||
switch key {
|
||||
case "labels":
|
||||
case "labels-regex":
|
||||
case "env":
|
||||
case "env-regex":
|
||||
case "tag":
|
||||
|
|
|
@ -156,6 +156,7 @@ func ValidateLogOpt(cfg map[string]string) error {
|
|||
case "max-size":
|
||||
case "compress":
|
||||
case "labels":
|
||||
case "labels-regex":
|
||||
case "env":
|
||||
case "env-regex":
|
||||
case "tag":
|
||||
|
|
|
@ -277,12 +277,12 @@ func TestJSONFileLoggerWithLabelsEnv(t *testing.T) {
|
|||
}
|
||||
defer os.RemoveAll(tmp)
|
||||
filename := filepath.Join(tmp, "container.log")
|
||||
config := map[string]string{"labels": "rack,dc", "env": "environ,debug,ssl", "env-regex": "^dc"}
|
||||
config := map[string]string{"labels": "rack,dc", "labels-regex": "^loc", "env": "environ,debug,ssl", "env-regex": "^dc"}
|
||||
l, err := New(logger.Info{
|
||||
ContainerID: cid,
|
||||
LogPath: filename,
|
||||
Config: config,
|
||||
ContainerLabels: map[string]string{"rack": "101", "dc": "lhr"},
|
||||
ContainerLabels: map[string]string{"rack": "101", "dc": "lhr", "location": "here"},
|
||||
ContainerEnv: []string{"environ=production", "debug=false", "port=10001", "ssl=true", "dc_region=west"},
|
||||
})
|
||||
if err != nil {
|
||||
|
@ -308,6 +308,7 @@ func TestJSONFileLoggerWithLabelsEnv(t *testing.T) {
|
|||
expected := map[string]string{
|
||||
"rack": "101",
|
||||
"dc": "lhr",
|
||||
"location": "here",
|
||||
"environ": "production",
|
||||
"debug": "false",
|
||||
"ssl": "true",
|
||||
|
|
|
@ -100,6 +100,7 @@ func ValidateLogOpt(cfg map[string]string) error {
|
|||
case "env":
|
||||
case "env-regex":
|
||||
case "labels":
|
||||
case "labels-regex":
|
||||
case "tag":
|
||||
case key:
|
||||
default:
|
||||
|
|
|
@ -41,6 +41,22 @@ func (info *Info) ExtraAttributes(keyMod func(string) string) (map[string]string
|
|||
}
|
||||
}
|
||||
|
||||
labelsRegex, ok := info.Config["labels-regex"]
|
||||
if ok && len(labels) > 0 {
|
||||
re, err := regexp.Compile(labelsRegex)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for k, v := range info.ContainerLabels {
|
||||
if re.MatchString(k) {
|
||||
if keyMod != nil {
|
||||
k = keyMod(k)
|
||||
}
|
||||
extra[k] = v
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
envMapping := make(map[string]string)
|
||||
for _, e := range info.ContainerEnv {
|
||||
if kv := strings.SplitN(e, "=", 2); len(kv) == 2 {
|
||||
|
|
|
@ -44,6 +44,7 @@ const (
|
|||
envKey = "env"
|
||||
envRegexKey = "env-regex"
|
||||
labelsKey = "labels"
|
||||
labelsRegexKey = "labels-regex"
|
||||
tagKey = "tag"
|
||||
)
|
||||
|
||||
|
@ -565,6 +566,7 @@ func ValidateLogOpt(cfg map[string]string) error {
|
|||
case envKey:
|
||||
case envRegexKey:
|
||||
case labelsKey:
|
||||
case labelsRegexKey:
|
||||
case tagKey:
|
||||
default:
|
||||
return fmt.Errorf("unknown log opt '%s' for %s log driver", key, driverName)
|
||||
|
|
|
@ -189,6 +189,7 @@ func ValidateLogOpt(cfg map[string]string) error {
|
|||
case "env":
|
||||
case "env-regex":
|
||||
case "labels":
|
||||
case "labels-regex":
|
||||
case "syslog-address":
|
||||
case "syslog-facility":
|
||||
case "syslog-tls-ca-cert":
|
||||
|
|
|
@ -137,6 +137,7 @@ func TestValidateLogOpt(t *testing.T) {
|
|||
"env": "http://127.0.0.1",
|
||||
"env-regex": "abc",
|
||||
"labels": "labelA",
|
||||
"labels-regex": "def",
|
||||
"syslog-address": "udp://1.2.3.4:1111",
|
||||
"syslog-facility": "daemon",
|
||||
"syslog-tls-ca-cert": "/etc/ca-certificates/custom/ca.pem",
|
||||
|
|
Loading…
Reference in a new issue