feat: use ports-clear plugn trigger to manage clearing the port map

This removes any access to the underlying implementation for port map clearing, which will make it easier to refactor the actual clearing.
This commit is contained in:
Jose Diaz-Gonzalez
2023-07-08 15:13:17 -04:00
parent fb9d77878d
commit 1431724b85
12 changed files with 45 additions and 8 deletions

View File

@@ -29,7 +29,7 @@ Dokku will only select the `dockerfile` builder if both the `herokuish` and `pac
If an application was previously deployed via buildpacks, the following commands should be run before a Dockerfile deploy will succeed:
```shell
dokku config:unset --no-restart node-js-app DOKKU_PROXY_PORT_MAP
dokku proxy:clear node-js-app
```
### Changing the `Dockerfile` location

View File

@@ -301,7 +301,7 @@ false
If an application was previously deployed via Dockerfile, the following commands should be run before a buildpack deploy will succeed:
```shell
dokku config:unset --no-restart node-js-app DOKKU_PROXY_PORT_MAP
dokku ports:clear node-js-app
```
### Using a specific buildpack version

View File

@@ -1242,12 +1242,32 @@ nginx -t
```
### `ports-get`
- Description: Returns a list of port mappings, newline delimited
- Invoked by: Various networking plugins
- Arguments `$APP`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
# TODO
```
### `ports-clear`
- Description: Clears the ports for a given app without triggering further restarts or rebuilds
- Invoked by: internally
- Arguments: `$APP`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
# TODO
```

View File

@@ -0,0 +1 @@
hook

View File

@@ -10,7 +10,8 @@ trigger-nginx-vhosts-pre-disable-vhost() {
declare APP="$1"
if [[ "$(plugn trigger proxy-type "$APP")" == "nginx" ]]; then
DOKKU_QUIET_OUTPUT=1 config_unset --no-restart "$APP" DOKKU_PROXY_PORT DOKKU_PROXY_SSL_PORT DOKKU_PROXY_PORT_MAP
DOKKU_QUIET_OUTPUT=1 config_unset --no-restart "$APP" DOKKU_PROXY_PORT DOKKU_PROXY_SSL_PORT
plugn trigger ports-clear "$APP"
fi
}

View File

@@ -10,7 +10,8 @@ trigger-nginx-vhosts-pre-enable-vhost() {
declare APP="$1"
if [[ "$(plugn trigger proxy-type "$APP")" == "nginx" ]]; then
DOKKU_QUIET_OUTPUT=1 config_unset --no-restart "$APP" DOKKU_PROXY_PORT DOKKU_PROXY_SSL_PORT DOKKU_PROXY_PORT_MAP
DOKKU_QUIET_OUTPUT=1 config_unset --no-restart "$APP" DOKKU_PROXY_PORT DOKKU_PROXY_SSL_PORT
plugn trigger ports-clear "$APP"
fi
}

View File

@@ -3,5 +3,6 @@
/triggers/*
/triggers
/install
/ports-*
/post-*
/report

View File

@@ -1,5 +1,5 @@
SUBCOMMANDS = subcommands/list subcommands/add subcommands/clear subcommands/remove subcommands/set subcommands/report
TRIGGERS = triggers/ports-get triggers/post-certs-remove triggers/post-certs-update triggers/report
TRIGGERS = triggers/ports-clear triggers/ports-get triggers/post-certs-remove triggers/post-certs-update triggers/report
BUILD = commands subcommands triggers
PLUGIN_NAME = ports

View File

@@ -20,6 +20,13 @@ func addPortMaps(appName string, portMaps []PortMap) error {
return setPortMaps(appName, allPortMaps)
}
func clearPorts(appName string) error {
return common.EnvWrap(func() error {
keys := []string{"DOKKU_PROXY_PORT_MAP"}
return config.UnsetMany(appName, keys, false)
}, map[string]string{"DOKKU_QUIET_OUTPUT": "1"})
}
func filterAppPortMaps(appName string, scheme string, hostPort int) []PortMap {
var filteredPortMaps []PortMap
for _, portMap := range getPortMaps(appName) {

View File

@@ -21,6 +21,9 @@ func main() {
case "ports-get":
appName := flag.Arg(0)
err = ports.TriggerPortsGet(appName)
case "ports-clear":
appName := flag.Arg(0)
err = ports.TriggerPortsClear(appName)
case "post-certs-remove":
appName := flag.Arg(0)
err = ports.TriggerPostCertsRemove(appName)

View File

@@ -5,7 +5,6 @@ import (
"strings"
"github.com/dokku/dokku/plugins/common"
"github.com/dokku/dokku/plugins/config"
)
// CommandList is a cmd wrapper to list port mappings for an app
@@ -45,8 +44,7 @@ func CommandClear(appName string) error {
return err
}
keys := []string{"DOKKU_PROXY_PORT_MAP"}
if err := config.UnsetMany(appName, keys, false); err != nil {
if err := clearPorts(appName); err != nil {
return err
}

View File

@@ -19,6 +19,11 @@ func TriggerPortsGet(appName string) error {
return nil
}
// TriggerPortsClear removes all ports for the specified app
func TriggerPortsClear(appName string) error {
return clearPorts(appName)
}
// TriggerPostCertsRemove unsets port config vars after SSL cert is added
func TriggerPostCertsRemove(appName string) error {
keys := []string{"DOKKU_PROXY_SSL_PORT"}