这是indexloc提供的服务,不要输入任何密码
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions docs/networking/proxy-management.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

```
proxy:build-config [--parallel count] [--all|<app>] # (Re)builds config for given app
proxy:clear-config [--all|<app>] # Clears config for given app
proxy:disable [--parallel count] [--all|<app>] # Disable proxy for app
proxy:enable [--parallel count] [--all|<app>] # Enable proxy for app
proxy:report [<app>] [<flag>] # Displays a proxy report for one or more apps
Expand Down Expand Up @@ -40,6 +41,24 @@ Finally, the number of parallel workers may be automatically set to the number o
dokku proxy:build-config --all --parallel -1
```

### Clearing the generated proxy config

> New as of 0.27.0

Generated proxy configurations can also be cleared using the `proxy:clear-config` command.

```shell
dokku proxy:clear-config node-js-app
```

All apps may have their proxy config cleared by using the `--all` flag.

```shell
dokku proxy:clear-config --all
```

Clearing a proxy configuration has different effects depending on the proxy plugin in use. Consul the documentation for your proxy implementation for further details.

### Displaying proxy reports for an app

> New as of 0.8.1
Expand Down
23 changes: 20 additions & 3 deletions plugins/nginx-vhosts/proxy-clear-config
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,8 @@ set -eo pipefail
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_AVAILABLE_PATH/nginx-vhosts/internal-functions"

trigger-nginx-vhosts-proxy-clear-config() {
declare desc="clear nginx config for proxy app containers from command line"
declare trigger="proxy-clear-config"
fn-trigger-nginx-vhosts-proxy-clear-config-app() {
declare desc="clears the proxy config for a single app"
declare APP="$1"

[[ -z "$APP" ]] && dokku_log_fail "Please specify an app to run the command on"
Expand All @@ -16,4 +15,22 @@ trigger-nginx-vhosts-proxy-clear-config() {
fi
}

trigger-nginx-vhosts-proxy-clear-config() {
declare desc="clear nginx config for proxy app containers from command line"
declare trigger="proxy-clear-config"
declare APP="$1"

if [[ "$APP" == "--all" ]]; then
exit_code="0"
for app in $(dokku_apps); do
if ! fn-trigger-nginx-vhosts-proxy-clear-config-app "$app"; then
exit_code="$?"
fi
done
return "$exit_code"
fi

fn-trigger-nginx-vhosts-proxy-clear-config-app "$APP"
}

trigger-nginx-vhosts-proxy-clear-config "$@"
2 changes: 1 addition & 1 deletion plugins/proxy/Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
SUBCOMMANDS = subcommands/build-config subcommands/disable subcommands/enable subcommands/ports subcommands/ports-add subcommands/ports-clear subcommands/ports-remove subcommands/ports-set subcommands/report subcommands/set
SUBCOMMANDS = subcommands/build-config subcommands/clear-config subcommands/disable subcommands/enable subcommands/ports subcommands/ports-add subcommands/ports-clear subcommands/ports-remove subcommands/ports-set subcommands/report subcommands/set
TRIGGERS = triggers/proxy-is-enabled triggers/proxy-type triggers/post-certs-remove triggers/post-certs-update triggers/report
BUILD = commands subcommands triggers
PLUGIN_NAME = proxy
Expand Down
5 changes: 5 additions & 0 deletions plugins/proxy/proxy.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ func BuildConfig(appName string) error {
return common.PlugnTrigger("proxy-build-config", []string{appName}...)
}

// ClearConfig clears the proxy config for the specified app
func ClearConfig(appName string) error {
return common.PlugnTrigger("proxy-clear-config", []string{appName}...)
}

// Disable disables proxy implementations for the specified app
func Disable(appName string) error {
if !IsAppProxyEnabled(appName) {
Expand Down
3 changes: 2 additions & 1 deletion plugins/proxy/src/commands/commands.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ Manage the proxy integration for an app
Additional commands:`

helpContent = `
proxy:build-config <app>, (Re)builds config for a given app
proxy:build-config [--parallel count] [--all|<app>], (Re)builds config for a given app
proxy:clear-config [--all|<app>], Clears config for a given app
proxy:disable <app>, Disable proxy for app
proxy:enable <app>, Enable proxy for app
proxy:ports <app>, List proxy port mappings for app
Expand Down
6 changes: 6 additions & 0 deletions plugins/proxy/src/subcommands/subcommands.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@ func main() {
args.Parse(os.Args[2:])
appName := args.Arg(0)
err = proxy.CommandBuildConfig(appName, *allApps, *parallelCount)
case "clear-config":
args := flag.NewFlagSet("proxy:clear-config", flag.ExitOnError)
allApps := args.Bool("all", false, "--all: build-config for all apps")
args.Parse(os.Args[2:])
appName := args.Arg(0)
err = proxy.CommandClearConfig(appName, *allApps)
case "disable":
args := flag.NewFlagSet("proxy:disable", flag.ExitOnError)
allApps := args.Bool("all", false, "--all: disable proxy for all apps")
Expand Down
13 changes: 13 additions & 0 deletions plugins/proxy/subcommands.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,19 @@ func CommandBuildConfig(appName string, allApps bool, parallelCount int) error {
return BuildConfig(appName)
}

// CommandClearConfig clears config for a given app
func CommandClearConfig(appName string, allApps bool) error {
if allApps {
return ClearConfig("--all")
}

if err := common.VerifyAppName(appName); err != nil {
return err
}

return ClearConfig(appName)
}

// CommandDisable disables the proxy for app via command line
func CommandDisable(appName string, allApps bool, parallelCount int) error {
if allApps {
Expand Down
12 changes: 2 additions & 10 deletions plugins/ps/functions.go
Original file line number Diff line number Diff line change
Expand Up @@ -218,16 +218,8 @@ func removeProcfile(appName string) error {
}

func restorePrep() error {
apps, err := common.DokkuApps()
if err != nil {
common.LogWarn(err.Error())
return nil
}

for _, appName := range apps {
if err := common.PlugnTrigger("proxy-clear-config", []string{appName}...); err != nil {
return fmt.Errorf("Error clearing proxy config: %s", err)
}
if err := common.PlugnTrigger("proxy-clear-config", []string{"--all"}...); err != nil {
return fmt.Errorf("Error clearing proxy config: %s", err)
}

return nil
Expand Down
2 changes: 1 addition & 1 deletion plugins/ps/ps.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ func Restore(appName string) error {

common.LogInfo1("Clearing potentially invalid proxy configuration")
if err := common.PlugnTrigger("proxy-clear-config", []string{appName}...); err != nil {
return fmt.Errorf("Error clearing proxy config: %s", err)
common.LogWarn(fmt.Sprintf("Error clearing proxy config: %s", err))
}

if !common.IsDeployed(appName) {
Expand Down
62 changes: 62 additions & 0 deletions tests/unit/proxy.bats
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,68 @@ teardown() {
assert_output "$help_output"
}

@test "(proxy) proxy:build-config/clear-config" {
run deploy_app
echo "output: $output"
echo "status: $status"
assert_success

run /bin/bash -c "test -f $DOKKU_ROOT/$TEST_APP/nginx.conf"
echo "output: $output"
echo "status: $status"
assert_success

run /bin/bash -c "rm -f $DOKKU_ROOT/$TEST_APP/nginx.conf"
echo "output: $output"
echo "status: $status"
assert_success

run /bin/bash -c "test -f $DOKKU_ROOT/$TEST_APP/nginx.conf"
echo "output: $output"
echo "status: $status"
assert_failure

run /bin/bash -c "dokku proxy:build-config $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success

run /bin/bash -c "test -f $DOKKU_ROOT/$TEST_APP/nginx.conf"
echo "output: $output"
echo "status: $status"
assert_success

run /bin/bash -c "dokku proxy:clear-config $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success

run /bin/bash -c "test -f $DOKKU_ROOT/$TEST_APP/nginx.conf"
echo "output: $output"
echo "status: $status"
assert_failure

run /bin/bash -c "dokku proxy:build-config $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success

run /bin/bash -c "test -f $DOKKU_ROOT/$TEST_APP/nginx.conf"
echo "output: $output"
echo "status: $status"
assert_success

run /bin/bash -c "dokku proxy:clear-config --all"
echo "output: $output"
echo "status: $status"
assert_success

run /bin/bash -c "test -f $DOKKU_ROOT/$TEST_APP/nginx.conf"
echo "output: $output"
echo "status: $status"
assert_failure
}

@test "(proxy) proxy:enable/disable" {
deploy_app
assert_nonssl_domain "${TEST_APP}.dokku.me"
Expand Down