From be7a766cb216448d0b5651f38f7ca2ab809328e0 Mon Sep 17 00:00:00 2001 From: yusing Date: Tue, 17 Sep 2024 17:56:41 +0800 Subject: [PATCH] v0.5.0-rc5: added proxy.exclude label, refactored some code --- docs/docker.md | 1 + src/autocert/provider.go | 2 +- src/common/env.go | 10 +++------- src/docker/label_parser.go | 1 - src/proxy/provider/constants.go | 3 --- src/proxy/provider/docker_provider.go | 13 +++++++++++-- src/utils/format.go | 17 +++++++++++++---- src/utils/schema.go | 8 ++------ 8 files changed, 31 insertions(+), 24 deletions(-) delete mode 100644 src/proxy/provider/constants.go diff --git a/docs/docker.md b/docs/docker.md index d2d8c37..0a60347 100644 --- a/docs/docker.md +++ b/docs/docker.md @@ -88,6 +88,7 @@ | Label | Description | Default | | ----------------------- | -------------------------------------------------------- | ---------------- | | `proxy.aliases` | comma separated aliases for subdomain and label matching | `container_name` | +| `proxy.exclude` | to be excluded from `go-proxy` | false | | `proxy..` | set field for specific alias | N/A | | `proxy.*.` | set field for all aliases | N/A | diff --git a/src/autocert/provider.go b/src/autocert/provider.go index ab0bc6b..96c38a2 100644 --- a/src/autocert/provider.go +++ b/src/autocert/provider.go @@ -114,7 +114,7 @@ func (p *Provider) LoadCert() E.NestedError { p.tlsCert = &cert p.certExpiries = expiries - logger.Infof("next renewal in %v", time.Until(p.ShouldRenewOn())) + logger.Infof("next renewal in %v", U.FormatDuration(time.Until(p.ShouldRenewOn()))) return p.renewIfNeeded() } diff --git a/src/common/env.go b/src/common/env.go index ac5f8e2..91cad55 100644 --- a/src/common/env.go +++ b/src/common/env.go @@ -2,17 +2,13 @@ package common import ( "os" - "strings" + + U "github.com/yusing/go-proxy/utils" ) var NoSchemaValidation = getEnvBool("GOPROXY_NO_SCHEMA_VALIDATION") var IsDebug = getEnvBool("GOPROXY_DEBUG") func getEnvBool(key string) bool { - switch strings.ToLower(os.Getenv(key)) { - case "1", "true", "yes", "on": - return true - default: - return false - } + return U.ParseBool(os.Getenv(key)) } diff --git a/src/docker/label_parser.go b/src/docker/label_parser.go index cb490db..1d34d05 100644 --- a/src/docker/label_parser.go +++ b/src/docker/label_parser.go @@ -60,7 +60,6 @@ const NSProxy = "proxy" var _ = func() int { RegisterNamespace(NSProxy, ValueParserMap{ - "aliases": commaSepParser, "path_patterns": yamlListParser, "set_headers": yamlStringMappingParser, "hide_headers": yamlListParser, diff --git a/src/proxy/provider/constants.go b/src/proxy/provider/constants.go deleted file mode 100644 index 2aade0d..0000000 --- a/src/proxy/provider/constants.go +++ /dev/null @@ -1,3 +0,0 @@ -package provider - -const wildcardAlias = "*" diff --git a/src/proxy/provider/docker_provider.go b/src/proxy/provider/docker_provider.go index 8893e65..2fada9b 100755 --- a/src/proxy/provider/docker_provider.go +++ b/src/proxy/provider/docker_provider.go @@ -10,6 +10,7 @@ import ( E "github.com/yusing/go-proxy/error" M "github.com/yusing/go-proxy/models" PT "github.com/yusing/go-proxy/proxy/fields" + U "github.com/yusing/go-proxy/utils" W "github.com/yusing/go-proxy/watcher" ) @@ -72,6 +73,12 @@ func (p *DockerProvider) getEntriesFromLabels(container *types.Container, client var mainAlias string var aliases PT.Aliases + if exclude, ok := container.Labels[D.NSProxy+".exclude"]; ok { + if U.ParseBool(exclude) { + return M.NewProxyEntries(), E.Nil() + } + } + // set mainAlias to docker compose service name if available if serviceName, ok := container.Labels["com.docker.compose.service"]; ok { mainAlias = serviceName @@ -84,9 +91,9 @@ func (p *DockerProvider) getEntriesFromLabels(container *types.Container, client mainAlias = containerName } - if l, ok := container.Labels["proxy.aliases"]; ok { + if l, ok := container.Labels[D.NSProxy+".aliases"]; ok { aliases = PT.NewAliases(l) - delete(container.Labels, "proxy.aliases") + delete(container.Labels, D.NSProxy+"proxy.aliases") } else { aliases = PT.NewAliases(mainAlias) } @@ -157,3 +164,5 @@ func findFirstPort(c *types.Container) (string, E.NestedError) { } return "", E.Failure("findFirstPort") } + +const wildcardAlias = "*" diff --git a/src/utils/format.go b/src/utils/format.go index e83115f..eaf9cc6 100644 --- a/src/utils/format.go +++ b/src/utils/format.go @@ -20,16 +20,16 @@ func FormatDuration(d time.Duration) string { var parts []string if days > 0 { - parts = append(parts, fmt.Sprintf("%d Day%s", days, pluralize(days))) + parts = append(parts, fmt.Sprintf("%d day%s", days, pluralize(days))) } if hours > 0 { - parts = append(parts, fmt.Sprintf("%d Hour%s", hours, pluralize(hours))) + parts = append(parts, fmt.Sprintf("%d hour%s", hours, pluralize(hours))) } if minutes > 0 { - parts = append(parts, fmt.Sprintf("%d Minute%s", minutes, pluralize(minutes))) + parts = append(parts, fmt.Sprintf("%d minute%s", minutes, pluralize(minutes))) } if seconds > 0 { - parts = append(parts, fmt.Sprintf("%d Second%s", seconds, pluralize(seconds))) + parts = append(parts, fmt.Sprintf("%d second%s", seconds, pluralize(seconds))) } // Join the parts with appropriate connectors @@ -42,6 +42,15 @@ func FormatDuration(d time.Duration) string { return strings.Join(parts[:len(parts)-1], ", ") + " and " + parts[len(parts)-1] } +func ParseBool(s string) bool { + switch strings.ToLower(s) { + case "1", "true", "yes", "on": + return true + default: + return false + } +} + func pluralize(n int64) string { if n > 1 { return "s" diff --git a/src/utils/schema.go b/src/utils/schema.go index b241590..79a1fa9 100644 --- a/src/utils/schema.go +++ b/src/utils/schema.go @@ -2,7 +2,6 @@ package utils import ( "github.com/santhosh-tekuri/jsonschema" - "github.com/yusing/go-proxy/common" ) var schemaCompiler = func() *jsonschema.Compiler { @@ -11,16 +10,13 @@ var schemaCompiler = func() *jsonschema.Compiler { return c }() -var schemaStorage = make(map[string] *jsonschema.Schema) +var schemaStorage = make(map[string]*jsonschema.Schema) func GetSchema(path string) *jsonschema.Schema { - if common.NoSchemaValidation { - panic("bug: GetSchema called when schema validation disabled") - } if schema, ok := schemaStorage[path]; ok { return schema } schema := schemaCompiler.MustCompile(path) schemaStorage[path] = schema return schema -} \ No newline at end of file +}