这是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
48 changes: 0 additions & 48 deletions plugins/apps/functions.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package apps

import (
"bytes"
"errors"
"fmt"
"os"
Expand Down Expand Up @@ -95,53 +94,6 @@ func destroyApp(appName string) error {
return nil
}

func listImagesByAppLabel(appName string) ([]string, error) {
command := []string{
common.DockerBin(),
"image",
"list",
"--quiet",
"--filter",
fmt.Sprintf("label=com.dokku.app-name=%v", appName),
}

var stderr bytes.Buffer
listCmd := common.NewShellCmd(strings.Join(command, " "))
listCmd.ShowOutput = false
listCmd.Command.Stderr = &stderr
b, err := listCmd.Output()

if err != nil {
return []string{}, errors.New(strings.TrimSpace(stderr.String()))
}

output := strings.Split(strings.TrimSpace(string(b[:])), "\n")
return output, nil
}

func listImagesByImageRepo(imageRepo string) ([]string, error) {
command := []string{
common.DockerBin(),
"image",
"list",
"--quiet",
imageRepo,
}

var stderr bytes.Buffer
listCmd := common.NewShellCmd(strings.Join(command, " "))
listCmd.ShowOutput = false
listCmd.Command.Stderr = &stderr
b, err := listCmd.Output()

if err != nil {
return []string{}, errors.New(strings.TrimSpace(stderr.String()))
}

output := strings.Split(strings.TrimSpace(string(b[:])), "\n")
return output, nil
}

// creates an app if allowed
func maybeCreateApp(appName string) error {
if err := appExists(appName); err == nil {
Expand Down
14 changes: 0 additions & 14 deletions plugins/apps/triggers.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,19 +101,5 @@ func TriggerPostDelete(appName string) error {
common.LogWarn(err.Error())
}

imagesByAppLabel, err := listImagesByAppLabel(appName)
if err != nil {
common.LogWarn(err.Error())
}

imageRepo := common.GetAppImageRepo(appName)
imagesByRepo, err := listImagesByImageRepo(imageRepo)
if err != nil {
common.LogWarn(err.Error())
}

images := append(imagesByAppLabel, imagesByRepo...)
common.RemoveImages(images)

return nil
}
53 changes: 53 additions & 0 deletions plugins/builder/functions.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,64 @@
package builder

import (
"bytes"
"errors"
"fmt"
"io/ioutil"
"os"
"path"
"strings"

"github.com/dokku/dokku/plugins/common"
)

func listImagesByAppLabel(appName string) ([]string, error) {
command := []string{
common.DockerBin(),
"image",
"list",
"--quiet",
"--filter",
fmt.Sprintf("label=com.dokku.app-name=%v", appName),
}

var stderr bytes.Buffer
listCmd := common.NewShellCmd(strings.Join(command, " "))
listCmd.ShowOutput = false
listCmd.Command.Stderr = &stderr
b, err := listCmd.Output()

if err != nil {
return []string{}, errors.New(strings.TrimSpace(stderr.String()))
}

output := strings.Split(strings.TrimSpace(string(b[:])), "\n")
return output, nil
}

func listImagesByImageRepo(imageRepo string) ([]string, error) {
command := []string{
common.DockerBin(),
"image",
"list",
"--quiet",
imageRepo,
}

var stderr bytes.Buffer
listCmd := common.NewShellCmd(strings.Join(command, " "))
listCmd.ShowOutput = false
listCmd.Command.Stderr = &stderr
b, err := listCmd.Output()

if err != nil {
return []string{}, errors.New(strings.TrimSpace(stderr.String()))
}

output := strings.Split(strings.TrimSpace(string(b[:])), "\n")
return output, nil
}

func removeAllContents(basePath string) error {
dir, err := ioutil.ReadDir(basePath)
if err != nil {
Expand Down
20 changes: 19 additions & 1 deletion plugins/builder/triggers.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,5 +129,23 @@ func TriggerPostAppRenameSetup(oldAppName string, newAppName string) error {

// TriggerPostDelete destroys the builder property for a given app container
func TriggerPostDelete(appName string) error {
return common.PropertyDestroy("builder", appName)
if err := common.PropertyDestroy("builder", appName); err != nil {
return err
}

imagesByAppLabel, err := listImagesByAppLabel(appName)
if err != nil {
common.LogWarn(err.Error())
}

imageRepo := common.GetAppImageRepo(appName)
imagesByRepo, err := listImagesByImageRepo(imageRepo)
if err != nil {
common.LogWarn(err.Error())
}

images := append(imagesByAppLabel, imagesByRepo...)
common.RemoveImages(images)

return nil
}
4 changes: 4 additions & 0 deletions plugins/common/docker.go
Original file line number Diff line number Diff line change
Expand Up @@ -329,6 +329,10 @@ func ListDanglingImages(appName string) ([]string, error) {

// RemoveImages removes images by ID
func RemoveImages(imageIDs []string) {
if len(imageIDs) == 0 {
return
}

command := []string{
DockerBin(),
"image",
Expand Down
18 changes: 2 additions & 16 deletions plugins/scheduler-docker-local/post-delete
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,9 @@ trigger-scheduler-docker-local-post-delete() {
fn-plugin-property-destroy "scheduler-docker-local" "$APP"
rm -rf "${DOKKU_LIB_ROOT}/data/scheduler-docker-local/$APP"

local DOKKU_SCHEDULER=$(get_app_scheduler "$APP")
if [[ "$DOKKU_SCHEDULER" != "docker-local" ]]; then
return
fi

local IMAGE_REPO=$(get_app_image_repo "$APP")

# remove all application containers & images
# shellcheck disable=SC2046
local DOKKU_APP_CIDS=$("$DOCKER_BIN" container list --all --no-trunc | grep "dokku/${APP}:" | awk '{ print $1 }' | xargs)
if [[ -n "$DOKKU_APP_CIDS" ]]; then
# shellcheck disable=SC2086
"$DOCKER_BIN" container rm --force $DOKKU_APP_CIDS >/dev/null 2>&1 || true
fi

# remove all application containers
# shellcheck disable=SC2046
"$DOCKER_BIN" image remove $("$DOCKER_BIN" image list --quiet "$IMAGE_REPO" | xargs) &>/dev/null || true
"$DOCKER_BIN" container ls --filter "label=com.dokku.app-name=${APP}" -q | xargs -n1 -I {} "$DOCKER_BIN" container rm --force {} &>/dev/null || true
}

trigger-scheduler-docker-local-post-delete "$@"