diff --git a/test/api/functional/Dockerfile.dockerignore b/.dockerignore similarity index 94% rename from test/api/functional/Dockerfile.dockerignore rename to .dockerignore index e42085f51..6882e4713 100644 --- a/test/api/functional/Dockerfile.dockerignore +++ b/.dockerignore @@ -7,9 +7,9 @@ **/.idea/ **/.bsp **/*cache* -**/*.png **/.git **/Dockerfile **/*.dockerignore **/.github **/_template +img/ diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 89a58987c..6e7fd66eb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,7 +5,7 @@ on: pull_request: branches: ['*'] push: - branches: ['master'] + branches: ['master','main'] env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -140,4 +140,4 @@ jobs: path: ~/.sbt key: ${{ runner.os }}-sbt-cache-${{ hashFiles('**/*.sbt') }}-${{ hashFiles('project/build.properties') }} - name: Func tests - run: ./bin/func-test-portal.sh && ./bin/func-test-api-travis.sh + run: ./utils/func-test-portal.sh && ./utils/func-test-api.sh diff --git a/.gitignore b/.gitignore index f42ce6dd5..fc48f02ef 100644 --- a/.gitignore +++ b/.gitignore @@ -31,8 +31,8 @@ tmp.out .vscode project/metals.sbt .bsp -docker/data +quickstart/data **/.virtualenv **/.venv* **/*cache* - +**/assembly/ diff --git a/DEVELOPER_GUIDE.md b/DEVELOPER_GUIDE.md index 41ce0b58c..a9bdd702b 100644 --- a/DEVELOPER_GUIDE.md +++ b/DEVELOPER_GUIDE.md @@ -7,19 +7,31 @@ - [Running VinylDNS Locally](#running-vinyldns-locally) - [Testing](#testing) -## Developer Requirements +## Developer Requirements (Local) -- Scala 2.12 -- sbt 1+ - Java 8 (at least u162) -- Python 2.7 -- virtualenv -- Docker -- curl -- npm -- grunt +- Scala 2.12 +- sbt 1.4+ -Make sure that you have the requirements installed before proceeding. + +- curl +- docker +- docker-compose +- GNU Make 3.82+ +- grunt +- npm +- Python 3.5+ + +## Developer Requirements (Docker) + +Since almost everything can be run with Docker and GNU Make, if you don't want to setup a local development environment, +then you simply need: + +- `Docker` v19.03+ _(earlier versions may work fine)_ +- `Docker Compose` v2.0+ _(earlier versions may work fine)_ +- `GNU Make` v3.82+ +- `Bash` 3.2+ + - Basic utilities: `awk`, `sed`, `curl`, `grep`, etc may be needed for scripts ## Project Layout @@ -135,10 +147,12 @@ README. However, VinylDNS can also be run in the foreground. ### Starting the API Server Before starting the API service, you can start the dependencies for local development: + ``` cd test/api/integration make build && make run-bg ``` + This will start a container running in the background with necessary prerequisites. Once the prerequisites are running, you can start up sbt by running `sbt` from the root directory. @@ -147,16 +161,21 @@ Once the prerequisites are running, you can start up sbt by running `sbt` from t * `reStart` to start up the API server * Wait until you see the message `VINYLDNS SERVER STARTED SUCCESSFULLY` before working with the server * To stop the VinylDNS server, run `reStop` from the api project -* To stop the dependent Docker containers, change to the root project `project root`, then run `dockerComposeStop` from - the API project +* To stop the dependent Docker containers: `utils/clean-vinyldns-containers.sh` See the [API Configuration Guide](https://www.vinyldns.io/operator/config-api) for information regarding API configuration. ### Starting the Portal -To run the portal locally, you _first_ have to start up the VinylDNS API Server (see instructions above). Once that is -done, in the same `sbt` session or a different one, go to `project portal` and then execute `;preparePortal; run`. +To run the portal locally, you _first_ have to start up the VinylDNS API Server: + +``` +utils/quickstart-vinyldns.sh +``` + +Once that is done, in the same `sbt` session or a different one, go to `project portal` and then +execute `;preparePortal; run`. See the [Portal Configuration Guide](https://www.vinyldns.io/operator/config-portal) for information regarding portal configuration. @@ -220,7 +239,7 @@ You can run all unit and integration tests for the api and portal by running `sb When adding new features, you will often need to write new functional tests that black box / regression test the API. - The API functional tests are written in Python and live under `test/api/functional`. -The Portal functional tests are written in JavaScript and live under `test/portal/functional`. +- The Portal functional tests are written in JavaScript and live under `test/portal/functional`. #### Running Functional Tests @@ -229,6 +248,7 @@ To run functional tests you can simply execute the following command: ``` make build && make run ``` + During iterative test development, you can use `make run-local` which will mount the current functional tests in the container, allowing for easier test development. @@ -236,13 +256,11 @@ Additionally, you can pass `--interactive` to `make run` or `make run-local` to From there you can run tests with the `/functional_test/run.sh` command. This allows for finer-grained control over the test execution process as well as easier inspection of logs. - ##### API Functional Tests + You can run a specific test by name by running `make run -- -k `. Any arguments after `make run --` will be passed to the test runner [`test/api/functional/run.sh`](test/api/functional/run.sh). - - #### Setup We use [pytest](https://docs.pytest.org/en/latest/) for python tests. It is helpful that you browse the documentation so diff --git a/MAINTAINERS.md b/MAINTAINERS.md index 37e7bf93c..88f3b9e72 100644 --- a/MAINTAINERS.md +++ b/MAINTAINERS.md @@ -79,7 +79,7 @@ running the release 1. Follow [Docker Content Trust](#docker-content-trust) to setup a notary delegation for yourself 1. Follow [Sonatype Credentials](#sonatype-credentials) to setup the sonatype pgp signing key on your local 1. Make sure you're logged in to Docker with `docker login` -1. Run `bin/release.sh` _Note: the arg "skip-tests" will skip unit, integration and functional testing before a release_ +1. Run `utils/release.sh` _Note: the arg "skip-tests" will skip unit, integration and functional testing before a release_ 1. You will be asked to confirm the version which originally comes from `version.sbt`. _NOTE: if the version ends with `SNAPSHOT`, then the docker latest tag won't be applied and the core module will only be published to the sonatype staging repo._ diff --git a/README.md b/README.md index aea300f55..21856b1b3 100644 --- a/README.md +++ b/README.md @@ -48,9 +48,9 @@ To start up a local instance of VinylDNS on your machine with docker: 1. Ensure that you have [docker](https://docs.docker.com/install/) and [docker-compose](https://docs.docker.com/compose/install/) 1. Clone the repo: `git clone https://github.com/vinyldns/vinyldns.git` 1. Navigate to repo: `cd vinyldns` -1. Run `./bin/docker-up-vinyldns.sh`. This will start up the api at `localhost:9000` and the portal at `localhost:9001` +1. Run `./utils/quickstart-vinyldns.sh`. This will start up the api at `localhost:9000` and the portal at `localhost:9001` 1. See [Developer Guide](DEVELOPER_GUIDE.md#loading-test-data) for how to load a test DNS zone -1. To stop the local setup, run `./bin/remove-vinyl-containers.sh`. +1. To stop the local setup, run `./utils/clean-vinyldns-containers.sh`. There exist several clients at that can be used to make API requests, using the endpoint `http://localhost:9000` @@ -72,7 +72,7 @@ TTL = 300, IP Addressess = 1.1.1.1` 1. Upon connecting to a zone for the first time, a zone sync is executed to provide VinylDNS a copy of the records in the zone 1. Changes made via VinylDNS are made against the DNS backend, you do not need to sync the zone further to push those changes out 1. If changes to the zone are made outside of VinylDNS, then the zone will have to be re-synced to give VinylDNS a copy of those records -1. If you wish to modify the url used in the creation process from `http://localhost:9000`, to say `http://vinyldns.yourdomain.com:9000`, you can modify the `bin/.env` file before execution. +1. If you wish to modify the url used in the creation process from `http://localhost:9000`, to say `http://vinyldns.yourdomain.com:9000`, you can modify the `utils/.env` file before execution. 1. A similar `docker/.env.quickstart` can be modified to change the default ports for the Portal and API. You must also modify their config files with the new port: https://www.vinyldns.io/operator/config-portal & https://www.vinyldns.io/operator/config-api ## Code of Conduct diff --git a/bin/.env b/bin/.env deleted file mode 100644 index b6d3b2ffc..000000000 --- a/bin/.env +++ /dev/null @@ -1,2 +0,0 @@ -VINYLDNS_API_URL=http://localhost:9000 -VINYLDNS_PORTAL_URL=http://localhost:9001 diff --git a/bin/docker-up-vinyldns.sh b/bin/docker-up-vinyldns.sh deleted file mode 100755 index cf31c427d..000000000 --- a/bin/docker-up-vinyldns.sh +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/env bash -##################################################################################################### -# Starts up the api, portal, and dependent services via -# docker-compose. The api will be available on localhost:9000 and the -# portal will be on localhost:9001 -# -# Relevant overrides can be found at ./.env and ../docker/.env -# -# Options: -# -t, --timeout seconds: overwrite ping timeout, default of 60 -# -a, --api-only: only starts up vinyldns-api and its dependencies, excludes vinyldns-portal -# -c, --clean: re-pull vinyldns/api and vinyldns/portal images from docker hub -# -v, --version tag: overwrite vinyldns/api and vinyldns/portal docker tags -##################################################################################################### - -function wait_for_url { - echo "pinging ${URL} ..." - DATA="" - RETRY="$TIMEOUT" - while [ "$RETRY" -gt 0 ] - do - DATA=$(curl -I -s "${URL}" -o /dev/null -w "%{http_code}") - if [ $? -eq 0 ] - then - echo "Succeeded in connecting to ${URL}!" - break - else - echo "Retrying" >&2 - - let RETRY-=1 - sleep 1 - - if [ "$RETRY" -eq 0 ] - then - echo "Exceeded retries waiting for ${URL} to be ready, failing" - exit 1 - fi - fi - done -} - -function usage { - printf "usage: docker-up-vinyldns.sh [OPTIONS]\n\n" - printf "starts up a local VinylDNS installation using docker compose\n\n" - printf "options:\n" - printf "\t-t, --timeout seconds: overwrite ping timeout of 60\n" - printf "\t-a, --api-only: do not start up vinyldns-portal\n" - printf "\t-c, --clean: re-pull vinyldns/api and vinyldns/portal images from docker hub\n" - printf "\t-v, --version tag: overwrite vinyldns/api and vinyldns/portal docker tags\n" -} - -function clean_images { - if (( $CLEAN == 1 )); then - echo "cleaning docker images..." - docker rmi vinyldns/api:$VINYLDNS_VERSION - docker rmi vinyldns/portal:$VINYLDNS_VERSION - fi -} - -function wait_for_api { - echo "Waiting for api..." - URL="$VINYLDNS_API_URL" - wait_for_url -} - -function wait_for_portal { - # check if portal was skipped - if [ "$SERVICE" != "api" ]; then - echo "Waiting for portal..." - URL="$VINYLDNS_PORTAL_URL" - wait_for_url - fi -} - -# initial var setup -DIR=$( cd $(dirname $0) ; pwd -P ) -TIMEOUT=60 -DOCKER_COMPOSE_CONFIG="${DIR}/../docker/docker-compose-quick-start.yml" -# empty service starts up all docker services in compose file -SERVICE="" -# when CLEAN is set to 1, existing docker images are deleted so they are re-pulled -CLEAN=0 -# default to latest for docker versions -export VINYLDNS_VERSION=latest - -# source env before parsing args so vars can be overwritten -set -a # Required in order to source docker/.env -# Source customizable env files -source "$DIR"/.env -source "$DIR"/../docker/.env - -# parse args -while [ "$1" != "" ]; do - case "$1" in - -t | --timeout ) TIMEOUT="$2"; shift;; - -a | --api-only ) SERVICE="api";; - -c | --clean ) CLEAN=1;; - -v | --version ) export VINYLDNS_VERSION=$2; shift;; - * ) usage; exit;; - esac - shift -done - -clean_images - -echo "timeout is set to ${TIMEOUT}" -echo "vinyldns version is set to '${VINYLDNS_VERSION}'" - -echo "Starting vinyldns and all dependencies in the background..." -docker-compose -f "$DOCKER_COMPOSE_CONFIG" up -d ${SERVICE} - -wait_for_api -wait_for_portal diff --git a/bin/remove-vinyl-containers.sh b/bin/remove-vinyl-containers.sh deleted file mode 100755 index 5f5780564..000000000 --- a/bin/remove-vinyl-containers.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash -# -# The local vinyldns setup used for testing relies on the -# following docker images: -# mysql:5.7 -# s12v/elasticmq:0.13.8 -# vinyldns/bind9 -# vinyldns/api -# vinyldns/portal -# rroemhild/test-openldap -# localstack/localstack -# -# This script with kill and remove containers associated -# with these names and/or tags -# -# Note: this will not remove the actual images from your -# machine, just the running containers - -IDS=$(docker ps -a | grep -e 'mysql:5.7' -e 's12v/elasticmq:0.13.8' -e 'vinyldns' -e 'flaviovs/mock-smtp' -e 'localstack/localstack' -e 'rroemhild/test-openldap' | awk '{print $1}') - -echo "killing..." -echo $(echo "$IDS" | xargs -I {} docker kill {}) -echo - -echo "removing..." -echo $(echo "$IDS" | xargs -I {} docker rm -v {}) -echo - -echo "pruning network..." -docker network prune -f diff --git a/build.sbt b/build.sbt index 15cbf3b13..168cb7306 100644 --- a/build.sbt +++ b/build.sbt @@ -47,7 +47,7 @@ lazy val sharedSettings = Seq( lazy val testSettings = Seq( parallelExecution in Test := true, parallelExecution in IntegrationTest := false, - fork in IntegrationTest := false, + fork in IntegrationTest := true, testOptions in Test += Tests.Argument("-oDNCXEPQRMIK", "-l", "SkipCI"), logBuffered in Test := false, // Hide stack traces in tests @@ -67,13 +67,11 @@ lazy val apiSettings = Seq( ) lazy val apiAssemblySettings = Seq( - assemblyJarName in assembly := "vinyldns.jar", + assemblyOutputPath in assembly := file("assembly/vinyldns.jar"), test in assembly := {}, mainClass in assembly := Some("vinyldns.api.Boot"), mainClass in reStart := Some("vinyldns.api.Boot"), - // there are some odd things from dnsjava including update.java and dig.java that we don't use assemblyMergeStrategy in assembly := { - case "update.class" | "dig.class" => MergeStrategy.discard case PathList("scala", "tools", "nsc", "doc", "html", "resource", "lib", "index.js") => MergeStrategy.discard case PathList("scala", "tools", "nsc", "doc", "html", "resource", "lib", "template.js") => @@ -153,6 +151,7 @@ lazy val coreBuildSettings = Seq( // to write a crypto plugin so that we fall back to a noarg constructor scalacOptions ++= scalacOptionsByV(scalaVersion.value).filterNot(_ == "-Ywarn-unused:params") ) ++ pbSettings + lazy val corePublishSettings = Seq( publishMavenStyle := true, publishArtifact in Test := false, @@ -266,11 +265,11 @@ lazy val portal = (project in file("modules/portal")) }, checkJsHeaders := { import scala.sys.process._ - "./bin/add-license-headers.sh -d=modules/portal/public/lib -f=js -c" ! + "./utils/add-license-headers.sh -d=modules/portal/public/lib -f=js -c" ! }, createJsHeaders := { import scala.sys.process._ - "./bin/add-license-headers.sh -d=modules/portal/public/lib -f=js" ! + "./utils/add-license-headers.sh -d=modules/portal/public/lib -f=js" ! }, // change the name of the output to portal.zip packageName in Universal := "portal" diff --git a/build/docker/api/application.conf b/build/docker/api/application.conf index 09eab0cf6..e3102e0d0 100644 --- a/build/docker/api/application.conf +++ b/build/docker/api/application.conf @@ -9,11 +9,17 @@ vinyldns { settings = { name = "vinyldns" + name = ${?JDBC_DB_NAME} driver = "org.mariadb.jdbc.Driver" - migration-url = "jdbc:mariadb://vinyldns-mysql:3306/?user=root&password=pass" - url = "jdbc:mariadb://vinyldns-mysql:3306/vinyldns?user=root&password=pass" + driver = ${?JDBC_DRIVER} + migration-url = "jdbc:mariadb://vinyldns-integration:19002/?user=root&password=pass" + migration-url = ${?JDBC_MIGRATION_URL} + url = "jdbc:mariadb://vinyldns-integration:19002/vinyldns?user=root&password=pass" + url = ${?JDBC_URL} user = "root" + user = ${?JDBC_USER} password = "pass" + password = ${?JDBC_PASSWORD} # see https://github.com/brettwooldridge/HikariCP connection-timeout-millis = 1000 @@ -50,11 +56,17 @@ vinyldns { # these must be overridden to use MYSQL for production use # assumes a docker or mysql instance running locally name = "vinyldns" + name = ${?JDBC_DB_NAME} driver = "org.mariadb.jdbc.Driver" - migration-url = "jdbc:mariadb://vinyldns-mysql:3306/?user=root&password=pass" - url = "jdbc:mariadb://vinyldns-mysql:3306/vinyldns?user=root&password=pass" + driver = ${?JDBC_DRIVER} + migration-url = "jdbc:mariadb://vinyldns-integration:19002/?user=root&password=pass" + migration-url = ${?JDBC_MIGRATION_URL} + url = "jdbc:mariadb://vinyldns-integration:19002/vinyldns?user=root&password=pass" + url = ${?JDBC_URL} user = "root" + user = ${?JDBC_USER} password = "pass" + password = ${?JDBC_PASSWORD} # see https://github.com/brettwooldridge/HikariCP connection-timeout-millis = 1000 idle-timeout = 10000 @@ -89,15 +101,21 @@ vinyldns { defaultZoneConnection { name = "vinyldns." keyName = "vinyldns." + keyName = ${?DEFAULT_DNS_KEY_NAME} key = "nzisn+4G2ldMn0q1CV3vsg==" - primaryServer = "vinyldns-bind9" + key = ${?DEFAULT_DNS_KEY_SECRET} + primaryServer = "vinyldns-integration:19001" + primaryServer = ${?DEFAULT_DNS_ADDRESS} } defaultTransferConnection { name = "vinyldns." keyName = "vinyldns." + keyName = ${?DEFAULT_DNS_KEY_NAME} key = "nzisn+4G2ldMn0q1CV3vsg==" - primaryServer = "vinyldns-bind9" + key = ${?DEFAULT_DNS_KEY_SECRET} + primaryServer = "vinyldns-integration:19001" + primaryServer = ${?DEFAULT_DNS_ADDRESS} } backends = [ @@ -106,14 +124,20 @@ vinyldns { zone-connection { name = "vinyldns." key-name = "vinyldns." + key-name = ${?DEFAULT_DNS_KEY_NAME} key = "nzisn+4G2ldMn0q1CV3vsg==" - primary-server = "vinyldns-bind9" + key = ${?DEFAULT_DNS_KEY_SECRET} + primary-server = "vinyldns-integration:19001" + primary-server = ${?DEFAULT_DNS_ADDRESS} } transfer-connection { name = "vinyldns." key-name = "vinyldns." + key-name = ${?DEFAULT_DNS_KEY_NAME} key = "nzisn+4G2ldMn0q1CV3vsg==" - primary-server = "vinyldns-bind9" + key = ${?DEFAULT_DNS_KEY_SECRET} + primary-server = "vinyldns-integration:19001" + primary-server = ${?DEFAULT_DNS_ADDRESS} } } ] diff --git a/build/docker/portal/Dockerfile b/build/docker/portal/Dockerfile index 62a0ebb28..fcdde8695 100644 --- a/build/docker/portal/Dockerfile +++ b/build/docker/portal/Dockerfile @@ -1,4 +1,4 @@ -FROM hseeberger/scala-sbt:11.0.8_1.3.13_2.11.12 as builder +FROM vinyldns/build:base-build-portal as builder ARG BRANCH=master ARG VINYLDNS_VERSION @@ -8,16 +8,6 @@ RUN git clone -b ${BRANCH} --single-branch --depth 1 https://github.com/vinyldns # The default jvmopts are huge, meant for running everything, use a paired down version COPY .jvmopts /vinyldns -# Needed for preparePortal -RUN apt-get update \ - && apt-get install -y \ - apt-transport-https \ - curl \ - gnupg \ - && curl -sL https://deb.nodesource.com/setup_12.x | bash - \ - && apt-get install -y nodejs \ - && npm install -g grunt-cli - RUN cd /vinyldns ; sbt "set version in ThisBuild := \"${VINYLDNS_VERSION}\"" portal/preparePortal universal:packageZipTarball FROM adoptopenjdk/openjdk11:jdk-11.0.8_10-alpine diff --git a/build/docker/portal/application.conf b/build/docker/portal/application.conf index 823a01668..674215541 100644 --- a/build/docker/portal/application.conf +++ b/build/docker/portal/application.conf @@ -21,7 +21,8 @@ LDAP { securityAuthentication = "simple" # Note: The following assumes a purely docker setup, using container_name = vinyldns-ldap - providerUrl = "ldap://vinyldns-ldap:389" + providerUrl = "ldap://vinyldns-ldap:19004" + providerUrl = ${?LDAP_PROVIDER_URL} } # This is only needed if keeping vinyldns user store in sync with ldap (to auto lock out users who left your @@ -41,7 +42,9 @@ http.port = 9000 data-stores = ["mysql"] -portal.vinyldns.backend.url = "http://vinyldns-api:9000" +portal.vinyldns.backend.url = "http://vinyldns-integration:9000" +portal.vinyldns.backend.url = ${?API_URL} + # Note: The default mysql settings assume a local docker compose setup with mysql named vinyldns-mysql # follow the configuration guide to point to your mysql @@ -53,10 +56,14 @@ mysql { # assumes a docker or mysql instance running locally name = "vinyldns" driver = "org.mariadb.jdbc.Driver" - migration-url = "jdbc:mariadb://vinyldns-mysql:3306/?user=root&password=pass" - url = "jdbc:mariadb://vinyldns-mysql:3306/vinyldns?user=root&password=pass" + migration-url = "jdbc:mariadb://vinyldns-integration:19002/?user=root&password=pass" + migration-url = ${?JDBC_MIGRATION_URL} + url = "jdbc:mariadb://vinyldns-integration:19002/vinyldns?user=root&password=pass" + url = ${?JDBC_URL} user = "root" + user = ${?JDBC_USER} password = "pass" + password = ${?JDBC_PASSWORD} # see https://github.com/brettwooldridge/HikariCP connection-timeout-millis = 1000 idle-timeout = 10000 diff --git a/docker/.env b/docker/.env deleted file mode 100644 index 9837a2470..000000000 --- a/docker/.env +++ /dev/null @@ -1,17 +0,0 @@ -REST_PORT=9000 -# Do not use quotes around the environment variables. -MYSQL_ROOT_PASSWORD=pass -# This is required as mysql is currently locked down to localhost -MYSQL_ROOT_HOST=% -# Host URL for queue -QUEUE_HOST=vinyldns-elasticmq - -# portal settings -PORTAL_PORT=9001 -PLAY_HTTP_SECRET_KEY=change-this-for-prod -VINYLDNS_BACKEND_URL=http://vinyldns-api:9000 -SQS_ENDPOINT=http://vinyldns-localstack:19007 -MYSQL_ENDPOINT=vinyldns-mysql:3306 -USER_TABLE_NAME=users -USER_CHANGE_TABLE_NAME=userChange -TEST_LOGIN=true diff --git a/docker/.env.quickstart b/docker/.env.quickstart deleted file mode 100644 index 9837a2470..000000000 --- a/docker/.env.quickstart +++ /dev/null @@ -1,17 +0,0 @@ -REST_PORT=9000 -# Do not use quotes around the environment variables. -MYSQL_ROOT_PASSWORD=pass -# This is required as mysql is currently locked down to localhost -MYSQL_ROOT_HOST=% -# Host URL for queue -QUEUE_HOST=vinyldns-elasticmq - -# portal settings -PORTAL_PORT=9001 -PLAY_HTTP_SECRET_KEY=change-this-for-prod -VINYLDNS_BACKEND_URL=http://vinyldns-api:9000 -SQS_ENDPOINT=http://vinyldns-localstack:19007 -MYSQL_ENDPOINT=vinyldns-mysql:3306 -USER_TABLE_NAME=users -USER_CHANGE_TABLE_NAME=userChange -TEST_LOGIN=true diff --git a/docker/api/.dockerignore b/docker/api/.dockerignore deleted file mode 100644 index f4ed141ba..000000000 --- a/docker/api/.dockerignore +++ /dev/null @@ -1,5 +0,0 @@ -.DS_Store -.dockerignore -.git -.gitignore -classes \ No newline at end of file diff --git a/docker/api/Dockerfile b/docker/api/Dockerfile deleted file mode 100644 index 9a0f47df3..000000000 --- a/docker/api/Dockerfile +++ /dev/null @@ -1,17 +0,0 @@ -FROM adoptopenjdk/openjdk11:jdk-11.0.7_10-alpine - -RUN apk add --update --no-cache netcat-openbsd bash - -# install the jar onto the server, asserts this Dockerfile is copied to target/scala-2.12 after a build -COPY vinyldns.jar /app/vinyldns-server.jar -COPY run.sh /app/run.sh -RUN chmod a+x /app/run.sh - -COPY docker.conf /app/docker.conf - -EXPOSE 9000 - -# set the entry point for the container to start vinyl, specify the config resource -ENTRYPOINT ["/app/run.sh"] - - diff --git a/docker/api/docker.conf b/docker/api/docker.conf deleted file mode 100644 index 02d4ecdd9..000000000 --- a/docker/api/docker.conf +++ /dev/null @@ -1,333 +0,0 @@ -################################################################################################################ -# This configuration is only used by docker. Environment variables are required in order to start -# up a docker cluster appropriately, so most of the values are passed in here. Defaults assume a local docker compose -# for vinyldns running. -# SQS_ENDPOINT is the SQS endpoint -# SQS_QUEUE_NAME is the queue name for the SQS queue -# SQS_REGION is the service region where the SQS queue lives (e.g. us-east-1) -# AWS_ACCESS_KEY is the AWS access key -# AWS_SECRET_ACCESS_KEY is the AWS secret access key -# JDBC_MIGRATION_URL - the URL for migations in the SQL database -# JDBC_URL - the full URL to the SQL database -# JDBC_USER - the SQL database user -# JDBC_PASSWORD - the SQL database password -# DEFAULT_DNS_ADDRESS - the server (and port if not 53) of the default DNS server -# DEFAULT_DNS_KEY_NAME - the default key name used to connect to the default DNS server -# DEFAULT_DNS_KEY_SECRET - the default key secret used to connect to the default DNS server -################################################################################################################ -vinyldns { - - # configured backend providers - backend { - # Use "default" when dns backend legacy = true - # otherwise, use the id of one of the connections in any of your backends - default-backend-id = "default" - - # this is where we can save additional backends - backend-providers = [ - { - class-name = "vinyldns.route53.backend.Route53BackendProviderLoader" - settings = { - backends = [ - { - id = "r53", - access-key = "test", - access-key = ${?AWS_ACCESS_KEY_ID} - secret-key = "test", - secret-key = ${?AWS_SECRET_ACCESS_KEY}, - service-endpoint = "http://vinyldns-localstack:19009", - service-endpoint = ${?AWS_ROUTE53_ENDPOINT}, - signing-region = "us-east-1" - signing-region = ${?AWS_DEFAULT_REGION} - } - ] - } - }, - { - class-name = "vinyldns.api.backend.dns.DnsBackendProviderLoader" - settings = { - legacy = false - backends = [ - { - id = "default" - zone-connection = { - name = "vinyldns." - key-name = "vinyldns." - key-name = ${?DEFAULT_DNS_KEY_NAME} - key = "nzisn+4G2ldMn0q1CV3vsg==" - key = ${?DEFAULT_DNS_KEY_SECRET} - primary-server = "vinyldns-bind9" - primary-server = ${?DEFAULT_DNS_ADDRESS} - } - transfer-connection = { - name = "vinyldns." - key-name = "vinyldns." - key-name = ${?DEFAULT_DNS_KEY_NAME} - key = "nzisn+4G2ldMn0q1CV3vsg==" - key = ${?DEFAULT_DNS_KEY_SECRET} - primary-server = "vinyldns-bind9" - primary-server = ${?DEFAULT_DNS_ADDRESS} - }, - tsig-usage = "always" - }, - { - id = "func-test-backend" - zone-connection = { - name = "vinyldns." - key-name = "vinyldns." - key-name = ${?DEFAULT_DNS_KEY_NAME} - key = "nzisn+4G2ldMn0q1CV3vsg==" - key = ${?DEFAULT_DNS_KEY_SECRET} - primary-server = "vinyldns-bind9" - primary-server = ${?DEFAULT_DNS_ADDRESS} - } - transfer-connection = { - name = "vinyldns." - key-name = "vinyldns." - key-name = ${?DEFAULT_DNS_KEY_NAME} - key = "nzisn+4G2ldMn0q1CV3vsg==" - key = ${?DEFAULT_DNS_KEY_SECRET} - primary-server = "vinyldns-bind9" - primary-server = ${?DEFAULT_DNS_ADDRESS} - }, - tsig-usage = "always" - } - ] - } - } - ] - } - - queue { - class-name = "vinyldns.sqs.queue.SqsMessageQueueProvider" - - messages-per-poll = 10 - polling-interval = 250.millis - - settings { - # AWS access key and secret. - access-key = "test" - access-key = ${?AWS_ACCESS_KEY} - secret-key = "test" - secret-key = ${?AWS_SECRET_ACCESS_KEY} - - # Regional endpoint to make your requests (eg. 'us-west-2', 'us-east-1', etc.). This is the region where your queue is housed. - signing-region = "us-east-1" - signing-region = ${?SQS_REGION} - - # Endpoint to access queue - service-endpoint = "http://vinyldns-localstack:19007/" - service-endpoint = ${?SQS_ENDPOINT} - - # Queue name. Should be used in conjunction with service endpoint, rather than using a queue url which is subject to change. - queue-name = "vinyldns" - queue-name = ${?SQS_QUEUE_NAME} - } - } - - rest { - host = "0.0.0.0" - port = 9000 - } - - sync-delay = 10000 - - approved-name-servers = [ - "172.17.42.1.", - "ns1.parent.com." - "ns1.parent.com1." - "ns1.parent.com2." - "ns1.parent.com3." - "ns1.parent.com4." - ] - - crypto { - type = "vinyldns.core.crypto.NoOpCrypto" - } - - data-stores = ["mysql"] - - mysql { - settings { - # JDBC Settings, these are all values in scalikejdbc-config, not our own - # these must be overridden to use MYSQL for production use - # assumes a docker or mysql instance running locally - name = "vinyldns" - driver = "org.mariadb.jdbc.Driver" - migration-url = "jdbc:mariadb://vinyldns-mysql:3306/?user=root&password=pass" - migration-url = ${?JDBC_MIGRATION_URL} - url = "jdbc:mariadb://vinyldns-mysql:3306/vinyldns?user=root&password=pass" - url = ${?JDBC_URL} - user = "root" - user = ${?JDBC_USER} - password = "pass" - password = ${?JDBC_PASSWORD} - # see https://github.com/brettwooldridge/HikariCP - connection-timeout-millis = 1000 - idle-timeout = 10000 - max-lifetime = 600000 - maximum-pool-size = 20 - minimum-idle = 20 - register-mbeans = true - } - # Repositories that use this data store are listed here - repositories { - zone { - # no additional settings for now - } - batch-change { - # no additional settings for now - } - user { - - } - record-set { - - } - group { - - } - membership { - - } - group-change { - - } - zone-change { - - } - record-change { - - } - } - } - - backends = [] - - batch-change-limit = 1000 - - # FQDNs / IPs that cannot be modified via VinylDNS - # regex-list used for all record types except PTR - # ip-list used exclusively for PTR records - high-value-domains = { - regex-list = [ - "high-value-domain.*" # for testing - ] - ip-list = [ - # using reverse zones in the vinyldns/bind9 docker image for testing - "192.0.2.252", - "192.0.2.253", - "fd69:27cc:fe91:0:0:0:0:ffff", - "fd69:27cc:fe91:0:0:0:ffff:0" - ] - } - - # FQDNs / IPs / zone names that require manual review upon submission in batch change interface - # domain-list used for all record types except PTR - # ip-list used exclusively for PTR records - manual-review-domains = { - domain-list = [ - "needs-review.*" - ] - ip-list = [ - "192.0.1.254", - "192.0.1.255", - "192.0.2.254", - "192.0.2.255", - "192.0.3.254", - "192.0.3.255", - "192.0.4.254", - "192.0.4.255", - "fd69:27cc:fe91:0:0:0:ffff:1", - "fd69:27cc:fe91:0:0:0:ffff:2", - "fd69:27cc:fe92:0:0:0:ffff:1", - "fd69:27cc:fe92:0:0:0:ffff:2", - "fd69:27cc:fe93:0:0:0:ffff:1", - "fd69:27cc:fe93:0:0:0:ffff:2", - "fd69:27cc:fe94:0:0:0:ffff:1", - "fd69:27cc:fe94:0:0:0:ffff:2" - ] - zone-name-list = [ - "zone.requires.review." - "zone.requires.review1." - "zone.requires.review2." - "zone.requires.review3." - "zone.requires.review4." - ] - } - - # FQDNs / IPs that cannot be modified via VinylDNS - # regex-list used for all record types except PTR - # ip-list used exclusively for PTR records - high-value-domains = { - regex-list = [ - "high-value-domain.*" # for testing - ] - ip-list = [ - # using reverse zones in the vinyldns/bind9 docker image for testing - "192.0.1.252", - "192.0.1.253", - "192.0.2.252", - "192.0.2.253", - "192.0.3.252", - "192.0.3.253", - "192.0.4.252", - "192.0.4.253", - "fd69:27cc:fe91:0:0:0:0:ffff", - "fd69:27cc:fe91:0:0:0:ffff:0", - "fd69:27cc:fe92:0:0:0:0:ffff", - "fd69:27cc:fe92:0:0:0:ffff:0", - "fd69:27cc:fe93:0:0:0:0:ffff", - "fd69:27cc:fe93:0:0:0:ffff:0", - "fd69:27cc:fe94:0:0:0:0:ffff", - "fd69:27cc:fe94:0:0:0:ffff:0" - ] - } - - # types of unowned records that users can access in shared zones - shared-approved-types = ["A", "AAAA", "CNAME", "PTR", "TXT"] - - manual-batch-review-enabled = true - - scheduled-changes-enabled = true - - multi-record-batch-change-enabled = true - - global-acl-rules = [ - { - group-ids: ["global-acl-group-id"], - fqdn-regex-list: [".*shared[0-9]{1}."] - }, - { - group-ids: ["another-global-acl-group"], - fqdn-regex-list: [".*ok[0-9]{1}."] - } - ] -} - -akka { - loglevel = "INFO" - loggers = ["akka.event.slf4j.Slf4jLogger"] - logging-filter = "akka.event.slf4j.Slf4jLoggingFilter" - logger-startup-timeout = 30s - - actor { - provider = "akka.actor.LocalActorRefProvider" - } -} - -akka.http { - server { - # The time period within which the TCP binding process must be completed. - # Set to `infinite` to disable. - bind-timeout = 5s - - # Show verbose error messages back to the client - verbose-error-messages = on - } - - parsing { - # Spray doesn't like the AWS4 headers - illegal-header-warnings = on - } -} diff --git a/docker/api/logback.xml b/docker/api/logback.xml deleted file mode 100644 index 4146a79c5..000000000 --- a/docker/api/logback.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - %d [test] %-5p | \(%logger{4}:%line\) | %msg %n - - - - - - - diff --git a/docker/api/run.sh b/docker/api/run.sh deleted file mode 100755 index 11e0a80eb..000000000 --- a/docker/api/run.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env bash - -# gets the docker-ized ip address, sets it to an environment variable -export APP_HOST=`ip addr show eth0 | grep 'inet ' | awk '{print $2}' | cut -f1 -d'/'` - -export MYSQL_ADDRESS="vinyldns-mysql" -export MYSQL_PORT=3306 -export JDBC_USER=root -export JDBC_PASSWORD=pass -export JDBC_URL="jdbc:mariadb://${MYSQL_ADDRESS}:${MYSQL_PORT}/vinyldns?user=${JDBC_USER}&password=${JDBC_PASSWORD}" -export JDBC_MIGRATION_URL="jdbc:mariadb://${MYSQL_ADDRESS}:${MYSQL_PORT}/?user=${JDBC_USER}&password=${JDBC_PASSWORD}" - -# wait until mysql is ready... -echo 'Waiting for MYSQL to be ready...' -DATA="" -RETRY=40 -SLEEP_DURATION=1 -while [ "$RETRY" -gt 0 ] -do - DATA=$(nc -vzw1 ${MYSQL_ADDRESS} ${MYSQL_PORT}) - if [ $? -eq 0 ] - then - break - else - echo "Retrying" >&2 - - let RETRY-=1 - sleep "$SLEEP_DURATION" - - if [ "$RETRY" -eq 0 ] - then - echo "Exceeded retries waiting for MYSQL to be ready, failing" - return 1 - fi - fi -done - -echo "Starting up Vinyl..." -sleep 2 -java -Djava.net.preferIPv4Stack=true -Dconfig.file=/app/docker.conf -Dakka.loglevel=INFO -Dlogback.configurationFile=/app/logback.xml -jar /app/vinyldns-server.jar vinyldns.api.Boot - diff --git a/docker/docker-compose-quick-start.yml b/docker/docker-compose-quick-start.yml deleted file mode 100644 index 39fcefda0..000000000 --- a/docker/docker-compose-quick-start.yml +++ /dev/null @@ -1,68 +0,0 @@ -version: "3.0" -services: - mysql: - image: "mysql:5.7" - env_file: - .env.quickstart - container_name: "vinyldns-mysql" - ports: - - "19002:3306" - - bind9: - image: "vinyldns/bind9:0.0.5" - env_file: - .env.quickstart - container_name: "vinyldns-bind9" - ports: - - "19001:53/udp" - - "19001:53" - volumes: - - ./bind9/etc:/var/cache/bind/config - - ./bind9/zones:/var/cache/bind/zones - - localstack: - image: localstack/localstack:0.10.4 - container_name: "vinyldns-localstack" - ports: - - "19006:19006" - - "19007:19007" - - "19009:19009" - environment: - - SERVICES=sns:19006,sqs:19007,route53:19009 - - START_WEB=0 - - HOSTNAME_EXTERNAL=vinyldns-localstack - - ldap: - image: rroemhild/test-openldap - container_name: "vinyldns-ldap" - ports: - - "19008:389" - - api: - image: "vinyldns/api:${VINYLDNS_VERSION}" - env_file: - .env.quickstart - container_name: "vinyldns-api" - ports: - - "${REST_PORT}:${REST_PORT}" - volumes: - - ./api/docker.conf:/opt/docker/conf/application.conf - - ./api/logback.xml:/opt/docker/conf/logback.xml - depends_on: - - mysql - - bind9 - - localstack - - portal: - image: "vinyldns/portal:${VINYLDNS_VERSION}" - env_file: - .env.quickstart - ports: - - "${PORTAL_PORT}:${PORTAL_PORT}" - container_name: "vinyldns-portal" - volumes: - - ./portal/application.ini:/opt/docker/conf/application.ini - - ./portal/application.conf:/opt/docker/conf/application.conf - depends_on: - - api - - ldap diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml deleted file mode 100644 index e11a52fba..000000000 --- a/docker/docker-compose.yml +++ /dev/null @@ -1,41 +0,0 @@ -version: "3.0" -services: - mysql: - image: mysql:5.7 - env_file: - .env - ports: - - "19002:3306" - - bind9: - image: vinyldns/bind9:0.0.5 - env_file: - .env - ports: - - "19001:53/udp" - - "19001:53" - volumes: - - ./bind9/etc:/var/cache/bind/config - - ./bind9/zones:/var/cache/bind/zones - - localstack: - image: localstack/localstack:0.10.4 - ports: - - "19006:19006" - - "19007:19007" - - "19009:19009" - environment: - - SERVICES=sns:19006,sqs:19007,route53:19009 - - START_WEB=0 - - mail: - image: flaviovs/mock-smtp:0.0.2 - ports: - - "19025:25" - volumes: - - ./email:/var/lib/mock-smtp - - ldap: - image: rroemhild/test-openldap:latest - ports: - - "19008:389" diff --git a/modules/api/src/it/scala/vinyldns/api/domain/zone/ZoneViewLoaderIntegrationSpec.scala b/modules/api/src/it/scala/vinyldns/api/domain/zone/ZoneViewLoaderIntegrationSpec.scala index 281939398..c04795003 100644 --- a/modules/api/src/it/scala/vinyldns/api/domain/zone/ZoneViewLoaderIntegrationSpec.scala +++ b/modules/api/src/it/scala/vinyldns/api/domain/zone/ZoneViewLoaderIntegrationSpec.scala @@ -1,4 +1,3 @@ - /* * Copyright 2018 Comcast Cable Communications Management, LLC * diff --git a/modules/mysql/src/main/scala/vinyldns/mysql/MySqlConnector.scala b/modules/mysql/src/main/scala/vinyldns/mysql/MySqlConnector.scala index d0bc286e4..25c25b56b 100644 --- a/modules/mysql/src/main/scala/vinyldns/mysql/MySqlConnector.scala +++ b/modules/mysql/src/main/scala/vinyldns/mysql/MySqlConnector.scala @@ -22,6 +22,7 @@ import org.flywaydb.core.Flyway import org.slf4j.LoggerFactory import scala.collection.JavaConverters._ +import scala.util.{Failure, Success, Try} object MySqlConnector { @@ -44,20 +45,21 @@ object MySqlConnector { getDataSource(migrationConnectionSettings).map { migrationDataSource => logger.info("Running migrations to ready the databases") - val migration = new Flyway() - migration.setDataSource(migrationDataSource) + val placeholders = Map("dbName" -> config.name) + val migration = Flyway + .configure() + .dataSource(migrationDataSource) + .placeholders(placeholders.asJava) + .schemas(config.name) + // flyway changed the default schema table name in v5.0.0 // this allows to revert to an old naming convention if needed config.migrationSchemaTable.foreach { tableName => - migration.setTable(tableName) + migration.table(tableName) } - val placeholders = Map("dbName" -> config.name) - migration.setPlaceholders(placeholders.asJava) - migration.setSchemas(config.name) - // Runs flyway migrations - migration.migrate() + migration.load().migrate() logger.info("migrations complete") } } @@ -85,6 +87,20 @@ object MySqlConnector { case (k, v) => dsConfig.addDataSourceProperty(k, v) } - new HikariDataSource(dsConfig) + def retry[T](times: Int, delayMs: Int)(op: => T) = + Iterator + .range(0, times) + .map(_ => Try(op)) + .flatMap { + case Success(t) => Some(t) + case Failure(_) => + logger.warn("failed to startup database connection, retrying..") + Thread.sleep(delayMs) + None + } + .toSeq + .head + + retry(60, 1000) { new HikariDataSource(dsConfig) } } } diff --git a/modules/portal/README.md b/modules/portal/README.md index c87d05f80..faa7fb02a 100644 --- a/modules/portal/README.md +++ b/modules/portal/README.md @@ -1,4 +1,4 @@ -# Vinyl Portal +# VinylDNS Portal Supplies a UI for and offers authentication into Vinyl, a DNSaaS offering. # Running Unit Tests @@ -7,18 +7,7 @@ First, startup sbt: `sbt`. Next, you can run all tests by simply running `test`, or you can run an individual test by running `test-only *MySpec` # Running Frontend Tests -The frontend code is tested using Jasmine, spec files are stored in the same directory as the angular js files. -For example, the public/lib/controllers has both the controller files and the specs for those controllers. To run -these tests the command is `grunt unit` - -# Running Functional Tests -As of now, we have a functional testing harness that gets things set up, and a single test which tests if the login page -loads successfully. Run the following commands from the vinyl-portal folder as well, we are not using a VM for testing -at this time. - -`./run_all_tests.sh` will run the unit tests (`sbt clean coverage test`), and then set up and run the func tests - -`./run_func_tests.sh` will only set up and run the func tests +The front end tests can be run from the `test/portal/fuctional` directory by simply running `make`. # Building Locally @@ -42,8 +31,7 @@ available so that you can start the portal locally and test. `sbt -Djavax.net.ssl.trustStore="./private/trustStore.jks"` # Updating the trustStore Certificates -Sometime on or before May 05, 2020 the certificates securing the AD servers will need to be renewed and updated. -When this happens or some other event causes the LDAP lookup to fail because of SSL certificate issues, follow +When some event causes the LDAP lookup to fail because of SSL certificate issues, follow the following steps to update the trustStore with the new certificates. - Get the new certificate with `openssl s_client -connect :`. This will display the certificate on the screen. - Copy everything from `-----BEGIN CERTIFICATE-----` to `-----END CERTIFICATE-----` including the begin and end markers to the clipboard. @@ -56,10 +44,3 @@ the following steps to update the trustStore with the new certificates. - Answer yes to trust the certificate The trustStore is now updated with the new certificate. You can delete the certificate file it is no longer needed. - -# Credits - -* [logback-classic](https://github.com/qos-ch/logback) - [Eclipse Public License 1.0](https://www.eclipse.org/legal/epl-v10.html) -* [logback-core](https://github.com/qos-ch/logback) - [Eclipse Public License 1.0](https://www.eclipse.org/legal/epl-v10.html) -* [htmlunit](http://htmlunit.sourceforge.net/) - * [htmlunit-core-js](https://github.com/HtmlUnit/htmlunit-core-js) - [Mozilla Public License v2.0](https://www.mozilla.org/en-US/MPL/2.0/) diff --git a/modules/portal/dist/wait-for-dependencies.sh b/modules/portal/dist/wait-for-dependencies.sh deleted file mode 100755 index 4222ff00c..000000000 --- a/modules/portal/dist/wait-for-dependencies.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env bash - -# allow skipping with env var -if [ "$SKIP_MYSQL_WAIT" -eq "1" ]; then - exit 0 -fi - -# the mysql address, default to a local docker setup -MYSQL_ADDRESS=${MYSQL_ADDRESS:-vinyldns-mysql} -MYSQL_PORT=${MYSQL_PORT:-3306} -echo "Waiting for MYSQL to be ready on ${MYSQL_ADDRESS}:${MYSQL_PORT}" -DATA="" -RETRY=30 -while [ "$RETRY" -gt 0 ] -do - DATA=$(nc -vzw1 "$MYSQL_ADDRESS" "$MYSQL_PORT") - if [ $? -eq 0 ] - then - break - else - echo "Retrying" >&2 - - let RETRY-=1 - sleep .5 - - if [ "$RETRY" -eq 0 ] - then - echo "Exceeded retries waiting for MYSQL to be ready on ${MYSQL_ADDRESS}:${MYSQL_PORT}, failing" - return 1 - fi - fi -done diff --git a/modules/portal/prepare-portal.sh b/modules/portal/prepare-portal.sh index 757d3e114..83fc6ee9f 100755 --- a/modules/portal/prepare-portal.sh +++ b/modules/portal/prepare-portal.sh @@ -7,6 +7,6 @@ npm install -f npm install grunt -g -f grunt default -$DIR/../../bin/add-license-headers.sh -d=$DIR/public/lib -f=js +$DIR/../../utils/add-license-headers.sh -d=$DIR/public/lib -f=js cd - diff --git a/quickstart/.env b/quickstart/.env new file mode 100644 index 000000000..f58d13e4b --- /dev/null +++ b/quickstart/.env @@ -0,0 +1,17 @@ +REST_PORT=9000 + +# portal settings +PORTAL_PORT=9001 +PLAY_HTTP_SECRET_KEY=change-this-for-prod +VINYLDNS_BACKEND_URL=http://vinyldns-integration:9000 + +SQS_ENDPOINT=http://vinyldns-integration:19003 +MYSQL_ENDPOINT=vinyldns-integration:19002 +TEST_LOGIN=true + +JDBC_DRIVER=org.mariadb.jdbc.Driver +JDBC_URL=jdbc:mariadb://vinyldns-integration:19002/vinyldns?user=root&password=pass +JDBC_MIGRATION_URL=jdbc:mariadb://vinyldns-integration:19002/?user=root&password=pass +JDBC_USER=root +JDBC_PASSWORD=pass +DEFAULT_DNS_ADDRESS=127.0.0.1:19001 diff --git a/docker/bind9/README.md b/quickstart/bind9/README.md similarity index 100% rename from docker/bind9/README.md rename to quickstart/bind9/README.md diff --git a/docker/bind9/etc/_template/named.partition.conf b/quickstart/bind9/etc/_template/named.partition.conf similarity index 100% rename from docker/bind9/etc/_template/named.partition.conf rename to quickstart/bind9/etc/_template/named.partition.conf diff --git a/docker/bind9/etc/named.conf.local b/quickstart/bind9/etc/named.conf.local old mode 100755 new mode 100644 similarity index 100% rename from docker/bind9/etc/named.conf.local rename to quickstart/bind9/etc/named.conf.local diff --git a/docker/bind9/etc/named.conf.partition1 b/quickstart/bind9/etc/named.conf.partition1 similarity index 100% rename from docker/bind9/etc/named.conf.partition1 rename to quickstart/bind9/etc/named.conf.partition1 diff --git a/docker/bind9/etc/named.conf.partition2 b/quickstart/bind9/etc/named.conf.partition2 similarity index 100% rename from docker/bind9/etc/named.conf.partition2 rename to quickstart/bind9/etc/named.conf.partition2 diff --git a/docker/bind9/etc/named.conf.partition3 b/quickstart/bind9/etc/named.conf.partition3 similarity index 100% rename from docker/bind9/etc/named.conf.partition3 rename to quickstart/bind9/etc/named.conf.partition3 diff --git a/docker/bind9/etc/named.conf.partition4 b/quickstart/bind9/etc/named.conf.partition4 similarity index 100% rename from docker/bind9/etc/named.conf.partition4 rename to quickstart/bind9/etc/named.conf.partition4 diff --git a/docker/bind9/zones/_template/0.0.0.1.1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa b/quickstart/bind9/zones/_template/0.0.0.1.1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa similarity index 100% rename from docker/bind9/zones/_template/0.0.0.1.1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa rename to quickstart/bind9/zones/_template/0.0.0.1.1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa diff --git a/docker/bind9/zones/_template/1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa b/quickstart/bind9/zones/_template/1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa similarity index 100% rename from docker/bind9/zones/_template/1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa rename to quickstart/bind9/zones/_template/1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa diff --git a/docker/bind9/zones/_template/10.10.in-addr.arpa b/quickstart/bind9/zones/_template/10.10.in-addr.arpa similarity index 100% rename from docker/bind9/zones/_template/10.10.in-addr.arpa rename to quickstart/bind9/zones/_template/10.10.in-addr.arpa diff --git a/docker/bind9/zones/_template/192^30.2.0.192.in-addr.arpa b/quickstart/bind9/zones/_template/192^30.2.0.192.in-addr.arpa similarity index 100% rename from docker/bind9/zones/_template/192^30.2.0.192.in-addr.arpa rename to quickstart/bind9/zones/_template/192^30.2.0.192.in-addr.arpa diff --git a/docker/bind9/zones/_template/2.0.192.in-addr.arpa b/quickstart/bind9/zones/_template/2.0.192.in-addr.arpa similarity index 100% rename from docker/bind9/zones/_template/2.0.192.in-addr.arpa rename to quickstart/bind9/zones/_template/2.0.192.in-addr.arpa diff --git a/docker/bind9/zones/_template/child.parent.com.hosts b/quickstart/bind9/zones/_template/child.parent.com.hosts similarity index 100% rename from docker/bind9/zones/_template/child.parent.com.hosts rename to quickstart/bind9/zones/_template/child.parent.com.hosts diff --git a/docker/bind9/zones/_template/dskey.example.com.hosts b/quickstart/bind9/zones/_template/dskey.example.com.hosts similarity index 100% rename from docker/bind9/zones/_template/dskey.example.com.hosts rename to quickstart/bind9/zones/_template/dskey.example.com.hosts diff --git a/docker/bind9/zones/_template/dummy.hosts b/quickstart/bind9/zones/_template/dummy.hosts similarity index 100% rename from docker/bind9/zones/_template/dummy.hosts rename to quickstart/bind9/zones/_template/dummy.hosts diff --git a/docker/bind9/zones/_template/example.com.hosts b/quickstart/bind9/zones/_template/example.com.hosts similarity index 100% rename from docker/bind9/zones/_template/example.com.hosts rename to quickstart/bind9/zones/_template/example.com.hosts diff --git a/docker/bind9/zones/_template/invalid-zone.hosts b/quickstart/bind9/zones/_template/invalid-zone.hosts similarity index 100% rename from docker/bind9/zones/_template/invalid-zone.hosts rename to quickstart/bind9/zones/_template/invalid-zone.hosts diff --git a/docker/bind9/zones/_template/list-records.hosts b/quickstart/bind9/zones/_template/list-records.hosts similarity index 100% rename from docker/bind9/zones/_template/list-records.hosts rename to quickstart/bind9/zones/_template/list-records.hosts diff --git a/docker/bind9/zones/_template/list-zones-test-searched-1.hosts b/quickstart/bind9/zones/_template/list-zones-test-searched-1.hosts similarity index 100% rename from docker/bind9/zones/_template/list-zones-test-searched-1.hosts rename to quickstart/bind9/zones/_template/list-zones-test-searched-1.hosts diff --git a/docker/bind9/zones/_template/list-zones-test-searched-2.hosts b/quickstart/bind9/zones/_template/list-zones-test-searched-2.hosts similarity index 100% rename from docker/bind9/zones/_template/list-zones-test-searched-2.hosts rename to quickstart/bind9/zones/_template/list-zones-test-searched-2.hosts diff --git a/docker/bind9/zones/_template/list-zones-test-searched-3.hosts b/quickstart/bind9/zones/_template/list-zones-test-searched-3.hosts similarity index 100% rename from docker/bind9/zones/_template/list-zones-test-searched-3.hosts rename to quickstart/bind9/zones/_template/list-zones-test-searched-3.hosts diff --git a/docker/bind9/zones/_template/list-zones-test-unfiltered-1.hosts b/quickstart/bind9/zones/_template/list-zones-test-unfiltered-1.hosts similarity index 100% rename from docker/bind9/zones/_template/list-zones-test-unfiltered-1.hosts rename to quickstart/bind9/zones/_template/list-zones-test-unfiltered-1.hosts diff --git a/docker/bind9/zones/_template/list-zones-test-unfiltered-2.hosts b/quickstart/bind9/zones/_template/list-zones-test-unfiltered-2.hosts similarity index 100% rename from docker/bind9/zones/_template/list-zones-test-unfiltered-2.hosts rename to quickstart/bind9/zones/_template/list-zones-test-unfiltered-2.hosts diff --git a/docker/bind9/zones/_template/non.test.shared.hosts b/quickstart/bind9/zones/_template/non.test.shared.hosts similarity index 100% rename from docker/bind9/zones/_template/non.test.shared.hosts rename to quickstart/bind9/zones/_template/non.test.shared.hosts diff --git a/docker/bind9/zones/_template/not.loaded.hosts b/quickstart/bind9/zones/_template/not.loaded.hosts similarity index 100% rename from docker/bind9/zones/_template/not.loaded.hosts rename to quickstart/bind9/zones/_template/not.loaded.hosts diff --git a/docker/bind9/zones/_template/ok.hosts b/quickstart/bind9/zones/_template/ok.hosts similarity index 100% rename from docker/bind9/zones/_template/ok.hosts rename to quickstart/bind9/zones/_template/ok.hosts diff --git a/docker/bind9/zones/_template/old-shared.hosts b/quickstart/bind9/zones/_template/old-shared.hosts similarity index 100% rename from docker/bind9/zones/_template/old-shared.hosts rename to quickstart/bind9/zones/_template/old-shared.hosts diff --git a/docker/bind9/zones/_template/old-vinyldns2.hosts b/quickstart/bind9/zones/_template/old-vinyldns2.hosts similarity index 100% rename from docker/bind9/zones/_template/old-vinyldns2.hosts rename to quickstart/bind9/zones/_template/old-vinyldns2.hosts diff --git a/docker/bind9/zones/_template/old-vinyldns3.hosts b/quickstart/bind9/zones/_template/old-vinyldns3.hosts similarity index 100% rename from docker/bind9/zones/_template/old-vinyldns3.hosts rename to quickstart/bind9/zones/_template/old-vinyldns3.hosts diff --git a/docker/bind9/zones/_template/one-time-shared.hosts b/quickstart/bind9/zones/_template/one-time-shared.hosts similarity index 100% rename from docker/bind9/zones/_template/one-time-shared.hosts rename to quickstart/bind9/zones/_template/one-time-shared.hosts diff --git a/docker/bind9/zones/_template/one-time.hosts b/quickstart/bind9/zones/_template/one-time.hosts similarity index 100% rename from docker/bind9/zones/_template/one-time.hosts rename to quickstart/bind9/zones/_template/one-time.hosts diff --git a/docker/bind9/zones/_template/open.hosts b/quickstart/bind9/zones/_template/open.hosts similarity index 100% rename from docker/bind9/zones/_template/open.hosts rename to quickstart/bind9/zones/_template/open.hosts diff --git a/docker/bind9/zones/_template/parent.com.hosts b/quickstart/bind9/zones/_template/parent.com.hosts similarity index 100% rename from docker/bind9/zones/_template/parent.com.hosts rename to quickstart/bind9/zones/_template/parent.com.hosts diff --git a/docker/bind9/zones/_template/shared.hosts b/quickstart/bind9/zones/_template/shared.hosts similarity index 100% rename from docker/bind9/zones/_template/shared.hosts rename to quickstart/bind9/zones/_template/shared.hosts diff --git a/docker/bind9/zones/_template/sync-test.hosts b/quickstart/bind9/zones/_template/sync-test.hosts similarity index 100% rename from docker/bind9/zones/_template/sync-test.hosts rename to quickstart/bind9/zones/_template/sync-test.hosts diff --git a/docker/bind9/zones/_template/system-test-history.hosts b/quickstart/bind9/zones/_template/system-test-history.hosts similarity index 100% rename from docker/bind9/zones/_template/system-test-history.hosts rename to quickstart/bind9/zones/_template/system-test-history.hosts diff --git a/docker/bind9/zones/_template/system-test.hosts b/quickstart/bind9/zones/_template/system-test.hosts similarity index 100% rename from docker/bind9/zones/_template/system-test.hosts rename to quickstart/bind9/zones/_template/system-test.hosts diff --git a/docker/bind9/zones/_template/vinyldns.hosts b/quickstart/bind9/zones/_template/vinyldns.hosts similarity index 100% rename from docker/bind9/zones/_template/vinyldns.hosts rename to quickstart/bind9/zones/_template/vinyldns.hosts diff --git a/docker/bind9/zones/_template/zone.requires.review.hosts b/quickstart/bind9/zones/_template/zone.requires.review.hosts similarity index 100% rename from docker/bind9/zones/_template/zone.requires.review.hosts rename to quickstart/bind9/zones/_template/zone.requires.review.hosts diff --git a/docker/bind9/zones/partition1/0.0.0.1.1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa b/quickstart/bind9/zones/partition1/0.0.0.1.1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa similarity index 100% rename from docker/bind9/zones/partition1/0.0.0.1.1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa rename to quickstart/bind9/zones/partition1/0.0.0.1.1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa diff --git a/docker/bind9/zones/partition1/1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa b/quickstart/bind9/zones/partition1/1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa similarity index 100% rename from docker/bind9/zones/partition1/1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa rename to quickstart/bind9/zones/partition1/1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa diff --git a/docker/bind9/zones/partition1/10.10.in-addr.arpa b/quickstart/bind9/zones/partition1/10.10.in-addr.arpa similarity index 100% rename from docker/bind9/zones/partition1/10.10.in-addr.arpa rename to quickstart/bind9/zones/partition1/10.10.in-addr.arpa diff --git a/docker/bind9/zones/partition1/192^30.2.0.192.in-addr.arpa b/quickstart/bind9/zones/partition1/192^30.2.0.192.in-addr.arpa similarity index 100% rename from docker/bind9/zones/partition1/192^30.2.0.192.in-addr.arpa rename to quickstart/bind9/zones/partition1/192^30.2.0.192.in-addr.arpa diff --git a/docker/bind9/zones/partition1/2.0.192.in-addr.arpa b/quickstart/bind9/zones/partition1/2.0.192.in-addr.arpa similarity index 100% rename from docker/bind9/zones/partition1/2.0.192.in-addr.arpa rename to quickstart/bind9/zones/partition1/2.0.192.in-addr.arpa diff --git a/docker/bind9/zones/partition1/child.parent.com.hosts b/quickstart/bind9/zones/partition1/child.parent.com.hosts similarity index 100% rename from docker/bind9/zones/partition1/child.parent.com.hosts rename to quickstart/bind9/zones/partition1/child.parent.com.hosts diff --git a/docker/bind9/zones/partition1/dskey.example.com.hosts b/quickstart/bind9/zones/partition1/dskey.example.com.hosts similarity index 100% rename from docker/bind9/zones/partition1/dskey.example.com.hosts rename to quickstart/bind9/zones/partition1/dskey.example.com.hosts diff --git a/docker/bind9/zones/partition1/dummy.hosts b/quickstart/bind9/zones/partition1/dummy.hosts similarity index 100% rename from docker/bind9/zones/partition1/dummy.hosts rename to quickstart/bind9/zones/partition1/dummy.hosts diff --git a/docker/bind9/zones/partition1/example.com.hosts b/quickstart/bind9/zones/partition1/example.com.hosts similarity index 100% rename from docker/bind9/zones/partition1/example.com.hosts rename to quickstart/bind9/zones/partition1/example.com.hosts diff --git a/docker/bind9/zones/partition1/invalid-zone.hosts b/quickstart/bind9/zones/partition1/invalid-zone.hosts similarity index 100% rename from docker/bind9/zones/partition1/invalid-zone.hosts rename to quickstart/bind9/zones/partition1/invalid-zone.hosts diff --git a/docker/bind9/zones/partition1/list-records.hosts b/quickstart/bind9/zones/partition1/list-records.hosts similarity index 100% rename from docker/bind9/zones/partition1/list-records.hosts rename to quickstart/bind9/zones/partition1/list-records.hosts diff --git a/docker/bind9/zones/partition1/list-zones-test-searched-1.hosts b/quickstart/bind9/zones/partition1/list-zones-test-searched-1.hosts similarity index 100% rename from docker/bind9/zones/partition1/list-zones-test-searched-1.hosts rename to quickstart/bind9/zones/partition1/list-zones-test-searched-1.hosts diff --git a/docker/bind9/zones/partition1/list-zones-test-searched-2.hosts b/quickstart/bind9/zones/partition1/list-zones-test-searched-2.hosts similarity index 100% rename from docker/bind9/zones/partition1/list-zones-test-searched-2.hosts rename to quickstart/bind9/zones/partition1/list-zones-test-searched-2.hosts diff --git a/docker/bind9/zones/partition1/list-zones-test-searched-3.hosts b/quickstart/bind9/zones/partition1/list-zones-test-searched-3.hosts similarity index 100% rename from docker/bind9/zones/partition1/list-zones-test-searched-3.hosts rename to quickstart/bind9/zones/partition1/list-zones-test-searched-3.hosts diff --git a/docker/bind9/zones/partition1/list-zones-test-unfiltered-1.hosts b/quickstart/bind9/zones/partition1/list-zones-test-unfiltered-1.hosts similarity index 100% rename from docker/bind9/zones/partition1/list-zones-test-unfiltered-1.hosts rename to quickstart/bind9/zones/partition1/list-zones-test-unfiltered-1.hosts diff --git a/docker/bind9/zones/partition1/list-zones-test-unfiltered-2.hosts b/quickstart/bind9/zones/partition1/list-zones-test-unfiltered-2.hosts similarity index 100% rename from docker/bind9/zones/partition1/list-zones-test-unfiltered-2.hosts rename to quickstart/bind9/zones/partition1/list-zones-test-unfiltered-2.hosts diff --git a/docker/bind9/zones/partition1/non.test.shared.hosts b/quickstart/bind9/zones/partition1/non.test.shared.hosts similarity index 100% rename from docker/bind9/zones/partition1/non.test.shared.hosts rename to quickstart/bind9/zones/partition1/non.test.shared.hosts diff --git a/docker/bind9/zones/partition1/not.loaded.hosts b/quickstart/bind9/zones/partition1/not.loaded.hosts similarity index 100% rename from docker/bind9/zones/partition1/not.loaded.hosts rename to quickstart/bind9/zones/partition1/not.loaded.hosts diff --git a/docker/bind9/zones/partition1/ok.hosts b/quickstart/bind9/zones/partition1/ok.hosts similarity index 100% rename from docker/bind9/zones/partition1/ok.hosts rename to quickstart/bind9/zones/partition1/ok.hosts diff --git a/docker/bind9/zones/partition1/old-shared.hosts b/quickstart/bind9/zones/partition1/old-shared.hosts similarity index 100% rename from docker/bind9/zones/partition1/old-shared.hosts rename to quickstart/bind9/zones/partition1/old-shared.hosts diff --git a/docker/bind9/zones/partition1/old-vinyldns2.hosts b/quickstart/bind9/zones/partition1/old-vinyldns2.hosts similarity index 100% rename from docker/bind9/zones/partition1/old-vinyldns2.hosts rename to quickstart/bind9/zones/partition1/old-vinyldns2.hosts diff --git a/docker/bind9/zones/partition1/old-vinyldns3.hosts b/quickstart/bind9/zones/partition1/old-vinyldns3.hosts similarity index 100% rename from docker/bind9/zones/partition1/old-vinyldns3.hosts rename to quickstart/bind9/zones/partition1/old-vinyldns3.hosts diff --git a/docker/bind9/zones/partition1/one-time-shared.hosts b/quickstart/bind9/zones/partition1/one-time-shared.hosts similarity index 100% rename from docker/bind9/zones/partition1/one-time-shared.hosts rename to quickstart/bind9/zones/partition1/one-time-shared.hosts diff --git a/docker/bind9/zones/partition1/one-time.hosts b/quickstart/bind9/zones/partition1/one-time.hosts similarity index 100% rename from docker/bind9/zones/partition1/one-time.hosts rename to quickstart/bind9/zones/partition1/one-time.hosts diff --git a/docker/bind9/zones/partition1/open.hosts b/quickstart/bind9/zones/partition1/open.hosts similarity index 100% rename from docker/bind9/zones/partition1/open.hosts rename to quickstart/bind9/zones/partition1/open.hosts diff --git a/docker/bind9/zones/partition1/parent.com.hosts b/quickstart/bind9/zones/partition1/parent.com.hosts similarity index 100% rename from docker/bind9/zones/partition1/parent.com.hosts rename to quickstart/bind9/zones/partition1/parent.com.hosts diff --git a/docker/bind9/zones/partition1/shared.hosts b/quickstart/bind9/zones/partition1/shared.hosts similarity index 100% rename from docker/bind9/zones/partition1/shared.hosts rename to quickstart/bind9/zones/partition1/shared.hosts diff --git a/docker/bind9/zones/partition1/sync-test.hosts b/quickstart/bind9/zones/partition1/sync-test.hosts similarity index 100% rename from docker/bind9/zones/partition1/sync-test.hosts rename to quickstart/bind9/zones/partition1/sync-test.hosts diff --git a/docker/bind9/zones/partition1/system-test-history.hosts b/quickstart/bind9/zones/partition1/system-test-history.hosts similarity index 100% rename from docker/bind9/zones/partition1/system-test-history.hosts rename to quickstart/bind9/zones/partition1/system-test-history.hosts diff --git a/docker/bind9/zones/partition1/system-test.hosts b/quickstart/bind9/zones/partition1/system-test.hosts similarity index 100% rename from docker/bind9/zones/partition1/system-test.hosts rename to quickstart/bind9/zones/partition1/system-test.hosts diff --git a/docker/bind9/zones/partition1/vinyldns.hosts b/quickstart/bind9/zones/partition1/vinyldns.hosts similarity index 100% rename from docker/bind9/zones/partition1/vinyldns.hosts rename to quickstart/bind9/zones/partition1/vinyldns.hosts diff --git a/docker/bind9/zones/partition1/zone.requires.review.hosts b/quickstart/bind9/zones/partition1/zone.requires.review.hosts similarity index 100% rename from docker/bind9/zones/partition1/zone.requires.review.hosts rename to quickstart/bind9/zones/partition1/zone.requires.review.hosts diff --git a/docker/bind9/zones/partition2/0.0.0.1.1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa b/quickstart/bind9/zones/partition2/0.0.0.1.1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa similarity index 100% rename from docker/bind9/zones/partition2/0.0.0.1.1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa rename to quickstart/bind9/zones/partition2/0.0.0.1.1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa diff --git a/docker/bind9/zones/partition2/1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa b/quickstart/bind9/zones/partition2/1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa similarity index 100% rename from docker/bind9/zones/partition2/1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa rename to quickstart/bind9/zones/partition2/1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa diff --git a/docker/bind9/zones/partition2/10.10.in-addr.arpa b/quickstart/bind9/zones/partition2/10.10.in-addr.arpa similarity index 100% rename from docker/bind9/zones/partition2/10.10.in-addr.arpa rename to quickstart/bind9/zones/partition2/10.10.in-addr.arpa diff --git a/docker/bind9/zones/partition2/192^30.2.0.192.in-addr.arpa b/quickstart/bind9/zones/partition2/192^30.2.0.192.in-addr.arpa similarity index 100% rename from docker/bind9/zones/partition2/192^30.2.0.192.in-addr.arpa rename to quickstart/bind9/zones/partition2/192^30.2.0.192.in-addr.arpa diff --git a/docker/bind9/zones/partition2/2.0.192.in-addr.arpa b/quickstart/bind9/zones/partition2/2.0.192.in-addr.arpa similarity index 100% rename from docker/bind9/zones/partition2/2.0.192.in-addr.arpa rename to quickstart/bind9/zones/partition2/2.0.192.in-addr.arpa diff --git a/docker/bind9/zones/partition2/child.parent.com.hosts b/quickstart/bind9/zones/partition2/child.parent.com.hosts similarity index 100% rename from docker/bind9/zones/partition2/child.parent.com.hosts rename to quickstart/bind9/zones/partition2/child.parent.com.hosts diff --git a/docker/bind9/zones/partition2/dskey.example.com.hosts b/quickstart/bind9/zones/partition2/dskey.example.com.hosts similarity index 100% rename from docker/bind9/zones/partition2/dskey.example.com.hosts rename to quickstart/bind9/zones/partition2/dskey.example.com.hosts diff --git a/docker/bind9/zones/partition2/dummy.hosts b/quickstart/bind9/zones/partition2/dummy.hosts similarity index 100% rename from docker/bind9/zones/partition2/dummy.hosts rename to quickstart/bind9/zones/partition2/dummy.hosts diff --git a/docker/bind9/zones/partition2/example.com.hosts b/quickstart/bind9/zones/partition2/example.com.hosts similarity index 100% rename from docker/bind9/zones/partition2/example.com.hosts rename to quickstart/bind9/zones/partition2/example.com.hosts diff --git a/docker/bind9/zones/partition2/invalid-zone.hosts b/quickstart/bind9/zones/partition2/invalid-zone.hosts similarity index 100% rename from docker/bind9/zones/partition2/invalid-zone.hosts rename to quickstart/bind9/zones/partition2/invalid-zone.hosts diff --git a/docker/bind9/zones/partition2/list-records.hosts b/quickstart/bind9/zones/partition2/list-records.hosts similarity index 100% rename from docker/bind9/zones/partition2/list-records.hosts rename to quickstart/bind9/zones/partition2/list-records.hosts diff --git a/docker/bind9/zones/partition2/list-zones-test-searched-1.hosts b/quickstart/bind9/zones/partition2/list-zones-test-searched-1.hosts similarity index 100% rename from docker/bind9/zones/partition2/list-zones-test-searched-1.hosts rename to quickstart/bind9/zones/partition2/list-zones-test-searched-1.hosts diff --git a/docker/bind9/zones/partition2/list-zones-test-searched-2.hosts b/quickstart/bind9/zones/partition2/list-zones-test-searched-2.hosts similarity index 100% rename from docker/bind9/zones/partition2/list-zones-test-searched-2.hosts rename to quickstart/bind9/zones/partition2/list-zones-test-searched-2.hosts diff --git a/docker/bind9/zones/partition2/list-zones-test-searched-3.hosts b/quickstart/bind9/zones/partition2/list-zones-test-searched-3.hosts similarity index 100% rename from docker/bind9/zones/partition2/list-zones-test-searched-3.hosts rename to quickstart/bind9/zones/partition2/list-zones-test-searched-3.hosts diff --git a/docker/bind9/zones/partition2/list-zones-test-unfiltered-1.hosts b/quickstart/bind9/zones/partition2/list-zones-test-unfiltered-1.hosts similarity index 100% rename from docker/bind9/zones/partition2/list-zones-test-unfiltered-1.hosts rename to quickstart/bind9/zones/partition2/list-zones-test-unfiltered-1.hosts diff --git a/docker/bind9/zones/partition2/list-zones-test-unfiltered-2.hosts b/quickstart/bind9/zones/partition2/list-zones-test-unfiltered-2.hosts similarity index 100% rename from docker/bind9/zones/partition2/list-zones-test-unfiltered-2.hosts rename to quickstart/bind9/zones/partition2/list-zones-test-unfiltered-2.hosts diff --git a/docker/bind9/zones/partition2/non.test.shared.hosts b/quickstart/bind9/zones/partition2/non.test.shared.hosts similarity index 100% rename from docker/bind9/zones/partition2/non.test.shared.hosts rename to quickstart/bind9/zones/partition2/non.test.shared.hosts diff --git a/docker/bind9/zones/partition2/not.loaded.hosts b/quickstart/bind9/zones/partition2/not.loaded.hosts similarity index 100% rename from docker/bind9/zones/partition2/not.loaded.hosts rename to quickstart/bind9/zones/partition2/not.loaded.hosts diff --git a/docker/bind9/zones/partition2/ok.hosts b/quickstart/bind9/zones/partition2/ok.hosts similarity index 100% rename from docker/bind9/zones/partition2/ok.hosts rename to quickstart/bind9/zones/partition2/ok.hosts diff --git a/docker/bind9/zones/partition2/old-shared.hosts b/quickstart/bind9/zones/partition2/old-shared.hosts similarity index 100% rename from docker/bind9/zones/partition2/old-shared.hosts rename to quickstart/bind9/zones/partition2/old-shared.hosts diff --git a/docker/bind9/zones/partition2/old-vinyldns2.hosts b/quickstart/bind9/zones/partition2/old-vinyldns2.hosts similarity index 100% rename from docker/bind9/zones/partition2/old-vinyldns2.hosts rename to quickstart/bind9/zones/partition2/old-vinyldns2.hosts diff --git a/docker/bind9/zones/partition2/old-vinyldns3.hosts b/quickstart/bind9/zones/partition2/old-vinyldns3.hosts similarity index 100% rename from docker/bind9/zones/partition2/old-vinyldns3.hosts rename to quickstart/bind9/zones/partition2/old-vinyldns3.hosts diff --git a/docker/bind9/zones/partition2/one-time-shared.hosts b/quickstart/bind9/zones/partition2/one-time-shared.hosts similarity index 100% rename from docker/bind9/zones/partition2/one-time-shared.hosts rename to quickstart/bind9/zones/partition2/one-time-shared.hosts diff --git a/docker/bind9/zones/partition2/one-time.hosts b/quickstart/bind9/zones/partition2/one-time.hosts similarity index 100% rename from docker/bind9/zones/partition2/one-time.hosts rename to quickstart/bind9/zones/partition2/one-time.hosts diff --git a/docker/bind9/zones/partition2/open.hosts b/quickstart/bind9/zones/partition2/open.hosts similarity index 100% rename from docker/bind9/zones/partition2/open.hosts rename to quickstart/bind9/zones/partition2/open.hosts diff --git a/docker/bind9/zones/partition2/parent.com.hosts b/quickstart/bind9/zones/partition2/parent.com.hosts similarity index 100% rename from docker/bind9/zones/partition2/parent.com.hosts rename to quickstart/bind9/zones/partition2/parent.com.hosts diff --git a/docker/bind9/zones/partition2/shared.hosts b/quickstart/bind9/zones/partition2/shared.hosts similarity index 100% rename from docker/bind9/zones/partition2/shared.hosts rename to quickstart/bind9/zones/partition2/shared.hosts diff --git a/docker/bind9/zones/partition2/sync-test.hosts b/quickstart/bind9/zones/partition2/sync-test.hosts similarity index 100% rename from docker/bind9/zones/partition2/sync-test.hosts rename to quickstart/bind9/zones/partition2/sync-test.hosts diff --git a/docker/bind9/zones/partition2/system-test-history.hosts b/quickstart/bind9/zones/partition2/system-test-history.hosts similarity index 100% rename from docker/bind9/zones/partition2/system-test-history.hosts rename to quickstart/bind9/zones/partition2/system-test-history.hosts diff --git a/docker/bind9/zones/partition2/system-test.hosts b/quickstart/bind9/zones/partition2/system-test.hosts similarity index 100% rename from docker/bind9/zones/partition2/system-test.hosts rename to quickstart/bind9/zones/partition2/system-test.hosts diff --git a/docker/bind9/zones/partition2/vinyldns.hosts b/quickstart/bind9/zones/partition2/vinyldns.hosts similarity index 100% rename from docker/bind9/zones/partition2/vinyldns.hosts rename to quickstart/bind9/zones/partition2/vinyldns.hosts diff --git a/docker/bind9/zones/partition2/zone.requires.review.hosts b/quickstart/bind9/zones/partition2/zone.requires.review.hosts similarity index 100% rename from docker/bind9/zones/partition2/zone.requires.review.hosts rename to quickstart/bind9/zones/partition2/zone.requires.review.hosts diff --git a/docker/bind9/zones/partition3/0.0.0.1.1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa b/quickstart/bind9/zones/partition3/0.0.0.1.1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa similarity index 100% rename from docker/bind9/zones/partition3/0.0.0.1.1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa rename to quickstart/bind9/zones/partition3/0.0.0.1.1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa diff --git a/docker/bind9/zones/partition3/1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa b/quickstart/bind9/zones/partition3/1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa similarity index 100% rename from docker/bind9/zones/partition3/1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa rename to quickstart/bind9/zones/partition3/1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa diff --git a/docker/bind9/zones/partition3/10.10.in-addr.arpa b/quickstart/bind9/zones/partition3/10.10.in-addr.arpa similarity index 100% rename from docker/bind9/zones/partition3/10.10.in-addr.arpa rename to quickstart/bind9/zones/partition3/10.10.in-addr.arpa diff --git a/docker/bind9/zones/partition3/192^30.2.0.192.in-addr.arpa b/quickstart/bind9/zones/partition3/192^30.2.0.192.in-addr.arpa similarity index 100% rename from docker/bind9/zones/partition3/192^30.2.0.192.in-addr.arpa rename to quickstart/bind9/zones/partition3/192^30.2.0.192.in-addr.arpa diff --git a/docker/bind9/zones/partition3/2.0.192.in-addr.arpa b/quickstart/bind9/zones/partition3/2.0.192.in-addr.arpa similarity index 100% rename from docker/bind9/zones/partition3/2.0.192.in-addr.arpa rename to quickstart/bind9/zones/partition3/2.0.192.in-addr.arpa diff --git a/docker/bind9/zones/partition3/child.parent.com.hosts b/quickstart/bind9/zones/partition3/child.parent.com.hosts similarity index 100% rename from docker/bind9/zones/partition3/child.parent.com.hosts rename to quickstart/bind9/zones/partition3/child.parent.com.hosts diff --git a/docker/bind9/zones/partition3/dskey.example.com.hosts b/quickstart/bind9/zones/partition3/dskey.example.com.hosts similarity index 100% rename from docker/bind9/zones/partition3/dskey.example.com.hosts rename to quickstart/bind9/zones/partition3/dskey.example.com.hosts diff --git a/docker/bind9/zones/partition3/dummy.hosts b/quickstart/bind9/zones/partition3/dummy.hosts similarity index 100% rename from docker/bind9/zones/partition3/dummy.hosts rename to quickstart/bind9/zones/partition3/dummy.hosts diff --git a/docker/bind9/zones/partition3/example.com.hosts b/quickstart/bind9/zones/partition3/example.com.hosts similarity index 100% rename from docker/bind9/zones/partition3/example.com.hosts rename to quickstart/bind9/zones/partition3/example.com.hosts diff --git a/docker/bind9/zones/partition3/invalid-zone.hosts b/quickstart/bind9/zones/partition3/invalid-zone.hosts similarity index 100% rename from docker/bind9/zones/partition3/invalid-zone.hosts rename to quickstart/bind9/zones/partition3/invalid-zone.hosts diff --git a/docker/bind9/zones/partition3/list-records.hosts b/quickstart/bind9/zones/partition3/list-records.hosts similarity index 100% rename from docker/bind9/zones/partition3/list-records.hosts rename to quickstart/bind9/zones/partition3/list-records.hosts diff --git a/docker/bind9/zones/partition3/list-zones-test-searched-1.hosts b/quickstart/bind9/zones/partition3/list-zones-test-searched-1.hosts similarity index 100% rename from docker/bind9/zones/partition3/list-zones-test-searched-1.hosts rename to quickstart/bind9/zones/partition3/list-zones-test-searched-1.hosts diff --git a/docker/bind9/zones/partition3/list-zones-test-searched-2.hosts b/quickstart/bind9/zones/partition3/list-zones-test-searched-2.hosts similarity index 100% rename from docker/bind9/zones/partition3/list-zones-test-searched-2.hosts rename to quickstart/bind9/zones/partition3/list-zones-test-searched-2.hosts diff --git a/docker/bind9/zones/partition3/list-zones-test-searched-3.hosts b/quickstart/bind9/zones/partition3/list-zones-test-searched-3.hosts similarity index 100% rename from docker/bind9/zones/partition3/list-zones-test-searched-3.hosts rename to quickstart/bind9/zones/partition3/list-zones-test-searched-3.hosts diff --git a/docker/bind9/zones/partition3/list-zones-test-unfiltered-1.hosts b/quickstart/bind9/zones/partition3/list-zones-test-unfiltered-1.hosts similarity index 100% rename from docker/bind9/zones/partition3/list-zones-test-unfiltered-1.hosts rename to quickstart/bind9/zones/partition3/list-zones-test-unfiltered-1.hosts diff --git a/docker/bind9/zones/partition3/list-zones-test-unfiltered-2.hosts b/quickstart/bind9/zones/partition3/list-zones-test-unfiltered-2.hosts similarity index 100% rename from docker/bind9/zones/partition3/list-zones-test-unfiltered-2.hosts rename to quickstart/bind9/zones/partition3/list-zones-test-unfiltered-2.hosts diff --git a/docker/bind9/zones/partition3/non.test.shared.hosts b/quickstart/bind9/zones/partition3/non.test.shared.hosts similarity index 100% rename from docker/bind9/zones/partition3/non.test.shared.hosts rename to quickstart/bind9/zones/partition3/non.test.shared.hosts diff --git a/docker/bind9/zones/partition3/not.loaded.hosts b/quickstart/bind9/zones/partition3/not.loaded.hosts similarity index 100% rename from docker/bind9/zones/partition3/not.loaded.hosts rename to quickstart/bind9/zones/partition3/not.loaded.hosts diff --git a/docker/bind9/zones/partition3/ok.hosts b/quickstart/bind9/zones/partition3/ok.hosts similarity index 100% rename from docker/bind9/zones/partition3/ok.hosts rename to quickstart/bind9/zones/partition3/ok.hosts diff --git a/docker/bind9/zones/partition3/old-shared.hosts b/quickstart/bind9/zones/partition3/old-shared.hosts similarity index 100% rename from docker/bind9/zones/partition3/old-shared.hosts rename to quickstart/bind9/zones/partition3/old-shared.hosts diff --git a/docker/bind9/zones/partition3/old-vinyldns2.hosts b/quickstart/bind9/zones/partition3/old-vinyldns2.hosts similarity index 100% rename from docker/bind9/zones/partition3/old-vinyldns2.hosts rename to quickstart/bind9/zones/partition3/old-vinyldns2.hosts diff --git a/docker/bind9/zones/partition3/old-vinyldns3.hosts b/quickstart/bind9/zones/partition3/old-vinyldns3.hosts similarity index 100% rename from docker/bind9/zones/partition3/old-vinyldns3.hosts rename to quickstart/bind9/zones/partition3/old-vinyldns3.hosts diff --git a/docker/bind9/zones/partition3/one-time-shared.hosts b/quickstart/bind9/zones/partition3/one-time-shared.hosts similarity index 100% rename from docker/bind9/zones/partition3/one-time-shared.hosts rename to quickstart/bind9/zones/partition3/one-time-shared.hosts diff --git a/docker/bind9/zones/partition3/one-time.hosts b/quickstart/bind9/zones/partition3/one-time.hosts similarity index 100% rename from docker/bind9/zones/partition3/one-time.hosts rename to quickstart/bind9/zones/partition3/one-time.hosts diff --git a/docker/bind9/zones/partition3/open.hosts b/quickstart/bind9/zones/partition3/open.hosts similarity index 100% rename from docker/bind9/zones/partition3/open.hosts rename to quickstart/bind9/zones/partition3/open.hosts diff --git a/docker/bind9/zones/partition3/parent.com.hosts b/quickstart/bind9/zones/partition3/parent.com.hosts similarity index 100% rename from docker/bind9/zones/partition3/parent.com.hosts rename to quickstart/bind9/zones/partition3/parent.com.hosts diff --git a/docker/bind9/zones/partition3/shared.hosts b/quickstart/bind9/zones/partition3/shared.hosts similarity index 100% rename from docker/bind9/zones/partition3/shared.hosts rename to quickstart/bind9/zones/partition3/shared.hosts diff --git a/docker/bind9/zones/partition3/sync-test.hosts b/quickstart/bind9/zones/partition3/sync-test.hosts similarity index 100% rename from docker/bind9/zones/partition3/sync-test.hosts rename to quickstart/bind9/zones/partition3/sync-test.hosts diff --git a/docker/bind9/zones/partition3/system-test-history.hosts b/quickstart/bind9/zones/partition3/system-test-history.hosts similarity index 100% rename from docker/bind9/zones/partition3/system-test-history.hosts rename to quickstart/bind9/zones/partition3/system-test-history.hosts diff --git a/docker/bind9/zones/partition3/system-test.hosts b/quickstart/bind9/zones/partition3/system-test.hosts similarity index 100% rename from docker/bind9/zones/partition3/system-test.hosts rename to quickstart/bind9/zones/partition3/system-test.hosts diff --git a/docker/bind9/zones/partition3/vinyldns.hosts b/quickstart/bind9/zones/partition3/vinyldns.hosts similarity index 100% rename from docker/bind9/zones/partition3/vinyldns.hosts rename to quickstart/bind9/zones/partition3/vinyldns.hosts diff --git a/docker/bind9/zones/partition3/zone.requires.review.hosts b/quickstart/bind9/zones/partition3/zone.requires.review.hosts similarity index 100% rename from docker/bind9/zones/partition3/zone.requires.review.hosts rename to quickstart/bind9/zones/partition3/zone.requires.review.hosts diff --git a/docker/bind9/zones/partition4/0.0.0.1.1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa b/quickstart/bind9/zones/partition4/0.0.0.1.1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa similarity index 100% rename from docker/bind9/zones/partition4/0.0.0.1.1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa rename to quickstart/bind9/zones/partition4/0.0.0.1.1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa diff --git a/docker/bind9/zones/partition4/1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa b/quickstart/bind9/zones/partition4/1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa similarity index 100% rename from docker/bind9/zones/partition4/1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa rename to quickstart/bind9/zones/partition4/1.9.e.f.c.c.7.2.9.6.d.f.ip6.arpa diff --git a/docker/bind9/zones/partition4/10.10.in-addr.arpa b/quickstart/bind9/zones/partition4/10.10.in-addr.arpa similarity index 100% rename from docker/bind9/zones/partition4/10.10.in-addr.arpa rename to quickstart/bind9/zones/partition4/10.10.in-addr.arpa diff --git a/docker/bind9/zones/partition4/192^30.2.0.192.in-addr.arpa b/quickstart/bind9/zones/partition4/192^30.2.0.192.in-addr.arpa similarity index 100% rename from docker/bind9/zones/partition4/192^30.2.0.192.in-addr.arpa rename to quickstart/bind9/zones/partition4/192^30.2.0.192.in-addr.arpa diff --git a/docker/bind9/zones/partition4/2.0.192.in-addr.arpa b/quickstart/bind9/zones/partition4/2.0.192.in-addr.arpa similarity index 100% rename from docker/bind9/zones/partition4/2.0.192.in-addr.arpa rename to quickstart/bind9/zones/partition4/2.0.192.in-addr.arpa diff --git a/docker/bind9/zones/partition4/child.parent.com.hosts b/quickstart/bind9/zones/partition4/child.parent.com.hosts similarity index 100% rename from docker/bind9/zones/partition4/child.parent.com.hosts rename to quickstart/bind9/zones/partition4/child.parent.com.hosts diff --git a/docker/bind9/zones/partition4/dskey.example.com.hosts b/quickstart/bind9/zones/partition4/dskey.example.com.hosts similarity index 100% rename from docker/bind9/zones/partition4/dskey.example.com.hosts rename to quickstart/bind9/zones/partition4/dskey.example.com.hosts diff --git a/docker/bind9/zones/partition4/dummy.hosts b/quickstart/bind9/zones/partition4/dummy.hosts similarity index 100% rename from docker/bind9/zones/partition4/dummy.hosts rename to quickstart/bind9/zones/partition4/dummy.hosts diff --git a/docker/bind9/zones/partition4/example.com.hosts b/quickstart/bind9/zones/partition4/example.com.hosts similarity index 100% rename from docker/bind9/zones/partition4/example.com.hosts rename to quickstart/bind9/zones/partition4/example.com.hosts diff --git a/docker/bind9/zones/partition4/invalid-zone.hosts b/quickstart/bind9/zones/partition4/invalid-zone.hosts similarity index 100% rename from docker/bind9/zones/partition4/invalid-zone.hosts rename to quickstart/bind9/zones/partition4/invalid-zone.hosts diff --git a/docker/bind9/zones/partition4/list-records.hosts b/quickstart/bind9/zones/partition4/list-records.hosts similarity index 100% rename from docker/bind9/zones/partition4/list-records.hosts rename to quickstart/bind9/zones/partition4/list-records.hosts diff --git a/docker/bind9/zones/partition4/list-zones-test-searched-1.hosts b/quickstart/bind9/zones/partition4/list-zones-test-searched-1.hosts similarity index 100% rename from docker/bind9/zones/partition4/list-zones-test-searched-1.hosts rename to quickstart/bind9/zones/partition4/list-zones-test-searched-1.hosts diff --git a/docker/bind9/zones/partition4/list-zones-test-searched-2.hosts b/quickstart/bind9/zones/partition4/list-zones-test-searched-2.hosts similarity index 100% rename from docker/bind9/zones/partition4/list-zones-test-searched-2.hosts rename to quickstart/bind9/zones/partition4/list-zones-test-searched-2.hosts diff --git a/docker/bind9/zones/partition4/list-zones-test-searched-3.hosts b/quickstart/bind9/zones/partition4/list-zones-test-searched-3.hosts similarity index 100% rename from docker/bind9/zones/partition4/list-zones-test-searched-3.hosts rename to quickstart/bind9/zones/partition4/list-zones-test-searched-3.hosts diff --git a/docker/bind9/zones/partition4/list-zones-test-unfiltered-1.hosts b/quickstart/bind9/zones/partition4/list-zones-test-unfiltered-1.hosts similarity index 100% rename from docker/bind9/zones/partition4/list-zones-test-unfiltered-1.hosts rename to quickstart/bind9/zones/partition4/list-zones-test-unfiltered-1.hosts diff --git a/docker/bind9/zones/partition4/list-zones-test-unfiltered-2.hosts b/quickstart/bind9/zones/partition4/list-zones-test-unfiltered-2.hosts similarity index 100% rename from docker/bind9/zones/partition4/list-zones-test-unfiltered-2.hosts rename to quickstart/bind9/zones/partition4/list-zones-test-unfiltered-2.hosts diff --git a/docker/bind9/zones/partition4/non.test.shared.hosts b/quickstart/bind9/zones/partition4/non.test.shared.hosts similarity index 100% rename from docker/bind9/zones/partition4/non.test.shared.hosts rename to quickstart/bind9/zones/partition4/non.test.shared.hosts diff --git a/docker/bind9/zones/partition4/not.loaded.hosts b/quickstart/bind9/zones/partition4/not.loaded.hosts similarity index 100% rename from docker/bind9/zones/partition4/not.loaded.hosts rename to quickstart/bind9/zones/partition4/not.loaded.hosts diff --git a/docker/bind9/zones/partition4/ok.hosts b/quickstart/bind9/zones/partition4/ok.hosts similarity index 100% rename from docker/bind9/zones/partition4/ok.hosts rename to quickstart/bind9/zones/partition4/ok.hosts diff --git a/docker/bind9/zones/partition4/old-shared.hosts b/quickstart/bind9/zones/partition4/old-shared.hosts similarity index 100% rename from docker/bind9/zones/partition4/old-shared.hosts rename to quickstart/bind9/zones/partition4/old-shared.hosts diff --git a/docker/bind9/zones/partition4/old-vinyldns2.hosts b/quickstart/bind9/zones/partition4/old-vinyldns2.hosts similarity index 100% rename from docker/bind9/zones/partition4/old-vinyldns2.hosts rename to quickstart/bind9/zones/partition4/old-vinyldns2.hosts diff --git a/docker/bind9/zones/partition4/old-vinyldns3.hosts b/quickstart/bind9/zones/partition4/old-vinyldns3.hosts similarity index 100% rename from docker/bind9/zones/partition4/old-vinyldns3.hosts rename to quickstart/bind9/zones/partition4/old-vinyldns3.hosts diff --git a/docker/bind9/zones/partition4/one-time-shared.hosts b/quickstart/bind9/zones/partition4/one-time-shared.hosts similarity index 100% rename from docker/bind9/zones/partition4/one-time-shared.hosts rename to quickstart/bind9/zones/partition4/one-time-shared.hosts diff --git a/docker/bind9/zones/partition4/one-time.hosts b/quickstart/bind9/zones/partition4/one-time.hosts similarity index 100% rename from docker/bind9/zones/partition4/one-time.hosts rename to quickstart/bind9/zones/partition4/one-time.hosts diff --git a/docker/bind9/zones/partition4/open.hosts b/quickstart/bind9/zones/partition4/open.hosts similarity index 100% rename from docker/bind9/zones/partition4/open.hosts rename to quickstart/bind9/zones/partition4/open.hosts diff --git a/docker/bind9/zones/partition4/parent.com.hosts b/quickstart/bind9/zones/partition4/parent.com.hosts similarity index 100% rename from docker/bind9/zones/partition4/parent.com.hosts rename to quickstart/bind9/zones/partition4/parent.com.hosts diff --git a/docker/bind9/zones/partition4/shared.hosts b/quickstart/bind9/zones/partition4/shared.hosts similarity index 100% rename from docker/bind9/zones/partition4/shared.hosts rename to quickstart/bind9/zones/partition4/shared.hosts diff --git a/docker/bind9/zones/partition4/sync-test.hosts b/quickstart/bind9/zones/partition4/sync-test.hosts similarity index 100% rename from docker/bind9/zones/partition4/sync-test.hosts rename to quickstart/bind9/zones/partition4/sync-test.hosts diff --git a/docker/bind9/zones/partition4/system-test-history.hosts b/quickstart/bind9/zones/partition4/system-test-history.hosts similarity index 100% rename from docker/bind9/zones/partition4/system-test-history.hosts rename to quickstart/bind9/zones/partition4/system-test-history.hosts diff --git a/docker/bind9/zones/partition4/system-test.hosts b/quickstart/bind9/zones/partition4/system-test.hosts similarity index 100% rename from docker/bind9/zones/partition4/system-test.hosts rename to quickstart/bind9/zones/partition4/system-test.hosts diff --git a/docker/bind9/zones/partition4/vinyldns.hosts b/quickstart/bind9/zones/partition4/vinyldns.hosts similarity index 100% rename from docker/bind9/zones/partition4/vinyldns.hosts rename to quickstart/bind9/zones/partition4/vinyldns.hosts diff --git a/docker/bind9/zones/partition4/zone.requires.review.hosts b/quickstart/bind9/zones/partition4/zone.requires.review.hosts similarity index 100% rename from docker/bind9/zones/partition4/zone.requires.review.hosts rename to quickstart/bind9/zones/partition4/zone.requires.review.hosts diff --git a/quickstart/docker-compose.yml b/quickstart/docker-compose.yml new file mode 100644 index 000000000..2422a916f --- /dev/null +++ b/quickstart/docker-compose.yml @@ -0,0 +1,45 @@ +version: "3.5" + +services: + ldap: + container_name: "vinyldns-ldap" + image: rroemhild/test-openldap + ports: + - "19004:389" + + integration: + container_name: "vinyldns-api-integration" + hostname: "vinyldns-integration" + image: "vinyldns-api-integration" + build: + context: ../ + dockerfile: test/api/integration/Dockerfile + environment: + RUN_SERVICES: "all tail-logs" + env_file: + .env + ports: + - "9000:9000" + - "19001-19003:19001-19003/tcp" + - "19001:19001/udp" + + portal: + container_name: "vinyldns-portal" + image: "vinyldns/portal:${VINYLDNS_VERSION}" + build: + context: .. + dockerfile: "" + env_file: + .env + ports: + - "${PORTAL_PORT}:${PORTAL_PORT}" + volumes: + - ./portal/application.ini:/opt/docker/conf/application.ini + - ./portal/application.conf:/opt/docker/conf/application.conf + depends_on: + - integration + - ldap + +networks: + default: + name: "vinyldns_net" diff --git a/quickstart/portal/Dockerfile b/quickstart/portal/Dockerfile new file mode 100644 index 000000000..a2b2302fc --- /dev/null +++ b/quickstart/portal/Dockerfile @@ -0,0 +1,34 @@ +FROM vinyldns/build:base-build-portal as builder +ARG VINYLDNS_VERSION="0.0.0-local-dev" + +COPY . /vinyldns + +WORKDIR /vinyldns +RUN cp /build/node_modules.tar.xz /vinyldns/modules/portal && \ + cd /vinyldns/modules/portal && tar Jxvf node_modules.tar.xz && \ + cd /vinyldns + +RUN sbt "set version in ThisBuild := \"${VINYLDNS_VERSION}\"; project portal; preparePortal" +RUN sbt "set version in ThisBuild := \"${VINYLDNS_VERSION}\"; project portal; universal:packageZipTarball" + +FROM adoptopenjdk/openjdk11:jdk-11.0.8_10-alpine + +RUN apk add --update --no-cache netcat-openbsd bash + +COPY --from=builder /vinyldns/modules/portal/target/universal/portal.tgz / + +RUN mkdir -p /opt && \ + tar -xzvf /portal.tgz && \ + mv /portal /opt/docker && \ + mkdir -p /opt/docker/lib_extra + +# This will set the vinyldns version, make sure to have this in config... version = ${?VINYLDNS_VERSION} +ENV VINYLDNS_VERSION=$VINYLDNS_VERSION + +# Mount the volume for config file and lib extras +# Note: These volume names are used in the build.sbt +VOLUME ["/opt/docker/lib_extra/", "/opt/docker/conf"] + +EXPOSE 9000 + +ENTRYPOINT ["/opt/docker/bin/portal"] diff --git a/quickstart/portal/Makefile b/quickstart/portal/Makefile new file mode 100644 index 000000000..8f0197073 --- /dev/null +++ b/quickstart/portal/Makefile @@ -0,0 +1,43 @@ +SHELL=bash +IMAGE_NAME=vinyldns/portal +ROOT_DIR:=$(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) + +# Check that the required version of make is being used +REQ_MAKE_VER:=3.82 +ifneq ($(REQ_MAKE_VER),$(firstword $(sort $(MAKE_VERSION) $(REQ_MAKE_VER)))) + $(error The version of MAKE $(REQ_MAKE_VER) or higher is required; you are running $(MAKE_VERSION)) +endif + +# Extract arguments for `make run` +EXTRACT_ARGS=true +ifeq (run,$(firstword $(MAKECMDGOALS))) + EXTRACT_ARGS=true +endif +ifeq ($(EXTRACT_ARGS),true) + # use the rest as arguments for "run" + WITH_ARGS ?= $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS)) +endif + +%: + @: + +.ONESHELL: + +.PHONY: all build run + +all: build run + +build: + @set -euo pipefail + cd ../.. + docker build -t $(IMAGE_NAME) --build-arg DOCKERFILE_PATH="$(RELATIVE_ROOT_DIR)" -f "$(ROOT_DIR)/Dockerfile" . + +run: + @set -euo pipefail + docker run -it --rm $(DOCKER_PARAMS) -p 9001:9001 $(IMAGE_NAME) -- $(WITH_ARGS) + +run-bg: + @set -euo pipefail + docker stop $(IMAGE_NAME) &> /dev/null || true + docker rm $(IMAGE_NAME) &> /dev/null || true + docker run -td --name $(IMAGE_NAME) --rm $(DOCKER_PARAMS) -p 9001:9001 $(IMAGE_NAME) -- /bin/bash diff --git a/docker/portal/application.conf b/quickstart/portal/application.conf similarity index 92% rename from docker/portal/application.conf rename to quickstart/portal/application.conf index 9b035a971..97347dfb7 100644 --- a/docker/portal/application.conf +++ b/quickstart/portal/application.conf @@ -11,7 +11,7 @@ LDAP { # This will be the name of the LDAP field that carries the user's login id (what they enter in the username in login form) userNameAttribute = "uid" - # For ogranization, leave empty for this demo, the domainName is what matters, and that is the LDAP structure + # For organization, leave empty for this demo, the domainName is what matters, and that is the LDAP structure # to search for users that require login searchBase = [ {organization = "", domainName = "ou=people,dc=planetexpress,dc=com"}, @@ -21,7 +21,8 @@ LDAP { securityAuthentication = "simple" # Note: The following assumes a purely docker setup, using container_name = vinyldns-ldap - providerUrl = "ldap://vinyldns-ldap:389" + providerUrl = "ldap://vinyldns-ldap:19004" + providerUrl = ${?LDAP_PROVIDER_URL} } # This is only needed if keeping vinyldns user store in sync with ldap (to auto lock out users who left your diff --git a/docker/portal/application.ini b/quickstart/portal/application.ini similarity index 100% rename from docker/portal/application.ini rename to quickstart/portal/application.ini diff --git a/test/api/functional/Dockerfile b/test/api/functional/Dockerfile index 5a01aefe1..3ea913b81 100644 --- a/test/api/functional/Dockerfile +++ b/test/api/functional/Dockerfile @@ -6,7 +6,8 @@ COPY . /build/ WORKDIR /build ## Run the build if we don't already have a vinyldns.jar -RUN if [ ! -f /opt/vinyldns/vinyldns.jar ]; then \ +RUN if [ -f assembly/vinyldns.jar ]; then cp assembly/vinyldns.jar /opt/vinyldns; fi && \ + if [ ! -f /opt/vinyldns/vinyldns.jar ]; then \ env SBT_OPTS="-XX:+UseConcMarkSweepGC -Xmx4G -Xms1G" \ sbt -Dbuild.scalafmtOnCompile=false -Dbuild.lintOnCompile=fase ";project api;coverageOff;assembly" \ && cp modules/api/target/scala-2.12/vinyldns.jar /opt/vinyldns/; \ diff --git a/test/api/functional/Makefile b/test/api/functional/Makefile index 80c25f552..810205023 100644 --- a/test/api/functional/Makefile +++ b/test/api/functional/Makefile @@ -17,9 +17,9 @@ ifeq (run,$(firstword $(MAKECMDGOALS))) endif ifeq ($(EXTRACT_ARGS),true) # use the rest as arguments for "run" - RUN_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS)) + WITH_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS)) # ...and turn them into do-nothing targets - $(eval $(RUN_ARGS):;@:) + $(eval $(WITH_ARGS):;@:) endif @@ -38,8 +38,8 @@ build: run: @set -euo pipefail - docker run -it --rm $(DOCKER_PARAMS) -p 9000:9000 -p 19003:19003 -p 19002:19002 -p 19001:19001/tcp -p 19001:19001/udp $(IMAGE_NAME) -- $(RUN_ARGS) + docker run -it --rm $(DOCKER_PARAMS) -p 9000:9000 -p 19001-19003:19001-19003 -p 19001:19001/udp $(IMAGE_NAME) -- $(WITH_ARGS) run-local: @set -euo pipefail - docker run -it --rm $(DOCKER_PARAMS) -p 9000:9000 -p 19003:19003 -p 19002:19002 -p 19001:19001/tcp -p 19001:19001/udp -v "$$(pwd)/test:/functional_test" $(IMAGE_NAME) -- $(RUN_ARGS) + docker run -it --rm $(DOCKER_PARAMS) -p 9000:9000 -p 19001-19003:19001-19003 -p 19001:19001/udp -v "$$(pwd)/test:/functional_test" $(IMAGE_NAME) -- $(WITH_ARGS) diff --git a/test/api/integration/Dockerfile b/test/api/integration/Dockerfile index aa0080dda..0d07e335b 100644 --- a/test/api/integration/Dockerfile +++ b/test/api/integration/Dockerfile @@ -6,7 +6,8 @@ COPY . /build/ WORKDIR /build ## Run the build if we don't already have a vinyldns.jar -RUN if [ ! -f /opt/vinyldns/vinyldns.jar ]; then \ +RUN if [ -f assembly/vinyldns.jar ]; then cp assembly/vinyldns.jar /opt/vinyldns; fi && \ + if [ ! -f /opt/vinyldns/vinyldns.jar ]; then \ env SBT_OPTS="-XX:+UseConcMarkSweepGC -Xmx4G -Xms1G" \ sbt -Dbuild.scalafmtOnCompile=false -Dbuild.lintOnCompile=fase ";project api;coverageOff;assembly" \ && cp modules/api/target/scala-2.12/vinyldns.jar /opt/vinyldns/; \ @@ -26,3 +27,5 @@ WORKDIR /build COPY docker/bind9/etc/named.conf.* /etc/bind/ COPY docker/bind9/zones/ /var/bind/ RUN named-checkconf + +ENV RUN_SERVICES="all" diff --git a/test/api/integration/Dockerfile.dockerignore b/test/api/integration/Dockerfile.dockerignore deleted file mode 100644 index e42085f51..000000000 --- a/test/api/integration/Dockerfile.dockerignore +++ /dev/null @@ -1,15 +0,0 @@ -**/.venv* -**/.virtualenv -**/target -**/docs -**/out -**/.log -**/.idea/ -**/.bsp -**/*cache* -**/*.png -**/.git -**/Dockerfile -**/*.dockerignore -**/.github -**/_template diff --git a/test/api/integration/Makefile b/test/api/integration/Makefile index 8817cf335..6e0fd3e0d 100644 --- a/test/api/integration/Makefile +++ b/test/api/integration/Makefile @@ -1,8 +1,7 @@ SHELL=bash -IMAGE_NAME=vinyldns-integraion +IMAGE_NAME=vinyldns-api-integration ROOT_DIR:=$(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) RELATIVE_ROOT_DIR:=$(shell realpath --relative-to=../../.. $(ROOT_DIR)) -VINYLDNS_JAR_PATH?=modules/api/target/scala-2.12/vinyldns.jar # Check that the required version of make is being used REQ_MAKE_VER:=3.82 @@ -17,7 +16,7 @@ ifeq (run,$(firstword $(MAKECMDGOALS))) endif ifeq ($(EXTRACT_ARGS),true) # use the rest as arguments for "run" - RUN_ARGS ?= $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS)) + WITH_ARGS ?= $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS)) endif %: @@ -31,21 +30,22 @@ all: build run build: @set -euo pipefail - trap 'if [ -f "$(ROOT_DIR)/vinyldns.jar" ]; then rm $(ROOT_DIR)/vinyldns.jar; fi' EXIT cd ../../.. - if [ -f modules/api/target/scala-2.12/vinyldns.jar ]; then cp modules/api/target/scala-2.12/vinyldns.jar $(ROOT_DIR)/vinyldns.jar; fi docker build -t $(IMAGE_NAME) --build-arg DOCKERFILE_PATH="$(RELATIVE_ROOT_DIR)" -f "$(ROOT_DIR)/Dockerfile" . run: @set -euo pipefail - docker run -it --rm $(DOCKER_PARAMS) -p 9000:9000 -p 19003:19003 -p 19002:19002 -p 19001:19001/tcp -p 19001:19001/udp $(IMAGE_NAME) -- $(RUN_ARGS) + docker run -it --rm $(DOCKER_PARAMS) -p 9000:9000 -p 19001-19003:19001-19003 -p 19001:19001/udp $(IMAGE_NAME) -- $(WITH_ARGS) run-bg: @set -euo pipefail - docker stop vinyldns-integration &> /dev/null || true - docker rm vinyldns-integration &> /dev/null || true - docker run -td --name vinyldns-integration --rm $(DOCKER_PARAMS) -p 9000:9000 -p 19003:19003 -p 19002:19002 -p 19001:19001/tcp -p 19001:19001/udp $(IMAGE_NAME) -- /bin/bash + docker stop $(IMAGE_NAME) &> /dev/null || true + docker run -td --name $(IMAGE_NAME) --rm $(DOCKER_PARAMS) -e RUN_SERVICES="deps-only tail-logs" -p 19001-19003:19001-19003 -p 19001:19001/udp $(IMAGE_NAME) + +stop-bg: + @set -euo pipefail + docker stop $(IMAGE_NAME) &> /dev/null || true run-local: @set -euo pipefail - docker run -it --rm $(DOCKER_PARAMS) -p 9000:9000 -p 19003:19003 -p 19002:19002 -p 19001:19001/tcp -p 19001:19001/udp -v "$(ROOT_DIR)/../../..:/build" $(IMAGE_NAME) -- $(RUN_ARGS) + docker run -it --rm $(DOCKER_PARAMS) -p 9000:9000 -p 19001-19003:19001-19003 -p 19001:19001/udp -v "$(ROOT_DIR)/../../..:/build" $(IMAGE_NAME) -- $(WITH_ARGS) diff --git a/test/portal/functional/Dockerfile.dockerignore b/test/portal/functional/Dockerfile.dockerignore deleted file mode 100644 index e42085f51..000000000 --- a/test/portal/functional/Dockerfile.dockerignore +++ /dev/null @@ -1,15 +0,0 @@ -**/.venv* -**/.virtualenv -**/target -**/docs -**/out -**/.log -**/.idea/ -**/.bsp -**/*cache* -**/*.png -**/.git -**/Dockerfile -**/*.dockerignore -**/.github -**/_template diff --git a/test/portal/functional/Makefile b/test/portal/functional/Makefile index fe2a57d00..74ada4fd4 100644 --- a/test/portal/functional/Makefile +++ b/test/portal/functional/Makefile @@ -16,9 +16,9 @@ ifeq (run,$(firstword $(MAKECMDGOALS))) endif ifeq ($(EXTRACT_ARGS),true) # use the rest as arguments for "run" - RUN_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS)) + WITH_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS)) # ...and turn them into do-nothing targets - $(eval $(RUN_ARGS):;@:) + $(eval $(WITH_ARGS):;@:) endif @@ -35,8 +35,8 @@ build: run: @set -euo pipefail - docker run -it --rm $(IMAGE_NAME) -- $(RUN_ARGS) + docker run -it --rm $(IMAGE_NAME) -- $(WITH_ARGS) run-local: @set -euo pipefail - docker run -it --rm -v "$$(pwd)/../../../modules/portal:/functional_test" $(IMAGE_NAME) -- $(RUN_ARGS) + docker run -it --rm -v "$$(pwd)/../../../modules/portal:/functional_test" $(IMAGE_NAME) -- $(WITH_ARGS) diff --git a/bin/add-license-headers.sh b/utils/add-license-headers.sh old mode 100755 new mode 100644 similarity index 100% rename from bin/add-license-headers.sh rename to utils/add-license-headers.sh diff --git a/docker/admin/Dockerfile b/utils/admin/Dockerfile similarity index 100% rename from docker/admin/Dockerfile rename to utils/admin/Dockerfile diff --git a/docker/admin/update-support-user.py b/utils/admin/update-support-user.py similarity index 100% rename from docker/admin/update-support-user.py rename to utils/admin/update-support-user.py diff --git a/utils/clean-vinyldns-containers.sh b/utils/clean-vinyldns-containers.sh new file mode 100644 index 000000000..9e2e90199 --- /dev/null +++ b/utils/clean-vinyldns-containers.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +# +# This script with kill and remove containers associated +# with VinylDNS +# +# Note: this will not remove the actual images from your +# machine, just the running containers + +ALL_IDS=$(docker ps -a | grep -e 'vinyldns' -e 'flaviovs/mock-smtp' -e 'rroemhild/test-openldap' | awk '{print $1}') +if [ "${ALL_IDS}" == "" ]; then + echo "Nothing to remove" + exit 0 +fi + +RUNNING_IDS=$(docker ps | grep -e 'vinyldns' -e 'flaviovs/mock-smtp' -e 'rroemhild/test-openldap' | awk '{print $1}') +if [ "${RUNNING_IDS}" != "" ]; then + echo "Killing running containers..." + echo "${RUNNING_IDS}" | xargs docker kill +fi + +ALL_IDS=$(docker ps -a | grep -e 'vinyldns' -e 'flaviovs/mock-smtp' -e 'rroemhild/test-openldap' | awk '{print $1}') +if [ "${ALL_IDS}" != "" ]; then + echo "Removing containers..." + echo "${ALL_IDS}" | xargs docker rm -v +fi + +docker network prune -f diff --git a/bin/func-test-api.sh b/utils/func-test-api.sh old mode 100755 new mode 100644 similarity index 100% rename from bin/func-test-api.sh rename to utils/func-test-api.sh diff --git a/bin/func-test-portal.sh b/utils/func-test-portal.sh old mode 100755 new mode 100644 similarity index 100% rename from bin/func-test-portal.sh rename to utils/func-test-portal.sh diff --git a/utils/quickstart-vinyldns.sh b/utils/quickstart-vinyldns.sh new file mode 100644 index 000000000..37dd5219a --- /dev/null +++ b/utils/quickstart-vinyldns.sh @@ -0,0 +1,141 @@ +#!/usr/bin/env bash +##################################################################################################### +# Starts up the api, portal, and dependent services via +# docker-compose. The api will be available on localhost:9000 and the +# portal will be on localhost:9001 +# +# Relevant overrides can be found in quickstart/.env +# +# Options: +# -t, --timeout seconds: overwrite ping timeout of 60 +# -a, --api-only: do not start up vinyldns-portal +# -s, --service: specify the service to run +# -c, --clean: re-pull vinyldns/api and vinyldns/portal images from docker hub +# -b, --build: rebuild images when applicable +# -v, --version tag: overwrite vinyldns/api and vinyldns/portal docker tags +##################################################################################################### +set -eo pipefail + +function wait_for_url() { + echo -n "Checking ${URL}..." + RETRY="$TIMEOUT" + while [ "$RETRY" -gt 0 ]; do + if curl -I -s "${URL}" -o /dev/null -w "%{http_code}" &>/dev/null || false; then + echo "Succeeded in connecting to ${URL}!" + break + else + echo -n "." + + ((RETRY -= 1)) + sleep 1 + + if [ "$RETRY" -eq 0 ]; then + echo "Exceeded retries waiting for ${URL} to be ready, failing" + exit 1 + fi + fi + done +} + +function usage() { + printf "usage: quickstart-vinyldns.sh [OPTIONS]\n\n" + printf "Starts up a local VinylDNS installation using docker compose\n\n" + printf "options:\n" + printf "\t-t, --timeout seconds: overwrite ping timeout of 60\n" + printf "\t-a, --api-only: do not start up vinyldns-portal\n" + printf "\t-s, --service: specify the service to run\n" + printf "\t-c, --clean: re-pull vinyldns/api and vinyldns/portal images from docker hub\n" + printf "\t-b, --build: rebuild images when applicable\n" + printf "\t-v, --version tag: overwrite vinyldns/api and vinyldns/portal docker tags\n" +} + +function clean_images() { + if [[ $CLEAN -eq 1 ]]; then + echo "cleaning docker images..." + docker rmi "vinyldns/api:${VINYLDNS_VERSION}" + docker rmi "vinyldns/portal:${VINYLDNS_VERSION}" + fi +} + +function wait_for_api() { + echo "Waiting for api..." + URL="$VINYLDNS_API_URL" + wait_for_url +} + +function wait_for_portal() { + # check if portal was skipped + if [ "$SERVICE" != "integration" ]; then + echo "Waiting for portal..." + URL="$VINYLDNS_PORTAL_URL" + wait_for_url + fi +} + +# initial var setup +DIR=$( + cd "$(dirname "$0")" + pwd -P +) +TIMEOUT=60 +DOCKER_COMPOSE_CONFIG="${DIR}/../quickstart/docker-compose.yml" +# empty service starts up all docker services in compose file +SERVICE="" +# when CLEAN is set to 1, existing docker images are deleted so they are re-pulled +CLEAN=0 +# default to latest for docker versions +export VINYLDNS_VERSION=latest + +# source env before parsing args so vars can be overwritten +set -a # Required in order to source docker/.env +# Source customizable env files +source "$DIR"/../quickstart/.env + +# parse args +BUILD="" +while [[ $# -gt 0 ]]; do + case "$1" in + -t | --timeout) + TIMEOUT="$2" + shift + shift + ;; + -a | --api-only) + SERVICE="integration" + shift + ;; + -s | --service) + SERVICE="$2" + shift + shift + ;; + -c | --clean) + CLEAN=1 + shift + ;; + -b | --build) + BUILD="--build" + shift + ;; + -v | --version) + export VINYLDNS_VERSION=$2 + shift + shift + ;; + *) + usage + exit + ;; + esac +done + +clean_images + +echo "timeout is set to ${TIMEOUT}" +echo "vinyldns version is set to '${VINYLDNS_VERSION}'" + +echo "Starting vinyldns and all dependencies in the background..." +docker-compose -f "$DOCKER_COMPOSE_CONFIG" up ${BUILD} -d "${SERVICE}" + +wait_for_api +wait_for_portal diff --git a/bin/release.sh b/utils/release.sh old mode 100755 new mode 100644 similarity index 89% rename from bin/release.sh rename to utils/release.sh index 002719882..da9ed02f2 --- a/bin/release.sh +++ b/utils/release.sh @@ -36,21 +36,21 @@ if [ "$1" != "skip-tests" ]; then printf "\nrunning api func tests... \n" if ! "$DIR"/func-test-api.sh then - printf "\nerror: bin/func-test-api.sh failed \n" + printf "\nerror: utils/func-test-api.sh failed \n" exit 1 fi printf "\nrunning portal func tests... \n" if ! "$DIR"/func-test-portal.sh then - printf "\nerror: bin/func-test-portal.sh failed \n" + printf "\nerror: utils/func-test-portal.sh failed \n" exit 1 fi printf "\nrunning verify... \n" if ! "$DIR"/verify.sh then - printf "\nerror: bin/verify.sh failed \n" + printf "\nerror: utils/verify.sh failed \n" exit 1 fi fi diff --git a/bin/update-support-user.sh b/utils/update-support-user.sh old mode 100755 new mode 100644 similarity index 100% rename from bin/update-support-user.sh rename to utils/update-support-user.sh diff --git a/bin/verify.sh b/utils/verify.sh old mode 100755 new mode 100644 similarity index 83% rename from bin/verify.sh rename to utils/verify.sh index ec4b8f57f..f77cd4a35 --- a/bin/verify.sh +++ b/utils/verify.sh @@ -5,7 +5,7 @@ DIR=$(cd -P -- "$(dirname -- "$0")" && pwd -P) echo 'Running tests...' cd "$DIR/../test/api/integration" -make build && make run -- sbt ";validate;verify" +make build && make run WITH_ARGS="sbt ';validate;verify'" verify_result=$? if [ ${verify_result} -eq 0 ]; then