From e156b183edbfca209652ed152540b024bd0c620b Mon Sep 17 00:00:00 2001 From: richard Date: Wed, 1 Sep 2021 08:16:12 -0400 Subject: [PATCH] dkregistry xai cli, and UI --- dockerfiles/services/dkregistry/cli/.bash_cli | 0 dockerfiles/services/dkregistry/cli/deploy | 101 ++++++++++++++++++ .../services/dkregistry/cli/deploy.help | 4 + .../services/dkregistry/cli/deploy.usage | 1 + dockerfiles/services/dkregistry/cli/exec | 15 +++ dockerfiles/services/dkregistry/cli/rollback | 90 ++++++++++++++++ .../services/dkregistry/cli/rollback.help | 3 + .../services/dkregistry/cli/rollback.usage | 1 + dockerfiles/services/dkregistry/config.yml | 26 +++++ .../services/dkregistry/docker-compose.yml | 53 ++++----- 10 files changed, 268 insertions(+), 26 deletions(-) create mode 100644 dockerfiles/services/dkregistry/cli/.bash_cli create mode 100755 dockerfiles/services/dkregistry/cli/deploy create mode 100644 dockerfiles/services/dkregistry/cli/deploy.help create mode 100644 dockerfiles/services/dkregistry/cli/deploy.usage create mode 100755 dockerfiles/services/dkregistry/cli/exec create mode 100755 dockerfiles/services/dkregistry/cli/rollback create mode 100644 dockerfiles/services/dkregistry/cli/rollback.help create mode 100644 dockerfiles/services/dkregistry/cli/rollback.usage create mode 100644 dockerfiles/services/dkregistry/config.yml diff --git a/dockerfiles/services/dkregistry/cli/.bash_cli b/dockerfiles/services/dkregistry/cli/.bash_cli new file mode 100644 index 0000000..e69de29 diff --git a/dockerfiles/services/dkregistry/cli/deploy b/dockerfiles/services/dkregistry/cli/deploy new file mode 100755 index 0000000..4b9e618 --- /dev/null +++ b/dockerfiles/services/dkregistry/cli/deploy @@ -0,0 +1,101 @@ +#!/usr/bin/env bash +set -e +set -x + +STACK_NAME=dkregistry +SERVICE_NAME=registry +APP_NAME=${STACK_NAME}_${SERVICE_NAME} + +LOG=$(mktemp) + +export DOCKER_HOST=${DOCKER_HOST:-'dkhost:2376'} + +### +function deploy() { + docker stack deploy \ + --with-registry-auth \ + -c docker-compose.yml \ + ${STACK_NAME} + + sleep 2 + docker stack ps ${STACK_NAME} + +# wait_for_completed +} + +wait_for_completed() { + #states supported: "rollback_completed", "updating", "completed" + state=$(docker service inspect ${APP_NAME} | jq -r .[0].UpdateStatus.State) + while [ "completed" != "$state" ]; do + echo "$state" + sleep 3 + state=$(docker service inspect ${APP_NAME} | jq -r .[0].UpdateStatus.State) + done + sleep 5 +} + +function deploy_test() { + docker ps | grep ${APP_NAME} + + assertOK https dkregistry.xai-corp.net +} + +function deploy_save() { + echo "No image to save" +} + +dc() { + # shellcheck disable=SC2068 + docker-compose \ + -f docker-compose.yml \ + $@ +} + +function assertOK() { + proto=$1 + domain=$2 + set -e + echo -e "\033[94m${proto}://${domain}\033[39m" + curl -IskH "Host: ${domain}" "${proto}://dkhost.xai-corp.net:5000" | + tee "$LOG" | grep -P "HTTP\/2 200|200 OK|302 Found|403 Forbidden" +} + +function trap_exit() { + code=$? + docker service ls | grep "${APP_NAME}" || echo "service not found" + if [ $code -gt 0 ]; then + echo + cat "$LOG" + rm "$LOG" + echo -e "\033[31mFailed to deploy ${REMOTE_IMAGE} \033[39m" + exit $code + fi + + rm "$LOG" + echo -e "\033[32mSuccess:\033[39m ${REMOTE_IMAGE} successfully deployed" +} +trap trap_exit EXIT + +print_usage() { + printf "Usage: %s: [-b] [-t] [-s] \n" "$0" + echo -d deploy + echo -t smoke tests + echo -s tag as latest + echo -h help + exit 0 +} + +###### +if [ -z "$1" ]; then + deploy && deploy_test && deploy_save + exit +fi + +while getopts tdhs name; do + case $name in + d) deploy ;; + t) deploy_test ;; + s) deploy_save ;; + *) print_usage ;; + esac +done diff --git a/dockerfiles/services/dkregistry/cli/deploy.help b/dockerfiles/services/dkregistry/cli/deploy.help new file mode 100644 index 0000000..d5ba754 --- /dev/null +++ b/dockerfiles/services/dkregistry/cli/deploy.help @@ -0,0 +1,4 @@ +xai deploy [-dt] + +-d deploy +-t test deployment diff --git a/dockerfiles/services/dkregistry/cli/deploy.usage b/dockerfiles/services/dkregistry/cli/deploy.usage new file mode 100644 index 0000000..da340f2 --- /dev/null +++ b/dockerfiles/services/dkregistry/cli/deploy.usage @@ -0,0 +1 @@ +xai deploy [-dt] diff --git a/dockerfiles/services/dkregistry/cli/exec b/dockerfiles/services/dkregistry/cli/exec new file mode 100755 index 0000000..02967be --- /dev/null +++ b/dockerfiles/services/dkregistry/cli/exec @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +set -e +set -x + + + +dc() { + # shellcheck disable=SC2068 + docker-compose \ + -f docker-compose.yml \ + $@ +} + +export DOCKER_HOST=${DOCKER_HOST:-'dkhost:2376'} +dc exec dkregistry_registry.1 /bin/bash diff --git a/dockerfiles/services/dkregistry/cli/rollback b/dockerfiles/services/dkregistry/cli/rollback new file mode 100755 index 0000000..382bac5 --- /dev/null +++ b/dockerfiles/services/dkregistry/cli/rollback @@ -0,0 +1,90 @@ +#!/usr/bin/env bash +set -e +#set -x + +NC_VERSION=${NC_VERSION:-18} +LOCAL_IMAGE=xaicorp/nextcloud +TAG=${NC_VERSION}.0-${BUILD_NUMBER:-dev} +REMOTE_IMAGE=dkregistry.xai-corp.net:5000/${LOCAL_IMAGE}:${TAG} +STACK_NAME=xaibox +SERVICE_NAME=app +APP_NAME=${STACK_NAME}_${SERVICE_NAME} + +LOG=$(mktemp) + +#export LOCAL_IMAGE +export REMOTE_IMAGE +#export TAG + +export DOCKER_HOST=${DOCKER_HOST:-'dkhost:2376'} + +### + +function rollback() { +# docker service inspect ${APP_NAME} + docker service update --rollback "${APP_NAME}" + + wait_for_completed +# docker service scale "${APP_NAME}=2" +} + +wait_for_completed() { + #states supported: "rollback_completed", "updating", "completed" + state=$(docker service inspect ${APP_NAME} | jq -r .[0].UpdateStatus.State) + while [ "rollback_completed" != "$state" ]; do + echo "$state" + sleep 3 + state=$(docker service inspect ${APP_NAME} | jq -r .[0].UpdateStatus.State) + done +} + +function rollback_test() { + docker service ps --filter "desired-state=Healthy" ${APP_NAME} + + docker ps | grep "${APP_NAME}" +} + +function rollback_save() { + echo TODO +} + + +function trap_exit() { + code=$? + docker service ls | grep ${APP_NAME} + if [ $code -gt 0 ]; then + echo + rm "$LOG" + echo -e "\033[31mFailed rolling back ${APP_NAME} \033[39m" + exit $code + fi + + rm "$LOG" + echo -e "\033[32mSuccess:\033[39m ${APP_NAME} successfully rolled back" +} +trap trap_exit EXIT + +print_usage() { + printf "Usage: %s: [-b] [-t] [-s] \n" "$0" + echo -r rollback + echo -t smoke tests + echo -s tag as latest + echo -h help + exit 0 +} + +###### +if [ -z "$1" ]; then + rollback && rollback_test && rollback_save + exit +fi + +while getopts tdhs name +do + case $name in + d) rollback;; + t) rollback_test;; + s) rollback_save;; + *) print_usage;; + esac +done diff --git a/dockerfiles/services/dkregistry/cli/rollback.help b/dockerfiles/services/dkregistry/cli/rollback.help new file mode 100644 index 0000000..7aa5493 --- /dev/null +++ b/dockerfiles/services/dkregistry/cli/rollback.help @@ -0,0 +1,3 @@ +ARGS - The arguments you wish to provide to this command + +TODO: Fill out the help information for this command. diff --git a/dockerfiles/services/dkregistry/cli/rollback.usage b/dockerfiles/services/dkregistry/cli/rollback.usage new file mode 100644 index 0000000..5226895 --- /dev/null +++ b/dockerfiles/services/dkregistry/cli/rollback.usage @@ -0,0 +1 @@ +ARGS... diff --git a/dockerfiles/services/dkregistry/config.yml b/dockerfiles/services/dkregistry/config.yml new file mode 100644 index 0000000..068047d --- /dev/null +++ b/dockerfiles/services/dkregistry/config.yml @@ -0,0 +1,26 @@ +version: 0.1 +log: + fields: + service: registry +storage: + delete: + enabled: true + cache: + blobdescriptor: inmemory + filesystem: + rootdirectory: /var/lib/registry +http: + addr: :5000 + headers: + X-Content-Type-Options: [nosniff] + Access-Control-Allow-Origin: [ 'http://localhost' ] + Access-Control-Allow-Methods: [ 'HEAD', 'GET', 'OPTIONS', 'DELETE' ] + Access-Control-Allow-Headers: [ 'Authorization', 'Accept' ] + Access-Control-Max-Age: [ 1728000 ] + Access-Control-Allow-Credentials: [ true ] + Access-Control-Expose-Headers: [ 'Docker-Content-Digest' ] +health: + storagedriver: + enabled: true + interval: 10s + threshold: 3 diff --git a/dockerfiles/services/dkregistry/docker-compose.yml b/dockerfiles/services/dkregistry/docker-compose.yml index 3d346c6..b822465 100644 --- a/dockerfiles/services/dkregistry/docker-compose.yml +++ b/dockerfiles/services/dkregistry/docker-compose.yml @@ -28,6 +28,7 @@ services: - /opt/shared/letsencrypt-2:/certs - /opt/shared/letsencrypt-2:/etc/letsencrypt - /opt/shared/dkregistry/auth:/auth + - /opt/shared/dkregistry/config/config.yml:/etc/docker/registry/config.yml deploy: mode: replicated @@ -52,29 +53,29 @@ services: fluentd-async-connect: 'true' tag: dkregistry -# registry-ui: -# image: hyper/docker-registry-web -# ports: -# - 8087:8080 -# environment: -# REGISTRY_URL: https://dkregistry.xai-corp.net:5000/v2 -# REGISTRY_NAME: dkregistry -# REGISTRY_READONLY: 'false' -# REGISTRY_AUTH_ENABLED: 'true' -# REGISTRY_BASIC_AUTH: $apr1$2vrW.sPv$aIZ6xnQcvde6.kX7KvWm5/ -# -# deploy: -# mode: replicated -# replicas: 1 -# restart_policy: -# condition: any -# delay: "1s" -# max_attempts: 1 -# update_config: -# parallelism: 1 -# delay: 2s -# order: start-first -# resources: -# limits: -# cpus: '2' -# memory: 2048M + + ui: + image: joxit/docker-registry-ui:latest + ports: + - 8087:80 + environment: + - REGISTRY_TITLE=Xai Corp. Private Docker Registry + - REGISTRY_URL=https://dkregistry.xai-corp.net:5000 + - SINGLE_REGISTRY=true + - DELETE_IMAGES=true + + deploy: + mode: replicated + replicas: 1 + restart_policy: + condition: any + delay: "1s" + max_attempts: 1 + update_config: + parallelism: 1 + delay: 2s + order: start-first + resources: + limits: + cpus: '2' + memory: 2048M