mirror of
https://github.com/yusing/godoxy.git
synced 2025-07-13 09:24:02 +02:00
Refactoring
This commit is contained in:
parent
17115cfb0b
commit
dc3575c8fd
7 changed files with 42 additions and 42 deletions
2
Makefile
2
Makefile
|
@ -1,6 +1,6 @@
|
||||||
.PHONY: all build up quick-restart restart logs get udp-server
|
.PHONY: all build up quick-restart restart logs get udp-server
|
||||||
|
|
||||||
all: build quick-restart logs
|
all: debug
|
||||||
|
|
||||||
setup:
|
setup:
|
||||||
mkdir -p config certs
|
mkdir -p config certs
|
||||||
|
|
|
@ -3,7 +3,7 @@ package autocert
|
||||||
type CertState int
|
type CertState int
|
||||||
|
|
||||||
const (
|
const (
|
||||||
CertStateValid CertState = 0
|
CertStateValid CertState = iota
|
||||||
CertStateExpired CertState = iota
|
CertStateExpired
|
||||||
CertStateMismatch CertState = iota
|
CertStateMismatch
|
||||||
)
|
)
|
||||||
|
|
|
@ -9,31 +9,11 @@ import (
|
||||||
U "github.com/yusing/go-proxy/utils"
|
U "github.com/yusing/go-proxy/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ProxyProperties struct {
|
|
||||||
DockerHost string `yaml:"-" json:"docker_host"`
|
|
||||||
ContainerName string `yaml:"-" json:"container_name"`
|
|
||||||
ImageName string `yaml:"-" json:"image_name"`
|
|
||||||
PublicPortMapping PortMapping `yaml:"-" json:"public_port_mapping"` // non-zero publicPort:types.Port
|
|
||||||
PrivatePortMapping PortMapping `yaml:"-" json:"private_port_mapping"` // privatePort:types.Port
|
|
||||||
NetworkMode string `yaml:"-" json:"network_mode"`
|
|
||||||
|
|
||||||
Aliases []string `yaml:"-" json:"aliases"`
|
|
||||||
IsExcluded bool `yaml:"-" json:"is_excluded"`
|
|
||||||
IdleTimeout string `yaml:"-" json:"idle_timeout"`
|
|
||||||
WakeTimeout string `yaml:"-" json:"wake_timeout"`
|
|
||||||
StopMethod string `yaml:"-" json:"stop_method"`
|
|
||||||
StopTimeout string `yaml:"-" json:"stop_timeout"` // stop_method = "stop" only
|
|
||||||
StopSignal string `yaml:"-" json:"stop_signal"` // stop_method = "stop" | "kill" only
|
|
||||||
Running bool `yaml:"-" json:"running"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type Container struct {
|
type Container struct {
|
||||||
*types.Container
|
*types.Container
|
||||||
*ProxyProperties
|
*ProxyProperties
|
||||||
}
|
}
|
||||||
|
|
||||||
type PortMapping = map[string]types.Port
|
|
||||||
|
|
||||||
func FromDocker(c *types.Container, dockerHost string) (res Container) {
|
func FromDocker(c *types.Container, dockerHost string) (res Container) {
|
||||||
res.Container = c
|
res.Container = c
|
||||||
res.ProxyProperties = &ProxyProperties{
|
res.ProxyProperties = &ProxyProperties{
|
||||||
|
@ -119,9 +99,6 @@ func (c Container) getPublicPortMapping() PortMapping {
|
||||||
func (c Container) getPrivatePortMapping() PortMapping {
|
func (c Container) getPrivatePortMapping() PortMapping {
|
||||||
res := make(PortMapping)
|
res := make(PortMapping)
|
||||||
for _, v := range c.Ports {
|
for _, v := range c.Ports {
|
||||||
if v.PublicPort == 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
res[fmt.Sprint(v.PrivatePort)] = v
|
res[fmt.Sprint(v.PrivatePort)] = v
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
|
|
22
src/docker/proxy_properties.go
Normal file
22
src/docker/proxy_properties.go
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
package docker
|
||||||
|
|
||||||
|
import "github.com/docker/docker/api/types"
|
||||||
|
|
||||||
|
type PortMapping = map[string]types.Port
|
||||||
|
type ProxyProperties struct {
|
||||||
|
DockerHost string `yaml:"-" json:"docker_host"`
|
||||||
|
ContainerName string `yaml:"-" json:"container_name"`
|
||||||
|
ImageName string `yaml:"-" json:"image_name"`
|
||||||
|
PublicPortMapping PortMapping `yaml:"-" json:"public_port_mapping"` // non-zero publicPort:types.Port
|
||||||
|
PrivatePortMapping PortMapping `yaml:"-" json:"private_port_mapping"` // privatePort:types.Port
|
||||||
|
NetworkMode string `yaml:"-" json:"network_mode"`
|
||||||
|
|
||||||
|
Aliases []string `yaml:"-" json:"aliases"`
|
||||||
|
IsExcluded bool `yaml:"-" json:"is_excluded"`
|
||||||
|
IdleTimeout string `yaml:"-" json:"idle_timeout"`
|
||||||
|
WakeTimeout string `yaml:"-" json:"wake_timeout"`
|
||||||
|
StopMethod string `yaml:"-" json:"stop_method"`
|
||||||
|
StopTimeout string `yaml:"-" json:"stop_timeout"` // stop_method = "stop" only
|
||||||
|
StopSignal string `yaml:"-" json:"stop_signal"` // stop_method = "stop" | "kill" only
|
||||||
|
Running bool `yaml:"-" json:"running"`
|
||||||
|
}
|
|
@ -139,17 +139,18 @@ func (p *DockerProvider) entriesFromContainerLabels(container D.Container) (M.Ra
|
||||||
|
|
||||||
// selecting correct host port
|
// selecting correct host port
|
||||||
replacePrivPorts := func() {
|
replacePrivPorts := func() {
|
||||||
if container.HostConfig.NetworkMode != "host" {
|
if container.HostConfig.NetworkMode == "host" {
|
||||||
entries.RangeAll(func(_ string, entry *M.RawEntry) {
|
return
|
||||||
entryPortSplit := strings.Split(entry.Port, ":")
|
|
||||||
n := len(entryPortSplit)
|
|
||||||
// if the port matches the proxy port, replace it with the public port
|
|
||||||
if p, ok := container.PrivatePortMapping[entryPortSplit[n-1]]; ok {
|
|
||||||
entryPortSplit[n-1] = fmt.Sprint(p.PublicPort)
|
|
||||||
entry.Port = strings.Join(entryPortSplit, ":")
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
entries.RangeAll(func(_ string, entry *M.RawEntry) {
|
||||||
|
entryPortSplit := strings.Split(entry.Port, ":")
|
||||||
|
n := len(entryPortSplit)
|
||||||
|
// if the port matches the proxy port, replace it with the public port
|
||||||
|
if p, ok := container.PrivatePortMapping[entryPortSplit[n-1]]; ok {
|
||||||
|
entryPortSplit[n-1] = fmt.Sprint(p.PublicPort)
|
||||||
|
entry.Port = strings.Join(entryPortSplit, ":")
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
replacePrivPorts()
|
replacePrivPorts()
|
||||||
|
|
||||||
|
|
|
@ -264,6 +264,7 @@ func TestImplicitExcludeNoExposedPort(t *testing.T) {
|
||||||
Ports: []types.Port{
|
Ports: []types.Port{
|
||||||
{Type: "tcp", PrivatePort: 6379, PublicPort: 0}, // not exposed
|
{Type: "tcp", PrivatePort: 6379, PublicPort: 0}, // not exposed
|
||||||
},
|
},
|
||||||
|
State: "running",
|
||||||
}, ""))
|
}, ""))
|
||||||
ExpectNoError(t, err.Error())
|
ExpectNoError(t, err.Error())
|
||||||
|
|
||||||
|
@ -271,7 +272,7 @@ func TestImplicitExcludeNoExposedPort(t *testing.T) {
|
||||||
ExpectFalse(t, ok)
|
ExpectFalse(t, ok)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestExcludeNonExposedPort(t *testing.T) {
|
func TestNotExcludeSpecifiedPort(t *testing.T) {
|
||||||
var p DockerProvider
|
var p DockerProvider
|
||||||
entries, err := p.entriesFromContainerLabels(D.FromDocker(&types.Container{
|
entries, err := p.entriesFromContainerLabels(D.FromDocker(&types.Container{
|
||||||
Image: "redis",
|
Image: "redis",
|
||||||
|
@ -280,13 +281,13 @@ func TestExcludeNonExposedPort(t *testing.T) {
|
||||||
{Type: "tcp", PrivatePort: 6379, PublicPort: 0}, // not exposed
|
{Type: "tcp", PrivatePort: 6379, PublicPort: 0}, // not exposed
|
||||||
},
|
},
|
||||||
Labels: map[string]string{
|
Labels: map[string]string{
|
||||||
"proxy.redis.port": "6379:6379", // should be excluded even specified
|
"proxy.redis.port": "6379:6379", // but specified in label
|
||||||
},
|
},
|
||||||
}, ""))
|
}, ""))
|
||||||
ExpectNoError(t, err.Error())
|
ExpectNoError(t, err.Error())
|
||||||
|
|
||||||
_, ok := entries.Load("redis")
|
_, ok := entries.Load("redis")
|
||||||
ExpectFalse(t, ok)
|
ExpectTrue(t, ok)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestNotExcludeNonExposedPortHostNetwork(t *testing.T) {
|
func TestNotExcludeNonExposedPortHostNetwork(t *testing.T) {
|
||||||
|
@ -298,7 +299,7 @@ func TestNotExcludeNonExposedPortHostNetwork(t *testing.T) {
|
||||||
{Type: "tcp", PrivatePort: 6379, PublicPort: 0}, // not exposed
|
{Type: "tcp", PrivatePort: 6379, PublicPort: 0}, // not exposed
|
||||||
},
|
},
|
||||||
Labels: map[string]string{
|
Labels: map[string]string{
|
||||||
"proxy.redis.port": "6379:6379", // should be excluded even specified
|
"proxy.redis.port": "6379:6379",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
cont.HostConfig.NetworkMode = "host"
|
cont.HostConfig.NetworkMode = "host"
|
||||||
|
|
|
@ -100,7 +100,6 @@ func Serialize(data any) (SerializedObject, E.NestedError) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
// return nil, fmt.Errorf("unsupported type: %s", value.Kind())
|
|
||||||
return nil, E.Unsupported("type", value.Kind())
|
return nil, E.Unsupported("type", value.Kind())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue