mirror of
https://github.com/VinylDNS/vinyldns
synced 2025-08-22 02:02:14 +00:00
Updates
- Simplify build config - Add TTY check to Makefiles for running Docker containers - Update `fs2` to latest patch - Update `sbt-assembly` plugin - Update portal to remove chatty console - Update portal scripts to add license header - Update prepare-portal/Gruntfile to combine js and css where applicable - Remove unused gentelella files from final portal artifact - Add support for shared zones to quickstart/docker images - Consolidate built artifacts in `artifacts/` to make eventual release easier
This commit is contained in:
parent
45e7ce6a6a
commit
e1743e5342
@ -14,3 +14,4 @@
|
|||||||
**/_template
|
**/_template
|
||||||
img/
|
img/
|
||||||
**/.env
|
**/.env
|
||||||
|
modules/portal/node_modules/
|
||||||
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -35,4 +35,4 @@ quickstart/data
|
|||||||
**/.virtualenv
|
**/.virtualenv
|
||||||
**/.venv*
|
**/.venv*
|
||||||
**/*cache*
|
**/*cache*
|
||||||
**/assembly/
|
**/artifacts/
|
||||||
|
58
README.md
58
README.md
@ -14,25 +14,29 @@
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
# VinylDNS
|
# VinylDNS
|
||||||
VinylDNS is a vendor agnostic front-end for enabling self-service DNS and streamlining DNS operations.
|
|
||||||
VinylDNS manages millions of DNS records supporting thousands of engineers in production at [Comcast](http://www.comcast.com).
|
VinylDNS is a vendor-agnostic front-end for enabling self-service DNS and streamlining DNS operations. VinylDNS manages
|
||||||
The platform provides fine-grained access controls, auditing of all changes, a self-service user interface,
|
millions of DNS records supporting thousands of engineers in production at [Comcast](http://www.comcast.com). The
|
||||||
secure RESTful API, and integration with infrastructure automation tools like Ansible and Terraform.
|
platform provides fine-grained access controls, auditing of all changes, a self-service user interface, secure RESTful
|
||||||
It is designed to integrate with your existing DNS infrastructure, and provides extensibility to fit your installation.
|
API, and integration with infrastructure automation tools like Ansible and Terraform. It is designed to integrate with
|
||||||
|
your existing DNS infrastructure, and provides extensibility to fit your installation.
|
||||||
|
|
||||||
VinylDNS helps secure DNS management via:
|
VinylDNS helps secure DNS management via:
|
||||||
|
|
||||||
- AWS Sig4 signing of all messages to ensure that the message that was sent was not altered in transit
|
- AWS Sig4 signing of all messages to ensure that the message that was sent was not altered in transit
|
||||||
- Throttling of DNS updates to rate limit concurrent updates against your DNS systems
|
- Throttling of DNS updates to rate limit concurrent updates against your DNS systems
|
||||||
- Encrypting user secrets and TSIG keys at rest and in-transit
|
- Encrypting user secrets and TSIG keys at rest and in-transit
|
||||||
- Recording every change made to DNS records and zones
|
- Recording every change made to DNS records and zones
|
||||||
|
|
||||||
Integration is simple with first-class language support including:
|
Integration is simple with first-class language support including:
|
||||||
|
|
||||||
- Java
|
- Java
|
||||||
- Python
|
- Python
|
||||||
- Go
|
- Go
|
||||||
- JavaScript
|
- JavaScript
|
||||||
|
|
||||||
## Table of Contents
|
## Table of Contents
|
||||||
|
|
||||||
- [Quickstart](#quickstart)
|
- [Quickstart](#quickstart)
|
||||||
- [Code of Conduct](#code-of-conduct)
|
- [Code of Conduct](#code-of-conduct)
|
||||||
- [Developer Guide](#developer-guide)
|
- [Developer Guide](#developer-guide)
|
||||||
@ -42,10 +46,12 @@ Integration is simple with first-class language support including:
|
|||||||
- [Credits](#credits)
|
- [Credits](#credits)
|
||||||
|
|
||||||
## Quickstart
|
## Quickstart
|
||||||
Docker images for VinylDNS live on Docker Hub at <https://hub.docker.com/u/vinyldns/>.
|
|
||||||
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/)
|
Docker images for VinylDNS live on Docker Hub at <https://hub.docker.com/u/vinyldns/>. 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. Clone the repo: `git clone https://github.com/vinyldns/vinyldns.git`
|
||||||
1. Navigate to repo: `cd vinyldns`
|
1. Navigate to repo: `cd vinyldns`
|
||||||
1. Run `./quickstart/quickstart-vinyldns.sh`. This will start up the api at `localhost:9000` and the portal
|
1. Run `./quickstart/quickstart-vinyldns.sh`. This will start up the api at `localhost:9000` and the portal
|
||||||
@ -76,7 +82,8 @@ endpoint `http://localhost:9000`
|
|||||||
|
|
||||||
### Verifying Your Changes
|
### Verifying Your Changes
|
||||||
|
|
||||||
VinylDNS will synchronize with the DNS backend. For the Quickstart this should be running on port `19001` on `localhost`.
|
VinylDNS will synchronize with the DNS backend. For the Quickstart this should be running on port `19001` on `localhost`
|
||||||
|
.
|
||||||
|
|
||||||
To verify your changes, you can use a DNS resolution utility like `dig`
|
To verify your changes, you can use a DNS resolution utility like `dig`
|
||||||
|
|
||||||
@ -106,7 +113,7 @@ the record data we entered.
|
|||||||
|
|
||||||
This project, and everyone participating in it, are governed by the [VinylDNS Code Of Conduct](CODE_OF_CONDUCT.md). By
|
This project, and everyone participating in it, are governed by the [VinylDNS Code Of Conduct](CODE_OF_CONDUCT.md). By
|
||||||
participating, you agree to this Code. Please report any violations to the code of conduct to
|
participating, you agree to this Code. Please report any violations to the code of conduct to
|
||||||
vinyldns-core@googlegroups.com.
|
[vinyldns-core@googlegroups.com](mailto:vinyldns-core@googlegroups.com).
|
||||||
|
|
||||||
## Developer Guide
|
## Developer Guide
|
||||||
|
|
||||||
@ -118,9 +125,10 @@ See the [Contributing Guide](CONTRIBUTING.md).
|
|||||||
|
|
||||||
## Contact
|
## Contact
|
||||||
|
|
||||||
- If you have any security concerns please contact the maintainers directly vinyldns-core@googlegroups.com
|
- If you have any security concerns please contact the maintainers directly [vinyldns-core@googlegroups.com](mailto:vinyldns-core@googlegroups.com)
|
||||||
|
|
||||||
## Maintainers and Contributors
|
## Maintainers and Contributors
|
||||||
|
|
||||||
The current maintainers (people who can merge pull requests) are:
|
The current maintainers (people who can merge pull requests) are:
|
||||||
|
|
||||||
- Ryan Emerle ([@remerle](https://github.com/remerle))
|
- Ryan Emerle ([@remerle](https://github.com/remerle))
|
||||||
@ -129,17 +137,25 @@ The current maintainers (people who can merge pull requests) are:
|
|||||||
|
|
||||||
See [AUTHORS.md](AUTHORS.md) for the full list of contributors to VinylDNS.
|
See [AUTHORS.md](AUTHORS.md) for the full list of contributors to VinylDNS.
|
||||||
|
|
||||||
See [MAINTAINERS.md](MAINTAINERS.md) for documentation specific to maintainers
|
See [MAINTAINERS.md](MAINTAINERS.md) for documentation specific to maintainers
|
||||||
|
|
||||||
## Credits
|
## Credits
|
||||||
VinylDNS would not be possible without the help of many other pieces of open source software. Thank you open source world!
|
|
||||||
|
|
||||||
Initial development of DynamoDBHelper done by [Roland Kuhn](https://github.com/rkuhn) from https://github.com/akka/akka-persistence-dynamodb/blob/8d7495821faef754d97759f0d3d35ed18fc17cc7/src/main/scala/akka/persistence/dynamodb/journal/DynamoDBHelper.scala
|
VinylDNS would not be possible without the help of many other pieces of open source software. Thank you open source
|
||||||
|
world!
|
||||||
|
|
||||||
Given the Apache 2.0 license of VinylDNS, we specifically want to call out the following libraries and their corresponding licenses shown below.
|
Given the Apache 2.0 license of VinylDNS, we specifically want to call out the following libraries and their
|
||||||
- [logback-classic](https://github.com/qos-ch/logback) - [Eclipse Public License 1.0](https://www.eclipse.org/legal/epl-v10.html)
|
corresponding licenses shown below.
|
||||||
- [logback-core](https://github.com/qos-ch/logback) - [Eclipse Public License 1.0](https://www.eclipse.org/legal/epl-v10.html)
|
|
||||||
- [h2 database](http://h2database.com) - [Mozilla Public License, version 2.0](https://www.mozilla.org/MPL/2.0/)
|
- [logback-classic](https://github.com/qos-ch/logback)
|
||||||
- [pureconfig](https://github.com/pureconfig/pureconfig) - [Mozilla Public License, version 2.0](https://www.mozilla.org/MPL/2.0/)
|
- [Eclipse Public License 1.0](https://www.eclipse.org/legal/epl-v10.html)
|
||||||
- [pureconfig-macros](https://github.com/pureconfig/pureconfig) - [Mozilla Public License, version 2.0](https://www.mozilla.org/MPL/2.0/)
|
- [logback-core](https://github.com/qos-ch/logback)
|
||||||
- [junit](https://junit.org/junit4/) - [Eclipse Public License 1.0](https://www.eclipse.org/legal/epl-v10.html)
|
- [Eclipse Public License 1.0](https://www.eclipse.org/legal/epl-v10.html)
|
||||||
|
- [h2 database](http://h2database.com)
|
||||||
|
- [Mozilla Public License, version 2.0](https://www.mozilla.org/MPL/2.0/)
|
||||||
|
- [pureconfig](https://github.com/pureconfig/pureconfig)
|
||||||
|
- [Mozilla Public License, version 2.0](https://www.mozilla.org/MPL/2.0/)
|
||||||
|
- [pureconfig-macros](https://github.com/pureconfig/pureconfig)
|
||||||
|
- [Mozilla Public License, version 2.0](https://www.mozilla.org/MPL/2.0/)
|
||||||
|
- [junit](https://junit.org/junit4/)
|
||||||
|
- [Eclipse Public License 1.0](https://www.eclipse.org/legal/epl-v10.html)
|
||||||
|
115
build.sbt
115
build.sbt
@ -1,14 +1,12 @@
|
|||||||
import CompilerOptions._
|
import CompilerOptions._
|
||||||
import Dependencies._
|
import Dependencies._
|
||||||
import Resolvers._
|
|
||||||
import microsites._
|
import microsites._
|
||||||
import org.scalafmt.sbt.ScalafmtPlugin._
|
import org.scalafmt.sbt.ScalafmtPlugin._
|
||||||
import scoverage.ScoverageKeys.{coverageFailOnMinimum, coverageMinimum}
|
import scoverage.ScoverageKeys.{coverageFailOnMinimum, coverageMinimum}
|
||||||
|
|
||||||
|
import scala.language.postfixOps
|
||||||
import scala.util.Try
|
import scala.util.Try
|
||||||
|
|
||||||
resolvers ++= additionalResolvers
|
|
||||||
|
|
||||||
lazy val IntegrationTest = config("it").extend(Test)
|
lazy val IntegrationTest = config("it").extend(Test)
|
||||||
|
|
||||||
// settings that should be inherited by all projects
|
// settings that should be inherited by all projects
|
||||||
@ -18,6 +16,7 @@ lazy val sharedSettings = Seq(
|
|||||||
organizationName := "Comcast Cable Communications Management, LLC",
|
organizationName := "Comcast Cable Communications Management, LLC",
|
||||||
startYear := Some(2018),
|
startYear := Some(2018),
|
||||||
licenses += ("Apache-2.0", new URL("https://www.apache.org/licenses/LICENSE-2.0.txt")),
|
licenses += ("Apache-2.0", new URL("https://www.apache.org/licenses/LICENSE-2.0.txt")),
|
||||||
|
maintainer := "VinylDNS Maintainers <vinyldns-core@googlegroups.com>",
|
||||||
scalacOptions ++= scalacOptionsByV(scalaVersion.value),
|
scalacOptions ++= scalacOptionsByV(scalaVersion.value),
|
||||||
scalacOptions in (Compile, doc) += "-no-link-warnings",
|
scalacOptions in (Compile, doc) += "-no-link-warnings",
|
||||||
// Use wart remover to eliminate code badness
|
// Use wart remover to eliminate code badness
|
||||||
@ -64,7 +63,7 @@ lazy val apiSettings = Seq(
|
|||||||
)
|
)
|
||||||
|
|
||||||
lazy val apiAssemblySettings = Seq(
|
lazy val apiAssemblySettings = Seq(
|
||||||
assemblyOutputPath in assembly := file("assembly/vinyldns.jar"),
|
assemblyOutputPath in assembly := file("artifacts/vinyldns-api.jar"),
|
||||||
test in assembly := {},
|
test in assembly := {},
|
||||||
mainClass in assembly := Some("vinyldns.api.Boot"),
|
mainClass in assembly := Some("vinyldns.api.Boot"),
|
||||||
mainClass in reStart := Some("vinyldns.api.Boot"),
|
mainClass in reStart := Some("vinyldns.api.Boot"),
|
||||||
@ -79,45 +78,11 @@ lazy val apiAssemblySettings = Seq(
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
lazy val noPublishSettings = Seq(
|
|
||||||
publish := {},
|
|
||||||
publishLocal := {},
|
|
||||||
publishArtifact := false
|
|
||||||
)
|
|
||||||
|
|
||||||
lazy val apiPublishSettings = Seq(
|
|
||||||
publishArtifact := false,
|
|
||||||
publishLocal := (publishLocal in Docker).value,
|
|
||||||
publish := (publish in Docker).value
|
|
||||||
)
|
|
||||||
|
|
||||||
lazy val portalPublishSettings = Seq(
|
|
||||||
publishArtifact := false,
|
|
||||||
publishLocal := (publishLocal in Docker).value,
|
|
||||||
publish := (publish in Docker).value,
|
|
||||||
// for sbt-native-packager (docker) to exclude local.conf
|
|
||||||
mappings in Universal ~= (_.filterNot {
|
|
||||||
case (file, _) => file.getName.equals("local.conf")
|
|
||||||
}),
|
|
||||||
// for local.conf to be excluded in jars
|
|
||||||
mappings in (Compile, packageBin) ~= (_.filterNot {
|
|
||||||
case (file, _) => file.getName.equals("local.conf")
|
|
||||||
})
|
|
||||||
)
|
|
||||||
|
|
||||||
lazy val pbSettings = Seq(
|
|
||||||
PB.targets in Compile := Seq(
|
|
||||||
PB.gens.java("2.6.1") -> (sourceManaged in Compile).value
|
|
||||||
),
|
|
||||||
PB.protocVersion := "-v261"
|
|
||||||
)
|
|
||||||
|
|
||||||
lazy val allApiSettings = Revolver.settings ++ Defaults.itSettings ++
|
lazy val allApiSettings = Revolver.settings ++ Defaults.itSettings ++
|
||||||
apiSettings ++
|
apiSettings ++
|
||||||
sharedSettings ++
|
sharedSettings ++
|
||||||
apiAssemblySettings ++
|
apiAssemblySettings ++
|
||||||
testSettings ++
|
testSettings
|
||||||
apiPublishSettings
|
|
||||||
|
|
||||||
lazy val api = (project in file("modules/api"))
|
lazy val api = (project in file("modules/api"))
|
||||||
.enablePlugins(JavaAppPackaging, AutomateHeaderPlugin)
|
.enablePlugins(JavaAppPackaging, AutomateHeaderPlugin)
|
||||||
@ -146,8 +111,10 @@ lazy val coreBuildSettings = Seq(
|
|||||||
name := "core",
|
name := "core",
|
||||||
// do not use unused params as NoOpCrypto ignores its constructor, we should provide a way
|
// do not use unused params as NoOpCrypto ignores its constructor, we should provide a way
|
||||||
// to write a crypto plugin so that we fall back to a noarg constructor
|
// to write a crypto plugin so that we fall back to a noarg constructor
|
||||||
scalacOptions ++= scalacOptionsByV(scalaVersion.value).filterNot(_ == "-Ywarn-unused:params")
|
scalacOptions ++= scalacOptionsByV(scalaVersion.value).filterNot(_ == "-Ywarn-unused:params"),
|
||||||
) ++ pbSettings
|
PB.targets in Compile := Seq(PB.gens.java("2.6.1") -> (sourceManaged in Compile).value),
|
||||||
|
PB.protocVersion := "-v261"
|
||||||
|
)
|
||||||
|
|
||||||
lazy val corePublishSettings = Seq(
|
lazy val corePublishSettings = Seq(
|
||||||
publishMavenStyle := true,
|
publishMavenStyle := true,
|
||||||
@ -156,7 +123,6 @@ lazy val corePublishSettings = Seq(
|
|||||||
false
|
false
|
||||||
},
|
},
|
||||||
autoAPIMappings := true,
|
autoAPIMappings := true,
|
||||||
publish in Docker := {},
|
|
||||||
mainClass := None,
|
mainClass := None,
|
||||||
homepage := Some(url("https://vinyldns.io")),
|
homepage := Some(url("https://vinyldns.io")),
|
||||||
scmInfo := Some(
|
scmInfo := Some(
|
||||||
@ -233,42 +199,47 @@ val checkJsHeaders =
|
|||||||
val createJsHeaders =
|
val createJsHeaders =
|
||||||
TaskKey[Unit]("createJsHeaders", "Runs script to prepend APL 2.0 license headers to files")
|
TaskKey[Unit]("createJsHeaders", "Runs script to prepend APL 2.0 license headers to files")
|
||||||
|
|
||||||
|
lazy val portalSettings = Seq(
|
||||||
|
libraryDependencies ++= portalDependencies,
|
||||||
|
routesGenerator := InjectedRoutesGenerator,
|
||||||
|
coverageExcludedPackages := "<empty>;views.html.*;router.*;controllers\\.javascript.*;.*Reverse.*",
|
||||||
|
javaOptions in Test += "-Dconfig.file=conf/application-test.conf",
|
||||||
|
// ads the version when working locally with sbt run
|
||||||
|
PlayKeys.devSettings += "vinyldns.base-version" -> (version in ThisBuild).value,
|
||||||
|
// adds an extra classpath to the portal loading so we can externalize jars, make sure to create the lib_extra
|
||||||
|
// directory and lay down any dependencies that are required when deploying
|
||||||
|
scriptClasspath in bashScriptDefines ~= (cp => cp :+ "lib_extra/*"),
|
||||||
|
mainClass in reStart := None,
|
||||||
|
// we need to filter out unused for the portal as the play framework needs a lot of unused things
|
||||||
|
scalacOptions ~= { opts =>
|
||||||
|
opts.filterNot(p => p.contains("unused"))
|
||||||
|
},
|
||||||
|
// runs our prepare portal process
|
||||||
|
preparePortal := {
|
||||||
|
import scala.sys.process._
|
||||||
|
"./modules/portal/prepare-portal.sh" !
|
||||||
|
},
|
||||||
|
checkJsHeaders := {
|
||||||
|
import scala.sys.process._
|
||||||
|
"./utils/add-license-headers.sh -d=modules/portal/public/lib -f=js -c" !
|
||||||
|
},
|
||||||
|
createJsHeaders := {
|
||||||
|
import scala.sys.process._
|
||||||
|
"./utils/add-license-headers.sh -d=modules/portal/public/lib -f=js" !
|
||||||
|
},
|
||||||
|
|
||||||
|
// Change the path of the output to artifacts/vinyldns-portal.zip
|
||||||
|
target in Universal := file("artifacts/"),
|
||||||
|
packageName in Universal := "vinyldns-portal"
|
||||||
|
)
|
||||||
|
|
||||||
lazy val portal = (project in file("modules/portal"))
|
lazy val portal = (project in file("modules/portal"))
|
||||||
.enablePlugins(PlayScala, AutomateHeaderPlugin)
|
.enablePlugins(PlayScala, AutomateHeaderPlugin)
|
||||||
.settings(sharedSettings)
|
.settings(sharedSettings)
|
||||||
.settings(testSettings)
|
.settings(testSettings)
|
||||||
.settings(portalPublishSettings)
|
.settings(portalSettings)
|
||||||
.settings(
|
.settings(
|
||||||
name := "portal",
|
name := "portal",
|
||||||
libraryDependencies ++= portalDependencies,
|
|
||||||
routesGenerator := InjectedRoutesGenerator,
|
|
||||||
coverageExcludedPackages := "<empty>;views.html.*;router.*;controllers\\.javascript.*;.*Reverse.*",
|
|
||||||
javaOptions in Test += "-Dconfig.file=conf/application-test.conf",
|
|
||||||
// ads the version when working locally with sbt run
|
|
||||||
PlayKeys.devSettings += "vinyldns.base-version" -> (version in ThisBuild).value,
|
|
||||||
// adds an extra classpath to the portal loading so we can externalize jars, make sure to create the lib_extra
|
|
||||||
// directory and lay down any dependencies that are required when deploying
|
|
||||||
scriptClasspath in bashScriptDefines ~= (cp => cp :+ "lib_extra/*"),
|
|
||||||
mainClass in reStart := None,
|
|
||||||
// we need to filter out unused for the portal as the play framework needs a lot of unused things
|
|
||||||
scalacOptions ~= { opts =>
|
|
||||||
opts.filterNot(p => p.contains("unused"))
|
|
||||||
},
|
|
||||||
// runs our prepare portal process
|
|
||||||
preparePortal := {
|
|
||||||
import scala.sys.process._
|
|
||||||
"./modules/portal/prepare-portal.sh" !
|
|
||||||
},
|
|
||||||
checkJsHeaders := {
|
|
||||||
import scala.sys.process._
|
|
||||||
"./utils/add-license-headers.sh -d=modules/portal/public/lib -f=js -c" !
|
|
||||||
},
|
|
||||||
createJsHeaders := {
|
|
||||||
import scala.sys.process._
|
|
||||||
"./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"
|
|
||||||
)
|
)
|
||||||
.dependsOn(mysql)
|
.dependsOn(mysql)
|
||||||
|
|
||||||
|
9
build/assemble_api_jar.sh → build/assemble_api.sh
Executable file → Normal file
9
build/assemble_api_jar.sh → build/assemble_api.sh
Executable file → Normal file
@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
#
|
#
|
||||||
# This script will build the vinyldns.jar file using Docker. The file will
|
# This script will build the vinyldns-api.jar file using Docker. The file will
|
||||||
# be placed in the configured location (currently `assembly/` off of the root)
|
# be placed in the configured location (currently `artifacts/` off of the root)
|
||||||
#
|
#
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
@ -11,7 +11,7 @@ DIR=$(
|
|||||||
)
|
)
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
echo "USAGE: assemble_jar.sh [options]"
|
echo "USAGE: assemble_api.sh [options]"
|
||||||
echo -e "\t-n, --no-clean do no perform a clean before assembling the jar"
|
echo -e "\t-n, --no-clean do no perform a clean before assembling the jar"
|
||||||
echo -e "\t-u, --update update the underlying docker image"
|
echo -e "\t-u, --update update the underlying docker image"
|
||||||
}
|
}
|
||||||
@ -37,6 +37,7 @@ done
|
|||||||
|
|
||||||
if ! [[ $SKIP_CLEAN -eq 1 ]]; then
|
if ! [[ $SKIP_CLEAN -eq 1 ]]; then
|
||||||
"${DIR}/deep_clean.sh"
|
"${DIR}/deep_clean.sh"
|
||||||
|
rm "${DIR}/../artifacts/vinyldns-api.jar" &> /dev/null || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ $UPDATE_DOCKER -eq 1 ]]; then
|
if [[ $UPDATE_DOCKER -eq 1 ]]; then
|
||||||
@ -44,5 +45,5 @@ if [[ $UPDATE_DOCKER -eq 1 ]]; then
|
|||||||
docker pull vinyldns/build:base-test-integration
|
docker pull vinyldns/build:base-test-integration
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Building VinylDNS API jar file"
|
echo "Building VinylDNS API artifact"
|
||||||
docker run -i --rm -e RUN_SERVICES=none -v "${DIR}/..:/build" vinyldns/build:base-test-integration -- sbt 'api/assembly'
|
docker run -i --rm -e RUN_SERVICES=none -v "${DIR}/..:/build" vinyldns/build:base-test-integration -- sbt 'api/assembly'
|
50
build/assemble_portal.sh
Normal file
50
build/assemble_portal.sh
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# This script will build the vinyldns-portal.zip file using Docker. The file will
|
||||||
|
# be placed in the configured location (currently `artifacts/` off of the root)
|
||||||
|
#
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
DIR=$(
|
||||||
|
cd "$(dirname "$0")"
|
||||||
|
pwd -P
|
||||||
|
)
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo "USAGE: assemble_portal.sh [options]"
|
||||||
|
echo -e "\t-n, --no-clean do no perform a clean before assembling the jar"
|
||||||
|
echo -e "\t-u, --update update the underlying docker image"
|
||||||
|
}
|
||||||
|
|
||||||
|
SKIP_CLEAN=0
|
||||||
|
UPDATE_DOCKER=0
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case "$1" in
|
||||||
|
--no-clean | -n)
|
||||||
|
SKIP_CLEAN=1
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--update | -u)
|
||||||
|
UPDATE_DOCKER=1
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if ! [[ $SKIP_CLEAN -eq 1 ]]; then
|
||||||
|
"${DIR}/deep_clean.sh"
|
||||||
|
rm "${DIR}/../artifacts/vinyldns-portal.zip" &> /dev/null || true
|
||||||
|
rm -rf "${DIR}/../artifacts/scripts" &> /dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $UPDATE_DOCKER -eq 1 ]]; then
|
||||||
|
echo "Pulling latest version of 'vinyldns/build:base-test-integration'"
|
||||||
|
docker pull vinyldns/build:base-test-integration
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Building VinylDNS Portal artifact"
|
||||||
|
docker run -i --rm -e RUN_SERVICES=none -v "${DIR}/..:/build" vinyldns/build:base-test-integration -- sbt 'portal/dist'
|
@ -60,9 +60,9 @@ The default build for vinyldns api assumes an **ALL MYSQL** installation.
|
|||||||
it is set as part of the container build
|
it is set as part of the container build
|
||||||
|
|
||||||
**Volumes**
|
**Volumes**
|
||||||
- `/opt/docker/conf/` - if you need to have your own application config file. This is **MANDATORY** for
|
- `/opt/vinyldns/conf/` - if you need to have your own application config file. This is **MANDATORY** for
|
||||||
any production environments. Typically, you will add your own `application.conf` file in here with your settings.
|
any production environments. Typically, you will add your own `application.conf` file in here with your settings.
|
||||||
- `/opt/docker/lib_extra/` - if you need to have additional jar files available to your VinylDNS instance.
|
- `/opt/vinyldns/lib_extra/` - if you need to have additional jar files available to your VinylDNS instance.
|
||||||
Rarely used, but if you want to bring your own message queue or database you can put the `jar` files there
|
Rarely used, but if you want to bring your own message queue or database you can put the `jar` files there
|
||||||
|
|
||||||
### vinyldns/portal
|
### vinyldns/portal
|
||||||
@ -74,7 +74,7 @@ The default build for vinyldns portal assumes an **ALL MYSQL** installation.
|
|||||||
it is set as part of the container build
|
it is set as part of the container build
|
||||||
|
|
||||||
**Volumes**
|
**Volumes**
|
||||||
- `/opt/docker/conf/` - if you need to have your own application config file. This is **MANDATORY** for
|
- `/opt/vinyldns/conf/` - if you need to have your own application config file. This is **MANDATORY** for
|
||||||
any production environments. Typically, you will add your own `application.conf` file in here with your settings.
|
any production environments. Typically, you will add your own `application.conf` file in here with your settings.
|
||||||
- `/opt/docker/lib_extra/` - if you need to have additional jar files available to your VinylDNS instance.
|
- `/opt/vinyldns/lib_extra/` - if you need to have additional jar files available to your VinylDNS instance.
|
||||||
Rarely used, but if you want to bring your own message queue or database you can put the `jar` files there
|
Rarely used, but if you want to bring your own message queue or database you can put the `jar` files there
|
||||||
|
@ -5,7 +5,7 @@ WORKDIR /build
|
|||||||
|
|
||||||
## Run the build if we don't already have a vinyldns.jar
|
## Run the build if we don't already have a vinyldns.jar
|
||||||
RUN mkdir -p /opt/vinyldns/conf && \
|
RUN mkdir -p /opt/vinyldns/conf && \
|
||||||
if [ -f assembly/vinyldns.jar ]; then cp assembly/vinyldns.jar /opt/vinyldns/; fi && \
|
if [ -f artifacts/vinyldns-api.jar ]; then cp artifacts/vinyldns-api.jar /opt/vinyldns/; fi && \
|
||||||
if [ ! -f /opt/vinyldns/vinyldns.jar ]; then \
|
if [ ! -f /opt/vinyldns/vinyldns.jar ]; then \
|
||||||
env SBT_OPTS="-XX:+UseConcMarkSweepGC -Xmx4G -Xms1G" \
|
env SBT_OPTS="-XX:+UseConcMarkSweepGC -Xmx4G -Xms1G" \
|
||||||
sbt -Dbuild.scalafmtOnCompile=false -Dbuild.lintOnCompile=fase ";project api;coverageOff;assembly" \
|
sbt -Dbuild.scalafmtOnCompile=false -Dbuild.lintOnCompile=fase ";project api;coverageOff;assembly" \
|
||||||
@ -16,21 +16,24 @@ FROM adoptopenjdk/openjdk11:jdk-11.0.8_10-alpine
|
|||||||
ARG DOCKER_FILE_PATH
|
ARG DOCKER_FILE_PATH
|
||||||
ARG VINYLDNS_VERSION
|
ARG VINYLDNS_VERSION
|
||||||
|
|
||||||
RUN apk add --update --no-cache bash && mkdir -p /opt/vinyldns/lib_extra
|
RUN test -n "VINYLDNS_VERSION" || (echo "VINYLDNS_VERSION not set" && false) && \
|
||||||
|
test -n "DOCKER_FILE_PATH" || (echo "DOCKER_FILE_PATH not set" && false) && \
|
||||||
|
apk add --update --no-cache bash && \
|
||||||
|
mkdir -p /opt/vinyldns/lib_extra && \
|
||||||
|
echo "${VINYLDNS_VERSION}" > /opt/vinyldns/version
|
||||||
|
|
||||||
COPY --from=base-build /opt/vinyldns /opt/vinyldns
|
COPY --from=base-build /opt/vinyldns /opt/vinyldns
|
||||||
COPY ${DOCKER_FILE_PATH}/application.conf /opt/vinyldns/conf
|
COPY ${DOCKER_FILE_PATH}/application.conf /opt/vinyldns/conf
|
||||||
COPY ${DOCKER_FILE_PATH}/logback.xml /opt/vinyldns/conf
|
COPY ${DOCKER_FILE_PATH}/logback.xml /opt/vinyldns/conf
|
||||||
|
|
||||||
RUN echo "${VINYLDNS_VERSION}" > /opt/vinyldns/conf/version
|
|
||||||
|
|
||||||
# Mount the volume for config file and lib extras
|
# Mount the volume for config file and lib extras
|
||||||
VOLUME ["/opt/vinyldns/lib_extra/", "/opt/vinyldns/conf/"]
|
VOLUME ["/opt/vinyldns/lib_extra/", "/opt/vinyldns/conf/"]
|
||||||
|
|
||||||
EXPOSE 9000
|
EXPOSE 9000
|
||||||
|
|
||||||
ENTRYPOINT ["/bin/bash", "-c", "java -Dconfig.file=/opt/vinyldns/conf/application.conf \
|
ENV JVM_OPTS=""
|
||||||
|
ENTRYPOINT ["/bin/bash", "-c", "java ${JVM_OPTS} -Dconfig.file=/opt/vinyldns/conf/application.conf \
|
||||||
-Dlogback.configurationFile=/opt/vinyldns/conf/logback.xml \
|
-Dlogback.configurationFile=/opt/vinyldns/conf/logback.xml \
|
||||||
-Dvinyldns.version=$(cat /opt/vinyldns/conf/version) \
|
-Dvinyldns.version=$(cat /opt/vinyldns/version) \
|
||||||
-cp /opt/vinyldns/lib_extra/* \
|
-cp /opt/vinyldns/lib_extra/* \
|
||||||
-jar /opt/vinyldns/vinyldns.jar" ]
|
-jar /opt/vinyldns/vinyldns.jar" ]
|
||||||
|
@ -10,7 +10,7 @@ ifneq ($(REQ_MAKE_VER),$(firstword $(sort $(MAKE_VERSION) $(REQ_MAKE_VER))))
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# Extract arguments for `make run`
|
# Extract arguments for `make run`
|
||||||
EXTRACT_ARGS=true
|
EXTRACT_ARGS=false
|
||||||
ifeq (run,$(firstword $(MAKECMDGOALS)))
|
ifeq (run,$(firstword $(MAKECMDGOALS)))
|
||||||
EXTRACT_ARGS=true
|
EXTRACT_ARGS=true
|
||||||
endif
|
endif
|
||||||
@ -18,8 +18,8 @@ ifeq ($(EXTRACT_ARGS),true)
|
|||||||
# use the rest as arguments for "run"
|
# use the rest as arguments for "run"
|
||||||
WITH_ARGS ?= $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
|
WITH_ARGS ?= $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
|
||||||
endif
|
endif
|
||||||
ifdef $(WITH_ARGS)
|
ifneq ($(WITH_ARGS),)
|
||||||
ARG_SEPARATOR=--
|
ARG_SEPARATOR=--
|
||||||
endif
|
endif
|
||||||
|
|
||||||
%:
|
%:
|
||||||
@ -40,7 +40,7 @@ build:
|
|||||||
run:
|
run:
|
||||||
@set -euo pipefail
|
@set -euo pipefail
|
||||||
docker network create --driver bridge vinyldns_net &> /dev/null || true
|
docker network create --driver bridge vinyldns_net &> /dev/null || true
|
||||||
test -t 1 && USE_TTY="-t"
|
USE_TTY="" && test -t 1 && USE_TTY="-t"
|
||||||
docker run -i $${USE_TTY} --rm --env-file "$(ROOT_DIR)/../.env" --network vinyldns_net $(DOCKER_PARAMS) -v "$$(pwd)/:/opt/vinyldns/conf/" -p 9000:9000 $(IMAGE_NAME):$(IMAGE_TAG) $(ARG_SEPARATOR) $(WITH_ARGS)
|
docker run -i $${USE_TTY} --rm --env-file "$(ROOT_DIR)/../.env" --network vinyldns_net $(DOCKER_PARAMS) -v "$$(pwd)/:/opt/vinyldns/conf/" -p 9000:9000 $(IMAGE_NAME):$(IMAGE_TAG) $(ARG_SEPARATOR) $(WITH_ARGS)
|
||||||
|
|
||||||
publish: build
|
publish: build
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
vinyldns {
|
vinyldns {
|
||||||
|
|
||||||
base-version = "0.0.0-local-dev"
|
base-version = "0.0.0-local-dev"
|
||||||
version = ${vinyldns.base-version} # default to the base version if not overridden
|
version = ${vinyldns.base-version} # default to the base version if not overridden
|
||||||
version = ${?VINYLDNS_VERSION} # override the base version via env var
|
version = ${?VINYLDNS_VERSION} # override the base version via env var
|
||||||
@ -125,6 +124,7 @@ vinyldns {
|
|||||||
class-name = ${?EMAIL_CLASS_NAME}
|
class-name = ${?EMAIL_CLASS_NAME}
|
||||||
settings = {
|
settings = {
|
||||||
from = "VinylDNS <do-not-reply@vinyldns.io>"
|
from = "VinylDNS <do-not-reply@vinyldns.io>"
|
||||||
|
from = ${?EMAIL_FROM}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,12 +161,13 @@ vinyldns {
|
|||||||
"ns1.parent.com4."
|
"ns1.parent.com4."
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# Note: This MUST match the Portal or strange errors will ensue, NoOpCrypto should not be used for production
|
||||||
crypto {
|
crypto {
|
||||||
type = "vinyldns.core.crypto.NoOpCrypto"
|
type = "vinyldns.core.crypto.NoOpCrypto"
|
||||||
|
type = ${?CRYPTO_TYPE}
|
||||||
|
secret = ${?CRYPTO_SECRET}
|
||||||
}
|
}
|
||||||
|
|
||||||
data-stores = ["mysql"]
|
|
||||||
|
|
||||||
mysql {
|
mysql {
|
||||||
settings {
|
settings {
|
||||||
# JDBC Settings, these are all values in scalikejdbc-config, not our own
|
# JDBC Settings, these are all values in scalikejdbc-config, not our own
|
||||||
@ -184,49 +185,11 @@ vinyldns {
|
|||||||
user = ${?JDBC_USER}
|
user = ${?JDBC_USER}
|
||||||
password = ""
|
password = ""
|
||||||
password = ${?JDBC_PASSWORD}
|
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 = []
|
backends = []
|
||||||
|
|
||||||
|
|
||||||
# FQDNs / IPs that cannot be modified via VinylDNS
|
# FQDNs / IPs that cannot be modified via VinylDNS
|
||||||
# regex-list used for all record types except PTR
|
# regex-list used for all record types except PTR
|
||||||
# ip-list used exclusively for PTR records
|
# ip-list used exclusively for PTR records
|
||||||
@ -343,3 +306,7 @@ akka.http {
|
|||||||
illegal-header-warnings = on
|
illegal-header-warnings = on
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# You can provide configuration overrides via local.conf if you don't want to replace everything in
|
||||||
|
# this configuration file
|
||||||
|
include "local.conf"
|
||||||
|
@ -1,37 +1,47 @@
|
|||||||
FROM vinyldns/build:base-build-portal as builder
|
FROM vinyldns/build:base-build-portal as base-build
|
||||||
ARG VINYLDNS_VERSION
|
ARG VINYLDNS_VERSION
|
||||||
|
COPY . /build
|
||||||
|
WORKDIR /build
|
||||||
|
|
||||||
COPY . /vinyldns
|
RUN mkdir -p /opt/vinyldns/conf && \
|
||||||
|
if [ -f artifacts/vinyldns-portal.zip ]; then \
|
||||||
WORKDIR /vinyldns
|
unzip artifacts/vinyldns-portal.zip -d /opt/vinyldns && \
|
||||||
RUN cp /build/node_modules.tar.xz /vinyldns/modules/portal && \
|
mv /opt/vinyldns/vinyldns-portal/{lib,share,conf} /opt/vinyldns && \
|
||||||
cd /vinyldns/modules/portal && tar Jxf node_modules.tar.xz && \
|
rm -rf /opt/vinyldns/vinyldns-portal*; \
|
||||||
cd /vinyldns
|
fi && \
|
||||||
|
if [ ! -f /opt/vinyldns/lib/vinyldns.portal*.jar ]; then \
|
||||||
RUN sbt "set version in ThisBuild := \"${VINYLDNS_VERSION}\"; project portal; preparePortal"
|
cp /build/node_modules.tar.xz /build/modules/portal && \
|
||||||
RUN sbt "set version in ThisBuild := \"${VINYLDNS_VERSION}\"; project portal; universal:packageZipTarball"
|
cd /build/modules/portal && tar Jxf node_modules.tar.xz && \
|
||||||
|
cd /build && \
|
||||||
|
modules/portal/prepare-portal.sh && \
|
||||||
|
sbt "set version in ThisBuild := \"${VINYLDNS_VERSION}\"; project portal; dist" && \
|
||||||
|
unzip artifacts/vinyldns-portal.zip -d /opt/vinyldns && \
|
||||||
|
mv /opt/vinyldns/vinyldns-portal/{lib,share,conf} /opt/vinyldns && \
|
||||||
|
rm -rf /opt/vinyldns/vinyldns-portal*; \
|
||||||
|
fi
|
||||||
|
|
||||||
FROM adoptopenjdk/openjdk11:jdk-11.0.8_10-alpine
|
FROM adoptopenjdk/openjdk11:jdk-11.0.8_10-alpine
|
||||||
ARG DOCKER_FILE_PATH
|
ARG DOCKER_FILE_PATH
|
||||||
ARG VINYLDNS_VERSION
|
ARG VINYLDNS_VERSION
|
||||||
|
|
||||||
RUN test -n "VINYLDNS_VERSION" || (echo "VINYLDNS_VERSION not set" && false)
|
RUN test -n "VINYLDNS_VERSION" || (echo "VINYLDNS_VERSION not set" && false) && \
|
||||||
COPY --from=builder /vinyldns/modules/portal/target/universal/portal.tgz /
|
test -n "DOCKER_FILE_PATH" || (echo "DOCKER_FILE_PATH not set" && false) && \
|
||||||
|
apk add --update --no-cache bash && \
|
||||||
RUN apk add --update --no-cache bash && \
|
|
||||||
mkdir -p /opt/vinyldns/lib_extra && \
|
mkdir -p /opt/vinyldns/lib_extra && \
|
||||||
tar -xzf /portal.tgz && \
|
echo "${VINYLDNS_VERSION}" > /opt/vinyldns/version
|
||||||
rm /portal.tgz && \
|
|
||||||
mv /portal/* /opt/vinyldns && \
|
COPY --from=base-build /opt/vinyldns /opt/vinyldns
|
||||||
echo "${VINYLDNS_VERSION}" > /opt/vinyldns/conf/version
|
COPY ${DOCKER_FILE_PATH}/application.conf /opt/vinyldns/conf
|
||||||
|
COPY ${DOCKER_FILE_PATH}/logback.xml /opt/vinyldns/conf
|
||||||
|
|
||||||
COPY ${DOCKER_FILE_PATH}/application.conf /opt/vinyldns/conf/
|
|
||||||
|
|
||||||
VOLUME ["/opt/vinyldns/lib_extra/", "/opt/vinyldns/conf/"]
|
VOLUME ["/opt/vinyldns/lib_extra/", "/opt/vinyldns/conf/"]
|
||||||
|
|
||||||
EXPOSE 9001
|
EXPOSE 9001
|
||||||
|
|
||||||
ENTRYPOINT ["/bin/bash","-c", "java -Dvinyldns.version=$(cat /opt/vinyldns/conf/version) \
|
ENV JVM_OPTS=""
|
||||||
-Dconfig.file=/opt/vinyldns/conf/application.conf \
|
ENTRYPOINT ["/bin/bash","-c", "java ${JVM_OPTS} -Dvinyldns.version=$(cat /opt/vinyldns/version) \
|
||||||
-cp /opt/vinyldns/conf:/opt/vinyldns/lib/*:/opt/vinyldns/lib_extra/* \
|
-Dlogback.configurationFile=/opt/vinyldns/conf/logback.xml \
|
||||||
play.core.server.ProdServerStart"]
|
-Dconfig.file=/opt/vinyldns/conf/application.conf \
|
||||||
|
-cp /opt/vinyldns/conf:/opt/vinyldns/lib/*:/opt/vinyldns/lib_extra/* \
|
||||||
|
play.core.server.ProdServerStart"]
|
||||||
|
@ -10,7 +10,7 @@ ifneq ($(REQ_MAKE_VER),$(firstword $(sort $(MAKE_VERSION) $(REQ_MAKE_VER))))
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# Extract arguments for `make run`
|
# Extract arguments for `make run`
|
||||||
EXTRACT_ARGS=true
|
EXTRACT_ARGS=false
|
||||||
ifeq (run,$(firstword $(MAKECMDGOALS)))
|
ifeq (run,$(firstword $(MAKECMDGOALS)))
|
||||||
EXTRACT_ARGS=true
|
EXTRACT_ARGS=true
|
||||||
endif
|
endif
|
||||||
@ -18,8 +18,8 @@ ifeq ($(EXTRACT_ARGS),true)
|
|||||||
# use the rest as arguments for "run"
|
# use the rest as arguments for "run"
|
||||||
WITH_ARGS ?= $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
|
WITH_ARGS ?= $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
|
||||||
endif
|
endif
|
||||||
ifdef $(WITH_ARGS)
|
ifneq ($(WITH_ARGS),)
|
||||||
ARG_SEPARATOR=--
|
ARG_SEPARATOR=--
|
||||||
endif
|
endif
|
||||||
|
|
||||||
%:
|
%:
|
||||||
@ -44,8 +44,8 @@ build:
|
|||||||
run:
|
run:
|
||||||
@set -euo pipefail
|
@set -euo pipefail
|
||||||
docker network create --driver bridge vinyldns_net &> /dev/null || true
|
docker network create --driver bridge vinyldns_net &> /dev/null || true
|
||||||
test -t 1 && USE_TTY="-t"
|
USE_TTY="" && test -t 1 && USE_TTY="-t"
|
||||||
docker run -i $${USE_TTY} --rm --network vinyldns_net --env-file "$(ROOT_DIR)/../.env" $(DOCKER_PARAMS) -v "$$(pwd)/application.conf:/opt/vinyldns/conf/application.conf" -p 9001:9001 $(IMAGE_NAME):$(IMAGE_TAG) $(ARG_SEPARATOR) $(WITH_ARGS)
|
docker run -i $${USE_TTY} --rm --network vinyldns_net --env-file "$(ROOT_DIR)/../.env" $(DOCKER_PARAMS) -v "$$(pwd)/application.conf:/opt/vinyldns/conf/application.conf" -v "$$(pwd)/logback.xml:/opt/vinyldns/conf/logback.xml" -p 9001:9001 $(IMAGE_NAME):$(IMAGE_TAG) $(ARG_SEPARATOR) $(WITH_ARGS)
|
||||||
|
|
||||||
publish: build
|
publish: build
|
||||||
@set -euo pipefail
|
@set -euo pipefail
|
||||||
|
@ -18,7 +18,9 @@ LDAP {
|
|||||||
]
|
]
|
||||||
context {
|
context {
|
||||||
initialContextFactory = "com.sun.jndi.ldap.LdapCtxFactory"
|
initialContextFactory = "com.sun.jndi.ldap.LdapCtxFactory"
|
||||||
|
initialContextFactory = ${?LDAP_INITIAL_CONTEXT_CLASS}
|
||||||
securityAuthentication = "simple"
|
securityAuthentication = "simple"
|
||||||
|
securityAuthentication = ${?LDAP_SECURITY_AUTH}
|
||||||
|
|
||||||
# Note: The following assumes a purely docker setup, using container_name = vinyldns-ldap
|
# Note: The following assumes a purely docker setup, using container_name = vinyldns-ldap
|
||||||
providerUrl = "ldap://vinyldns-ldap:19004"
|
providerUrl = "ldap://vinyldns-ldap:19004"
|
||||||
@ -29,13 +31,17 @@ LDAP {
|
|||||||
# company for example)
|
# company for example)
|
||||||
user-sync {
|
user-sync {
|
||||||
enabled = false
|
enabled = false
|
||||||
|
enabled = ${?USER_SYNC_ENABLED}
|
||||||
hours-polling-interval = 1
|
hours-polling-interval = 1
|
||||||
|
hours-polling-interval = ${?USER_SYNC_POLL_INTERVAL}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Note: This MUST match the API or strange errors will ensure, NoCrypto should not be used for production
|
# Note: This MUST match the API or strange errors will ensue, NoOpCrypto should not be used for production
|
||||||
crypto {
|
crypto {
|
||||||
type = "vinyldns.core.crypto.NoOpCrypto"
|
type = "vinyldns.core.crypto.NoOpCrypto"
|
||||||
|
type = ${?CRYPTO_TYPE}
|
||||||
|
secret = ${?CRYPTO_SECRET}
|
||||||
}
|
}
|
||||||
|
|
||||||
http.port = 9001
|
http.port = 9001
|
||||||
@ -43,20 +49,14 @@ http.port = ${?PORTAL_PORT}
|
|||||||
|
|
||||||
data-stores = ["mysql"]
|
data-stores = ["mysql"]
|
||||||
|
|
||||||
# Note: The default mysql settings assume a local docker compose setup with mysql named vinyldns-mysql
|
# Must be true to manage shared zones through the portal
|
||||||
# follow the configuration guide to point to your mysql
|
shared-display-enabled = true
|
||||||
# Only 3 repositories are needed for portal: user, task, user-change
|
shared-display-enabled = ${?SHARED_ZONES_ENABLED}
|
||||||
mysql {
|
|
||||||
repositories {
|
|
||||||
user {
|
|
||||||
}
|
|
||||||
task {
|
|
||||||
}
|
|
||||||
user-change {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# You generate this yourself following https://www.playframework.com/documentation/2.7.x/ApplicationSecret
|
# You generate this yourself following https://www.playframework.com/documentation/2.7.x/ApplicationSecret
|
||||||
play.http.secret.key = "rpkTGtoJvLIdIV?WU=0@yW^x:pcEGyAt`^p/P3G0fpbj9:uDnD@caSjCDqA0@tB="
|
play.http.secret.key = "changeme"
|
||||||
play.http.secret.key = ${?PLAY_HTTP_SECRET_KEY}
|
play.http.secret.key = ${?PLAY_HTTP_SECRET_KEY}
|
||||||
|
|
||||||
|
# You can provide configuration overrides via local.conf if you don't want to replace everything in
|
||||||
|
# this configuration file
|
||||||
|
include "local.conf"
|
||||||
|
21
build/docker/portal/logback.xml
Normal file
21
build/docker/portal/logback.xml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<configuration>
|
||||||
|
|
||||||
|
<conversionRule conversionWord="coloredLevel" converterClass="play.api.libs.logback.ColoredLevel" />
|
||||||
|
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{"yyyy-MM-dd HH:mm:ss,SSS"} %coloredLevel - %logger - %message%n%xException</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
<!--
|
||||||
|
The logger name is typically the Java/Scala package name.
|
||||||
|
This configures the log level to log at for a package and its children packages.
|
||||||
|
-->
|
||||||
|
<logger name="play" level="INFO" />
|
||||||
|
<logger name="application" level="DEBUG" />
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
|
||||||
|
</configuration>
|
@ -4,8 +4,8 @@ DIR=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
|
|||||||
|
|
||||||
source "${DIR}/../utils/includes/terminal_colors.sh"
|
source "${DIR}/../utils/includes/terminal_colors.sh"
|
||||||
|
|
||||||
if [ ! -d "${DIR}/../assembly" ] || [ ! -f "${DIR}/../assembly/vinyldns.jar" ]; then
|
if [ ! -d "${DIR}/../artifacts" ] || [ ! -f "${DIR}/../artifacts/vinyldns-api.jar" ]; then
|
||||||
echo -e "${F_YELLOW}Warning:${F_RESET} you might want to run 'build/assemble_api_jar.sh' first to improve performance"
|
echo -e "${F_YELLOW}Warning:${F_RESET} you might want to run 'build/assemble_api.sh' first to improve performance"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Running unit and integration tests..."
|
echo "Running unit and integration tests..."
|
||||||
|
@ -30,5 +30,5 @@ all: run
|
|||||||
run:
|
run:
|
||||||
@set -euo pipefail
|
@set -euo pipefail
|
||||||
cd ../..
|
cd ../..
|
||||||
test -t 1 && USE_TTY="-t"
|
USE_TTY="" && test -t 1 && USE_TTY="-t"
|
||||||
docker run -i $${USE_TTY} --rm -p "4000:4000" -v "$$(pwd):/build" vinyldns/build:base-build-docs /bin/bash
|
docker run -i $${USE_TTY} --rm -p "4000:4000" -v "$$(pwd):/build" vinyldns/build:base-build-docs /bin/bash
|
||||||
|
@ -29,9 +29,9 @@ purposes.
|
|||||||
## Volume Mounts
|
## Volume Mounts
|
||||||
The API exposes volumes that allow the user to customize the runtime. Those mounts include:
|
The API exposes volumes that allow the user to customize the runtime. Those mounts include:
|
||||||
|
|
||||||
* `/opt/docker/lib_extra` - place here additional jar files that need to be loaded into the classpath when the application starts up.
|
* `/opt/vinyldns/lib_extra` - place here additional jar files that need to be loaded into the classpath when the application starts up.
|
||||||
This is used for "plugins" that are proprietary or not part of the standard build. All jar files here will be placed on the class path.
|
This is used for "plugins" that are proprietary or not part of the standard build. All jar files here will be placed on the class path.
|
||||||
* `/opt/docker/conf` - place an `application.conf` file here with your own custom settings. Once you have your config created,
|
* `/opt/vinyldns/conf` - place an `application.conf` file here with your own custom settings. Once you have your config created,
|
||||||
place here.
|
place here.
|
||||||
|
|
||||||
## Ports
|
## Ports
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
---
|
---
|
||||||
layout: docs
|
layout: docs title: "Setup the Portal Server"
|
||||||
title: "Setup the Portal Server"
|
|
||||||
section: "operator_menu"
|
section: "operator_menu"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Setup the Portal Server
|
# Setup the Portal Server
|
||||||
The Portal Server is the web UI for VinylDNS. To setup the Portal server, follow these steps:
|
|
||||||
|
The Portal Server is the web UI for VinylDNS. To setup the Portal server, follow these steps:
|
||||||
|
|
||||||
1. [Setup API Server](setup-api.html)
|
1. [Setup API Server](setup-api.html)
|
||||||
1. [Setup LDAP](setup-ldap.html)
|
1. [Setup LDAP](setup-ldap.html)
|
||||||
@ -16,21 +16,32 @@ Once you have you pre-requisites ready, review the [Portal Configuration Guide](
|
|||||||
your configuration file.
|
your configuration file.
|
||||||
|
|
||||||
# Using the Portal Docker Image
|
# Using the Portal Docker Image
|
||||||
|
|
||||||
The Portal server is provided as a [VinylDNS Portal Image](https://hub.docker.com/r/vinyldns/portal/).
|
The Portal server is provided as a [VinylDNS Portal Image](https://hub.docker.com/r/vinyldns/portal/).
|
||||||
|
|
||||||
The API server is _stateless_, allowing you to run multiple instances in multiple data centers for high-availability
|
The API server is _stateless_, allowing you to run multiple instances in multiple data centers for high-availability
|
||||||
purposes.
|
purposes.
|
||||||
|
|
||||||
## Volume mounts
|
## Volume mounts
|
||||||
* `/opt/docker/lib_extra` - place here additional jar files that need to be loaded into the classpath when the application starts up.
|
|
||||||
This is used for "plugins" that are proprietary or not part of the standard build. All jar files here will be placed on the class path.
|
* `/opt/vinyldns/lib_extra` - place here additional jar files that need to be loaded into the classpath when the
|
||||||
* `/opt/docker/conf/application.conf` - to override default configuration settings. Follow the [Portal Configuration Guide](config-portal.html)
|
application starts up. This is used for "plugins" that are proprietary or not part of the standard build. All jar
|
||||||
* `/opt/docker/conf/application.ini` - to pass additional JVM options
|
files here will be placed on the class path.
|
||||||
* `/opt/docker/conf/trustStore.jks` - to make available a custom trustStore, which has to be set in `/opt/docker/conf/application.ini` as `-Djavax.net.ssl.trustStore=/opt/docker/conf/trustStore.jks`
|
* `/opt/vinyldns/conf/application.conf` - to override default configuration settings. Follow
|
||||||
|
the [Portal Configuration Guide](config-portal.html)
|
||||||
|
|
||||||
## Configuring a custom Java trustStore
|
## Configuring a custom Java trustStore
|
||||||
To add a custom Java trustStore for LDAP certs, add the trustStore to `/opt/docker/conf/trustStore.jks`.
|
|
||||||
Then add `-Djavax.net.ssl.trustStore=/opt/docker/conf/trustStore.jks` to `/opt/docker/conf/application.ini`.
|
To add a custom Java trustStore for LDAP certs, add the trustStore to `/opt/vinyldns/conf/trustStore.jks`. Then
|
||||||
|
add `-Djavax.net.ssl.trustStore=/opt/vinyldns/conf/trustStore.jks` to the `JVM_OPTS` environment variable for the
|
||||||
|
container.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```text
|
||||||
|
docker run -e JVM_OPTS="-Djavax.net.ssl.trustStore=/opt/vinyldns/conf/trustStore.jks" ...
|
||||||
|
```
|
||||||
|
|
||||||
## Additional JVM parameters
|
## Additional JVM parameters
|
||||||
Additional JVM parameters can be added to `/opt/docker/conf/application.ini`
|
|
||||||
|
Additional JVM parameters can be added to the `JVM_OPTS` environment variable
|
||||||
|
13
modules/portal/.gitignore
vendored
13
modules/portal/.gitignore
vendored
@ -4,13 +4,18 @@ __pycache__
|
|||||||
/func_test/.virtualenv
|
/func_test/.virtualenv
|
||||||
node_modules/
|
node_modules/
|
||||||
public/bower_components/
|
public/bower_components/
|
||||||
public/javascripts/
|
|
||||||
public/stylesheets/
|
|
||||||
public/test_frameworks/
|
public/test_frameworks/
|
||||||
public/custom/views.vinyl.js
|
|
||||||
package-lock.json
|
package-lock.json
|
||||||
release.version
|
release.version
|
||||||
private
|
private
|
||||||
public/gentelella
|
|
||||||
.bloop
|
.bloop
|
||||||
.metals
|
.metals
|
||||||
|
|
||||||
|
public/js/*
|
||||||
|
!public/js/custom.js
|
||||||
|
|
||||||
|
public/css/*
|
||||||
|
!public/css/theme-overrides.css
|
||||||
|
!public/css/vinyldns.css
|
||||||
|
|
||||||
|
public/fonts
|
||||||
|
@ -1,88 +1,133 @@
|
|||||||
/*global module:false*/
|
module.exports = function(grunt) {
|
||||||
module.exports = function (grunt) {
|
|
||||||
|
|
||||||
// Project configuration.
|
const license = `/*
|
||||||
grunt.initConfig({
|
* Copyright 2018 Comcast Cable Communications Management, LLC
|
||||||
// Metadata.
|
*
|
||||||
pkg: grunt.file.readJSON('package.json'),
|
* Licensed under the Apache License, Version 2.0 (the \\"License\\");
|
||||||
copy: {
|
* you may not use this file except in compliance with the License.
|
||||||
main: {
|
* You may obtain a copy of the License at
|
||||||
files: [
|
*
|
||||||
// includes files within path and its sub-directories
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
{ expand: true, flatten: true, src: ['node_modules/jquery/dist/jquery.min.js'], dest: 'public/javascripts' },
|
*
|
||||||
{ expand: true, flatten: true, src: ['node_modules/angular/angular.min.js'], dest: 'public/javascripts' },
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
{ expand: true, flatten: true, src: ['node_modules/angular-animate/angular-animate.min.js'], dest: 'public/javascripts' },
|
* distributed under the License is distributed on an \\"AS IS\\" BASIS,
|
||||||
{ expand: true, flatten: true, src: ['node_modules/angular-bootstrap/ui-bootstrap.min.js'], dest: 'public/javascripts' },
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
{ expand: true, flatten: true, src: ['node_modules/bootstrap/dist/js/bootstrap.min.js'], dest: 'public/javascripts' },
|
* See the License for the specific language governing permissions and
|
||||||
{ expand: true, flatten: true, src: ['node_modules/angular-ui-router/release/angular-ui-router.min.js'], dest: 'public/javascripts' },
|
* limitations under the License.
|
||||||
{ expand: true, flatten: true, src: ['node_modules/bootstrap/dist/css/bootstrap.min.css'], dest: 'public/stylesheets' },
|
*/`;
|
||||||
{ expand: true, flatten: true, src: ['node_modules/font-awesome/css/font-awesome.min.css'], dest: 'public/stylesheets' },
|
|
||||||
{ expand: true, flatten: true, src: ['node_modules/moment/min/moment.min.js'], dest: 'public/javascripts' },
|
|
||||||
{ expand: true, cwd: 'node_modules/gentelella', dest: 'public/gentelella', src: '**'},
|
|
||||||
{ expand: true, flatten: true, src: ['public/custom/**/*.js', '!public/custom/**/*.spec.js'], dest: 'public/javascripts' },
|
|
||||||
{ expand: true, flatten: true, src: ['public/custom/**/*.css'], dest: 'public/stylesheets' }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
unit: {
|
|
||||||
files: [
|
|
||||||
{ expand: true, flatten: true, src: ['node_modules/angular-mocks/angular-mocks.js'], dest: 'public/test_frameworks' },
|
|
||||||
{ expand: true, flatten: true, src: ['node_modules/jasmine-jquery/lib/jasmine-jquery.js'], dest: 'public/test_frameworks' },
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
injector: {
|
|
||||||
local_dependencies: {
|
|
||||||
files: {
|
|
||||||
'app/views/main.scala.html': [
|
|
||||||
'public/javascripts/moment.min.js',
|
|
||||||
'public/gentelella/vendors/jquery/dist/jquery.min.js',
|
|
||||||
'public/gentelella/vendors/bootstrap/dist/js/bootstrap.min.js',
|
|
||||||
'public/gentelella/vendors/bootstrap-daterangepicker/daterangepicker.js',
|
|
||||||
'public/javascripts/ui-bootstrap.min.js',
|
|
||||||
'public/javascripts/angular.min.js',
|
|
||||||
'public/lib/**/*.module.js',
|
|
||||||
'public/lib/**/*.js',
|
|
||||||
'public/app.js',
|
|
||||||
'public/gentelella/build/js/custom.js',
|
|
||||||
'public/js/custom.js',
|
|
||||||
'!public/lib/**/*.spec.js'
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
karma: {
|
|
||||||
unit: {
|
|
||||||
configFile: 'karma.conf.js'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
clean: {
|
|
||||||
js: ['public/javascripts/*'],
|
|
||||||
css: ['public/stylesheets/*'],
|
|
||||||
unit: ['public/test_frameworks/*'],
|
|
||||||
gentelella: ['public/gentelella/*']
|
|
||||||
},
|
|
||||||
ngtemplates: {
|
|
||||||
'views.vinyl': {
|
|
||||||
src: 'public/custom/**/*.html',
|
|
||||||
dest: 'public/custom/views.vinyl.js',
|
|
||||||
options: {
|
|
||||||
standalone: true,
|
|
||||||
quotes: 'single',
|
|
||||||
url: function (url) { return url.replace('public/custom/', ''); }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
grunt.loadNpmTasks('grunt-contrib-copy');
|
grunt.loadNpmTasks('grunt-contrib-copy');
|
||||||
grunt.loadNpmTasks('grunt-injector');
|
grunt.loadNpmTasks('grunt-contrib-clean');
|
||||||
grunt.loadNpmTasks('grunt-contrib-clean');
|
grunt.loadNpmTasks('grunt-karma');
|
||||||
grunt.loadNpmTasks('grunt-angular-templates');
|
grunt.loadNpmTasks('grunt-mocha-phantomjs');
|
||||||
grunt.loadNpmTasks('grunt-karma');
|
grunt.loadNpmTasks('grunt-contrib-concat');
|
||||||
grunt.loadNpmTasks('grunt-mocha-phantomjs');
|
|
||||||
|
|
||||||
// Default task
|
// Project configuration.
|
||||||
grunt.registerTask('default', ['clean', 'ngtemplates', 'copy:main', 'injector']);
|
grunt.initConfig({
|
||||||
// Unit tests
|
pkg: grunt.file.readJSON('package.json'),
|
||||||
grunt.registerTask('unit', ['default', 'ngtemplates', 'copy:unit', 'karma:unit', 'clean:unit']);
|
|
||||||
|
copy: {
|
||||||
|
// Collect all of the javascript and CSS files that we need (we'll combine them later)
|
||||||
|
main: {
|
||||||
|
files: [
|
||||||
|
{expand: true, flatten: true, src: ['node_modules/angular/angular.min.js'], dest: 'public/js'},
|
||||||
|
{expand: true, flatten: true, src: ['node_modules/bootstrap/dist/js/bootstrap.min.js'], dest: 'public/js'},
|
||||||
|
{expand: true, flatten: true, src: ['node_modules/jquery/dist/jquery.min.js'], dest: 'public/js'},
|
||||||
|
{expand: true, flatten: true, src: ['node_modules/moment/min/moment.min.js'], dest: 'public/js'},
|
||||||
|
|
||||||
|
{expand: true, flatten: true, src: ['node_modules/bootstrap/dist/css/bootstrap.min.css'], dest: 'public/css'},
|
||||||
|
{expand: true, flatten: true, src: ['node_modules/font-awesome/css/font-awesome.min.css'], dest: 'public/css'},
|
||||||
|
|
||||||
|
// We're picking just the resources we need from the gentelella UI framework and temporarily storing them in mapped/ui/
|
||||||
|
{expand: true, flatten: true, cwd: 'node_modules/gentelella', dest: 'mapped/ui', src: '**/jquery.{smartWizard,mCustomScrollbar.concat.min,dataTables.min,mousewheel.min}.js'},
|
||||||
|
{expand: true, flatten: true, cwd: 'node_modules/gentelella', dest: 'mapped/ui', src: '**/bootstrap-daterangepicker/daterangepicker.js'},
|
||||||
|
{expand: true, flatten: true, cwd: 'node_modules/gentelella', dest: 'mapped/ui', src: '**/build/css/custom.min.css'},
|
||||||
|
{expand: true, flatten: true, cwd: 'node_modules/gentelella', dest: 'mapped/ui', src: '**/{daterangepicker,animate.min}.css'},
|
||||||
|
{expand: true, flatten: true, cwd: 'node_modules/gentelella', dest: 'public/fonts', src: '**/fonts/*.{woff,woff2,ttf}'},
|
||||||
|
|
||||||
|
{expand: true, flatten: true, src: ['public/custom/**/*.js', '!public/custom/**/*.spec.js'], dest: 'public/js'},
|
||||||
|
{expand: true, flatten: true, src: ['public/custom/**/*.css'], dest: 'public/css'},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
// Unit test files
|
||||||
|
unit: {
|
||||||
|
files: [
|
||||||
|
{expand: true, flatten: true, src: ['node_modules/angular-mocks/angular-mocks.js'], dest: 'public/test_frameworks'},
|
||||||
|
{expand: true, flatten: true, src: ['node_modules/jasmine-jquery/lib/jasmine-jquery.js'], dest: 'public/test_frameworks'},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
// Unit test configuration
|
||||||
|
karma: {
|
||||||
|
unit: {
|
||||||
|
configFile: 'karma.conf.js',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
// Combine multiple files to make it easier to import and use them
|
||||||
|
concat: {
|
||||||
|
options: {
|
||||||
|
sourceMap: true,
|
||||||
|
},
|
||||||
|
css: {
|
||||||
|
files: {
|
||||||
|
'public/css/ui.css': ['mapped/ui/*.css'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
vinyldns: {
|
||||||
|
options: {
|
||||||
|
banner: license,
|
||||||
|
separator: ';\n',
|
||||||
|
process: (src, filepath) => {
|
||||||
|
return '/* Source: ' + filepath + '*/\n' +
|
||||||
|
src.replace(/(^|\n)[ \t]*('use strict'|"use strict");?\s*/g, '$1').replace(/\/\*.+?\*\//gs, '').replace(/\n{2,}/g, '\n');
|
||||||
|
},
|
||||||
|
},
|
||||||
|
files: {
|
||||||
|
'public/js/vinyldns.js': [
|
||||||
|
'public/lib/**/*.module.js',
|
||||||
|
'public/lib/**/*.js',
|
||||||
|
'!public/lib/**/*.spec.js',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
ui_javascript: {
|
||||||
|
options: {
|
||||||
|
separator: ';\n',
|
||||||
|
process: (src, filepath) => {
|
||||||
|
return '/* Source: ' + filepath + ' */\n' +
|
||||||
|
src.replace(/(^|\n)[ \t]*('use strict'|"use strict");?\s*/g, '$1');
|
||||||
|
},
|
||||||
|
},
|
||||||
|
files: {
|
||||||
|
'public/js/ui.js': ['mapped/ui/**/*.js'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
ui_css: {
|
||||||
|
options: {
|
||||||
|
separator: '\n',
|
||||||
|
process: (src, filepath) => {
|
||||||
|
return '/* Source: ' + filepath + ' */\n' + src;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
files: {
|
||||||
|
'public/css/ui.css': ['mapped/ui/**/*.css'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
clean: {
|
||||||
|
js: ['public/js/*', '!public/js/custom.js'],
|
||||||
|
css: ['public/css/*', '!public/css/{theme-overrides,vinyldns}.css'],
|
||||||
|
mapped: ['mapped/'],
|
||||||
|
fonts: ['public/fonts'],
|
||||||
|
unit: ['public/test_frameworks/*'],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// Default task
|
||||||
|
grunt.registerTask('default', ['clean', 'copy:main', 'concat', 'clean:mapped']);
|
||||||
|
// Unit tests
|
||||||
|
grunt.registerTask('unit', ['default', 'copy:unit', 'karma:unit', 'clean:unit']);
|
||||||
};
|
};
|
||||||
|
@ -1,19 +1,24 @@
|
|||||||
# VinylDNS Portal
|
# VinylDNS Portal
|
||||||
Supplies a UI for and offers authentication into Vinyl, a DNSaaS offering.
|
|
||||||
|
Supplies a UI for and offers authentication into VinylDNS.
|
||||||
|
|
||||||
# Running Unit Tests
|
# Running Unit Tests
|
||||||
|
|
||||||
First, startup sbt: `sbt`.
|
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`
|
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
|
# Running Frontend Tests
|
||||||
|
|
||||||
The front end tests can be run from the `test/portal/fuctional` directory by simply running `make`.
|
The front end tests can be run from the `test/portal/fuctional` directory by simply running `make`.
|
||||||
|
|
||||||
# Building Locally
|
# Building Locally
|
||||||
|
|
||||||
1. You must have npm, if you don't have npm, follow instructions here <https://www.npmjs.com/get-npm>.
|
1. You must have npm, if you don't have npm, follow instructions here <https://www.npmjs.com/get-npm>.
|
||||||
2. Run `npm install` to install all dependencies, this includes those needed for testing. If you just want to run the portal then `npm install --production` would suffice
|
2. Run `npm install` to install all dependencies, this includes those needed for testing. If you just want to run the
|
||||||
3. You must have grunt, if you don't have grunt, run `npm install -g grunt`. Then run `grunt default` from the root of the portal project
|
portal then `npm install --production` would suffice
|
||||||
|
3. You must have grunt, if you don't have grunt, run `npm install -g grunt`. Then run `grunt default` from the root of
|
||||||
|
the portal project
|
||||||
4. Create a local.conf file in the portal conf folder for your settings if desired.
|
4. Create a local.conf file in the portal conf folder for your settings if desired.
|
||||||
5. Follow the instructions for building vinyl locally on the vinyl readme
|
5. Follow the instructions for building vinyl locally on the vinyl readme
|
||||||
6. Start vinyl with `sbt run`. Vinyl will start on localhost on port 9000.
|
6. Start vinyl with `sbt run`. Vinyl will start on localhost on port 9000.
|
||||||
@ -21,20 +26,25 @@ The front end tests can be run from the `test/portal/fuctional` directory by sim
|
|||||||
8. In a web browser go to localhost:9001
|
8. In a web browser go to localhost:9001
|
||||||
|
|
||||||
# Working locally
|
# Working locally
|
||||||
Often times as a developer you want to work with the portal locally in a "real" setting against your own LDAP
|
|
||||||
server. If your LDAP server requires SSL certs, you will need to create a trust store (or register the
|
Often times as a developer you want to work with the portal locally in a "real" setting against your own LDAP server. If
|
||||||
SSL certs on your local machine). If you create a trust store, you will need to make the trust store
|
your LDAP server requires SSL certs, you will need to create a trust store (or register the SSL certs on your local
|
||||||
available so that you can start the portal locally and test.
|
machine). If you create a trust store, you will need to make the trust store available so that you can start the portal
|
||||||
|
locally and test.
|
||||||
|
|
||||||
1. Create a trust store and save your certs.
|
1. Create a trust store and save your certs.
|
||||||
1. Pass the trust store in when you start sbt. This can be on the command line like...
|
1. Pass the trust store in when you start sbt. This can be on the command line like...
|
||||||
`sbt -Djavax.net.ssl.trustStore="./private/trustStore.jks"`
|
`sbt -Djavax.net.ssl.trustStore="./private/trustStore.jks"`
|
||||||
|
|
||||||
# Updating the trustStore Certificates
|
# Updating the trustStore Certificates
|
||||||
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.
|
When some event causes the LDAP lookup to fail because of SSL certificate issues, follow the following steps to update
|
||||||
- Get the new certificate with `openssl s_client -connect <ldap server>:<port>`. This will display the certificate on the screen.
|
the `trustStore` with the new certificates.
|
||||||
- Copy everything from `-----BEGIN CERTIFICATE-----` to `-----END CERTIFICATE-----` including the begin and end markers to the clipboard.
|
|
||||||
|
- Get the new certificate with `openssl s_client -connect <ldap server>:<port>`. 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.
|
||||||
- Open a new file in your favorite text editor
|
- Open a new file in your favorite text editor
|
||||||
- Paste the clipboard contents into the file
|
- Paste the clipboard contents into the file
|
||||||
- Save the file and give it a name to be used in the next steps. (ex. `new-ad-ssl-cert.pem`)
|
- Save the file and give it a name to be used in the next steps. (ex. `new-ad-ssl-cert.pem`)
|
||||||
|
@ -109,9 +109,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@plugins = {
|
@plugins = {
|
||||||
<script type='text/javascript' src='/public/gentelella/vendors/iCheck/icheck.min.js'></script>
|
<script type='text/javascript' src='/public/js/ui.js'></script>
|
||||||
<script type="text/javascript" src="/public/gentelella/vendors/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.js"></script>
|
|
||||||
<script type="text/javascript" src="/public/gentelella/vendors/datatables.net/js/jquery.dataTables.min.js"></script>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@main(rootAccountName)("MembershipController")("Group")(content)(plugins)
|
@main(rootAccountName)("MembershipController")("Group")(content)(plugins)
|
||||||
|
@ -266,9 +266,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@plugins = {
|
@plugins = {
|
||||||
<script type='text/javascript' src='/public/gentelella/vendors/iCheck/icheck.min.js'></script>
|
<script type='text/javascript' src='/public/js/ui.js'></script>
|
||||||
<script type="text/javascript" src="/public/gentelella/vendors/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.js"></script>
|
|
||||||
<script type="text/javascript" src="/public/gentelella/vendors/jQuery-Smart-Wizard/js/jquery.smartWizard.js"></script>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@main(rootAccountName)("GroupsController")("Groups")(content)(plugins)
|
@main(rootAccountName)("GroupsController")("Groups")(content)(plugins)
|
||||||
|
@ -13,8 +13,9 @@
|
|||||||
<!-- END META SECTION -->
|
<!-- END META SECTION -->
|
||||||
|
|
||||||
<!-- CSS INCLUDE -->
|
<!-- CSS INCLUDE -->
|
||||||
<link rel="stylesheet" type="text/css" id="theme" href="/public/gentelella/vendors/bootstrap/dist/css/bootstrap.min.css"/>
|
<link rel="stylesheet" type="text/css" id="theme" href="/public/css/bootstrap.min.css"/>
|
||||||
<link rel="stylesheet" type="text/css" id="theme" href="/public/gentelella/build/css/custom.css"/>
|
<link rel="stylesheet" type="text/css" id="theme" href="/public/css/ui.css"/>
|
||||||
|
<link rel="stylesheet" type="text/css" id="custom" href="/public/css/theme-overrides.css"/>
|
||||||
<link rel="stylesheet" type="text/css" id="custom" href="/public/css/vinyldns.css"/>
|
<link rel="stylesheet" type="text/css" id="custom" href="/public/css/vinyldns.css"/>
|
||||||
<!-- EOF CSS INCLUDE -->
|
<!-- EOF CSS INCLUDE -->
|
||||||
</head>
|
</head>
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- META SECTION -->
|
<!-- META SECTION -->
|
||||||
<title>@pageHeader | VinylDNS</title>
|
<title>@pageHeader | VinylDNS</title>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||||
@ -12,16 +12,14 @@
|
|||||||
<meta name="google" content="notranslate" />
|
<meta name="google" content="notranslate" />
|
||||||
<meta id="csrf" content="@CSRF.getToken.value" />
|
<meta id="csrf" content="@CSRF.getToken.value" />
|
||||||
<link rel="icon" href="/public/images/favicon.ico" type="image/x-icon" />
|
<link rel="icon" href="/public/images/favicon.ico" type="image/x-icon" />
|
||||||
<!-- END META SECTION -->
|
<!-- END META SECTION -->
|
||||||
|
|
||||||
<!-- CSS INCLUDE -->
|
<!-- CSS INCLUDE -->
|
||||||
<link rel="stylesheet" type="text/css" id="theme" href="/public/gentelella/vendors/bootstrap/dist/css/bootstrap.min.css"/>
|
<link rel="stylesheet" type="text/css" id="theme" href="/public/css/bootstrap.min.css"/>
|
||||||
<link rel="stylesheet" type="text/css" href="/public/gentelella/vendors/font-awesome/css/font-awesome.css">
|
<link rel="stylesheet" type="text/css" href="/public/css/font-awesome.min.css">
|
||||||
<link rel="stylesheet" type="text/css" href="/public/gentelella/vendors/animate.css/animate.css">
|
<link rel="stylesheet" type="text/css" href="/public/css/ui.css" />
|
||||||
<link rel="stylesheet" type="text/css" id="theme" href="/public/gentelella/build/css/custom.css"/>
|
|
||||||
<link rel="stylesheet" type="text/css" id="custom" href="/public/css/theme-overrides.css"/>
|
<link rel="stylesheet" type="text/css" id="custom" href="/public/css/theme-overrides.css"/>
|
||||||
<link rel="stylesheet" type="text/css" id="custom" href="/public/css/vinyldns.css"/>
|
<link rel="stylesheet" type="text/css" id="custom" href="/public/css/vinyldns.css"/>
|
||||||
<link rel="stylesheet" type="text/css" href="/public/gentelella/vendors/bootstrap-daterangepicker/daterangepicker.css" />
|
|
||||||
<!-- EOF CSS INCLUDE -->
|
<!-- EOF CSS INCLUDE -->
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
@ -97,8 +95,7 @@
|
|||||||
@header(rootAccountName)(request)
|
@header(rootAccountName)(request)
|
||||||
@pageContent
|
@pageContent
|
||||||
|
|
||||||
<footer/><p class="main-footer-text text-right">VinylDNS (version @{meta.version})</p></footer>
|
<footer><p class="main-footer-text text-right">VinylDNS (version @{meta.version})</p></footer>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<!-- END PAGE CONTAINER -->
|
<!-- END PAGE CONTAINER -->
|
||||||
|
|
||||||
@ -142,65 +139,22 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<span class="text-danger">Are you sure you want to regenerate your credentials? </span>
|
<span class="text-danger">Are you sure you want to regenerate your credentials? </span>
|
||||||
<button class="btn btn-danger pull-right" ng-click="regenerateCredentials()">Yes</a>
|
<button class="btn btn-danger pull-right" ng-click="regenerateCredentials()">Yes</button>
|
||||||
<button class="btn btn-primary" data-dismiss="modal">No</button>
|
<button class="btn btn-primary" data-dismiss="modal">No</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- CREDS BOX -->
|
|
||||||
|
|
||||||
<!-- START SCRIPTS -->
|
<script src="/public/js/moment.min.js"></script>
|
||||||
<!-- START INJECTED DEPENDENCIES -->
|
<script src="/public/js/jquery.min.js"></script>
|
||||||
<!-- injector:js -->
|
<script src="/public/js/bootstrap.min.js"></script>
|
||||||
<script src="/public/javascripts/moment.min.js"></script>
|
<script src="/public/js/angular.min.js"></script>
|
||||||
<script src="/public/gentelella/vendors/jquery/dist/jquery.min.js"></script>
|
<script src="/public/js/ui.js"></script>
|
||||||
<script src="/public/gentelella/vendors/bootstrap/dist/js/bootstrap.min.js"></script>
|
<script src="/public/js/vinyldns.js"></script>
|
||||||
<script src="/public/gentelella/vendors/bootstrap-daterangepicker/daterangepicker.js"></script>
|
<script src="/public/app.js"></script>
|
||||||
<script src="/public/javascripts/angular.min.js"></script>
|
<script src="/public/js/custom.js"></script>
|
||||||
<script src="/public/lib/dns-change/dns-change.module.js"></script>
|
|
||||||
<script src="/public/lib/recordset/recordset.module.js"></script>
|
|
||||||
<script src="/public/lib/controllers/controller.groups.js"></script>
|
|
||||||
<script src="/public/lib/controllers/controller.manageZones.js"></script>
|
|
||||||
<script src="/public/lib/controllers/controller.membership.js"></script>
|
|
||||||
<script src="/public/lib/controllers/controller.records.js"></script>
|
|
||||||
<script src="/public/lib/controllers/controller.zones.js"></script>
|
|
||||||
<script src="/public/lib/controllers/controllers.js"></script>
|
|
||||||
<script src="/public/lib/directives/directives.js"></script>
|
|
||||||
<script src="/public/lib/directives/directives.modals.body.js"></script>
|
|
||||||
<script src="/public/lib/directives/directives.modals.element.js"></script>
|
|
||||||
<script src="/public/lib/directives/directives.modals.footer.js"></script>
|
|
||||||
<script src="/public/lib/directives/directives.modals.invalid.js"></script>
|
|
||||||
<script src="/public/lib/directives/directives.modals.js"></script>
|
|
||||||
<script src="/public/lib/directives/directives.modals.modal.js"></script>
|
|
||||||
<script src="/public/lib/directives/directives.modals.record.js"></script>
|
|
||||||
<script src="/public/lib/directives/directives.modals.zoneconnection.js"></script>
|
|
||||||
<script src="/public/lib/directives/directives.notices.js"></script>
|
|
||||||
<script src="/public/lib/directives/directives.notifications.js"></script>
|
|
||||||
<script src="/public/lib/directives/directives.validations.js"></script>
|
|
||||||
<script src="/public/lib/directives/directives.validations.zones.js"></script>
|
|
||||||
<script src="/public/lib/dns-change/dns-change-detail.controller.js"></script>
|
|
||||||
<script src="/public/lib/dns-change/dns-change-new.controller.js"></script>
|
|
||||||
<script src="/public/lib/dns-change/dns-change.directive.js"></script>
|
|
||||||
<script src="/public/lib/dns-change/dns-change.service.js"></script>
|
|
||||||
<script src="/public/lib/dns-change/dns-changes.controller.js"></script>
|
|
||||||
<script src="/public/lib/oidc-finish.js"></script>
|
|
||||||
<script src="/public/lib/recordset/recordset-detail.controller.js"></script>
|
|
||||||
<script src="/public/lib/recordset/recordsets.controller.js"></script>
|
|
||||||
<script src="/public/lib/services/groups/service.groups.js"></script>
|
|
||||||
<script src="/public/lib/services/paging/service.paging.js"></script>
|
|
||||||
<script src="/public/lib/services/profile/service.profile.js"></script>
|
|
||||||
<script src="/public/lib/services/records/service.records.js"></script>
|
|
||||||
<script src="/public/lib/services/services.js"></script>
|
|
||||||
<script src="/public/lib/services/utility/service.utility.js"></script>
|
|
||||||
<script src="/public/lib/services/zones/service.zones.js"></script>
|
|
||||||
<script src="/public/app.js"></script>
|
|
||||||
<script src="/public/gentelella/build/js/custom.js"></script>
|
|
||||||
<script src="/public/js/custom.js"></script>
|
|
||||||
<!-- endinjector -->
|
|
||||||
<!-- END INJECTED DEPENDENCIES -->
|
|
||||||
|
|
||||||
@pagePlugins
|
@pagePlugins
|
||||||
|
|
||||||
|
@ -374,9 +374,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@plugins = {
|
@plugins = {
|
||||||
<script type='text/javascript' src='/public/gentelella/vendors/iCheck/icheck.min.js'></script>
|
<script type='text/javascript' src='/public/js/ui.js'></script>
|
||||||
<script type="text/javascript" src="/public/gentelella/vendors/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.js"></script>
|
|
||||||
<script type="text/javascript" src="/public/gentelella/vendors/jQuery-Smart-Wizard/js/jquery.smartWizard.js"></script>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@main(rootAccountName)("RecordSetsController")("RecordSets")(content)(plugins)
|
@main(rootAccountName)("RecordSetsController")("RecordSets")(content)(plugins)
|
||||||
|
@ -11,7 +11,8 @@
|
|||||||
<meta id="oidc" content="@setSessionUrl" />
|
<meta id="oidc" content="@setSessionUrl" />
|
||||||
<!-- END META SECTION -->
|
<!-- END META SECTION -->
|
||||||
</head>
|
</head>
|
||||||
|
<body>
|
||||||
<a href="@{setSessionUrl}">Finishing login, if not redirected, click this link</a>
|
<a href="@{setSessionUrl}">Finishing login, if not redirected, click this link</a>
|
||||||
<script src="/public/lib/oidc-finish.js"></script>
|
@* <script src="/public/js/vinyldns.js"></script>*@
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -12,8 +12,9 @@
|
|||||||
<!-- END META SECTION -->
|
<!-- END META SECTION -->
|
||||||
|
|
||||||
<!-- CSS INCLUDE -->
|
<!-- CSS INCLUDE -->
|
||||||
<link rel="stylesheet" type="text/css" id="theme" href="/public/gentelella/vendors/bootstrap/dist/css/bootstrap.min.css"/>
|
<link rel="stylesheet" type="text/css" id="theme" href="/public/css/bootstrap.min.css"/>
|
||||||
<link rel="stylesheet" type="text/css" id="theme" href="/public/gentelella/build/css/custom.css"/>
|
<link rel="stylesheet" type="text/css" id="theme" href="/public/css/ui.css"/>
|
||||||
|
<link rel="stylesheet" type="text/css" id="custom" href="/public/css/theme-overrides.css"/>
|
||||||
<link rel="stylesheet" type="text/css" id="custom" href="/public/css/vinyldns.css"/>
|
<link rel="stylesheet" type="text/css" id="custom" href="/public/css/vinyldns.css"/>
|
||||||
<!-- EOF CSS INCLUDE -->
|
<!-- EOF CSS INCLUDE -->
|
||||||
</head>
|
</head>
|
||||||
|
@ -68,10 +68,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@plugins = {
|
@plugins = {
|
||||||
<script type='text/javascript' src='/public/gentelella/vendors/iCheck/icheck.min.js'></script>
|
<script type='text/javascript' src='/public/js/ui.js'></script>
|
||||||
<script type="text/javascript" src="/public/gentelella/vendors/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.js"></script>
|
|
||||||
<script type="text/javascript" src="/public/gentelella/vendors/jquery.tagsinput/src/jquery.tagsinput.js"></script>
|
|
||||||
<script type="text/javascript" src="/public/gentelella/vendors/datatables.net/js/jquery.dataTables.min.js"></script>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@main(rootAccountName)("RecordsController")("Zone")(content)(plugins)
|
@main(rootAccountName)("RecordsController")("Zone")(content)(plugins)
|
||||||
|
@ -267,9 +267,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@plugins = {
|
@plugins = {
|
||||||
<script type='text/javascript' src='/public/gentelella/vendors/iCheck/icheck.min.js'></script>
|
<script type='text/javascript' src='/public/js/ui.js'></script>
|
||||||
<script type="text/javascript" src="/public/gentelella/vendors/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.js"></script>
|
|
||||||
<script type="text/javascript" src="/public/gentelella/vendors/jQuery-Smart-Wizard/js/jquery.smartWizard.js"></script>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@main(rootAccountName)("ZonesController")("Zones")(content)(plugins)
|
@main(rootAccountName)("ZonesController")("Zones")(content)(plugins)
|
||||||
|
@ -14,18 +14,7 @@ module.exports = function(config) {
|
|||||||
|
|
||||||
// list of files / patterns to load in the browser
|
// list of files / patterns to load in the browser
|
||||||
files: [
|
files: [
|
||||||
'javascripts/moment.min.js',
|
'*.js',
|
||||||
'gentelella/vendors/jquery/dist/jquery.min.js',
|
|
||||||
'gentelella/vendors/bootstrap/dist/js/bootstrap.min.js',
|
|
||||||
'gentelella/vendors/bootstrap-daterangepicker/daterangepicker.js',
|
|
||||||
'javascripts/angular.min.js',
|
|
||||||
'test_frameworks/*.js',
|
|
||||||
'lib/services/**/*.js',
|
|
||||||
'lib/controllers/**/*.js',
|
|
||||||
'lib/directives/**/*.js',
|
|
||||||
'lib/batch-change/batch-change.module.js',
|
|
||||||
'lib/*.js',
|
|
||||||
'lib/batch-change/*.js',
|
|
||||||
//fixtures
|
//fixtures
|
||||||
{pattern: 'mocks/*.json', watched: true, served: true, included: false}
|
{pattern: 'mocks/*.json', watched: true, served: true, included: false}
|
||||||
],
|
],
|
||||||
|
@ -1,25 +1,19 @@
|
|||||||
{
|
{
|
||||||
"name": "vinyl-portal",
|
"name": "vinyl-portal",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"description": "Self-service DNS offering",
|
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"directories": {
|
"directories": {
|
||||||
"test": "test"
|
"test": "test"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@uirouter/angularjs": "0.3.2",
|
"angular": "^1.8.2",
|
||||||
"angular": ">=1.6.0",
|
"bootstrap": "^3.4.1",
|
||||||
"angular-animate": "1.6.1",
|
"font-awesome": "^4.7.0",
|
||||||
"angular-ui-bootstrap": "2.5.6",
|
"gentelella": "git+https://github.com/colorlibhq/gentelella.git#eea0150c65d51cb1f1a03f18bcc3bfa2a8db9312",
|
||||||
"bootstrap": "^4.3.1",
|
|
||||||
"font-awesome": "4.7.0",
|
|
||||||
"gentelella": "https://github.com/colorlibhq/gentelella.git#eea0150c65d51cb1f1a03f18bcc3bfa2a8db9312",
|
|
||||||
"grunt": "^1.0.4",
|
"grunt": "^1.0.4",
|
||||||
"grunt-angular-templates": "^1.1.0",
|
|
||||||
"grunt-contrib-clean": "^1.0.0",
|
"grunt-contrib-clean": "^1.0.0",
|
||||||
"grunt-contrib-copy": "^1.0.0",
|
"grunt-contrib-copy": "^1.0.0",
|
||||||
"grunt-copy": "^0.1.0",
|
"grunt-contrib-concat": "^2.0.0",
|
||||||
"grunt-injector": "^1.1.0",
|
|
||||||
"moment": "^2.24.0",
|
"moment": "^2.24.0",
|
||||||
"puppeteer": "^1.11.0"
|
"puppeteer": "^1.11.0"
|
||||||
},
|
},
|
||||||
@ -29,7 +23,7 @@
|
|||||||
"grunt-mocha-phantomjs": "^3.0.0",
|
"grunt-mocha-phantomjs": "^3.0.0",
|
||||||
"jasmine-core": "^2.99.1",
|
"jasmine-core": "^2.99.1",
|
||||||
"jasmine-jquery": "2.1.1",
|
"jasmine-jquery": "2.1.1",
|
||||||
"jquery": "^3.4.1",
|
"jquery": "^2.2.4",
|
||||||
"karma": "^2.0.5",
|
"karma": "^2.0.5",
|
||||||
"karma-chrome-launcher": "^2.2.0",
|
"karma-chrome-launcher": "^2.2.0",
|
||||||
"karma-jasmine": "^1.0.2",
|
"karma-jasmine": "^1.0.2",
|
||||||
|
@ -1,12 +1,10 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
DIR=$( cd $(dirname $0) ; pwd -P )
|
set -euo pipefail
|
||||||
|
DIR=$( cd "$(dirname "$0")" ; pwd -P )
|
||||||
|
|
||||||
cd $DIR
|
cd "${DIR}"
|
||||||
|
|
||||||
npm install -f
|
|
||||||
|
|
||||||
|
npm install -f --no-audit --no-fund
|
||||||
npm install grunt -g -f
|
npm install grunt -g -f
|
||||||
grunt default
|
|
||||||
$DIR/../../utils/add-license-headers.sh -d=$DIR/public/lib -f=js
|
|
||||||
|
|
||||||
cd -
|
grunt default
|
||||||
|
@ -1,3 +1,18 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2018 Comcast Cable Communications Management, LLC
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the \"License\");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an \"AS IS\" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
body {
|
body {
|
||||||
color: #000;
|
color: #000;
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,18 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2018 Comcast Cable Communications Management, LLC
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the \"License\");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an \"AS IS\" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {
|
[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
@ -1,35 +1,39 @@
|
|||||||
var CURRENT_URL = window.location.href.split('#')[0].split('?')[0],
|
/*
|
||||||
$MENU_INDENT = $('#menu_indent'),
|
* Copyright 2018 Comcast Cable Communications Management, LLC
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the \"License\");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an \"AS IS\" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
const $MENU_INDENT = $('#menu_indent'),
|
||||||
$MENU_DEDENT = $('#menu_dedent'),
|
$MENU_DEDENT = $('#menu_dedent'),
|
||||||
$MENU_MOBILE = $('#menu_mobile'),
|
$MENU_MOBILE = $('#menu_mobile'),
|
||||||
$BODY = $('body'),
|
$BODY = $('body'),
|
||||||
$SIDEBAR_MENU = $('#sidebar-menu');
|
$SIDEBAR_MENU = $('#sidebar-menu');
|
||||||
|
|
||||||
$MENU_INDENT.on('click', function() {
|
$MENU_INDENT.on('click', function() {
|
||||||
console.log('clicked - menu indent');
|
$SIDEBAR_MENU.find('li.active-sm ul').show();
|
||||||
console.log("HEEEEEEY!")
|
$SIDEBAR_MENU.find('li.active-sm').addClass('active').removeClass('active-sm');
|
||||||
|
|
||||||
$SIDEBAR_MENU.find('li.active-sm ul').show();
|
$BODY.addClass('nav-md').removeClass('nav-sm');
|
||||||
$SIDEBAR_MENU.find('li.active-sm').addClass('active').removeClass('active-sm');
|
|
||||||
|
|
||||||
|
|
||||||
$BODY.addClass('nav-md').removeClass('nav-sm');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$MENU_DEDENT.on('click', function() {
|
$MENU_DEDENT.on('click', function() {
|
||||||
console.log('clicked - menu dedent');
|
$SIDEBAR_MENU.find('li.active ul').hide();
|
||||||
console.log("HEEEEEEY!")
|
$SIDEBAR_MENU.find('li.active').addClass('active-sm').removeClass('active');
|
||||||
|
|
||||||
$SIDEBAR_MENU.find('li.active ul').hide();
|
$BODY.addClass('nav-sm').removeClass('nav-md');
|
||||||
$SIDEBAR_MENU.find('li.active').addClass('active-sm').removeClass('active');
|
|
||||||
|
|
||||||
$BODY.addClass('nav-sm').removeClass('nav-md');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$MENU_MOBILE.on('click', function() {
|
$MENU_MOBILE.on('click', function() {
|
||||||
console.log('clicked - menu indent');
|
|
||||||
console.log("HEEEEEEY!")
|
|
||||||
|
|
||||||
if ($BODY.hasClass('nav-md')) {
|
if ($BODY.hasClass('nav-md')) {
|
||||||
$SIDEBAR_MENU.find('li.active ul').hide();
|
$SIDEBAR_MENU.find('li.active ul').hide();
|
||||||
$SIDEBAR_MENU.find('li.active').addClass('active-sm').removeClass('active');
|
$SIDEBAR_MENU.find('li.active').addClass('active-sm').removeClass('active');
|
||||||
|
@ -67,7 +67,7 @@ angular.module('controller.zones', [])
|
|||||||
});
|
});
|
||||||
|
|
||||||
$scope.canAccessGroup = function(groupId) {
|
$scope.canAccessGroup = function(groupId) {
|
||||||
return $scope.myGroupIds.indexOf(groupId) > -1;
|
return $scope.myGroupIds !== "undefined" && $scope.myGroupIds.indexOf(groupId) > -1;
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.canAccessZone = function(accessLevel) {
|
$scope.canAccessZone = function(accessLevel) {
|
||||||
|
@ -56,7 +56,6 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
$scope.confirmSubmit = function(form) {
|
$scope.confirmSubmit = function(form) {
|
||||||
console.log(form.$error)
|
|
||||||
if(form.$invalid){
|
if(form.$invalid){
|
||||||
form.$setSubmitted();
|
form.$setSubmitted();
|
||||||
$scope.formStatus = "pendingSubmit";
|
$scope.formStatus = "pendingSubmit";
|
||||||
@ -93,7 +92,6 @@
|
|||||||
if(entry.changeType == 'DeleteRecordSet' && entry.record) {
|
if(entry.changeType == 'DeleteRecordSet' && entry.record) {
|
||||||
var recordDataEmpty = true;
|
var recordDataEmpty = true;
|
||||||
for (var attr in entry.record) {
|
for (var attr in entry.record) {
|
||||||
console.log(entry.record[attr])
|
|
||||||
if (entry.record[attr] != undefined && entry.record[attr].toString().length > 0) {
|
if (entry.record[attr] != undefined && entry.record[attr].toString().length > 0) {
|
||||||
recordDataEmpty = false
|
recordDataEmpty = false
|
||||||
}
|
}
|
||||||
|
@ -549,7 +549,7 @@ describe('BatchChange', function(){
|
|||||||
expect(this.scope.change.cname).toBeUndefined();
|
expect(this.scope.change.cname).toBeUndefined();
|
||||||
expect(form.cname.$valid).toBe(false);
|
expect(form.cname.$valid).toBe(false);
|
||||||
});
|
});
|
||||||
}
|
});
|
||||||
|
|
||||||
describe('Directive: IPv4 validation', function(){
|
describe('Directive: IPv4 validation', function(){
|
||||||
var form;
|
var form;
|
||||||
|
@ -37,7 +37,6 @@
|
|||||||
function success(response) {
|
function success(response) {
|
||||||
recordsPaging.next = response.data.nextId;
|
recordsPaging.next = response.data.nextId;
|
||||||
updateRecordDisplay(response.data['recordSets']);
|
updateRecordDisplay(response.data['recordSets']);
|
||||||
console.log($scope.records);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return recordsService
|
return recordsService
|
||||||
@ -57,7 +56,6 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
function handleError(error, type) {
|
function handleError(error, type) {
|
||||||
console.log(error);
|
|
||||||
var alert = utilityService.failure(error, type);
|
var alert = utilityService.failure(error, type);
|
||||||
$scope.alerts.push(alert);
|
$scope.alerts.push(alert);
|
||||||
$scope.processing = false;
|
$scope.processing = false;
|
||||||
|
@ -16,7 +16,7 @@ object Dependencies {
|
|||||||
lazy val awsV = "1.11.423"
|
lazy val awsV = "1.11.423"
|
||||||
lazy val jaxbV = "2.3.0"
|
lazy val jaxbV = "2.3.0"
|
||||||
lazy val ip4sV = "1.1.1"
|
lazy val ip4sV = "1.1.1"
|
||||||
lazy val fs2V = "2.4.4"
|
lazy val fs2V = "2.4.5"
|
||||||
lazy val ficusV = "1.4.3"
|
lazy val ficusV = "1.4.3"
|
||||||
|
|
||||||
lazy val apiDependencies = Seq(
|
lazy val apiDependencies = Seq(
|
||||||
@ -71,7 +71,7 @@ object Dependencies {
|
|||||||
"com.sun.xml.bind" % "jaxb-impl" % jaxbV,
|
"com.sun.xml.bind" % "jaxb-impl" % jaxbV,
|
||||||
"ch.qos.logback" % "logback-classic" % "1.0.7",
|
"ch.qos.logback" % "logback-classic" % "1.0.7",
|
||||||
"io.dropwizard.metrics" % "metrics-jvm" % "3.2.2",
|
"io.dropwizard.metrics" % "metrics-jvm" % "3.2.2",
|
||||||
"co.fs2" %% "fs2-core" % "2.3.0",
|
"co.fs2" %% "fs2-core" % fs2V,
|
||||||
"javax.xml.bind" % "jaxb-api" % "2.3.0",
|
"javax.xml.bind" % "jaxb-api" % "2.3.0",
|
||||||
"javax.activation" % "activation" % "1.1.1",
|
"javax.activation" % "activation" % "1.1.1",
|
||||||
)
|
)
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
import sbt._
|
|
||||||
|
|
||||||
object Resolvers {
|
|
||||||
|
|
||||||
lazy val additionalResolvers = Seq(
|
|
||||||
"dnvriend at bintray" at "https://dl.bintray.com/dnvriend/maven",
|
|
||||||
"bintray" at "https://jcenter.bintray.com",
|
|
||||||
"DynamoDBLocal" at "https://s3-us-west-2.amazonaws.com/dynamodb-local/release"
|
|
||||||
)
|
|
||||||
}
|
|
@ -1 +0,0 @@
|
|||||||
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.8")
|
|
@ -2,6 +2,10 @@ logLevel := Level.Warn
|
|||||||
|
|
||||||
resolvers += "Flyway" at "https://flywaydb.org/repo"
|
resolvers += "Flyway" at "https://flywaydb.org/repo"
|
||||||
|
|
||||||
|
addSbtPlugin("com.thesamet" % "sbt-protoc" % "0.99.18")
|
||||||
|
|
||||||
|
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "1.1.0")
|
||||||
|
|
||||||
addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.6.0")
|
addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.6.0")
|
||||||
|
|
||||||
addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1")
|
addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1")
|
||||||
|
@ -1 +0,0 @@
|
|||||||
addSbtPlugin("com.thesamet" % "sbt-protoc" % "0.99.18")
|
|
@ -1,39 +0,0 @@
|
|||||||
# Build VinylDNS API if the JAR doesn't already exist
|
|
||||||
ARG VINYLDNS_VERSION=latest
|
|
||||||
FROM vinyldns/build:base-build as base-build
|
|
||||||
ARG DOCKER_FILE_PATH
|
|
||||||
COPY . /build/
|
|
||||||
WORKDIR /build
|
|
||||||
|
|
||||||
## Run the build if we don't already have a vinyldns.jar
|
|
||||||
RUN mkdir -p /opt/vinyldns/conf && \
|
|
||||||
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 assembly/vinyldns.jar /opt/vinyldns/; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
FROM adoptopenjdk/openjdk11:jdk-11.0.8_10-alpine
|
|
||||||
|
|
||||||
RUN apk add --update --no-cache bash
|
|
||||||
|
|
||||||
COPY --from=base-build /opt/vinyldns /opt/vinyldns
|
|
||||||
|
|
||||||
# This will set the vinyldns version, make sure to have this in config... version = ${?VINYLDNS_VERSION}
|
|
||||||
ARG VINYLDNS_VERSION="0.0.0-local-dev"
|
|
||||||
ENV VINYLDNS_VERSION=$VINYLDNS_VERSION
|
|
||||||
|
|
||||||
RUN mkdir -p /opt/vinyldns/lib_extra
|
|
||||||
|
|
||||||
# Mount the volume for config file and lib extras
|
|
||||||
# Note: These volume names are used in the build.sbt
|
|
||||||
VOLUME ["/opt/vinyldns/lib_extra/", "/opt/vinyldns/conf"]
|
|
||||||
|
|
||||||
EXPOSE 9000
|
|
||||||
|
|
||||||
ENTRYPOINT ["java", "-Dconfig.file=/opt/vinyldns/conf/vinyldns.conf", \
|
|
||||||
"-Dlogback.configurationFile=/opt/vinyldns/conf/logback.xml",\
|
|
||||||
"-Dvinyldns.base-version=${VINYLDNS_VERSION}",\
|
|
||||||
"-cp", "/opt/vinyldns/lib_extra/*",\
|
|
||||||
"-jar", "/opt/vinyldns/vinyldns.jar"]
|
|
@ -1,50 +0,0 @@
|
|||||||
SHELL=bash
|
|
||||||
IMAGE_NAME=vinyldns/api:local-dev
|
|
||||||
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
|
|
||||||
ifdef $(WITH_ARGS)
|
|
||||||
ARG_SEPARATOR=--
|
|
||||||
endif
|
|
||||||
|
|
||||||
%:
|
|
||||||
@:
|
|
||||||
|
|
||||||
.ONESHELL:
|
|
||||||
|
|
||||||
.PHONY: all build run
|
|
||||||
|
|
||||||
all: build run
|
|
||||||
|
|
||||||
build:
|
|
||||||
@set -euo pipefail
|
|
||||||
cd ../..
|
|
||||||
docker build -t $(IMAGE_NAME) --build-arg DOCKER_FILE_PATH="$$(realpath --relative-to="." "$(ROOT_DIR)")" -f "$(ROOT_DIR)/Dockerfile" .
|
|
||||||
|
|
||||||
run:
|
|
||||||
@set -euo pipefail
|
|
||||||
docker network create --driver bridge vinyldns_net &> /dev/null || true
|
|
||||||
test -t 1 && USE_TTY="-t"
|
|
||||||
docker run -i $${USE_TTY} --rm $(DOCKER_PARAMS) --network vinyldns_net -v "$$(pwd)/application.conf:/opt/vinyldns/conf/vinyldns.conf" -v "$$(pwd)/logback.xml:/opt/vinyldns/conf/logback.xml" -p 9000:9000 $(IMAGE_NAME) $(ARG_SEPARATOR) $(WITH_ARGS)
|
|
||||||
|
|
||||||
run-bg:
|
|
||||||
@set -euo pipefail
|
|
||||||
docker stop $(IMAGE_NAME) &> /dev/null || true
|
|
||||||
docker rm $(IMAGE_NAME) &> /dev/null || true
|
|
||||||
docker network create --driver bridge vinyldns_net &> /dev/null || true
|
|
||||||
test -t 1 && USE_TTY="-t"
|
|
||||||
docker run -d $${USE_TTY}--name $(IMAGE_NAME) --rm $(DOCKER_PARAMS) --network vinyldns_net -v "$$(pwd)/application.conf:/opt/vinyldns/conf/vinyldns.conf" -v "$$(pwd)/logback.xml:/opt/vinyldns/conf/logback.xml" -p 9001:9001 $(IMAGE_NAME) -- /bin/bash
|
|
@ -1,346 +0,0 @@
|
|||||||
vinyldns {
|
|
||||||
|
|
||||||
base-version = "0.0.0-local-dev"
|
|
||||||
version = ${vinyldns.base-version} # default to the base version if not overridden
|
|
||||||
version = ${?VINYLDNS_VERSION} # override the base version via env var
|
|
||||||
|
|
||||||
# How often to any particular zone can be synchronized in milliseconds
|
|
||||||
sync-delay = 10000
|
|
||||||
sync-delay = ${?SYNC_DELAY}
|
|
||||||
|
|
||||||
# If we should start up polling for change requests, set this to false for the inactive cluster
|
|
||||||
processing-disabled = false
|
|
||||||
processing-disabled = ${?PROCESSING_DISABLED}
|
|
||||||
|
|
||||||
# Number of records that can be in a zone
|
|
||||||
max-zone-size = 60000
|
|
||||||
max-zone-size = ${?MAX_ZONE_SIZE}
|
|
||||||
|
|
||||||
# Types of unowned records that users can access in shared zones
|
|
||||||
shared-approved-types = ["A", "AAAA", "CNAME", "PTR", "TXT"]
|
|
||||||
|
|
||||||
# Batch change settings
|
|
||||||
batch-change-limit = 1000
|
|
||||||
batch-change-limit = ${?BATCH_CHANGE_LIMIT}
|
|
||||||
manual-batch-review-enabled = true
|
|
||||||
manual-batch-review-enabled = ${?MANUAL_BATCH_REVIEW_ENABLED}
|
|
||||||
scheduled-changes-enabled = true
|
|
||||||
scheduled-changes-enabled = ${?SCHEDULED_CHANGES_ENABLED}
|
|
||||||
multi-record-batch-change-enabled = true
|
|
||||||
multi-record-batch-change-enabled = ${?MULTI_RECORD_BATCH_CHANGE_ENABLED}
|
|
||||||
|
|
||||||
# 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.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 = "127.0.0.1"
|
|
||||||
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 = "127.0.0.1"
|
|
||||||
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 = "127.0.0.1"
|
|
||||||
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 = "127.0.0.1"
|
|
||||||
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-integration:19003/"
|
|
||||||
service-endpoint = ${?SQS_SERVICE_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}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
email {
|
|
||||||
class-name = "vinyldns.api.notifier.email.EmailNotifierProvider"
|
|
||||||
class-name = ${?EMAIL_CLASS_NAME}
|
|
||||||
settings = {
|
|
||||||
from = "VinylDNS <do-not-reply@vinyldns.io>"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sns {
|
|
||||||
class-name = "vinyldns.apadi.notifier.sns.SnsNotifierProvider"
|
|
||||||
class-name = ${?SNS_CLASS_NAME}
|
|
||||||
settings {
|
|
||||||
topic-arn = "arn:aws:sns:us-east-1:000000000000:batchChanges"
|
|
||||||
topic-arn = ${?SNS_TOPIC_ARN}
|
|
||||||
access-key = "test"
|
|
||||||
access-key = ${?SNS_ACCESS_KEY}
|
|
||||||
secret-key = "test"
|
|
||||||
secret-key = ${?SNS_SECRET_KEY}
|
|
||||||
service-endpoint = "http://vinyldns-integration:19003"
|
|
||||||
service-endpoint = ${?SNS_SERVICE_ENDPOINT}
|
|
||||||
signing-region = "us-east-1"
|
|
||||||
signing-region = ${?SNS_REGION}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
rest {
|
|
||||||
host = "0.0.0.0"
|
|
||||||
port = 9000
|
|
||||||
port=${?API_SERVICE_PORT}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
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"
|
|
||||||
name = ${?DATABASE_NAME}
|
|
||||||
driver = "org.h2.Driver"
|
|
||||||
driver = ${?JDBC_DRIVER}
|
|
||||||
migration-url = "jdbc:h2:mem:vinyldns;MODE=MYSQL;DB_CLOSE_DELAY=-1;DATABASE_TO_LOWER=TRUE;IGNORECASE=TRUE;INIT=RUNSCRIPT FROM 'classpath:test/ddl.sql'"
|
|
||||||
migration-url = ${?JDBC_MIGRATION_URL}
|
|
||||||
url = "jdbc:h2:mem:vinyldns;MODE=MYSQL;DB_CLOSE_DELAY=-1;DATABASE_TO_LOWER=TRUE;IGNORECASE=TRUE;INIT=RUNSCRIPT FROM 'classpath:test/ddl.sql'"
|
|
||||||
url = ${?JDBC_URL}
|
|
||||||
user = "sa"
|
|
||||||
user = ${?JDBC_USER}
|
|
||||||
password = ""
|
|
||||||
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 = []
|
|
||||||
|
|
||||||
|
|
||||||
# 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"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
|||||||
<configuration>
|
|
||||||
<!-- Test configuration, log to console so we can get the docker logs -->
|
|
||||||
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
|
||||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
|
||||||
<pattern>%d [test] %-5p | \(%logger{4}:%line\) | %msg %n</pattern>
|
|
||||||
</encoder>
|
|
||||||
</appender>
|
|
||||||
|
|
||||||
<logger name="org.flywaydb" level="DEBUG">
|
|
||||||
<appender-ref ref="CONSOLE"/>
|
|
||||||
</logger>
|
|
||||||
|
|
||||||
<logger name="org.flywaydb.core.internal.dbsupport.SqlScript" level="DEBUG">
|
|
||||||
<appender-ref ref="CONSOLE"/>
|
|
||||||
</logger>
|
|
||||||
|
|
||||||
<logger name="org.flywaydb.core.internal.command.DbMigrate" level="DEBUG">
|
|
||||||
<appender-ref ref="CONSOLE"/>
|
|
||||||
</logger>
|
|
||||||
|
|
||||||
<logger name="vinyldns.core.route.Monitor" level="OFF">
|
|
||||||
<appender-ref ref="CONSOLE"/>
|
|
||||||
</logger>
|
|
||||||
|
|
||||||
<logger name="scalikejdbc.StatementExecutor$$anon$1" level="OFF">
|
|
||||||
<appender-ref ref="CONSOLE"/>
|
|
||||||
</logger>
|
|
||||||
|
|
||||||
<root level="INFO">
|
|
||||||
<appender-ref ref="CONSOLE"/>
|
|
||||||
</root>
|
|
||||||
</configuration>
|
|
@ -15,7 +15,7 @@ services:
|
|||||||
context: ../
|
context: ../
|
||||||
dockerfile: test/api/integration/Dockerfile
|
dockerfile: test/api/integration/Dockerfile
|
||||||
args:
|
args:
|
||||||
VINYLDNS_VERSION: "${VINYLDNS_VERSION}"
|
VINYLDNS_BASE_VERSION: "${VINYLDNS_BASE_VERSION}"
|
||||||
environment:
|
environment:
|
||||||
RUN_SERVICES: "deps-only tail-logs"
|
RUN_SERVICES: "deps-only tail-logs"
|
||||||
LOCALSTACK_EXT_HOSTNAME: *integration_hostname
|
LOCALSTACK_EXT_HOSTNAME: *integration_hostname
|
||||||
@ -30,12 +30,12 @@ services:
|
|||||||
image: "vinyldns/api:${VINYLDNS_IMAGE_VERSION}"
|
image: "vinyldns/api:${VINYLDNS_IMAGE_VERSION}"
|
||||||
build:
|
build:
|
||||||
context: ../
|
context: ../
|
||||||
dockerfile: quickstart/api/Dockerfile
|
dockerfile: build/docker/api/Dockerfile
|
||||||
args:
|
args:
|
||||||
VINYLDNS_VERSION: "${VINYLDNS_VERSION}"
|
VINYLDNS_VERSION: "${VINYLDNS_IMAGE_VERSION}"
|
||||||
DOCKER_FILE_PATH: "quickstart/api"
|
DOCKER_FILE_PATH: "../build/docker/api"
|
||||||
volumes:
|
volumes:
|
||||||
- ./api/application.conf:/opt/vinyldns/conf/vinyldns.conf
|
- ../build/docker/api/application.conf:/opt/vinyldns/conf/vinyldns.conf
|
||||||
env_file:
|
env_file:
|
||||||
.env
|
.env
|
||||||
ports:
|
ports:
|
||||||
@ -48,14 +48,16 @@ services:
|
|||||||
image: "vinyldns/portal:${VINYLDNS_IMAGE_VERSION}"
|
image: "vinyldns/portal:${VINYLDNS_IMAGE_VERSION}"
|
||||||
build:
|
build:
|
||||||
context: ../
|
context: ../
|
||||||
dockerfile: quickstart/portal/Dockerfile
|
dockerfile: build/docker/portal/Dockerfile
|
||||||
|
args:
|
||||||
|
DOCKER_FILE_PATH: "../build/docker/portal"
|
||||||
|
VINYLDNS_VERSION: "${VINYLDNS_IMAGE_VERSION}"
|
||||||
env_file:
|
env_file:
|
||||||
.env
|
.env
|
||||||
ports:
|
ports:
|
||||||
- "${PORTAL_PORT}:${PORTAL_PORT}"
|
- "${PORTAL_PORT}:${PORTAL_PORT}"
|
||||||
volumes:
|
volumes:
|
||||||
- ./portal/application.ini:/opt/vinyldns/conf/application.ini
|
- ../build/docker/portal/application.conf:/opt/vinyldns/conf/application.conf
|
||||||
- ./portal/application.conf:/opt/vinyldns/conf/application.conf
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- api
|
- api
|
||||||
- ldap
|
- ldap
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
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 Jxf 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 bash
|
|
||||||
|
|
||||||
COPY --from=builder /vinyldns/modules/portal/target/universal/portal.tgz /
|
|
||||||
|
|
||||||
RUN mkdir -p /opt && \
|
|
||||||
tar -xzf /portal.tgz && \
|
|
||||||
mv /portal /opt/vinyldns && \
|
|
||||||
mkdir -p /opt/vinyldns/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/vinyldns/lib_extra/", "/opt/vinyldns/conf"]
|
|
||||||
|
|
||||||
EXPOSE 9001
|
|
||||||
|
|
||||||
ENTRYPOINT ["/opt/vinyldns/bin/portal"]
|
|
@ -1,62 +0,0 @@
|
|||||||
LDAP {
|
|
||||||
# For OpenLDAP, this would be a full DN to the admin for LDAP / user that can see all users
|
|
||||||
user = "cn=admin,dc=planetexpress,dc=com"
|
|
||||||
|
|
||||||
# Password for the admin account
|
|
||||||
password = "GoodNewsEveryone"
|
|
||||||
|
|
||||||
# Keep this as an empty string for OpenLDAP
|
|
||||||
domain = ""
|
|
||||||
|
|
||||||
# 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 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"},
|
|
||||||
]
|
|
||||||
context {
|
|
||||||
initialContextFactory = "com.sun.jndi.ldap.LdapCtxFactory"
|
|
||||||
securityAuthentication = "simple"
|
|
||||||
|
|
||||||
# Note: The following assumes a purely docker setup, using container_name = vinyldns-ldap
|
|
||||||
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
|
|
||||||
# company for example)
|
|
||||||
user-sync {
|
|
||||||
enabled = false
|
|
||||||
hours-polling-interval = 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Note: This MUST match the API or strange errors will ensure, NoCrypto should not be used for production
|
|
||||||
crypto {
|
|
||||||
type = "vinyldns.core.crypto.NoOpCrypto"
|
|
||||||
}
|
|
||||||
|
|
||||||
http.port = 9001
|
|
||||||
http.port = ${?PORTAL_PORT}
|
|
||||||
|
|
||||||
data-stores = ["mysql"]
|
|
||||||
|
|
||||||
# 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
|
|
||||||
# Only 3 repositories are needed for portal: user, task, user-change
|
|
||||||
mysql {
|
|
||||||
repositories {
|
|
||||||
user {
|
|
||||||
}
|
|
||||||
task {
|
|
||||||
}
|
|
||||||
user-change {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# You generate this yourself following https://www.playframework.com/documentation/2.7.x/ApplicationSecret
|
|
||||||
play.http.secret.key = "rpkTGtoJvLIdIV?WU=0@yW^x:pcEGyAt`^p/P3G0fpbj9:uDnD@caSjCDqA0@tB="
|
|
||||||
play.http.secret.key = ${?PLAY_HTTP_SECRET_KEY}
|
|
@ -1,3 +0,0 @@
|
|||||||
# uncomment to set custom trustStore
|
|
||||||
# don't forget to mount trustStore to docker image
|
|
||||||
#-Djavax.net.ssl.trustStore=/opt/docker/conf/trustStore.jks
|
|
@ -51,6 +51,7 @@ function wait_for_url() {
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
function is_running() {
|
function is_running() {
|
||||||
if (docker ps --format "{{.Image}}" | grep -q "$1"); then
|
if (docker ps --format "{{.Image}}" | grep -q "$1"); then
|
||||||
return 0
|
return 0
|
||||||
@ -77,8 +78,14 @@ set -a
|
|||||||
source "${DIR}/.env"
|
source "${DIR}/.env"
|
||||||
set +a
|
set +a
|
||||||
|
|
||||||
# Set defaults and parse args
|
# The version of VinylDNS docker image to run
|
||||||
export VINYLDNS_VERSION=latest
|
export VINYLDNS_VERSION=latest
|
||||||
|
# The base/starting version of VinylDNS docker build image to use (vinyldns/build:<version>)
|
||||||
|
export VINYLDNS_BASE_VERSION=latest
|
||||||
|
# The version of the images to build
|
||||||
|
export VINYLDNS_IMAGE_VERSION=${VINYLDNS_VERSION}
|
||||||
|
|
||||||
|
# Defaults
|
||||||
TIMEOUT=60
|
TIMEOUT=60
|
||||||
DOCKER_COMPOSE_CONFIG="${DIR}/docker-compose.yml"
|
DOCKER_COMPOSE_CONFIG="${DIR}/docker-compose.yml"
|
||||||
SERVICE=""
|
SERVICE=""
|
||||||
@ -124,6 +131,8 @@ while [[ $# -gt 0 ]]; do
|
|||||||
;;
|
;;
|
||||||
-v | --version-tag)
|
-v | --version-tag)
|
||||||
export VINYLDNS_VERSION=$2
|
export VINYLDNS_VERSION=$2
|
||||||
|
export VINYLDNS_BASE_VERSION=${VINYLDNS_VERSION}
|
||||||
|
export VINYLDNS_IMAGE_VERSION=${VINYLDNS_VERSION}
|
||||||
shift
|
shift
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
@ -142,18 +151,22 @@ if [[ $RESET_DOCKER -eq 1 ]] || [[ $CLEAN -eq 1 ]]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export VINYLDNS_IMAGE_VERSION=${VINYLDNS_VERSION}
|
|
||||||
if [ -n "${BUILD}" ] || [ -n "$(docker images vinyldns/portal:local-dev --format '{{.Repository}}:{{.Tag}}')" ]; then
|
|
||||||
VINYLDNS_IMAGE_VERSION="local-dev"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Update images if requested
|
# Update images if requested
|
||||||
if [[ $UPDATE -eq 1 ]]; then
|
if [[ $UPDATE -eq 1 ]]; then
|
||||||
echo "${F_YELLOW}Removing local docker images tagged ${F_RESET}'${VINYLDNS_IMAGE_VERSION}'${F_YELLOW}...${F_RESET}"
|
echo "${F_YELLOW}Removing any local docker containers tagged ${F_RESET}'${VINYLDNS_IMAGE_VERSION}'${F_YELLOW}...${F_RESET}"
|
||||||
"${DIR}/../utils/clean-vinyldns-containers.sh"
|
"${DIR}/../utils/clean-vinyldns-containers.sh"
|
||||||
docker rmi "vinyldns/build:base-test-integration-${VINYLDNS_IMAGE_VERSION}"
|
|
||||||
docker rmi "vinyldns/portal:${VINYLDNS_IMAGE_VERSION}"
|
echo "${F_YELLOW}Removing any local docker images tagged ${F_RESET}'${VINYLDNS_IMAGE_VERSION}'${F_YELLOW}...${F_RESET}"
|
||||||
docker rmi "vinyldns/api:${VINYLDNS_IMAGE_VERSION}"
|
docker rmi "vinyldns/build:base-test-integration-${VINYLDNS_IMAGE_VERSION}" &> /dev/null || true
|
||||||
|
docker rmi "vinyldns/portal:${VINYLDNS_IMAGE_VERSION}" &> /dev/null || true
|
||||||
|
docker rmi "vinyldns/api:${VINYLDNS_IMAGE_VERSION}" &> /dev/null || true
|
||||||
|
echo "${F_GREEN}Removed all local docker images and containers tagged ${F_RESET}'${VINYLDNS_IMAGE_VERSION}'${F_YELLOW}...${F_RESET}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [ -n "${BUILD}" ] || [ -n "$(docker images vinyldns/portal:local-dev --format '{{.Repository}}:{{.Tag}}')" ]; then
|
||||||
|
VINYLDNS_IMAGE_VERSION="local-dev"
|
||||||
|
export VINYLDNS_VERSION=${VINYLDNS_IMAGE_VERSION}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "${BUILD}" ]; then
|
if [ -n "${BUILD}" ]; then
|
||||||
@ -162,14 +175,16 @@ else
|
|||||||
echo "Starting VinylDNS (${VINYLDNS_IMAGE_VERSION}) the background..."
|
echo "Starting VinylDNS (${VINYLDNS_IMAGE_VERSION}) the background..."
|
||||||
fi
|
fi
|
||||||
docker-compose -f "${DOCKER_COMPOSE_CONFIG}" up ${BUILD} -d ${SERVICE} || (
|
docker-compose -f "${DOCKER_COMPOSE_CONFIG}" up ${BUILD} -d ${SERVICE} || (
|
||||||
echo -e "${F_RED}Sorry, there was an error starting VinylDNS :-(\nTry resetting any existing containers with:\n\t${F_RESET}'$0 --reset'"
|
echo -e "${F_RED}Sorry, there was an error starting VinylDNS :-(\nTry resetting any existing containers with:\n\t${F_RESET}'$0 --reset'"; \
|
||||||
exit 1
|
exit 1; \
|
||||||
)
|
)
|
||||||
|
|
||||||
echo
|
if is_running "vinyldns/portal" || is_running "vinyldns/api"; then
|
||||||
wait_for_api
|
echo
|
||||||
wait_for_portal
|
wait_for_api
|
||||||
echo
|
wait_for_portal
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
|
||||||
if is_running "vinyldns/portal"; then
|
if is_running "vinyldns/portal"; then
|
||||||
echo "${F_GREEN}VinylDNS started! You can connect to the portal via ${F_RESET}${VINYLDNS_PORTAL_URL}"
|
echo "${F_GREEN}VinylDNS started! You can connect to the portal via ${F_RESET}${VINYLDNS_PORTAL_URL}"
|
||||||
|
@ -11,20 +11,21 @@ ifneq ($(REQ_MAKE_VER),$(firstword $(sort $(MAKE_VERSION) $(REQ_MAKE_VER))))
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# Extract arguments for `make run`
|
# Extract arguments for `make run`
|
||||||
EXTRACT_ARGS=true
|
EXTRACT_ARGS=false
|
||||||
ifeq (run,$(firstword $(MAKECMDGOALS)))
|
ifeq (run,$(firstword $(MAKECMDGOALS)))
|
||||||
EXTRACT_ARGS=true
|
EXTRACT_ARGS=true
|
||||||
endif
|
endif
|
||||||
ifeq ($(EXTRACT_ARGS),true)
|
ifeq ($(EXTRACT_ARGS),true)
|
||||||
# use the rest as arguments for "run"
|
# use the rest as arguments for "run"
|
||||||
WITH_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
|
WITH_ARGS ?= $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
|
||||||
# ...and turn them into do-nothing targets
|
|
||||||
$(eval $(WITH_ARGS):;@:)
|
|
||||||
endif
|
endif
|
||||||
ifdef WITH_ARGS
|
ifneq ($(WITH_ARGS),)
|
||||||
ARG_SEPARATOR=--
|
ARG_SEPARATOR=--
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
%:
|
||||||
|
@:
|
||||||
|
|
||||||
.ONESHELL:
|
.ONESHELL:
|
||||||
|
|
||||||
.PHONY: all build run run-local
|
.PHONY: all build run run-local
|
||||||
@ -38,10 +39,10 @@ build:
|
|||||||
|
|
||||||
run:
|
run:
|
||||||
@set -euo pipefail
|
@set -euo pipefail
|
||||||
test -t 1 && USE_TTY="-t"
|
USE_TTY="" && test -t 1 && USE_TTY="-t"
|
||||||
docker run -i $${USE_TTY} --rm $(DOCKER_PARAMS) -p 9000:9000 -p 19001-19003:19001-19003 -p 19001:19001/udp $(IMAGE_NAME) $(ARG_SEPARATOR) $(WITH_ARGS)
|
docker run -i $${USE_TTY} --rm $(DOCKER_PARAMS) -p 9000:9000 -p 19001-19003:19001-19003 -p 19001:19001/udp $(IMAGE_NAME) $(ARG_SEPARATOR) $(WITH_ARGS)
|
||||||
|
|
||||||
run-local:
|
run-local:
|
||||||
@set -euo pipefail
|
@set -euo pipefail
|
||||||
test -t 1 && USE_TTY="-t"
|
USE_TTY="" && test -t 1 && USE_TTY="-t"
|
||||||
docker run -i $${USE_TTY} --rm $(DOCKER_PARAMS) -p 9000:9000 -p 19001-19003:19001-19003 -p 19001:19001/udp -v "$(ROOT_DIR)/../../../modules/api/src/test/functional:/functional_test" $(IMAGE_NAME) -- $(WITH_ARGS)
|
docker run -i $${USE_TTY} --rm $(DOCKER_PARAMS) -p 9000:9000 -p 19001-19003:19001-19003 -p 19001:19001/udp -v "$(ROOT_DIR)/../../../modules/api/src/test/functional:/functional_test" $(IMAGE_NAME) -- $(WITH_ARGS)
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
|
ARG VINYLDNS_BASE_VERSION=latest
|
||||||
|
|
||||||
# Build VinylDNS API if the JAR doesn't already exist
|
# Build VinylDNS API if the JAR doesn't already exist
|
||||||
ARG VINYLDNS_VERSION=latest
|
FROM vinyldns/build:base-build as base-build
|
||||||
FROM vinyldns/build:base-build-${VINYLDNS_VERSION} as base-build
|
|
||||||
ARG DOCKERFILE_PATH="test/api/integration"
|
ARG DOCKERFILE_PATH="test/api/integration"
|
||||||
COPY "${DOCKERFILE_PATH}/vinyldns.*" /opt/vinyldns/
|
COPY "${DOCKERFILE_PATH}/vinyldns.*" /opt/vinyldns/
|
||||||
COPY . /build/
|
COPY . /build/
|
||||||
@ -14,8 +15,8 @@ RUN if [ -f assembly/vinyldns.jar ]; then cp assembly/vinyldns.jar /opt/vinyldns
|
|||||||
&& cp assembly/vinyldns.jar /opt/vinyldns/; \
|
&& cp assembly/vinyldns.jar /opt/vinyldns/; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Build the testing image, copying data from `vinyldns-api`
|
# Build the testing image, copying data from `base-build`
|
||||||
FROM vinyldns/build:base-test-integration-${VINYLDNS_VERSION}
|
FROM vinyldns/build:base-test-integration-${VINYLDNS_BASE_VERSION}
|
||||||
SHELL ["/bin/bash","-c"]
|
SHELL ["/bin/bash","-c"]
|
||||||
ARG DOCKERFILE_PATH
|
ARG DOCKERFILE_PATH
|
||||||
COPY --from=base-build /opt/vinyldns /opt/vinyldns
|
COPY --from=base-build /opt/vinyldns /opt/vinyldns
|
||||||
|
@ -10,7 +10,7 @@ ifneq ($(REQ_MAKE_VER),$(firstword $(sort $(MAKE_VERSION) $(REQ_MAKE_VER))))
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# Extract arguments for `make run`
|
# Extract arguments for `make run`
|
||||||
EXTRACT_ARGS=true
|
EXTRACT_ARGS=false
|
||||||
ifeq (run,$(firstword $(MAKECMDGOALS)))
|
ifeq (run,$(firstword $(MAKECMDGOALS)))
|
||||||
EXTRACT_ARGS=true
|
EXTRACT_ARGS=true
|
||||||
endif
|
endif
|
||||||
@ -18,8 +18,8 @@ ifeq ($(EXTRACT_ARGS),true)
|
|||||||
# use the rest as arguments for "run"
|
# use the rest as arguments for "run"
|
||||||
WITH_ARGS ?= $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
|
WITH_ARGS ?= $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
|
||||||
endif
|
endif
|
||||||
ifdef WITH_ARGS
|
ifneq ($(WITH_ARGS),)
|
||||||
ARG_SEPARATOR=--
|
ARG_SEPARATOR=--
|
||||||
endif
|
endif
|
||||||
|
|
||||||
%:
|
%:
|
||||||
@ -38,13 +38,13 @@ build:
|
|||||||
|
|
||||||
run:
|
run:
|
||||||
@set -euo pipefail
|
@set -euo pipefail
|
||||||
test -t 1 && USE_TTY="-t"
|
USE_TTY="" && test -t 1 && USE_TTY="-t"
|
||||||
docker run -i $${USE_TTY} --rm $(DOCKER_PARAMS) -p 9000:9000 -p 19001-19003:19001-19003 -p 19001:19001/udp $(IMAGE_NAME) $(ARG_SEPARATOR) $(WITH_ARGS)
|
docker run -i $${USE_TTY} --rm $(DOCKER_PARAMS) $(IMAGE_NAME) $(ARG_SEPARATOR) $(WITH_ARGS)
|
||||||
|
|
||||||
run-bg:
|
run-bg:
|
||||||
@set -euo pipefail
|
@set -euo pipefail
|
||||||
docker stop $(IMAGE_NAME) &> /dev/null || true
|
docker stop $(IMAGE_NAME) &> /dev/null || true
|
||||||
test -t 1 && USE_TTY="-t"
|
USE_TTY="" && test -t 1 && USE_TTY="-t"
|
||||||
docker run -d $${USE_TTY} --name $(IMAGE_NAME) --rm $(DOCKER_PARAMS) -e RUN_SERVICES="deps-only tail-logs" -p 19001-19003:19001-19003 -p 19001:19001/udp $(IMAGE_NAME)
|
docker run -d $${USE_TTY} --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:
|
stop-bg:
|
||||||
@ -53,5 +53,5 @@ stop-bg:
|
|||||||
|
|
||||||
run-local:
|
run-local:
|
||||||
@set -euo pipefail
|
@set -euo pipefail
|
||||||
test -t 1 && USE_TTY="-t"
|
USE_TTY="" && test -t 1 && USE_TTY="-t"
|
||||||
docker run -i $${USE_TTY} --rm $(DOCKER_PARAMS) -p 9000:9000 -p 19001-19003:19001-19003 -p 19001:19001/udp -v "$(ROOT_DIR)/../../..:/build" $(IMAGE_NAME) -- $(WITH_ARGS)
|
docker run -i $${USE_TTY} --rm $(DOCKER_PARAMS) -p 9000:9000 -p 19001-19003:19001-19003 -p 19001:19001/udp -v "$(ROOT_DIR)/../../..:/build" $(IMAGE_NAME) -- $(WITH_ARGS)
|
||||||
|
@ -10,20 +10,21 @@ ifneq ($(REQ_MAKE_VER),$(firstword $(sort $(MAKE_VERSION) $(REQ_MAKE_VER))))
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# Extract arguments for `make run`
|
# Extract arguments for `make run`
|
||||||
EXTRACT_ARGS=true
|
EXTRACT_ARGS=false
|
||||||
ifeq (run,$(firstword $(MAKECMDGOALS)))
|
ifeq (run,$(firstword $(MAKECMDGOALS)))
|
||||||
EXTRACT_ARGS=true
|
EXTRACT_ARGS=true
|
||||||
endif
|
endif
|
||||||
ifeq ($(EXTRACT_ARGS),true)
|
ifeq ($(EXTRACT_ARGS),true)
|
||||||
# use the rest as arguments for "run"
|
# use the rest as arguments for "run"
|
||||||
WITH_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
|
WITH_ARGS ?= $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
|
||||||
# ...and turn them into do-nothing targets
|
|
||||||
$(eval $(WITH_ARGS):;@:)
|
|
||||||
endif
|
endif
|
||||||
ifdef WITH_ARGS
|
ifneq ($(WITH_ARGS),)
|
||||||
ARG_SEPARATOR=--
|
ARG_SEPARATOR=--
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
%:
|
||||||
|
@:
|
||||||
|
|
||||||
.ONESHELL:
|
.ONESHELL:
|
||||||
|
|
||||||
.PHONY: all build run run-local
|
.PHONY: all build run run-local
|
||||||
@ -37,10 +38,10 @@ build:
|
|||||||
|
|
||||||
run:
|
run:
|
||||||
@set -euo pipefail
|
@set -euo pipefail
|
||||||
test -t 1 && USE_TTY="-t"
|
USE_TTY="" && test -t 1 && USE_TTY="-t"
|
||||||
docker run -i $${USE_TTY} --rm $(IMAGE_NAME) -- $(WITH_ARGS)
|
docker run -i $${USE_TTY} --rm $(IMAGE_NAME) -- $(WITH_ARGS)
|
||||||
|
|
||||||
run-local:
|
run-local:
|
||||||
@set -euo pipefail
|
@set -euo pipefail
|
||||||
test -t 1 && USE_TTY="-t"
|
USE_TTY="" && test -t 1 && USE_TTY="-t"
|
||||||
docker run -i $${USE_TTY} --rm -v "$$(pwd)/../../../modules/portal:/functional_test" $(IMAGE_NAME) $(ARG_SEPARATOR) $(WITH_ARGS)
|
docker run -i $${USE_TTY} --rm -v "$$(pwd)/../../../modules/portal:/functional_test" $(IMAGE_NAME) $(ARG_SEPARATOR) $(WITH_ARGS)
|
||||||
|
@ -1,18 +1,23 @@
|
|||||||
FROM znly/protoc:0.4.0 as pbcompile
|
FROM znly/protoc:0.4.0 as pbcompile
|
||||||
|
WORKDIR /vinyldns
|
||||||
|
|
||||||
# Needs to protoc compile modules/core/src/main/protobuf/VinylDNSProto.proto
|
# Needs to protoc compile modules/core/src/main/protobuf/VinylDNSProto.proto
|
||||||
COPY VinylDNSProto.proto /vinyldns/target/
|
COPY modules/core/src/main/protobuf/VinylDNSProto.proto /vinyldns
|
||||||
|
|
||||||
# Create a compiled protobuf in /vinyldns/target
|
# Create a compiled protobuf in /vinyldns/target
|
||||||
RUN protoc --version && \
|
RUN mkdir -p /vinyldns/python && \
|
||||||
protoc --proto_path=/vinyldns/target --python_out=/vinyldns/target /vinyldns/target/VinylDNSProto.proto
|
protoc --proto_path=/vinyldns --python_out=/vinyldns/python /vinyldns/VinylDNSProto.proto
|
||||||
|
|
||||||
|
|
||||||
FROM python:3.7-alpine
|
FROM python:3.7-alpine
|
||||||
|
ARG DOCKERFILE_PATH
|
||||||
RUN pip install mysql-connector-python
|
|
||||||
|
|
||||||
COPY --from=pbcompile /vinyldns/target /app/
|
|
||||||
COPY update-support-user.py /app/update-support-user.py
|
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
RUN pip install mysql-connector-python==8.0.27
|
||||||
|
|
||||||
|
ENV DB_USER="root" DB_PASS="pass" DB_HOST="vinyldns-integration" DB_NAME="vinyldns" DB_PORT="19002"
|
||||||
|
|
||||||
|
COPY --from=pbcompile /vinyldns/python .
|
||||||
|
COPY ${DOCKERFILE_PATH}/update-support-user.py .
|
||||||
|
RUN chmod 755 update-support-user.py
|
||||||
|
|
||||||
|
ENTRYPOINT ["./update-support-user.py"]
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
SHELL=bash
|
SHELL=bash
|
||||||
IMAGE_TAG=$(shell awk -F'"' '{print $$2}' ../../../version.sbt)
|
IMAGE_NAME=vinyldns-update-user
|
||||||
IMAGE_NAME=vinyldns/portal
|
|
||||||
ROOT_DIR:=$(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
|
ROOT_DIR:=$(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
|
||||||
|
RELATIVE_ROOT_DIR:=$(shell realpath --relative-to=../.. $(ROOT_DIR))
|
||||||
|
|
||||||
# Check that the required version of make is being used
|
# Check that the required version of make is being used
|
||||||
REQ_MAKE_VER:=3.82
|
REQ_MAKE_VER:=3.82
|
||||||
@ -10,7 +10,7 @@ ifneq ($(REQ_MAKE_VER),$(firstword $(sort $(MAKE_VERSION) $(REQ_MAKE_VER))))
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# Extract arguments for `make run`
|
# Extract arguments for `make run`
|
||||||
EXTRACT_ARGS=true
|
EXTRACT_ARGS=false
|
||||||
ifeq (run,$(firstword $(MAKECMDGOALS)))
|
ifeq (run,$(firstword $(MAKECMDGOALS)))
|
||||||
EXTRACT_ARGS=true
|
EXTRACT_ARGS=true
|
||||||
endif
|
endif
|
||||||
@ -18,8 +18,8 @@ ifeq ($(EXTRACT_ARGS),true)
|
|||||||
# use the rest as arguments for "run"
|
# use the rest as arguments for "run"
|
||||||
WITH_ARGS ?= $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
|
WITH_ARGS ?= $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
|
||||||
endif
|
endif
|
||||||
ifdef $(WITH_ARGS)
|
ifneq ($(WITH_ARGS),)
|
||||||
ARG_SEPARATOR=--
|
ARG_SEPARATOR=--
|
||||||
endif
|
endif
|
||||||
|
|
||||||
%:
|
%:
|
||||||
@ -34,18 +34,10 @@ all: build run
|
|||||||
build:
|
build:
|
||||||
@set -euo pipefail
|
@set -euo pipefail
|
||||||
cd ../..
|
cd ../..
|
||||||
docker build -t $(IMAGE_NAME) -f "$(ROOT_DIR)/Dockerfile" .
|
docker build -t $(IMAGE_NAME) --build-arg DOCKERFILE_PATH="$(RELATIVE_ROOT_DIR)" -f "$(ROOT_DIR)/Dockerfile" .
|
||||||
|
|
||||||
run:
|
run:
|
||||||
@set -euo pipefail
|
@set -euo pipefail
|
||||||
docker network create --driver bridge vinyldns_net &> /dev/null || true
|
docker network create --driver bridge vinyldns_net &> /dev/null || true
|
||||||
test -t 1 && USE_TTY="-t"
|
USE_TTY="" && test -t 1 && USE_TTY="-t"
|
||||||
docker run -i $${USE_TTY} --rm $(DOCKER_PARAMS) --network vinyldns_net -p 9001:9001 $(IMAGE_NAME) $(ARG_SEPARATOR) $(WITH_ARGS)
|
docker run -i $${USE_TTY} --network vinyldns_net --rm $(DOCKER_PARAMS) $(IMAGE_NAME) $(WITH_ARGS)
|
||||||
|
|
||||||
run-bg:
|
|
||||||
@set -euo pipefail
|
|
||||||
docker stop $(IMAGE_NAME) &> /dev/null || true
|
|
||||||
docker rm $(IMAGE_NAME) &> /dev/null || true
|
|
||||||
docker network create --driver bridge vinyldns_net &> /dev/null || true
|
|
||||||
test -t 1 && USE_TTY="-t"
|
|
||||||
docker run -d $${USE_TTY} --name $(IMAGE_NAME) --rm $(DOCKER_PARAMS) --network vinyldns_net -p 9001:9001 $(IMAGE_NAME) -- /bin/bash
|
|
@ -5,8 +5,12 @@ import sys
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
# arguments
|
# arguments
|
||||||
|
if len(sys.argv) != 3:
|
||||||
|
print("USAGE: update-support-user.py <username> <True|False>")
|
||||||
|
exit(1)
|
||||||
|
|
||||||
user_name = sys.argv[1]
|
user_name = sys.argv[1]
|
||||||
make_support = sys.argv[2][0].upper()=='T' if len(sys.argv) >= 2 else None
|
make_support = sys.argv[2][0].upper() == 'T'
|
||||||
|
|
||||||
# environment variables to connect to database
|
# environment variables to connect to database
|
||||||
db_user = os.environ.get('DB_USER')
|
db_user = os.environ.get('DB_USER')
|
||||||
|
@ -90,14 +90,6 @@ then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Copy the proto definition to the Docker context and build
|
# Copy the proto definition to the Docker context and build
|
||||||
cp "${VINYL_ROOT}/modules/core/src/main/protobuf/VinylDNSProto.proto" "${WORK_DIR}/admin"
|
cd admin
|
||||||
docker build -t vinyldns/admin "${WORK_DIR}/admin"
|
make build
|
||||||
rm "${WORK_DIR}/admin/VinylDNSProto.proto"
|
make run DOCKER_PARAMS="-e \"DB_USER=$DB_USER\" -e \"DB_PASS=$DB_PASS\" -e \"DB_HOST=$DB_HOST\" -e \"DB_NAME=$DB_NAME\" -e \"DB_PORT=$DB_PORT\"" WITH_ARGS="\"$VINYL_USER\" \"$MAKE_SUPPORT\""
|
||||||
|
|
||||||
docker run -it --rm \
|
|
||||||
-e "DB_USER=$DB_USER" \
|
|
||||||
-e "DB_PASS=$DB_PASS" \
|
|
||||||
-e "DB_HOST=$DB_HOST" \
|
|
||||||
-e "DB_NAME=$DB_NAME" \
|
|
||||||
-e "DB_PORT=$DB_PORT" \
|
|
||||||
vinyldns/admin:latest /app/update-support-user.py "$VINYL_USER" "$MAKE_SUPPORT"
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user