From 3dccf814e854e05c56ee8957b15a83addc370bbf Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Tue, 5 Jul 2016 02:34:13 -0400 Subject: [PATCH] Add deployed-app-image-repo plugin hook This hook will allow users to modify the repo in use for deployed applications. An example use case would be one where the image being deployed is from a remote docker registry where the `dokku` username is taken and the app will be deployed from a separate username. --- docs/development/plugin-triggers.md | 19 ++++++++++++++++++- plugins/20_events/deployed-app-image-repo | 1 + plugins/common/functions | 14 ++++++++++++-- 3 files changed, 31 insertions(+), 3 deletions(-) create mode 120000 plugins/20_events/deployed-app-image-repo diff --git a/docs/development/plugin-triggers.md b/docs/development/plugin-triggers.md index c70074fe2..04014609a 100644 --- a/docs/development/plugin-triggers.md +++ b/docs/development/plugin-triggers.md @@ -177,6 +177,23 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x echo 'not-latest' ``` +### `deployed-app-image-repo` + +- Description: Used to manage the full repo of the image being deployed. Useful for deploying from an external registry where the repository name is not `dokku/$APP` +- Invoked by: `internal function dokku_deploy_cmd() (deploy phase)` +- Arguments: `$APP` +- Example: + +```shell +#!/usr/bin/env bash + +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x + +APP="$1" +# change the repo from dokku/APP to dokkupaas/APP +echo "dokkupaas/$APP" +``` + ### `deployed-app-repository` - Description: Used to manage the remote repository of the image being deployed. @@ -211,7 +228,7 @@ cache-bust-build-arg() { local APP="$1" IMAGE_SOURCE_TYPE="$2" local output="" - if [[ "$IMAGE_SOURCE_TYPE" == "dockerfile" ]]; then + if [[ "$IMAGE_SOURCE_TYPE" == "dockerfile" ]]; then output=" --build-arg CACHEBUST=$(date +%s)" fi echo -n "$STDIN$output" diff --git a/plugins/20_events/deployed-app-image-repo b/plugins/20_events/deployed-app-image-repo new file mode 120000 index 000000000..5178a749f --- /dev/null +++ b/plugins/20_events/deployed-app-image-repo @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/common/functions b/plugins/common/functions index 764fd9c15..09543e77e 100755 --- a/plugins/common/functions +++ b/plugins/common/functions @@ -172,14 +172,20 @@ get_deploying_app_image_name() { local APP="$1"; local IMAGE_TAG="$2"; [[ -z "$APP" ]] && dokku_log_fail "(get_app_image_name) APP must not be null" + local IMAGE_REPO="" local IMAGE_REMOTE_REPOSITORY=$(plugn trigger deployed-app-repository "$APP") local NEW_IMAGE_TAG=$(plugn trigger deployed-app-image-tag "$APP") + local NEW_IMAGE_REPO=$(plugn trigger deployed-app-image-repo "$APP") if [[ -n "$NEW_IMAGE_TAG" ]]; then IMAGE_TAG="$NEW_IMAGE_TAG" fi - local IMAGE=$(get_app_image_name "$APP" "$IMAGE_TAG") + if [[ -n "$NEW_IMAGE_REPO" ]]; then + IMAGE_REPO="$NEW_IMAGE_REPO" + fi + + local IMAGE=$(get_app_image_name "$APP" "$IMAGE_TAG" "$IMAGE_REPO") if [[ -n "$IMAGE_REMOTE_REPOSITORY" ]]; then IMAGE="${IMAGE_REMOTE_REPOSITORY}${IMAGE}" fi @@ -188,9 +194,13 @@ get_deploying_app_image_name() { get_app_image_name() { declare desc="return image identifier for a given app, tag tuple. validate if tag is presented" - local APP="$1"; local IMAGE_TAG="$2"; local IMAGE_REPO=$(get_app_image_repo "$APP") + local APP="$1"; local IMAGE_TAG="$2"; IMAGE_REPO="$3" [[ -z "$APP" ]] && dokku_log_fail "(get_app_image_name) APP must not be null" + if [[ -z "$IMAGE_REPO" ]]; then + IMAGE_REPO=$(get_app_image_repo "$APP") + fi + if [[ -n "$IMAGE_TAG" ]]; then local IMAGE="$IMAGE_REPO:$IMAGE_TAG" verify_image "$IMAGE" || dokku_log_fail "app image ($IMAGE) not found"