From dfafed7f53cc830de6772232cec6486acc535c16 Mon Sep 17 00:00:00 2001 From: m1k1o Date: Sun, 7 Mar 2021 22:04:36 +0100 Subject: [PATCH] slit containers, epr min & max. --- internal/room/containers.go | 41 +++++++++++++++++++++++++++++++++ internal/room/manager.go | 46 ++++++------------------------------- internal/types/room.go | 4 ++-- 3 files changed, 50 insertions(+), 41 deletions(-) create mode 100644 internal/room/containers.go diff --git a/internal/room/containers.go b/internal/room/containers.go new file mode 100644 index 0000000..4795aa2 --- /dev/null +++ b/internal/room/containers.go @@ -0,0 +1,41 @@ +package room + +import ( + "context" + "fmt" + + dockerTypes "github.com/docker/docker/api/types" +) + +func (manager *RoomManagerCtx) listContainers() ([]dockerTypes.Container, error) { + containers, err := manager.client.ContainerList(context.Background(), dockerTypes.ContainerListOptions{}) + if err != nil { + return nil, err + } + + result := []dockerTypes.Container{} + for _, container := range containers { + val, ok := container.Labels["m1k1o.neko_rooms.canary"] + if !ok || val != labelCanary { + continue + } + + result = append(result, container) + } + + return result, nil +} + +func (manager *RoomManagerCtx) inspectContainer(id string) (*dockerTypes.ContainerJSON, error) { + container, _, err := manager.client.ContainerInspectWithRaw(context.Background(), id, false) + if err != nil { + return nil, err + } + + val, ok := container.Config.Labels["m1k1o.neko_rooms.canary"] + if !ok || val != labelCanary { + return nil, fmt.Errorf("This container does not belong to neko_rooms.") + } + + return &container, nil +} diff --git a/internal/room/manager.go b/internal/room/manager.go index 42d734a..526a663 100644 --- a/internal/room/manager.go +++ b/internal/room/manager.go @@ -47,39 +47,6 @@ type RoomManagerCtx struct { client *dockerClient.Client } -func (manager *RoomManagerCtx) listContainers() ([]dockerTypes.Container, error) { - containers, err := manager.client.ContainerList(context.Background(), dockerTypes.ContainerListOptions{}) - if err != nil { - return nil, err - } - - result := []dockerTypes.Container{} - for _, container := range containers { - val, ok := container.Labels["m1k1o.neko_rooms.canary"] - if !ok || val != labelCanary { - continue - } - - result = append(result, container) - } - - return result, nil -} - -func (manager *RoomManagerCtx) inspectContainer(id string) (*dockerTypes.ContainerJSON, error) { - container, _, err := manager.client.ContainerInspectWithRaw(context.Background(), id, false) - if err != nil { - return nil, err - } - - val, ok := container.Config.Labels["m1k1o.neko_rooms.canary"] - if !ok || val != labelCanary { - return nil, fmt.Errorf("This container does not belong to neko_rooms.") - } - - return &container, nil -} - func (manager *RoomManagerCtx) List() ([]types.RoomData, error) { containers, err := manager.listContainers() if err != nil { @@ -98,15 +65,15 @@ func (manager *RoomManagerCtx) List() ([]types.RoomData, error) { func (manager *RoomManagerCtx) Create(settings types.RoomSettings) (*types.RoomData, error) { // configs pathName := "foobar" - eprStart := uint(52135) - eprEnd := uint(52145) + eprMin := uint(52135) + eprMax := uint(52145) portBindings := nat.PortMap{} exposedPorts := nat.PortSet{ nat.Port(fmt.Sprintf("%d/udp", frontendPort)): struct{}{}, } - for port := eprStart; port <= eprEnd; port++ { + for port := eprMin; port <= eprMax; port++ { portKey := nat.Port(fmt.Sprintf("%d/udp", port)) portBindings[portKey] = []nat.PortBinding{ @@ -123,8 +90,9 @@ func (manager *RoomManagerCtx) Create(settings types.RoomSettings) (*types.RoomD labels := map[string]string{ // Set internal labels - "m1k1o.neko_rooms.canary": labelCanary, - "m1k1o.neko_rooms.epr": fmt.Sprintf("%d-%d", eprStart, eprEnd), + "m1k1o.neko_rooms.canary": labelCanary, + "m1k1o.neko_rooms.epr.min": fmt.Sprintf("%d", eprMin), + "m1k1o.neko_rooms.epr.max": fmt.Sprintf("%d", eprMax), // Set traefik labels "traefik.enable": "true", @@ -153,7 +121,7 @@ func (manager *RoomManagerCtx) Create(settings types.RoomSettings) (*types.RoomD // List of environment variable to set in the container Env: append([]string{ fmt.Sprintf("NEKO_BIND=%d", frontendPort), - }, settings.Env(eprStart, eprEnd, manager.config.NAT1To1IPs)...), + }, settings.Env(eprMin, eprMax, manager.config.NAT1To1IPs)...), // Name of the image as it was passed by the operator (e.g. could be symbolic) Image: nekoImage, // List of labels set to this container diff --git a/internal/types/room.go b/internal/types/room.go index 1843877..64b0c17 100644 --- a/internal/types/room.go +++ b/internal/types/room.go @@ -23,9 +23,9 @@ type RoomSettings struct { AudioPipeline string `json:"audio_pipeline"` } -func (settings *RoomSettings) Env(epr_start uint, epr_end uint, nat1to1 []string) []string { +func (settings *RoomSettings) Env(eprMin uint, eprMax uint, nat1to1 []string) []string { env := []string{ - fmt.Sprintf("NEKO_EPR=%d-%d", epr_start, epr_end), + fmt.Sprintf("NEKO_EPR=%d-%d", eprMin, eprMax), fmt.Sprintf("NEKO_NAT1TO1=%s", strings.Join(nat1to1, ",")), fmt.Sprintf("NEKO_PASSWORD=%s", settings.UserPass), fmt.Sprintf("NEKO_PASSWORD_ADMIN=%s", settings.AdminPass),