You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by zr...@apache.org on 2023/04/05 20:38:28 UTC

[trafficcontrol] branch master updated: Clean up unused code (#7271)

This is an automated email from the ASF dual-hosted git repository.

zrhoffman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git


The following commit(s) were added to refs/heads/master by this push:
     new bee4fe7ba6 Clean up unused code (#7271)
bee4fe7ba6 is described below

commit bee4fe7ba620bbec3f74111ac66922416520c7f1
Author: Eric Holguin <14...@users.noreply.github.com>
AuthorDate: Wed Apr 5 16:38:22 2023 -0400

    Clean up unused code (#7271)
    
    * Remove mentions of todb_bootstrap
    
    * Add removals to changelog
    
    * Add PR link to change log
    
    * undo removal of _postinstall.pl and library files
    
    * update change log
    
    * fix bad copy
    
    * fix change log
    
    * fix change log
    
    * Add back convert profile
    
    * remove unused command
---
 CHANGELOG.md                                       |   6 +
 infrastructure/docker/README.md                    | 192 --------------
 infrastructure/docker/traffic_monitor/Dockerfile   |  42 ---
 infrastructure/docker/traffic_monitor/run.sh       | 145 ----------
 infrastructure/docker/traffic_ops/Dockerfile       |  74 ------
 infrastructure/docker/traffic_ops/Dockerfile_psql  |  43 ---
 infrastructure/docker/traffic_ops/dbInit.sh        |  30 ---
 .../docker/traffic_ops/docker-compose.yml          |  89 -------
 .../docker/traffic_ops/profile.origin.traffic_ops  |  18 --
 infrastructure/docker/traffic_ops/run.sh           | 292 ---------------------
 infrastructure/docker/traffic_router/Dockerfile    |  59 -----
 infrastructure/docker/traffic_router/run.sh        | 111 --------
 infrastructure/docker/traffic_router/shutdowntr.sh |  36 ---
 infrastructure/docker/traffic_router/starttr.sh    |  44 ----
 .../docker/traffic_server_edge/Dockerfile          | 279 --------------------
 infrastructure/docker/traffic_server_edge/run.sh   | 104 --------
 .../docker/traffic_server_mid/Dockerfile           |  74 ------
 infrastructure/docker/traffic_server_mid/run.sh    |  97 -------
 infrastructure/docker/traffic_stats/Dockerfile     |  46 ----
 infrastructure/docker/traffic_stats/run.sh         | 134 ----------
 infrastructure/docker/traffic_vault/Dockerfile     |  53 ----
 infrastructure/docker/traffic_vault/run.sh         | 103 --------
 misc/jira_github_issue_import.py                   | 238 -----------------
 traffic_ops/build/traffic_ops.spec                 |   3 -
 traffic_ops/install/bin/_postinstall.py            |   6 +-
 traffic_ops/install/bin/install_go.sh              |  47 ----
 traffic_ops/install/bin/install_goose.sh           |  20 --
 traffic_ops/install/bin/todb_bootstrap.sh          |  53 ----
 28 files changed, 8 insertions(+), 2430 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index fcac2c78fb..02653b498c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -98,6 +98,12 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
 - [#7411](https://github.com/apache/trafficcontrol/pull/7411) *Traffic Control Cache Config (t3c)* Fixed issue with wrong parent ordering with MSO non-topology delivery services.
 - [#7425](https://github.com/apache/trafficcontrol/pull/7425) *Traffic Control Cache Config (t3c)* Fixed issue with layered profile iteration being done in the wrong order.
 
+### Removed
+- [#7271](https://github.com/apache/trafficcontrol/pull/7271) Remove components in `infrastructre/docker/`, not in use as cdn-in-a-box performs the same functionality.
+- [#7271](https://github.com/apache/trafficcontrol/pull/7271) Remove`misc/jira_github_issue_import.py`, the project does not use JIRA.
+- [#7271](https://github.com/apache/trafficcontrol/pull/7271) Remove `traffic_ops/install/bin/convert_profile/`, this script is outdated and is for use on an EOL ATS version.
+- [#7271](https://github.com/apache/trafficcontrol/pull/7271) Remove `traffic_ops/install/bin/install_go.sh`, `traffic_ops/install/bin/todb_bootstrap.sh` and `traffic_ops/install/bin/install_goose.sh` are no longer in use.
+
 ## [7.0.0] - 2022-07-19
 ### Added
 - [Traffic Portal] Added Layered Profile feature to /servers/
diff --git a/infrastructure/docker/README.md b/infrastructure/docker/README.md
deleted file mode 100644
index 484f522f29..0000000000
--- a/infrastructure/docker/README.md
+++ /dev/null
@@ -1,192 +0,0 @@
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you 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.
--->
-
-Traffic Control in Docker
-=========================
-
-Traffic Control wasn't designed to run in containers or with the microservice ideology, so there's a bit of coercing to make Docker work. But feel free to try it if you're feeling adventurous.
-
-IP addresses and hostnames
---------------------------
-The CDN requires real hostnames. Ideally, internal CDN communication could take place via Docker networking, using Docker internal IPs, hostnames, and container names. But the CDN doesn't currently distinguish between internal and external communication addresses. Further, the version of Apache Traffic Server we're using doesn't use `/etc/hosts`, which is what Docker uses to share hostnames between containers on a Docker Network.
-
-So, we typically allocate public hostnames, domains, and IPs for each container. See the examples below.
-
-Note if you have multiple IP addresses on a single network interface, you will have to create IP aliases. Docker requires a single interface per IP. You can create an Ethernet alias in Linux with `ifconfig` with, for example, `sudo ifconfig myinterface0:1 192.0.2.0 netmask 255.255.255.0 up`, where `myinterface0` is the interface with a range of IP addresses, and `192.0.2.0` is the IP you want to create the alias for. You can then forward a port on a Docker container with, for example, `d [...]
-
-
-Docker Networks
------------------
-[Docker Networks](https://docs.docker.com/engine/userguide/networking/dockernetworks/), as opposed to `--link` or other container communication mechanisms, is necessary for a number of reasons.
-
-Most of the following is only necessary if you're trying to set up a CDN in Docker without external IPs or hostnames. But these things seem to be generally good practice.
-
-#### Container names
-
-- Containers MUST have names which are valid hostnames
-- Containers MUST have the same name and hostname. That is, `docker run` `--name` and `--hostname` MUST match.
-
-This is because `docker run` `--hostname` sets the container's `hostname` ($HOSTNAME), while `--name` sets the /etc/hosts entry for _other_ containers. If they are different, the name by which a container knows itself will be different from the name by which other containers access it. This will lead to confusion and pain.
-
-#### Hostnames
-
-Docker Networks automatically update every container on the network's `/etc/hosts` file with the hostname of a new container. Without this, for example, you would have to somehow manually update the Traffic Ops container when bringing up a new Traffic Vault container, with the new container's hostname–IP mapping. This is strictly necessary because Traffic Control requires hostnames and domains, not IPs, in certain places.
-
-#### Domains
-
-Docker networks also updates the `/etc/hosts` file of member containers with `hostname.networkname`, which should theoretically allow us to treat the Docker network name as the domain name within Traffic Control. For example, you will see the network name `cdnet` used in the example run command in the Dockerfiles, and then `cdnet` could also (theoretically) be passed as the domain name to various Traffic Control components.
-
-Without Docker Networks, each container's hostname could be set as `hostname.domainname`, but that would cause other issues, such as `hostname` itself not existing as a host name.
-
-Without Docker Networks, each Traffic Control component must also have to have its ports exposed on the host machine, or else use the deprecated Docker `--link` mechanism.
-
-Run scripts
------------
-
-Each Dockerfile creates a generic image, which should be usable in any environment. If a Dockerfile includes CDN-specific values or data, that's a bug. Consequently, `docker build` should require few, if any, environment variables.
-
-Each container has a `_run.sh` script which configures the container. While self-contained Dockerfiles would be ideal, in practice the Traffic Control components need dynamic configuration. If self-contained Dockerfiles were necessary, an `echo` command could be added to the Dockerfile to create the run script; but it would be ugly.
-
-Each run script has 2 functions, `init` and `start`. The init is run only once, and configures the container's service. After the first run, only `start` is run.
-
-Cache devices
--------------
-
-The Apache Traffic Server containers look for devices at `/dev/ram0` and `/dev/ram1`. You can pass devices on the host to containers with `docker run` `--device`. If no devices are passed, the run script will try to create 1GB files to use as caches.
-
-You can create block RAM devices on Linux with, for example, `sudo modprobe brd rd_size=1048576 rd_nr=8`. This will create 8 RAM disks at `/dev/ram0` thru `/dev/ram7` of 1GB each. These devices can then be passed to the Apache Traffic Server containers, as in the example below.
-
-Privileged containers
----------------------
-
-The Traffic Server containers must be run with `--privileged` and `--cap-add NET_BIND_SERVICE` in order for Apache Traffic Server to bind on port 80. If you don't want to run privileged containers, you can try modifying the containers to run on another port (you will also need to update their ports in the Traffic Ops server entry, update the Traffic Ops `server_ports` parameters, re-generate the CRConfig in Traffic Ops, and re-run the `ort` script on the caches).
-
-Example
---------
-
-Suppose you have the following IPs on the host, each on their own network interface (or alias), with the following hostnames
-
-IP          | Hostname
-------------|---------
-192.0.2.100 | c23-to-db
-192.0.2.101 | c23-to-01
-192.0.2.102 | c23-tv-01
-192.0.2.103 | c23-hotair-01
-192.0.2.104 | c23-atsec-01
-192.0.2.105 | c23-atsec-01
-192.0.2.106 | c23-atsmid-01
-192.0.2.107 | c23-atsmid-02
-192.0.2.108 | c23-tm-01
-192.0.2.109 | c23-tm-02
-192.0.2.110 | c23-tr-01
-192.0.2.111 | c23-ts-01
-
-And the NS record `c23` registered with `example.net`.
-
-You will also need an Origin server. This just needs to be a simple HTTP server, serving some content somewhere. For this example, we will assume there is an origin server with the IP `192.0.2.103` and hostname `c23-hotair-01` serving `http://c23-hotair-01.example.net/test.ism/manifest`.
-
-Finally, for this example, we will assume the host has cache drives at `/dev/ram0` thru `/dev/ram7`. If you don't want to pass drives, simply omit the `--device` flags from the examples, and the containers will try to create disk files to use as cache instead.
-
-In the example commands, `-it` runs the container interactively, so you can watch the initialization process, and (hopefully) see if anything goes wrong. Once the initialization finishes, you can detach from the container with `ctrl+p ctrl+q`. Alternatively, remove the `-it` flags and add `-d` to run the containers detached. However, certain containers need to finish initializing before the next container can be started, and without running interactively it can be difficult to tell.
-
-With the prior assumptions, the following commands will set up a CDN:
-
-```bash
-docker network create cdnet
-
-sudo docker run -it --publish 192.0.2.100:3306:3306 --name c23-to-db --hostname c23-to-db --net cdnet --env MYSQL_ROOT_PASS=secretrootpass --env IP=192.0.2.100 mysql:5.5
-
-sudo docker run -it --publish 192.0.2.101:443:443 --name c23-to-01 --hostname c23-to-01 --net cdnet --env MYSQL_IP=c23-to-db.example.net --env MYSQL_PORT=3306 --env MYSQL_ROOT_PASS=secretrootpass --env MYSQL_TRAFFIC_OPS_PASS=supersecretpassword --env ADMIN_USER=superroot --env ADMIN_PASS=supersecreterpassward --env CERT_COUNTRY=US --env CERT_STATE=Colorado --env CERT_CITY=Denver --env CERT_COMPANY=Kabletown --env TRAFFIC_VAULT_PASS=marginallylesssecret --env IP=192.0.2.101 --env DOMAIN=c [...]
-
-sudo docker run -it --publish 192.0.2.102:8088:8088 --name c23-tv-01 --hostname c23-tv-01 --net cdnet --env ADMIN_PASS=riakadminsecret --env USER_PASS=marginallylesssecret --env CERT_COUNTRY=US --env CERT_STATE=Colorado --env CERT_CITY=Denver --env CERT_COMPANY=Kabletown --env TRAFFIC_OPS_URI=https://c23-to-01.example.net --env TRAFFIC_OPS_USER=superroot --env TRAFFIC_OPS_PASS=supersecreterpassward --env DOMAIN=example.net --env IP=192.0.2.102 --env GATEWAY=192.0.2.161 traffic_vault:1.4
-
-sudo docker run -it --publish 192.0.2.104:80:80 --name c23-atsec-01 --hostname c23-atsec-01 --net cdnet --privileged --cap-add NET_BIND_SERVICE --device /dev/ram0:/dev/ram0 --device /dev/ram1:/dev/ram1 --env TRAFFIC_OPS_URI=https://c23-to-01.example.net --env TRAFFIC_OPS_USER=superroot --env TRAFFIC_OPS_PASS=supersecreterpassward --env DOMAIN=example.net --env IP=192.0.2.104 --env GATEWAY=192.0.2.161 traffic_server_edge:1.4
-
-sudo docker run -it --publish 192.0.2.105:80:80 --name c23-atsec-02 --hostname c23-atsec-02 --net cdnet --privileged --cap-add NET_BIND_SERVICE --device /dev/ram2:/dev/ram0 --device /dev/ram3:/dev/ram1 --env TRAFFIC_OPS_URI=https://c23-to-01.example.net --env TRAFFIC_OPS_USER=superroot --env TRAFFIC_OPS_PASS=supersecreterpassward --env DOMAIN=example.net --env IP=192.0.2.105 --env GATEWAY=192.0.2.161 traffic_server_edge:1.4
-
-sudo docker run -it --publish 192.0.2.106:80:80 --name c23-atsmid-01 --hostname c23-atsmid-01 --net cdnet --privileged --cap-add NET_BIND_SERVICE --device /dev/ram4:/dev/ram0 --device /dev/ram5:/dev/ram1 --env TRAFFIC_OPS_URI=https://c23-to-01.example.net --env TRAFFIC_OPS_USER=superroot --env TRAFFIC_OPS_PASS=supersecreterpassward --env DOMAIN=example.net --env IP=192.0.2.106 --env GATEWAY=192.0.2.161 traffic_server_mid:1.4
-
-sudo docker run -it --publish 192.0.2.107:80:80 --name c23-atsmid-02 --hostname c23-atsmid-02 --net cdnet --privileged --cap-add NET_BIND_SERVICE --device /dev/ram6:/dev/ram0 --device /dev/ram7:/dev/ram1 --env TRAFFIC_OPS_URI=https://c23-to-01.example.net --env TRAFFIC_OPS_USER=superroot --env TRAFFIC_OPS_PASS=supersecreterpassward --env DOMAIN=example.net --env IP=192.0.2.107 --env GATEWAY=192.0.2.161 traffic_server_mid:1.4
-
-sudo docker run -it --publish 192.0.2.108:80:80 --name c23-tm-01 --hostname c23-tm-01 --net cdnet --env TRAFFIC_OPS_URI=https://c23-to-01.example.net --env TRAFFIC_OPS_USER=superroot --env TRAFFIC_OPS_PASS=supersecreterpassward --env DOMAIN=example.net --env IP=192.0.2.108 --env GATEWAY=192.0.2.161 traffic_monitor:1.4
-
-sudo docker run -it --publish 192.0.2.109:80:80 --name c23-tm-02 --hostname c23-tm-02 --net cdnet --env TRAFFIC_OPS_URI=https://c23-to-01.example.net --env TRAFFIC_OPS_USER=superroot --env TRAFFIC_OPS_PASS=supersecreterpassward --env DOMAIN=example.net --env IP=192.0.2.109 --env GATEWAY=192.0.2.161 traffic_monitor:1.4
-
-# The following commands will add the Origin server to Traffic Ops.
-# If your Origin is built in Docker, you could add these commands to the container run script.
-TMP_IP='192.0.2.103'
-TMP_DOMAIN='example.net'
-TMP_GATEWAY='192.0.2.161'
-TMP_TRAFFIC_OPS_USER='superroot'
-TMP_TRAFFIC_OPS_PASS='supersecreterpassward'
-TMP_TRAFFIC_OPS_URI='https://c23-to-01.example.net'
-TMP_HOSTNAME='c23-hotair-01'
-TMP_TO_COOKIE="$(curl -v -s -k -X POST --data '{ "u":"'"$TMP_TRAFFIC_OPS_USER"'", "p":"'"$TMP_TRAFFIC_OPS_PASS"'" }' $TMP_TRAFFIC_OPS_URI/api/4.0/user/login 2>&1 | grep 'Set-Cookie' | sed -e 's/.*mojolicious=\(.*\); expires.*/\1/')"
-TMP_CACHEGROUP_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TMP_TRAFFIC_OPS_URI/api/4.0/cachegroups.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="mid-east"]; print match[0]')"
-TMP_SERVER_TYPE_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TMP_TRAFFIC_OPS_URI/api/4.0/types.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="ORG"]; print match[0]')"
-TMP_SERVER_PROFILE_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TMP_TRAFFIC_OPS_URI/api/4.0/profiles.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="ORG1_CDN1"]; print match[0]')"
-TMP_PHYS_LOCATION_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TMP_TRAFFIC_OPS_URI/api/4.0/phys_locations.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="plocation-nyc-1"]; print match[0]')"
-TMP_CDN_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TMP_TRAFFIC_OPS_URI/api/4.0/cdns.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="cdn"]; print match[0]')"
-curl -v -k -X POST -H "Cookie: mojolicious=$TMP_TO_COOKIE" --data-urlencode "host_name=$TMP_HOSTNAME" --data-urlencode "domain_name=$TMP_DOMAIN" --data-urlencode "interface_name=eth0" --data-urlencode "ip_address=$TMP_IP" --data-urlencode "ip_netmask=255.255.0.0" --data-urlencode "ip_gateway=$TMP_GATEWAY" --data-urlencode "interface_mtu=9000" --data-urlencode "cdn=$TMP_CDN_ID" --data-urlencode "cachegroup=$TMP_CACHEGROUP_ID" --data-urlencode "phys_location=$TMP_PHYS_LOCATION_ID" --data-u [...]
-TMP_SERVER_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TMP_TRAFFIC_OPS_URI/api/4.0/servers.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["hostName"]=="'"$TMP_HOSTNAME"'"]; print match[0]')"
-curl -v -k -H "Content-Type: application/x-www-form-urlencoded" -H "Cookie: mojolicious=$TMP_TO_COOKIE" -X POST --data-urlencode "id=$TMP_SERVER_ID" --data-urlencode "status=ONLINE" $TMP_TRAFFIC_OPS_URI/server/updatestatus
-
-sudo docker run -it --publish 192.0.2.110:80:80 --publish 192.0.2.110:3333:3333 --publish 192.0.2.110:53:53 --publish 192.0.2.110:53:53/udp --name c23-tr-01 --hostname c23-tr-01 --net cdnet --env TRAFFIC_OPS_URI=https://c23-to-01.example.net --env TRAFFIC_OPS_USER=superroot --env TRAFFIC_OPS_PASS=supersecreterpassward --env TRAFFIC_MONITORS="c23-tm-01.example.net:80;c23-tm-02.example.net:80" --env ORIGIN_URI="http://c23-hotair-01.example.net" --env DOMAIN=example.net --env IP=192.0.2.110 [...]
-
-sudo docker run -it --publish 192.0.2.111:8083:8083 --publish 192.0.2.111:8086:8086 --name c23-ts-01 --hostname c23-ts-01 --net cdnet --env TRAFFIC_OPS_URI=https://c23-to-01.example.net --env TRAFFIC_OPS_USER=superroot --env TRAFFIC_OPS_PASS=supersecreterpassward --env CERT_COUNTRY=US --env CERT_STATE=Colorado --env CERT_CITY=Denver --env CERT_COMPANY=Kabletown --env DOMAIN=example.net --env IP=192.0.2.111 --env GATEWAY=192.0.2.161 traffic_stats:1.4
-
-# Edge and Mid caches must be created first to add themselves as servers to Traffic Ops.
-# Once Traffic Ops has all the servers and the CRConfig is generated (by the Traffic Router container), we must re-run the ort script on them.
-sudo docker exec -it c23-atsec-01 /opt/ort/traffic_ops_ort.pl badass WARN https://c23-to-01.example.net superroot:supersecreterpassward
-sudo docker exec -it c23-atsec-02 /opt/ort/traffic_ops_ort.pl badass WARN https://c23-to-01.example.net superroot:supersecreterpassward
-sudo docker exec -it c23-atsmid-01 /opt/ort/traffic_ops_ort.pl badass WARN https://c23-to-01.example.net superroot:supersecreterpassward
-sudo docker exec -it c23-atsmid-02 /opt/ort/traffic_ops_ort.pl badass WARN https://c23-to-01.example.net superroot:supersecreterpassward
-```
-
-If everything was successful, you can test the CDN with:
-
-```bash
-# Test the Traffic Router DNS. Should return the DNS entries for the delivery services
-dig @c23-tr-01.example.net edge.ds1.c23.example.net
-
-# Test the DNS delivery service. Should return a 200
-curl -vs -o /dev/null -H "Host: edge.ds1.c23.example.net" "http://192.0.2.104/test.ism/manifest"
-
-# Test the HTTP delivery service. Should return a 302 and a 200.
-curl -Lvs -o /dev/null "http://tr.ds2.c23.example.net/test.ism/manifest"
-```
-
-
-Traffic Portal
--------------
-
-Traffic Portal is not required by the CDN to function, but provides a web interface to manage Traffic Ops.
-
-You can also create a standalone Traffic Portal Docker container and point it at a Traffic Ops not in Docker.
-
-You will need a Traffic Portal RPM, and a running Traffic Ops instance to point it to.
-
-The following commands will build a Docker image and container for Traffic Portal:
-
-
-```
-docker build --no-cache --rm --tag traffic_portal:3.0.x --build-arg=RPM=traffic_portal.rpm .
-
-docker run --name tp --hostname tp --net cdnet --publish 40443:443 --env TO_SERVER=my-traffic-ops-fqdn --env TO_PORT=443 --env DOMAIN=cdnet --detach -- traffic_portal:3.0.x
-```
diff --git a/infrastructure/docker/traffic_monitor/Dockerfile b/infrastructure/docker/traffic_monitor/Dockerfile
deleted file mode 100644
index 974a2a0098..0000000000
--- a/infrastructure/docker/traffic_monitor/Dockerfile
+++ /dev/null
@@ -1,42 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-############################################################
-# Dockerfile to build Traffic Monitor 1.6.0 container images
-# Based on CentOS 6.6
-############################################################
-
-# Example Build and Run:
-# docker build --rm --build-arg JDK=http://download.oracle.com/<path to jdk rpm> --build-arg RPM=<path to traffic_monitor rpm> --tag traffic_monitor:<version> traffic_monitor
-#
-# docker run --name my-traffic-monitor-0 --hostname my-traffic-monitor-0 --net=cdnet --env TRAFFIC_OPS_URI=http://my-traffic-ops:3000 --env TRAFFIC_OPS_USER=superroot --env TRAFFIC_OPS_PASS=supersecreterpassward --detach traffic_monitor:1.6.0
-
-FROM centos/systemd
-MAINTAINER dev@trafficcontrol.apache.org
-# Default values for RPM -- override with `docker build --build-arg RPM=...'
-ARG RPM=traffic_monitor.rpm
-ADD $RPM /
-
-RUN yum install -y initscripts /$(basename $RPM)
-RUN rm /$(basename $RPM)
-
-# jq is used by the run.sh script
-RUN curl -L jq https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64 > /usr/bin/jq
-RUN chmod +x /usr/bin/jq
-
-EXPOSE 80
-ADD run.sh /
-ENTRYPOINT /run.sh
diff --git a/infrastructure/docker/traffic_monitor/run.sh b/infrastructure/docker/traffic_monitor/run.sh
deleted file mode 100755
index d52e2dbaf7..0000000000
--- a/infrastructure/docker/traffic_monitor/run.sh
+++ /dev/null
@@ -1,145 +0,0 @@
-#!/usr/bin/env bash
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-
-# Script for running the Dockerfile for Traffic Monitor.
-# The Dockerfile sets up a Docker image which can be used for any new container;
-# This script, which should be run when the container is run (it's the ENTRYPOINT), will configure the container.
-#
-# The following environment variables must be set (ordinarily by `docker run -e` arguments):
-# TRAFFIC_OPS_URI
-# TRAFFIC_OPS_USER
-# TRAFFIC_OPS_PASS
-
-# Check that env vars are set
-envvars=( TRAFFIC_OPS_URI TRAFFIC_OPS_USER TRAFFIC_OPS_PASS )
-for v in $envvars
-do
-	if [[ -z $$v ]]; then echo "$v is unset"; exit 1; fi
-done
-
-start() {
-	service traffic_monitor start
-	touch /opt/traffic_monitor/var/log/traffic_monitor.log
-	exec tail -f /opt/traffic_monitor/var/log/traffic_monitor.log
-}
-
-init() {
-	[ ! -z $IP ]            || IP=$(ip addr | grep 'global' | awk '{print $2}' | cut -f1 -d'/')
-	[ ! -z $DOMAIN ]        || DOMAIN="localdomain"
-	[ ! -z $CACHEGROUP ]    || CACHEGROUP="mid-east"
-	[ ! -z $TYPE ]          || TYPE="RASCAL"
-	[ ! -z $PROFILE ]       || PROFILE="RASCAL_CDN1"
-	[ ! -z $PHYS_LOCATION ] || PHYS_LOCATION="plocation-nyc-1"
-	[ ! -z $INTERFACE ]     || INTERFACE="eth0"
-	[ ! -z $NETMASK ]       || NETMASK="255.255.0.0"
-	[ ! -z $MTU ]           || MTU="9000"
-	[ ! -z $PORT ]          || PORT="80"
-	[ ! -z $GATEWAY ]       || GATEWAY="$(ip route | grep default | awk '{print $3}')"
-	[ ! -z $CDN ]           || CDN="cdn"
-	echo "IP: $IP"
-	echo "Domain: $DOMAIN"
-	echo "Cachegroup: $CACHEGROUP"
-	echo "Type: $TYPE"
-	echo "Profile: $PROFILE"
-	echo "PhysLocation: $PHYS_LOCATION"
-	echo "Interface: $INTERFACE"
-	echo "NetMask: $NETMASK"
-	echo "MTU: $MTU"
-	echo "Port: $PORT"
-	echo "Gateway: $GATEWAY"
-	echo "CDN: $CDN"
-	echo "Create Server: $CREATE_TO_SERVER"
-
-	mkdir -p /opt/traffic_monitor/conf
-	cat > /opt/traffic_monitor/conf/traffic_monitor.cfg <<- ENDOFMESSAGE
-		{
-				"monitor_config_polling_interval_ms": 15000,
-				"http_timeout_ms": 2000,
-				"max_events": 200,
-				"health_flush_interval_ms": 20,
-				"stat_flush_interval_ms": 20,
-				"log_location_event": "/opt/traffic_monitor/var/log/event.log",
-				"log_location_error": "/opt/traffic_monitor/var/log/traffic_monitor.log",
-				"log_location_warning": "/opt/traffic_monitor/var/log/traffic_monitor.log",
-				"log_location_info": "null",
-				"log_location_debug": "null",
-				"serve_read_timeout_ms": 10000,
-				"serve_write_timeout_ms": 10000,
-				"static_file_dir": "/opt/traffic_monitor/static/",
-				"cache_polling_protocol": "both"
-		}
-ENDOFMESSAGE
-
-	cat > /opt/traffic_monitor/conf/traffic_ops.cfg <<- ENDOFMESSAGE
-		{
-				"username": "$TRAFFIC_OPS_USER",
-				"password": "$TRAFFIC_OPS_PASS",
-				"url": "$TRAFFIC_OPS_URI",
-				"insecure": true,
-				"cdnName": "$CDN",
-				"httpListener": ":$PORT"
-				}
-	ENDOFMESSAGE
-
-	TO_COOKIE="$(curl -v -s -k -X POST --data '{ "u":"'"$TRAFFIC_OPS_USER"'", "p":"'"$TRAFFIC_OPS_PASS"'" }' $TRAFFIC_OPS_URI/api/4.0/user/login 2>&1 | grep 'Set-Cookie' | sed -e 's/.*mojolicious=\(.*\); expires.*/\1/')"
-	echo "Got Cookie: $TO_COOKIE"
-
-	if [ ! -z "$CREATE_TO_SERVER" ] ; then
-		echo "Creating Server in Traffic Ops!"
-		# curl -v -k -X POST -H "Cookie: mojolicious=$TO_COOKIE" -F "filename=Traffic_Monitor_Dockerfile_profile.traffic_ops" -F "profile_to_import=@/Traffic_Monitor_Dockerfile_profile.traffic_ops" $TRAFFIC_OPS_URI/profile/doImport
-
-		CACHEGROUP_ID="$( curl -s -k -X GET -H "Cookie: mojolicious=$TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/cachegroups.json | jq '.response | .[] | select(.name=='"\"$CACHEGROUP\""') | .id')"
-		echo "Got cachegroup ID: $CACHEGROUP_ID"
-
-		SERVER_TYPE_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/types.json | jq '.response | .[] | select(.name=='"\"$TYPE\""') | .id')"
-		echo "Got server type ID: $SERVER_TYPE_ID"
-
-		SERVER_PROFILE_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/profiles.json | jq '.response | .[] | select(.name=='"\"$PROFILE\""') | .id')"
-		echo "Got server profile ID: $SERVER_PROFILE_ID"
-
-		PHYS_LOCATION_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/phys_locations.json | jq '.response | .[] | select(.shortName=='"\"$PHYS_LOCATION\""') | .id')"
-		echo "Got phys location ID: $PHYS_LOCATION_ID"
-
-		CDN_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/cdns.json | jq '.response | .[] | select(.name=='"\"$CDN\""') | .id')"
-		echo "Got cdn ID: $CDN_ID"
-
-		# Create Server in Traffic Ops
-		curl -v -k -X POST -H "Cookie: mojolicious=$TO_COOKIE" --data-urlencode "host_name=$HOSTNAME" --data-urlencode "domain_name=$DOMAIN" --data-urlencode "interface_name=$INTERFACE" --data-urlencode "ip_address=$IP" --data-urlencode "ip_netmask=$NETMASK" --data-urlencode "ip_gateway=$GATEWAY" --data-urlencode "interface_mtu=$MTU" --data-urlencode "cdn=$CDN_ID" --data-urlencode "cachegroup=$CACHEGROUP_ID" --data-urlencode "phys_location=$PHYS_LOCATION_ID" --data-urlencode "type=$SERVER_TYPE [...]
-
-		# Add Monitor IP to `allow_ip` Parameters
-		IP_ALLOW_PARAMS=$(curl -Lsk --cookie "mojolicious=$TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/parameters?name=allow_ip | jq '.response | .[] | .id, .value')
-		while IFS= read -r id; do
-			IFS= read -r ipallow
-			ipallow=$(echo ${ipallow} | sed -e 's/^"//' -e 's/"$//')
-			IPALLOW_UPDATE_JSON="{\"id\": ${id}, \"value\": \"${ipallow},${IP}\"}"
-			curl -Lsk --cookie "mojolicious=$TO_COOKIE" -H 'Content-Type: application/json' -X PUT -d "$IPALLOW_UPDATE_JSON" $TRAFFIC_OPS_URI/api/4.0/parameters/${id}
-		done <<< "$IP_ALLOW_PARAMS"
-	fi
-
-	SERVER_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/servers.json | jq '.response | .[] | select(.hostName=='"\"$HOSTNAME\""') | .id')"
-	echo "Got server ID: $SERVER_ID"
-
-	# Set Server to Online in Traffic Ops
-	curl -v -k -H "Content-Type: application/x-www-form-urlencoded" -H "Cookie: mojolicious=$TO_COOKIE" -X POST --data-urlencode "id=$SERVER_ID" --data-urlencode "status=ONLINE" $TRAFFIC_OPS_URI/server/updatestatus
-
-	echo "INITIALIZED=1" >> /etc/environment
-}
-
-source /etc/environment
-if [ -z "$INITIALIZED" ]; then init; fi
-start
diff --git a/infrastructure/docker/traffic_ops/Dockerfile b/infrastructure/docker/traffic_ops/Dockerfile
deleted file mode 100644
index e95c91da0d..0000000000
--- a/infrastructure/docker/traffic_ops/Dockerfile
+++ /dev/null
@@ -1,74 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-
-############################################################
-# Dockerfile to build Traffic Ops container images
-# Based on CentOS 7.2
-############################################################
-
-# Example Build and Run:
-# docker network create cdnet
-# docker build --rm --tag traffic_ops:1.7.0 --build-arg=RPM=http://traffic-control-cdn.net/downloads/1.7.0/RELEASE-1.7.0/traffic_ops-1.7.0-3908.5b77f60f.x86_64.rpm traffic_ops
-#
-# docker run --name my-traffic-ops-mysql --hostname my-traffic-ops-mysql --net cdnet --env MYSQL_ROOT_PASSWORD=secretrootpass --detach mysql:5.5
-#
-# docker run --name my-traffic-ops --hostname my-traffic-ops --net cdnet --publish 443:443 --env MYSQL_IP=my-traffic-ops-mysql --env MYSQL_PORT=3306 --env MYSQL_ROOT_PASS=secretrootpass --env MYSQL_TRAFFIC_OPS_PASS=supersecretpassword --env ADMIN_USER=superroot --env ADMIN_PASS=supersecreterpassward --env CERT_COUNTRY=US --env CERT_STATE=Colorado --env CERT_CITY=Denver --env CERT_COMPANY=Kabletown --env TRAFFIC_VAULT_PASS=marginallylesssecret --env DOMAIN=cdnet --detach traffic_ops:1.5.1
-
-FROM centos/systemd
-MAINTAINER dev@trafficcontrol.apache.org
-
-RUN yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
-RUN yum install -y initscripts # needed for service command
-RUN yum install -y epel-release # needed for perl-Crypt-ScryptKDF
-RUN yum install -y perl-Crypt-ScryptKDF
-RUN yum install -y perl cpanminus perl-Test-CPAN-Meta
-RUN cpanm Carton
-RUN yum install -y perl-DBIx-Connector
-# needed for llvm-toolset-7-clang, which is needed for postgresql13-devel-13.2-1PGDG, required by TO rpm
-RUN yum install -y centos-release-scl-rh
-
-# Override RPM arg to use a different one using --build-arg RPM=...  Can be local file or http://...
-ARG RPM=traffic_ops.rpm
-ADD $RPM /
-RUN yum install -y /$(basename $RPM)
-
-# once installed, remove rpm to lower image size
-RUN rm /$(basename $RPM)
-
-# RUN export PERL5LIB=/opt/traffic_ops/app/local/lib/perl5/:/opt/traffic_ops/install/lib/ \
-# 	&& export TERM=xterm \
-# 	&& export USER=root \
-# 	&& yes | /opt/traffic_ops/install/bin/build_trafficops_perl_library -i
-
-RUN export PERL5LIB=/opt/traffic_ops/app/local/lib/perl5/:/opt/traffic_ops/install/lib/ \
-	&& export TERM=xterm \
-	&& export USER=root 
-
-# \todo add Drive Letters to postinstall input
-# RUN sed -i -- 's/"value": "b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y"/"value": "0"/g' /opt/traffic_ops/install/data/profiles/profile.trafficserver_edge.traffic_ops
-# RUN sed -i -- 's/"value": "b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y"/"value": "0"/g' /opt/traffic_ops/install/data/profiles/profile.trafficserver_mid.traffic_ops
-
-RUN echo "{\"user\": \"riakuser\",\"password\": \"$TRAFFIC_VAULT_PASS\"}" > /opt/traffic_ops/app/conf/production/riak.conf
-
-RUN cp /opt/traffic_ops/app/bin/traffic_ops_golang{,.new} && mv /opt/traffic_ops/app/bin/traffic_ops_golang{.new,} # fixes an 'Invalid Argument' bug; TODO diagnose, fix, & remove
-
-EXPOSE 443
-WORKDIR /opt/traffic_ops/app
-ENV MOJO_MODE production
-ADD profile.origin.traffic_ops /
-ADD run.sh /
-CMD /run.sh
diff --git a/infrastructure/docker/traffic_ops/Dockerfile_psql b/infrastructure/docker/traffic_ops/Dockerfile_psql
deleted file mode 100644
index b03d339567..0000000000
--- a/infrastructure/docker/traffic_ops/Dockerfile_psql
+++ /dev/null
@@ -1,43 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-
-############################################################
-# Dockerfile to initialized Traffic Ops Database container 
-# Based on CentOS 7.2
-############################################################
-
-FROM centos/systemd
-
-RUN yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
-
-RUN yum -y install \
-  postgresql13 \
-  nmap-ncat \
-  cpanminus && \
-  yum clean all
-
-ENV POSTGRES_HOME $POSTGRES_HOME
-ENV PGPASSWORD $PGPASSWORD 
-ENV POSTGRES_PASSWORD $POSTGRES_PASSWORD
-ENV DB_USERNAME $DB_USERNAME
-ENV DB_NAME $DB_NAME
-ENV DB_USER_PASS $DB_USER_PASS 
-ENV DB_SERVER $DB_SERVER
-ENV DB_PORT $DB_PORT
-
-ADD dbInit.sh /
-CMD /dbInit.sh
diff --git a/infrastructure/docker/traffic_ops/dbInit.sh b/infrastructure/docker/traffic_ops/dbInit.sh
deleted file mode 100755
index 80156f53c7..0000000000
--- a/infrastructure/docker/traffic_ops/dbInit.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/env bash
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-
-############################################################
-# Script for creating the database user account for traffic
-# ops. 
-# Used while the Docker Image is initializing itself
-############################################################
-
-while ! nc $DB_SERVER $DB_PORT </dev/null; do # &>/dev/null; do
-        echo "waiting for $DB_SERVER:$DB_PORT"
-        sleep 3
-done
-psql -h $DB_SERVER -U postgres -c "CREATE USER $DB_USERNAME WITH ENCRYPTED PASSWORD '$DB_USER_PASS'"
-createdb $DB_NAME -h $DB_SERVER -U postgres --owner $DB_USERNAME
diff --git a/infrastructure/docker/traffic_ops/docker-compose.yml b/infrastructure/docker/traffic_ops/docker-compose.yml
deleted file mode 100644
index a46388a863..0000000000
--- a/infrastructure/docker/traffic_ops/docker-compose.yml
+++ /dev/null
@@ -1,89 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-#
-# To use this compose you should first build Traffic Ops and then copy the RPM to :
-#
-# trafficcontrol/infrastructure/docker/traffic_ops/traffic_ops.rpm
-#
-# You should then just be able to go to the directory trafficcontrol/infrastructure/docker/traffic_ops/
-# and type 'docker-compose up -d'
-#
-# You should then be able to go to https://localhost and test Traffic Ops or the go api.
-# if you make code changes to the Go proxy then you just need to rebuild it and then
-# restart Traffic Ops:
-#
-# bash -c "clear && docker exec trafficops_to_server_1 /bin/bash /etc/init.d/traffic_ops /bin/bash /etc/init.d/traffic_ops start; sleep 5"
-#
-
----
-version: '3.8'
-
-volumes:
-  trafficcontrol:
-  traffic_ops:
-  conf:
-
-services:
-  db:
-    image: postgres:13.2
-    environment:
-      POSTGRES_PASSWORD: secretrootpass
-    ports: 
-      - "5432:5432"
-
-  db_init:
-    environment:
-      POSTGRES_HOME: /usr/pgsql-13
-      PGPASSWORD: secretrootpass
-      POSTGRES_PASSWORD: secretrootpass
-      DB_USERNAME: traffic_ops
-      DB_NAME: traffic_ops
-      DB_USER_PASS: twelve
-      DB_SERVER: db
-      DB_PORT: 5432
-    build:
-      context: .
-      dockerfile: Dockerfile_psql
-    depends_on: 
-      - db
-
-  to_server:
-    environment:
-      DB_SERVER: db
-      DB_PORT: 5432
-      DB_NAME: traffic_ops
-      DB_ROOT_PASS: null
-      DB_USER_PASS: twelve
-      DB_USER: traffic_ops
-      ADMIN_USER: superroot
-      ADMIN_PASS: passward
-      CERT_COUNTRY: US
-      CERT_STATE: Colorado
-      CERT_CITY: Denver
-      CERT_COMPANY: Kabletown
-      TRAFFIC_VAULT_PASS: tvsecret
-      DOMAIN: trafficops_default
-    ports: 
-      - "443:443"
-    build:
-      context: .
-      args:
-        RPM: traffic_ops.rpm 
-    volumes:
-      - ../../../traffic_ops/traffic_ops_golang/traffic_ops_golang:/opt/traffic_ops/app/bin/traffic_ops_golang
-    depends_on:
-      - db_init
diff --git a/infrastructure/docker/traffic_ops/profile.origin.traffic_ops b/infrastructure/docker/traffic_ops/profile.origin.traffic_ops
deleted file mode 100644
index f655f89c2e..0000000000
--- a/infrastructure/docker/traffic_ops/profile.origin.traffic_ops
+++ /dev/null
@@ -1,18 +0,0 @@
-{
-    "parameters": [
-        {
-            "config_file": "CRConfig.json",
-            "name": "domain_name",
-            "value": "{{.Domain}}"
-        },
-        {
-            "config_file": "parent.config",
-            "name": "weight",
-            "value": "1.0"
-        }
-    ],
-    "profile": {
-        "description": "Multi site origin profile 1",
-        "name": "ORG1_CDN1"
-    }
-}
diff --git a/infrastructure/docker/traffic_ops/run.sh b/infrastructure/docker/traffic_ops/run.sh
deleted file mode 100755
index 7c9c3c19bf..0000000000
--- a/infrastructure/docker/traffic_ops/run.sh
+++ /dev/null
@@ -1,292 +0,0 @@
-#!/usr/bin/env bash
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-
-# Script for running the Dockerfile for Traffic Ops.
-# The Dockerfile sets up a Docker image which can be used for any new Traffic Ops container;
-# This script, which should be run when the container is run (it's the ENTRYPOINT), will configure the container.
-#
-# The following environment variables must be set, ordinarily by `docker run -e` arguments:
-# DB_SERVER
-# DB_PORT
-# DB_ROOT_PASS
-# DB_USER
-# DB_USER_PASS
-# DB_NAME
-# ADMIN_USER
-# ADMIN_PASS
-# CERT_COUNTRY
-# CERT_STATE
-# CERT_CITY
-# CERT_COMPANY
-# DOMAIN
-
-# TODO:  Unused -- should be removed?  TRAFFIC_VAULT_PASS
-
-# Check that env vars are set
-envvars=( DB_SERVER DB_PORT DB_ROOT_PASS DB_USER DB_USER_PASS ADMIN_USER ADMIN_PASS CERT_COUNTRY CERT_STATE CERT_CITY CERT_COMPANY DOMAIN)
-for v in $envvars
-do
-	if [[ -z $$v ]]; then echo "$v is unset"; exit 1; fi
-done
-
-start() {
-	service traffic_ops start
-	exec tail -f /var/log/traffic_ops/traffic_ops.log
-}
-
-init() {
-	local postinstall_input_file="postinstall-input.json"
-	cat > "$postinstall_input_file" <<- ENDOFMESSAGE
-{
-  "/opt/traffic_ops/app/conf/production/database.conf":[
-    {
-      "Database type":"Pg",
-      "config_var":"type"
-    },
-    {
-      "Database name":"$DB_NAME",
-      "config_var":"dbname"
-    },
-    {
-      "Database server hostname IP or FQDN":"$DB_SERVER",
-      "config_var":"hostname"
-    },
-    {
-      "Database port number":"$DB_PORT",
-      "config_var":"port"
-    },
-    {
-      "Traffic Ops database user":"$DB_USER",
-      "config_var":"user"
-    },
-    {
-      "Traffic Ops database password":"$DB_USER_PASS",
-      "config_var":"password",
-      "hidden":"1"
-    }
-  ],
-  "/opt/traffic_ops/app/db/dbconf.yml":[
-    {
-      "Database server root (admin) user":"postgres",
-      "config_var":"pgUser"
-    },
-    {
-      "Database server admin password":"$DB_ROOT_PASS",
-      "config_var":"pgPassword",
-      "hidden":"1"
-    },
-    {
-      "Download Maxmind Database?":"yes",
-      "config_var":"maxmind"
-    }
-  ],
-  "/opt/traffic_ops/app/conf/cdn.conf":[
-    {
-      "Generate a new secret?":"yes",
-      "config_var":"genSecret"
-    },
-    {
-      "Port to serve on?": "443",
-      "config_var": "port"
-    },
-    {
-      "Number of workers?": "12",
-      "config_var":"workers"
-    },
-    {
-      "Traffic Ops url?": "https://$HOSTNAME",
-      "config_var": "base_url"
-    },
-    {
-      "Number of secrets to keep?":"1",
-      "config_var":"keepSecrets"
-    }
-  ],
-  "/opt/traffic_ops/app/conf/ldap.conf":[
-    {
-      "Do you want to set up LDAP?":"no",
-      "config_var":"setupLdap"
-    },
-    {
-      "LDAP server hostname":"",
-      "config_var":"host"
-    },
-    {
-      "LDAP Admin DN":"",
-      "config_var":"admin_dn"
-    },
-    {
-      "LDAP Admin Password":"",
-      "config_var":"admin_pass",
-      "hidden":"1"
-    },
-    {
-      "LDAP Search Base":"",
-      "config_var":"search_base"
-    }
-  ],
-  "/opt/traffic_ops/install/data/json/users.json":[
-    {
-      "Administration username for Traffic Ops":"$ADMIN_USER",
-      "config_var":"tmAdminUser"
-    },
-    {
-      "Password for the admin user":"$ADMIN_PASS",
-      "config_var":"tmAdminPw",
-      "hidden":"1"
-    }
-  ],
-  "/opt/traffic_ops/install/data/profiles/":[
-    {
-      "Add custom profiles?":"no",
-      "config_var":"custom_profiles"
-    }
-  ],
-  "/opt/traffic_ops/install/data/json/openssl_configuration.json":[
-    {
-      "Do you want to generate a certificate?":"yes",
-      "config_var":"genCert"
-    },
-    {
-      "Country Name (2 letter code)":"$CERT_COUNTRY",
-      "config_var":"country"
-    },
-    {
-      "State or Province Name (full name)":"$CERT_STATE",
-      "config_var":"state"
-    },
-    {
-      "Locality Name (eg, city)":"$CERT_CITY",
-      "config_var":"locality"
-    },
-    {
-      "Organization Name (eg, company)":"$CERT_COMPANY",
-      "config_var":"company"
-    },
-    {
-      "Organizational Unit Name (eg, section)":"",
-      "config_var":"org_unit"
-    },
-    {
-      "Common Name (eg, your name or your server's hostname)":"$HOSTNAME",
-      "config_var":"common_name"
-    },
-    {
-      "RSA Passphrase":"passphrase",
-      "config_var":"rsaPassword",
-      "hidden":"1"
-    }
-  ],
-  "/opt/traffic_ops/install/data/json/profiles.json":[
-    {
-      "Traffic Ops url":"https://$HOSTNAME",
-      "config_var":"tm.url"
-    },
-    {
-      "Human-readable CDN Name.  (No whitespace, please)":"cdn",
-      "config_var":"cdn_name"
-    },
-    {
-      "Health Polling Interval (milliseconds)":"8000",
-      "config_var":"health_polling_int"
-    },
-    {
-      "DNS sub-domain for which your CDN is authoritative":"$HOSTNAME.$DOMAIN",
-      "config_var":"dns_subdomain"
-    },
-    {
-      "TLD SOA admin":"traffic_ops",
-      "config_var":"soa_admin"
-    },
-    {
-      "TrafficServer Drive Prefix":"/dev/ram",
-      "config_var":"driver_prefix"
-    },
-    {
-      "TrafficServer RAM Drive Prefix":"/dev/ram",
-      "config_var":"ram_drive_prefix"
-    },
-    {
-      "TrafficServer RAM Drive Letters (comma separated)":"1",
-      "config_var":"ram_drive_letters"
-    },
-    {
-      "Health Threshold Load Average":"25",
-      "config_var":"health_thresh_load_avg"
-    },
-    {
-      "Health Threshold Available Bandwidth in Kbps":"1750000",
-      "config_var":"health_thresh_kbps"
-    },
-    {
-      "Traffic Server Health Connection Timeout (milliseconds)":"2000",
-      "config_var":"health_connect_timeout"
-    }
-  ]
-}
-	ENDOFMESSAGE
-
-	# TODO determine if term, user are necessary
-	export TERM=xterm && export USER=root && /opt/traffic_ops/install/bin/postinstall -cfile "$postinstall_input_file"
-
-	# Only listen on IPv4, not IPv6, because Docker doesn't provide a v6 interface by default. See http://mojolicious.org/perldoc/Mojo/Server/Daemon#listen
-	sed -i -e 's#https://\[::\]#https://127\.0\.0\.1#' /opt/traffic_ops/app/conf/cdn.conf
-	service traffic_ops restart
-
-	TRAFFIC_OPS_URI="https://localhost"
-
-	TMP_TO_COOKIE="$(curl -v -s -k -X POST --data '{ "u":"'"$ADMIN_USER"'", "p":"'"$ADMIN_PASS"'" }' $TRAFFIC_OPS_URI/api/4.0/user/login 2>&1 | grep 'Set-Cookie' | sed -e 's/.*mojolicious=\(.*\); expires.*/\1/')"
-	echo "Got cookie: $TMP_TO_COOKIE"
-
-	TMP_DOMAIN=$DOMAIN
-	sed -i -- "s/{{.Domain}}/$TMP_DOMAIN/g" /profile.origin.traffic_ops
-	echo "Got domain: $TMP_DOMAIN"
-
-	echo "Importing origin"
-	curl -v -k -X POST -H "Cookie: mojolicious=$TMP_TO_COOKIE" -F "filename=profile.origin.traffic_ops" -F "profile_to_import=@/profile.origin.traffic_ops" $TRAFFIC_OPS_URI/profile/doImport
-
-	curl -v -k -X POST -H "Cookie: mojolicious=$TMP_TO_COOKIE" --data-urlencode "division.name=East" $TRAFFIC_OPS_URI/division/create
-	TMP_DIVISION_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/region/add | grep --color=never -oE "<option value=\"[0-9]+\">East</option>" | grep --color=never -oE "[0-9]+")"
-	echo "Got division ID: $TMP_DIVISION_ID"
-
-	curl -v -k -X POST -H "Cookie: mojolicious=$TMP_TO_COOKIE" --data-urlencode "region.name=Eastish" --data-urlencode "region.division_id=$TMP_DIVISION_ID" $TRAFFIC_OPS_URI/region/create
-	TMP_REGION_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/regions.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="Eastish"]; print match[0]')"
-	echo "Got region ID: $TMP_REGION_ID"
-
-	TMP_CACHEGROUP_TYPE="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/types.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="MID_LOC"]; print match[0]')"
-	echo "Got cachegroup type ID: $TMP_CACHEGROUP_TYPE"
-
-	curl -v -k -X POST -H "Cookie: mojolicious=$TMP_TO_COOKIE" --data-urlencode "cg_data.name=mid-east" --data-urlencode "cg_data.short_name=east" --data-urlencode "cg_data.latitude=0" --data-urlencode "cg_data.longitude=0" --data-urlencode "cg_data.parent_cachegroup_id=-1" --data-urlencode "cg_data.type=$TMP_CACHEGROUP_TYPE" $TRAFFIC_OPS_URI/cachegroup/create
-	TMP_CACHEGROUP_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/cachegroups.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="mid-east"]; print match[0]')"
-	echo "Got cachegroup ID: $TMP_CACHEGROUP_ID"
-
-	TMP_CACHEGROUP_EDGE_TYPE="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/types.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="EDGE_LOC"]; print match[0]')"
-	echo "Got cachegroup type ID: $TMP_CACHEGROUP_EDGE_TYPE"
-
-	curl -v -k -X POST -H "Cookie: mojolicious=$TMP_TO_COOKIE" --data-urlencode "cg_data.name=edge-east" --data-urlencode "cg_data.short_name=eeast" --data-urlencode "cg_data.latitude=0" --data-urlencode "cg_data.longitude=0" --data-urlencode "cg_data.parent_cachegroup_id=$TMP_CACHEGROUP_ID" --data-urlencode "cg_data.type=$TMP_CACHEGROUP_EDGE_TYPE" $TRAFFIC_OPS_URI/cachegroup/create
-	TMP_CACHEGROUP_EDGE_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/cachegroups.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="edge-east"]; print match[0]')"
-	echo "Got cachegroup edge ID: $TMP_CACHEGROUP_EDGE_ID"
-
-	curl -v -k -X POST -H "Cookie: mojolicious=$TMP_TO_COOKIE" --data-urlencode "location.name=plocation-nyc-1" --data-urlencode "location.short_name=nyc" --data-urlencode "location.address=1 Main Street" --data-urlencode "location.city=nyc" --data-urlencode "location.state=NY" --data-urlencode "location.zip=12345" --data-urlencode "location.poc=" --data-urlencode "location.phone=" --data-urlencode "location.email=no@no.no" --data-urlencode "location.comments=" --data-urlencode "location.re [...]
-
-	echo "INITIALIZED=1" >> /etc/environment
-}
-
-source /etc/environment
-if [ -z "$INITIALIZED" ]; then init; fi
-start
diff --git a/infrastructure/docker/traffic_router/Dockerfile b/infrastructure/docker/traffic_router/Dockerfile
deleted file mode 100644
index d34c6e8fb2..0000000000
--- a/infrastructure/docker/traffic_router/Dockerfile
+++ /dev/null
@@ -1,59 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-############################################################
-# Dockerfile to build Traffic Router 1.4 container images
-# Based on CentOS 6.6
-############################################################
-
-# Example Build and Run:
-# docker build --rm --tag traffic_router:1.4 Traffic_Router
-# docker build --rm --build-arg JDK=http://download.oracle.com/<path to jdk rpm> --build-arg RPM=<path to traffic_router rpm> --tag traffic_router:<version> traffic_router
-
-# docker run --name my-traffic-router --hostname my-traffic-router --net cdnet --env TRAFFIC_OPS_URI=http://my-traffic-ops:3000 --env TRAFFIC_OPS_USER=superroot --env TRAFFIC_OPS_PASS=supersecreterpassward --env TRAFFIC_MONITORS="my-traffic-monitor-0:80;my-traffic-monitor-1:80" --env ORIGIN_URI="http://my-hotair.cdnet" --detach traffic_router:1.4
-
-FROM centos:7
-MAINTAINER dev@trafficcontrol.apache.org
-
-# Default values for TMCAT RPM and RPM -- override with `docker build --build-arg JDK=...'
-ARG RPM=traffic_router.rpm
-ARG TMCAT=tomcat.rpm
-ARG TC_REPO=traffic-control.repo
-ADD $TMCAT /
-ADD $RPM /
-ADD $TC_REPO /etc/yum.repos.d/
-ADD starttr.sh /
-ADD shutdowntr.sh /
-
-### Common for all sub-component builds
-RUN	yum -y install \
-		epel-release \
-		git \
-		rpm-build && \
-	yum -y clean all
-
-
-RUN yum install -y wget tar unzip perl-JSON perl-WWW-Curl which
-RUN yum search tomcat-native
-RUN yum search jdk
-
-
-RUN yum install -y /$TMCAT /$RPM
-#RUN rm /$(basename $JDK) /$(basename $RPM)
-
-EXPOSE 53 80 3333
-ADD run.sh /
-ENTRYPOINT /run.sh
diff --git a/infrastructure/docker/traffic_router/run.sh b/infrastructure/docker/traffic_router/run.sh
deleted file mode 100755
index e625c14a78..0000000000
--- a/infrastructure/docker/traffic_router/run.sh
+++ /dev/null
@@ -1,111 +0,0 @@
-#!/bin/bash
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-
-# Script for running the Dockerfile for Traffic Router.
-# The Dockerfile sets up a Docker image which can be used for any new container;
-# This script, which should be run when the container is run (it's the ENTRYPOINT), will configure the container.
-#
-# The following environment variables must be set (ordinarily by `docker run -e` arguments):
-# TRAFFIC_OPS_URI
-# TRAFFIC_OPS_USER
-# TRAFFIC_OPS_PASS
-# TRAFFIC_MONITORS # list of semicolon-delimited FQDN:port monitors. E.g. `monitor.foo.com:80;monitor2.bar.org:80`
-# ORIGIN_URI # origin server (e.g. hotair), used to create a delivery service
-
-start() {
-	./starttr.sh
-	touch /opt/traffic_router/var/log/traffic_router.log
-	exec tail -f /opt/traffic_router/var/log/traffic_router.log
-}
-
-init() {
-	TMP_TO_COOKIE="$(curl -v -s -k -X POST --data '{ "u":"'"$TRAFFIC_OPS_USER"'", "p":"'"$TRAFFIC_OPS_PASS"'" }' $TRAFFIC_OPS_URI/api/4.0/user/login 2>&1 | grep 'Set-Cookie' | sed -e 's/.*mojolicious=\(.*\); expires.*/\1/')"
-	echo "Got Cookie: $TMP_TO_COOKIE"
-
-#  TMP_IP="$(ifconfig | grep -oE "inet addr:[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" | grep -v '127.0.0.1' | cut -c11-)"
-#	TMP_DOMAIN="$(grep -E "[:blank:]+.+\..+$" /etc/hosts | head -1 | rev | cut -d'.' -f2- --complement | rev)"
-#	TMP_GATEWAY="$(route -n | grep -E "^0\.0\.0\.0[[:space:]]" | cut -f1 -d" " --complement | sed -e 's/^[ \t]*//' | cut -f1 -d" ")"
-	TMP_IP=$IP
-	TMP_DOMAIN=$DOMAIN
-	TMP_GATEWAY=$GATEWAY
-
-	TMP_CACHEGROUP_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/cachegroups.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="mid-east"]; print match[0]')"
-	echo "Got cachegroup ID: $TMP_CACHEGROUP_ID"
-
-	TMP_SERVER_TYPE_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/types.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="CCR"]; print match[0]')"
-	echo "Got server type ID: $TMP_SERVER_TYPE_ID"
-
-	TMP_SERVER_PROFILE_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/profiles.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="CCR_CDN"]; print match[0]')"
-	echo "Got server profile ID: $TMP_SERVER_PROFILE_ID"
-
-	TMP_PHYS_LOCATION_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/phys_locations.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="plocation-nyc-1"]; print match[0]')"
-	echo "Got phys location ID: $TMP_PHYS_LOCATION_ID"
-
-	TMP_CDN_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/cdns.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="cdn"]; print match[0]')"
-	echo "Got cdn ID: $TMP_CDN_ID"
-
-	curl -v -k -X POST -H "Cookie: mojolicious=$TMP_TO_COOKIE" --data-urlencode "host_name=$HOSTNAME" --data-urlencode "domain_name=$TMP_DOMAIN" --data-urlencode "interface_name=eth0" --data-urlencode "ip_address=$TMP_IP" --data-urlencode "ip_netmask=255.255.0.0" --data-urlencode "ip_gateway=$TMP_GATEWAY" --data-urlencode "interface_mtu=9000" --data-urlencode "cdn=$TMP_CDN_ID" --data-urlencode "cachegroup=$TMP_CACHEGROUP_ID" --data-urlencode "phys_location=$TMP_PHYS_LOCATION_ID" --data-urle [...]
-
-	TMP_SERVER_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/servers.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["hostName"]=="'"$HOSTNAME"'"]; print match[0]')"
-	echo "Got server ID: $TMP_SERVER_ID"
-
-	curl -v -k -H "Cookie: mojolicious=$TMP_TO_COOKIE" -X POST --data-urlencode "id=$TMP_SERVER_ID" --data-urlencode "status=ONLINE" $TRAFFIC_OPS_URI/server/updatestatus
-
-	TMP_DELIVERY_SERVICE_TYPE_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/types.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="DNS"]; print match[0]')"
-	echo "Got delivery service type ID: $TMP_DELIVERY_SERVICE_TYPE_ID"
-
-	curl -v -k -X POST -H "Cookie: mojolicious=$TMP_TO_COOKIE" --data-urlencode "ds.xml_id=c2-service" --data-urlencode "ds.display_name=C2 Service" --data-urlencode "ds.cdn_id=$TMP_CDN_ID" --data-urlencode "ds.type=$TMP_DELIVERY_SERVICE_TYPE_ID"  --data-urlencode "ds.protocol=0" --data-urlencode "ds.dscp=0" --data-urlencode "ds.signed=0" --data-urlencode "ds.qstring_ignore=0" --data-urlencode "ds.geo_limit=0" --data-urlencode "ds.http_bypass_fqdn=" --data-urlencode "ds.initial_dispersion=1 [...]
-
-	TMP_DELIVERY_SERVICE_LIVE_TYPE_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/types.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="DNS_LIVE_NATNL"]; print match[0]')"
-	echo "Got delivery service live type ID: $TMP_DELIVERY_SERVICE_LIVE_TYPE_ID"
-
-	curl -v -k -X POST -H "Cookie: mojolicious=$TMP_TO_COOKIE" --data-urlencode "ds.xml_id=ds2-live" --data-urlencode "ds.display_name=DS2 Live" --data-urlencode "ds.cdn_id=$TMP_CDN_ID" --data-urlencode "ds.type=$TMP_DELIVERY_SERVICE_LIVE_TYPE_ID"  --data-urlencode "ds.protocol=0" --data-urlencode "ds.dscp=0" --data-urlencode "ds.signed=0" --data-urlencode "ds.qstring_ignore=0" --data-urlencode "ds.geo_limit=0" --data-urlencode "ds.http_bypass_fqdn=" --data-urlencode "ds.initial_dispersion= [...]
-
-	TMP_DELIVERY_SERVICE_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/deliveryservices.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["xmlId"]=="c2-service"]; print match[0]')"
-	echo "Got delivery ID: $TMP_DELIVERY_SERVICE_ID"
-
-	TMP_DELIVERY_SERVICE_HTTP_TYPE_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/types.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="HTTP"]; print match[0]')"
-	echo "Got delivery service http type ID: $TMP_DELIVERY_SERVICE_HTTP_TYPE_ID"
-
-	curl -v -k -X POST -H "Cookie: mojolicious=$TMP_TO_COOKIE" --data-urlencode "ds.xml_id=c3-service" --data-urlencode "ds.display_name=C3 Service" --data-urlencode "ds.cdn_id=$TMP_CDN_ID" --data-urlencode "ds.type=$TMP_DELIVERY_SERVICE_HTTP_TYPE_ID"  --data-urlencode "ds.protocol=0" --data-urlencode "ds.dscp=0" --data-urlencode "ds.signed=0" --data-urlencode "ds.qstring_ignore=0" --data-urlencode "ds.geo_limit=0" --data-urlencode "ds.http_bypass_fqdn=" --data-urlencode "ds.initial_dispers [...]
-
-	TMP_DELIVERY_SERVICE_HTTP_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/deliveryservices.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["xmlId"]=="c3-service"]; print match[0]')"
-	echo "Got delivery http ID: $TMP_DELIVERY_SERVICE_HTTP_ID"
-
-
-	TMP_EDGES="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/servers.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["type"]=="EDGE"]; print "\n".join(match)')"
-	echo "Got edges: $TMP_EDGES"
-	TMP_EDGE_STR="$(echo "$TMP_EDGES" | xargs -I {} echo 'serverid_{}=on&' | tr -d '\n' | rev | cut -c 2- | rev)"
-	echo "Got edge str: $TMP_EDGE_STR"
-
-	curl -v -k -X POST -H "Cookie: mojolicious=$TMP_TO_COOKIE" --data $TMP_EDGE_STR $TRAFFIC_OPS_URI/dss/$TMP_DELIVERY_SERVICE_ID/update
-	curl -v -k -X POST -H "Cookie: mojolicious=$TMP_TO_COOKIE" --data $TMP_EDGE_STR $TRAFFIC_OPS_URI/dss/$TMP_DELIVERY_SERVICE_HTTP_ID/update
-
-	sed -i -- "s/# traffic_monitor.bootstrap.hosts=some-traffic_monitor.company.net:80;/traffic_monitor.bootstrap.hosts=$TRAFFIC_MONITORS/g" /opt/traffic_router/conf/traffic_monitor.properties
-
-	sed -i -- "s/traffic_ops.username=admin/traffic_ops.username=$TRAFFIC_OPS_USER/g" /opt/traffic_router/conf/traffic_ops.properties
-	sed -i -- "s/traffic_ops.password=FIXME/traffic_ops.password=$TRAFFIC_OPS_PASS/g" /opt/traffic_router/conf/traffic_ops.properties
-
-	curl -k -v -X PUT --cookie "mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/snapshot/cdn
-
-	echo "INITIALIZED=1" >> /etc/environment
-}
-
-source /etc/environment
-if [ -z "$INITIALIZED" ]; then init; fi
-start
diff --git a/infrastructure/docker/traffic_router/shutdowntr.sh b/infrastructure/docker/traffic_router/shutdowntr.sh
deleted file mode 100755
index 1bd8b7cce4..0000000000
--- a/infrastructure/docker/traffic_router/shutdowntr.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/bin/bash
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-
-# Script for running the Dockerfile for Traffic Router.
-# The Dockerfile sets up a Docker image which can be used for any new container;
-# This script, which should be run when the container is run (it's the ENTRYPOINT), will configure the container.
-#
-# The following environment variables must be set (ordinarily by `docker run -e` arguments):
-# TRAFFIC_OPS_URI
-# TRAFFIC_OPS_USER
-# TRAFFIC_OPS_PASS
-# TRAFFIC_MONITORS # list of semicolon-delimited FQDN:port monitors. E.g. `monitor.foo.com:80;monitor2.bar.org:80`
-# ORIGIN_URI # origin server (e.g. hotair), used to create a delivery service
-
-export JAVA_HOME="$(command -v java | xargs realpath | xargs dirname)/.."
-export CATALINA_PID=/opt/traffic_router/temp/tomcat.pid
-export CATALINA_HOME=/opt/tomcat
-export CATALINA_BASE=/opt/traffic_router
-export CATALINA_OUT=/opt/tomcat/logs/catalina.log
-source /opt/traffic_router/conf/startup.properties
-/opt/tomcat/bin/shutdown.sh
diff --git a/infrastructure/docker/traffic_router/starttr.sh b/infrastructure/docker/traffic_router/starttr.sh
deleted file mode 100755
index eae4f9befc..0000000000
--- a/infrastructure/docker/traffic_router/starttr.sh
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/bash
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-
-# Script for running the Dockerfile for Traffic Router.
-# The Dockerfile sets up a Docker image which can be used for any new container;
-# This script simulates the systemd unit file that is used to start traffic router on 
-# servers in the real world, but in Docker containers systemd is disabled. 
-# Therefore it is important to keep this script up to date with any changes that are
-# made to traffic_router/build/build_rpm.sh and traffic_router/build/pom.xml
-
-export JAVA_HOME="$(command -v java | xargs realpath | xargs dirname)/.."
-export CATALINA_PID=/opt/traffic_router/temp/tomcat.pid
-export CATALINA_HOME=/opt/tomcat
-export CATALINA_BASE=/opt/traffic_router
-export CATALINA_OUT=/opt/tomcat/logs/catalina.log
-export CATALINA_OPTS="\
-  -server -Xms512m -Xmx1g \
-  -Dlog4j.configurationFile=$CATALINA_BASE/conf/log4j2.xml \
-  -Djava.library.path=/usr/lib64 \
-  -Dorg.apache.catalina.connector.Response.ENFORCE_ENCODING_IN_GET_WRITER=false \
-  -XX:+UseG1GC \
-  -XX:+UnlockExperimentalVMOptions \
-  -XX:InitiatingHeapOccupancyPercent=30"
-export JAVA_OPTS="\
-  -Djava.awt.headless=true \
-  -Djava.security.egd=file:/dev/./urandom"
-
-ulimit -c unlimited
-/opt/tomcat/bin/startup.sh
diff --git a/infrastructure/docker/traffic_server_edge/Dockerfile b/infrastructure/docker/traffic_server_edge/Dockerfile
deleted file mode 100644
index 8f8a0b83f7..0000000000
--- a/infrastructure/docker/traffic_server_edge/Dockerfile
+++ /dev/null
@@ -1,279 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-############################################################
-# Dockerfile to build Traffic Server container images
-#   as Edges for Traffic Control 1.4
-# Based on CentOS 6.6
-############################################################
-
-# For cache, you may either use (RAM or disk) block devices or disk directories
-# To use RAM block devices, pass them as /dev/ram0 and /dev/ram1 via `docker run --device`
-# To use disk directories, simply don't pass devices, and the container will configure Traffic Server for directories
-
-# Block devices may be created on the native machine with, for example, `modprobe brd`.
-# The recommended minimum size for each block devices is 1G.
-# For example, `sudo modprobe brd rd_size=1048576 rd_nr=2`
-
-# Example Build and Run:
-#
-# docker build --rm --tag traffic_server_edge:1.4 Traffic_Server_Edge
-#
-# docker run --name my-edge-0 --hostname my-edge-0 --net cdnet --device /dev/ram0:/dev/ram0 --device /dev/ram1:/dev/ram1 --env TRAFFIC_OPS_URI=http://my-traffic-ops:3000 --env TRAFFIC_OPS_USER=superroot --env TRAFFIC_OPS_PASS=supersecreterpassward --detach traffic_server_edge:1.4
-#
-# OR
-#
-# docker run --name my-edge-0 --hostname my-edge-0 --net cdnet --env TRAFFIC_OPS_URI=http://my-traffic-ops:3000 --env TRAFFIC_OPS_USER=superroot --env TRAFFIC_OPS_PASS=supersecreterpassward --detach traffic_server_edge:1.4
-
-FROM centos:6.6
-MAINTAINER dev@trafficcontrol.apache.org
-
-RUN yum install -y perl-JSON
-
-RUN curl -O http://traffic-control-cdn.net/downloads/trafficserver-5.3.2-599.089d585.el6.x86_64.rpm
-RUN yum install -y trafficserver-5.3.2-599.089d585.el6.x86_64.rpm
-
-RUN mkdir /opt/ort
-RUN cd /opt/ort && curl -LO https://github.com/apache/trafficcontrol/raw/RELEASE-1.4.0-RC0/traffic_ops/bin/traffic_ops_ort.pl
-RUN chmod 777 /opt/ort/traffic_ops_ort.pl
-
-RUN curl -O http://traffic-control-cdn.net/downloads/astats_over_http-1.2-8.el6.x86_64.rpm
-RUN yum install -y astats_over_http-1.2-8.el6.x86_64.rpm
-
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/traffic_cop
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/traffic_crashlog
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/traffic_ctl
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/traffic_layout
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/traffic_line
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/traffic_logcat
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/traffic_logstats
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/traffic_manager
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/traffic_sac
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/trafficserver
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/traffic_server
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/traffic_top
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/traffic_via
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/tspush
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/tsxs
-
-# \todo move Heka to its own container, sharing the ATS log file via --volume
-RUN curl -LO https://github.com/mozilla-services/heka/releases/download/v0.10.0/heka-0_10_0-linux-amd64.rpm
-RUN yum install -y heka-0_10_0-linux-amd64.rpm
-RUN mkdir etc/hekad
-RUN printf '[ats_traffic_logs] \n\
-type = "LogstreamerInput" \n\
-splitter = "TokenSplitter" \n\
-decoder = "ATS_transform_decoder" \n\
-log_directory = "/opt/trafficserver/var/log/trafficserver" \n\
-file_match = "custom_ats_2.log" \n\
-[ATS_transform_decoder] \n\
-type = "PayloadRegexDecoder" \n\
-match_regex = '"'^(?P<UnixTimestamp>[\d]+\.[\d]+) chi=(?P<chi>\S+) phn=(?P<phn>\S+) shn=(?P<shn>\S+) url=(?P<url>\S+) cqhm=(?P<cqhm>\w+) cqhv=(?P<cqhv>\S+) pssc=(?P<pssc>\d+) ttms=(?P<ttms>\d+) b=(?P<b>\d+) sssc=(?P<sssc>\d+) sscl=(?P<sscl>\d+)  cfsc=(?P<cfsc>\S+) pfsc=(?P<pfsc>\S+) crc=(?P<crc>\S+) phr=(?P<phr>\S+) uas=(?P<uas>\S+) xmt=(?P<xmt>\S+)'"' \n\n\
-[ATS_transform_decoder.message_fields] \n\
-Type = "ats_traffic" \n\
-timestamp = "%%UnixTimestamp%%" \n\
-clientip = "%%chi%%" \n\
-host = "%%phn%%" \n\
-shn = "%%shn%%" \n\
-url = "%%url%%" \n\
-method = "%%cqhm%%" \n\
-version = "%%cqhv%%" \n\
-status = "%%pssc%%" \n\
-request_duration = "%%ttms%%" \n\
-bytes = "%%b%%" \n\
-response_code = "%%sssc%%" \n\
-response_length = "%%sscl%%" \n\
-client_status = "%%cfsc%%" \n\
-proxy_code = "%%pfsc%%" \n\
-crc = "%%crc%%" \n\
-phr = "%%phr%%" \n\
-useragent = "%%uas%%" \n\
-money_trace = "%%xmt%%" \n\
-[PayloadEncoder] \n\
-type = "PayloadEncoder" \n\
-[FxaKafkaOutput] \n\
-type = "KafkaOutput" \n\
-topic = "ipcdn" \n\
-message_matcher = "TRUE" \n\
-encoder = "PayloadEncoder" \n\
-addrs = ["{{.KafkaUri}}"] \n\
-[Message_Counter] \n\
-type = "CounterFilter" \n\
-message_matcher = "Type != '"'heka.counter-output'"'" \n\
-encoder = "CounterLogEncoder" \n\
-[CounterLogEncoder] \n\
-type="PayloadEncoder" \n\
-append_newlines = true \n\
-prefix_ts = true \n\
-ts_format = "Mon Jan _2 15:04:05 MST 2006" \n\
-[CounterLogOutput] \n\
-type = "FileOutput" \n\
-message_matcher = "Type == '"'heka.counter-output'"'" \n\
-encoder = "CounterLogEncoder" \n\
-path = "/tmp/hekad_counter.log"' > /etc/hekad/heka.toml
-
-RUN printf '#!/bin/sh \n\n\
-# \n\
-# hekad <summary> \n\
-# \n\
-# chkconfig:   2345 80 20 \n\
-# description: Starts and stops a single heka instance on this system \n\
-# \n\
-### BEGIN INIT INFO \n\
-# Provides: Heka \n\
-# Required-Start: $network $named \n\
-# Required-Stop: $network $named \n\
-# Default-Start: 2 3 4 5 \n\
-# Default-Stop: 0 1 6 \n\
-# Short-Description: This service manages the hekad daemon \n\
-# Description: Heka is a high performance general purpose data acquisition and processing engine. \n\
-### END INIT INFO \n\
-# \n\
-# init.d / servicectl compatibility (openSUSE) \n\
-# \n\
-if [ -f /etc/rc.status ]; then \n\
-    . /etc/rc.status \n\
-    rc_reset \n\
-fi \n\
-# \n\
-# Source function library. \n\
-# \n\
-if [ -f /etc/rc.d/init.d/functions ]; then \n\
-    . /etc/rc.d/init.d/functions \n\
-fi \n\
-. /etc/init.d/functions \n\
-name="hekad" \n\
-exec="/usr/bin/hekad" \n\
-prog="hekad" \n\
-user="root" \n\
-group="root" \n\
-pidfile=/var/run/${prog}.pid \n\
-conf=/etc/hekad/heka.toml \n\
-log=/var/log/heka.log \n\
-DAEMON_ARGS=${DAEMON_ARGS---user root} \n\
-nice=19 \n\
-args=" --config $conf" \n\
-[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog \n\
-lockfile=/var/lock/subsys/$prog \n\
-HEKA_USER=root \n\
-start() { \n\
-    [ -x $exec ] || exit 5 \n\
-    [ -f $CONF_FILE ] || exit 6 \n\
-    # if not running, start it up here, usually something like "daemon $exec" \n\
-    # Run the program! \n\
-    nice -n ${nice} chroot --userspec $user:$group / sh -c " exec \"$prog\" $args " > ${log} 2>&1 & \n\
-     # Generate the pidfile from here. If we instead made the forked process \n\
-  # generate it there will be a race condition between the pidfile writing \n\
-  # and a process possibly asking for status. \n\
-  echo $! > $pidfile \n\
-  echo "$name started." \n\
-  return 0 \n\
-} \n\
-stop() { \n\
-      # Try a few times to kill TERM the program \n\
-  if status ; then \n\
-    pid=`cat "$pidfile"` \n\
-    echo "Killing $name (pid $pid) with SIGTERM" \n\
-  kill -9 $pid \n\
-    # Wait for it to exit. \n\
-    for i in 1 2 3 4 5 ; do \n\
-      echo "Waiting $name (pid $pid) to die..." \n\
-      status || break \n\
-      sleep 1 \n\
-    done \n\
-    if status ; then \n\
-      echo "$name stop failed; still running." \n\
-    else \n\
-      echo "$name stopped." \n\
-    fi \n\
-  fi \n\
-} \n\
-restart() { \n\
-    stop \n\
-    start \n\
-} \n\
-reload() { \n\
-    restart \n\
-} \n\
-force_reload() { \n\
-    restart \n\
-} \n\
-status(){ \n\
-  if [ -f "$pidfile" ] ; then \n\
-    pid=`cat "$pidfile"` \n\
-    if kill -0 $pid > /dev/null 2> /dev/null ; then \n\
-      # process by this pid is running. \n\
-      # It may not be our pid, but thats what you get with just pidfiles. \n\
-      # TODO(sissel): Check if this process seems to be the same as the one we \n\
-      # expect. Itd be nice to use flock here, but flock uses fork, not exec, \n\
-      # so it makes it quite awkward to use in this case. \n\
-      return 0 \n\
-    else \n\
-      return 2 # program is dead but pid file exists \n\
-    fi \n\
-  else \n\
-    return 3 # program is not running \n\
-  fi \n\
-} \n\
-rh_status() { \n\
-    # run checks to determine if the service is running or use generic status \n\
-    status -p $pidfile $prog \n\
-} \n\
-rh_status_q() { \n\
-    rh_status >/dev/null 2>&1 \n\
-} \n\
-case "$1" in \n\
-    start) \n\
-        rh_status_q && exit 0 \n\
-        $1 \n\
-        ;; \n\
-    stop) \n\
-        rh_status_q || exit 0 \n\
-        $1 \n\
-        ;; \n\
-    restart) \n\
-        $1 \n\
-        ;; \n\
-    reload) \n\
-        rh_status_q || exit 7 \n\
-        $1 \n\
-        ;; \n\
-    force-reload) \n\
-        force_reload \n\
-        ;; \n\
-    status) \n\
-     status \n\
-    code=$? \n\
-    if [ $code -eq 0 ] ; then \n\
-      echo "$prog is running" \n\
-    else \n\
-      echo "$prog is not running" \n\
-    fi \n\
-    exit $code \n\
-        ;; \n\
-    condrestart|try-restart) \n\
-        rh_status_q || exit 0 \n\
-        restart \n\
-        ;; \n\
-    *) \n\
-        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}" \n\
-        exit 2 \n\
-esac' > /etc/init.d/hekad
-RUN chmod +x /etc/init.d/hekad
-
-EXPOSE 80 443
-ADD run.sh /
-ENTRYPOINT /run.sh
diff --git a/infrastructure/docker/traffic_server_edge/run.sh b/infrastructure/docker/traffic_server_edge/run.sh
deleted file mode 100755
index ad28550d6a..0000000000
--- a/infrastructure/docker/traffic_server_edge/run.sh
+++ /dev/null
@@ -1,104 +0,0 @@
-#!/bin/bash
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-
-# Script for running the Dockerfile for Traffic Server Edge caches.
-# The Dockerfile sets up a Docker image which can be used for any new container;
-# This script, which should be run when the container is run (it's the ENTRYPOINT), will configure the container.
-#
-# The following environment variables must be set (ordinarily by `docker run -e` arguments):
-# TRAFFIC_OPS_URI
-# TRAFFIC_OPS_USER
-# TRAFFIC_OPS_PASS
-# IP
-# DOMAIN
-# GATEWAY
-# KAFKA_URI
-
-start() {
-	chown ats:ats /dev/ram0
-	chown ats:ats /dev/ram1
-
-	/opt/trafficserver/bin/trafficserver start
-	service hekad start
-	exec tail -f /opt/trafficserver/var/log/trafficserver/traffic_server.stderr
-}
-
-init() {
-	TMP_TO_COOKIE="$(curl -v -s -k -X POST --data '{ "u":"'"$TRAFFIC_OPS_USER"'", "p":"'"$TRAFFIC_OPS_PASS"'" }' $TRAFFIC_OPS_URI/api/4.0/user/login 2>&1 | grep 'Set-Cookie' | sed -e 's/.*mojolicious=\(.*\); expires.*/\1/')"
-	echo "Got Cookie: $TMP_TO_COOKIE"
-
-	# \todo figure out a better way to get the IP, domain (Docker network name), gateway
-  TMP_IP=$IP
-	TMP_DOMAIN=$DOMAIN
-	TMP_GATEWAY=$GATEWAY
-
-	TMP_CACHEGROUP_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/cachegroups.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="edge-east"]; print match[0]')"		
-	echo "Got cachegroup ID: $TMP_CACHEGROUP_ID"
-
-	TMP_SERVER_TYPE_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/types.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="EDGE"]; print match[0]')"
-	echo "Got server type ID: $TMP_SERVER_TYPE_ID"
-
-	TMP_SERVER_PROFILE_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/profiles.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="EDGE1_532"]; print match[0]')"
-	echo "Got server profile ID: $TMP_SERVER_PROFILE_ID"
-
-	TMP_PHYS_LOCATION_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/phys_locations.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="plocation-nyc-1"]; print match[0]')"
-	echo "Got phys location ID: $TMP_PHYS_LOCATION_ID"
-
-	TMP_CDN_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/cdns.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="cdn"]; print match[0]')"
-	echo "Got cdn ID: $TMP_CDN_ID"
-
-	curl -v -k -X POST -H "Cookie: mojolicious=$TMP_TO_COOKIE" --data-urlencode "host_name=$HOSTNAME" --data-urlencode "domain_name=$TMP_DOMAIN" --data-urlencode "interface_name=eth0" --data-urlencode "ip_address=$TMP_IP" --data-urlencode "ip_netmask=255.255.0.0" --data-urlencode "ip_gateway=$TMP_GATEWAY" --data-urlencode "interface_mtu=9000" --data-urlencode "cdn=$TMP_CDN_ID" --data-urlencode "cachegroup=$TMP_CACHEGROUP_ID" --data-urlencode "phys_location=$TMP_PHYS_LOCATION_ID" --data-urle [...]
-
-	TMP_SERVER_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/servers.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["hostName"]=="'"$HOSTNAME"'"]; print match[0]')"
-	echo "Got server ID: $TMP_SERVER_ID"
-
-	curl -v -k -H "Content-Type: application/x-www-form-urlencoded" -H "Cookie: mojolicious=$TMP_TO_COOKIE" -X POST --data-urlencode "id=$TMP_SERVER_ID" --data-urlencode "status=REPORTED" $TRAFFIC_OPS_URI/server/updatestatus
-
-	export PERL5LIB=/usr/local/lib/neto_io/lib/perl5 && \
-  		/opt/ort/traffic_ops_ort.pl badass WARN $TRAFFIC_OPS_URI $TRAFFIC_OPS_USER:$TRAFFIC_OPS_PASS
-
-	# if the container wasn't given ramdisk devices, configure ATS for directories
-	if [ ! -e "/dev/ram0" ] || [ ! -e "/dev/ram1" ]; then
-			sed -i -- "s/volume=/1G volume=/g" /opt/trafficserver/etc/trafficserver/storage.config
-
-			mkdir /atscache
-			chmod 777 /atscache
-			chown ats:ats /atscache
-
-			mkdir /atscache/disk0
-			chmod 777 /atscache/disk0
-			chown ats:ats /atscache/disk0
-			ln -s /atscache/disk0 /dev/ram0
-
-			mkdir /atscache/disk1
-			chmod 777 /atscache/disk1
-			chown ats:ats /atscache/disk1
-			ln -s /atscache/disk1 /dev/ram1
-	fi
-
-	# \todo remove when TO/ort is changed from 1%
-	sed -i -- "s/size=1%/size=50%/g" /opt/trafficserver/etc/trafficserver/volume.config
-
-	sed -i -- "s/{{.KafkaUri}}/$KAFKA_URI/g" /etc/hekad/heka.toml
-
-	echo "INITIALIZED=1" >> /etc/environment
-}
-
-source /etc/environment
-if [ -z "$INITIALIZED" ]; then init; fi
-start
diff --git a/infrastructure/docker/traffic_server_mid/Dockerfile b/infrastructure/docker/traffic_server_mid/Dockerfile
deleted file mode 100644
index 612b78e5b1..0000000000
--- a/infrastructure/docker/traffic_server_mid/Dockerfile
+++ /dev/null
@@ -1,74 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-############################################################
-# Dockerfile to build Traffic Server container images
-#   as Mids for Traffic Control 1.4
-# Based on CentOS 6.6
-############################################################
-
-# For cache, you may either use (RAM or disk) block devices or disk directories
-# To use RAM block devices, pass them as /dev/ram0 and /dev/ram1 via `docker run --device`
-# To use disk directories, simply don't pass devices, and the container will configure Traffic Server for directories
-
-# Block devices may be created on the native machine with, for example, `modprobe brd`.
-# The recommended minimum size for each block devices is 1G.
-# For example, `sudo modprobe brd rd_size=1048576 rd_nr=2`
-
-# Example Build and Run:
-#
-# docker build --rm --tag traffic_server_mid:1.4 traffic_server_mid
-#
-# docker run --name my-mid-0 --hostname my-mid-0 --net cdnet --device /dev/ram0:/dev/ram0 --device /dev/ram1:/dev/ram1 --env TRAFFIC_OPS_URI=http://my-traffic-ops:3000 --env TRAFFIC_OPS_USER=superroot --env TRAFFIC_OPS_PASS=supersecreterpassward --detach traffic_server_mid:1.4
-#
-# OR
-#
-# docker run --name my-mid-0 --hostname my-mid-0 --net cdnet --env TRAFFIC_OPS_URI=http://my-traffic-ops:3000 --env TRAFFIC_OPS_USER=superroot --env TRAFFIC_OPS_PASS=supersecreterpassward --detach traffic_server_mid:1.4
-
-FROM centos:6.6
-MAINTAINER dev@trafficcontrol.apache.org
-
-RUN yum install -y perl-JSON
-
-RUN curl -O http://traffic-control-cdn.net/downloads/trafficserver-5.3.2-599.089d585.el6.x86_64.rpm
-RUN yum install -y trafficserver-5.3.2-599.089d585.el6.x86_64.rpm
-
-RUN mkdir /opt/ort
-RUN cd /opt/ort && curl -LO https://github.com/apache/trafficcontrol/raw/RELEASE-1.4.0-RC0/traffic_ops/bin/traffic_ops_ort.pl
-RUN chmod +x /opt/ort/traffic_ops_ort.pl
-RUN yum install -y "perl(JSON)"
-RUN curl -O http://traffic-control-cdn.net/downloads/astats_over_http-1.2-8.el6.x86_64.rpm
-RUN yum install -y astats_over_http-1.2-8.el6.x86_64.rpm
-
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/traffic_cop
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/traffic_crashlog
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/traffic_ctl
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/traffic_layout
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/traffic_line
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/traffic_logcat
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/traffic_logstats
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/traffic_manager
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/traffic_sac
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/trafficserver
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/traffic_server
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/traffic_top
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/traffic_via
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/tspush
-RUN setcap 'cap_net_bind_service=+ep' /opt/trafficserver/bin/tsxs
-
-EXPOSE 80 443
-ADD run.sh /
-ENTRYPOINT /run.sh
diff --git a/infrastructure/docker/traffic_server_mid/run.sh b/infrastructure/docker/traffic_server_mid/run.sh
deleted file mode 100755
index 481c854106..0000000000
--- a/infrastructure/docker/traffic_server_mid/run.sh
+++ /dev/null
@@ -1,97 +0,0 @@
-#!/bin/bash
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-
-# Script for running the Dockerfile for Traffic Server Mid caches.
-# The Dockerfile sets up a Docker image which can be used for any new container;
-# This script, which should be run when the container is run (it's the ENTRYPOINT), will configure the container.
-#
-# The following environment variables must be set (ordinarily by `docker run -e` arguments):
-# TRAFFIC_OPS_URI
-# TRAFFIC_OPS_USER
-# TRAFFIC_OPS_PASS
-
-start() {
-	/opt/trafficserver/bin/trafficserver start
-	exec tail -f /opt/trafficserver/var/log/trafficserver/traffic_server.stderr
-}
-
-init() {
-	TMP_TO_COOKIE="$(curl -v -s -k -X POST --data '{ "u":"'"$TRAFFIC_OPS_USER"'", "p":"'"$TRAFFIC_OPS_PASS"'" }' $TRAFFIC_OPS_URI/api/4.0/user/login 2>&1 | grep 'Set-Cookie' | sed -e 's/.*mojolicious=\(.*\); expires.*/\1/')"
-	echo "Got Cookie: $TMP_TO_COOKIE"
-
-	# \todo figure out a better way to get the IP, domain (Docker network name), gateway
-  TMP_IP=$IP
-	TMP_DOMAIN=$DOMAIN
-	TMP_GATEWAY=$GATEWAY
-
-	TMP_CACHEGROUP_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/cachegroups.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="mid-east"]; print match[0]')"		
-	echo "Got cachegroup ID: $TMP_CACHEGROUP_ID"
-
-	TMP_SERVER_TYPE_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/types.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="MID"]; print match[0]')"
-	echo "Got server type ID: $TMP_SERVER_TYPE_ID"
-
-	TMP_SERVER_PROFILE_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/profiles.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="MID1_532"]; print match[0]')"
-	echo "Got server profile ID: $TMP_SERVER_PROFILE_ID"
-
-	TMP_PHYS_LOCATION_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/phys_locations.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="plocation-nyc-1"]; print match[0]')"
-	echo "Got phys location ID: $TMP_PHYS_LOCATION_ID"
-
-	TMP_CDN_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/cdns.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="cdn"]; print match[0]')"
-	echo "Got cdn ID: $TMP_CDN_ID"
-
-	curl -v -k -X POST -H "Cookie: mojolicious=$TMP_TO_COOKIE" --data-urlencode "host_name=$HOSTNAME" --data-urlencode "domain_name=$TMP_DOMAIN" --data-urlencode "interface_name=eth0" --data-urlencode "ip_address=$TMP_IP" --data-urlencode "ip_netmask=255.255.0.0" --data-urlencode "ip_gateway=$TMP_GATEWAY" --data-urlencode "interface_mtu=9000" --data-urlencode "cdn=$TMP_CDN_ID" --data-urlencode "cachegroup=$TMP_CACHEGROUP_ID" --data-urlencode "phys_location=$TMP_PHYS_LOCATION_ID" --data-urle [...]
-
-	TMP_SERVER_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/servers.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["hostName"]=="'"$HOSTNAME"'"]; print match[0]')"
-	echo "Got server ID: $TMP_SERVER_ID"
-
-	curl -v -k -H "Content-Type: application/x-www-form-urlencoded" -H "Cookie: mojolicious=$TMP_TO_COOKIE" -X POST --data-urlencode "id=$TMP_SERVER_ID" --data-urlencode "status=ONLINE" $TRAFFIC_OPS_URI/server/updatestatus
-
-	export PERL5LIB=/usr/local/lib/neto_io/lib/perl5 && \
-  	/opt/ort/traffic_ops_ort.pl badass WARN $TRAFFIC_OPS_URI $TRAFFIC_OPS_USER:$TRAFFIC_OPS_PASS
-
-	# if the container wasn't given ramdisk devices, configure ATS for directories
-	if [ ! -e "/dev/ram0" ] || [ ! -e "/dev/ram1" ]; then
-			sed -i -- "s/volume=/1G volume=/g" /opt/trafficserver/etc/trafficserver/storage.config
-
-			mkdir /atscache
-			chmod 777 /atscache
-			chown ats:ats /atscache
-
-			mkdir /atscache/disk0
-			chmod 777 /atscache/disk0
-			chown ats:ats /atscache/disk0
-			ln -s /atscache/disk0 /dev/ram0
-
-			mkdir /atscache/disk1
-			chmod 777 /atscache/disk1
-			chown ats:ats /atscache/disk1
-			ln -s /atscache/disk1 /dev/ram1
-	fi
-
-	# \todo remove when TO/ort is changed from 1%
-	sed -i -- "s/size=1%/size=40%/g" /opt/trafficserver/etc/trafficserver/volume.config
-
-	chown ats:ats /dev/ram0
-	chown ats:ats /dev/ram1
-
-	echo "INITIALIZED=1" >> /etc/environment
-}
-
-source /etc/environment
-if [ -z "$INITIALIZED" ]; then init; fi
-start
diff --git a/infrastructure/docker/traffic_stats/Dockerfile b/infrastructure/docker/traffic_stats/Dockerfile
deleted file mode 100644
index d8de0f639b..0000000000
--- a/infrastructure/docker/traffic_stats/Dockerfile
+++ /dev/null
@@ -1,46 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-############################################################
-# Dockerfile to build Traffic Stats 1.4 container images
-# Based on CentOS 6.6
-############################################################
-
-# Example Build and Run:
-# docker build --rm --tag traffic_stats:1.6 Traffic_Stats
-#
-# docker run --name my-traffic-stats --hostname my-traffic-stats --net cdnet --env TRAFFIC_OPS_URI=http://my-traffic-ops:3000 --env TRAFFIC_OPS_USER=superroot --env TRAFFIC_OPS_PASS=supersecreterpassward --env CERT_COUNTRY=US --env CERT_STATE=Colorado --env CERT_CITY=Denver --env CERT_COMPANY=Kabletown --detach traffic_stats:1.4
-
-FROM centos:6.6
-MAINTAINER dev@trafficcontrol.apache.org
-
-# Default value for RPM -- override with `docker build --build-arg RPM=...'
-ARG INFLUXDB=http://influxdb.s3.amazonaws.com/influxdb-0.11.1-1.x86_64.rpm
-ARG GRAFANA=https://grafanarel.s3.amazonaws.com/builds/grafana-3.1.1-1470047149.x86_64.rpm
-ARG RPM=http://traffic-control-cdn.net/downloads/1.6.0/RELEASE-1.6.0/traffic_stats-1.6.0-3503.4899d302.x86_64.rpm
-
-RUN yum install -y tar unzip perl-JSON perl-WWW-Curl
-
-ADD $INFLUXDB /
-ADD $GRAFANA /
-ADD $RPM /
-
-RUN yum install -y /$(basename $INFLUXDB) /$(basename $RPM) /$(basename $GRAFANA)
-RUN rm /$(basename $INFLUXDB) /$(basename $RPM) /$(basename $GRAFANA)
-
-EXPOSE 80 8086 8083
-ADD run.sh /
-ENTRYPOINT /run.sh
diff --git a/infrastructure/docker/traffic_stats/run.sh b/infrastructure/docker/traffic_stats/run.sh
deleted file mode 100755
index b1559aaafc..0000000000
--- a/infrastructure/docker/traffic_stats/run.sh
+++ /dev/null
@@ -1,134 +0,0 @@
-#!/bin/bash
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-
-# Script for running the Dockerfile for Traffic Stats.
-# The Dockerfile sets up a Docker image which can be used for any new container;
-# This script, which should be run when the container is run (it's the ENTRYPOINT), will configure the container.
-#
-# The following environment variables must be set (ordinarily by `docker run -e` arguments):
-# TRAFFIC_OPS_URI
-# TRAFFIC_OPS_USER
-# TRAFFIC_OPS_PASS
-# CERT_COUNTRY
-# CERT_STATE
-# CERT_CITY
-# CERT_COMPANY
-
-start() {
-	service influxdb start
-	service traffic_stats start
-	service grafana-server start
-	touch /opt/traffic_stats/var/log/traffic_stats/traffic_stats.log
-	exec tail -f /opt/traffic_stats/var/log/traffic_stats/traffic_stats.log
-}
-
-init() {
-	TMP_TO_COOKIE="$(curl -v -s -k -X POST --data '{ "u":"'"$TRAFFIC_OPS_USER"'", "p":"'"$TRAFFIC_OPS_PASS"'" }' $TRAFFIC_OPS_URI/api/4.0/user/login 2>&1 | grep 'Set-Cookie' | sed -e 's/.*mojolicious=\(.*\); expires.*/\1/')"
-	echo "Got Cookie: $TMP_TO_COOKIE"
-
-	TMP_IP=$IP
-	TMP_DOMAIN=$DOMAIN
-	TMP_GATEWAY=$GATEWAY
-
-	if [ "$CREATE_TO_DB_ENTRY" = "YES" ] ; then
-
-		TMP_CACHEGROUP_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/cachegroups.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="mid-east"]; print match[0]')"
-		echo "Got cachegroup ID: $TMP_CACHEGROUP_ID"
-
-		TMP_SERVER_TYPE_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/types.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="INFLUXDB"]; print match[0]')"
-		echo "Got server type ID: $TMP_SERVER_TYPE_ID"
-
-		TMP_SERVER_PROFILE_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/profiles.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="INFLUXDB"]; print match[0]')"
-		echo "Got server profile ID: $TMP_SERVER_PROFILE_ID"
-
-		TMP_PHYS_LOCATION_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/phys_locations.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="plocation-nyc-1"]; print match[0]')"
-		echo "Got phys location ID: $TMP_PHYS_LOCATION_ID"
-
-		TMP_CDN_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/cdns.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="cdn"]; print match[0]')"
-		echo "Got cdn ID: $TMP_CDN_ID"
-
-		curl -v -k -X POST -H "Cookie: mojolicious=$TMP_TO_COOKIE" --data-urlencode "host_name=$HOSTNAME" --data-urlencode "domain_name=$TMP_DOMAIN" --data-urlencode "interface_name=eth0" --data-urlencode "ip_address=$TMP_IP" --data-urlencode "ip_netmask=255.255.0.0" --data-urlencode "ip_gateway=$TMP_GATEWAY" --data-urlencode "interface_mtu=9000" --data-urlencode "cdn=$TMP_CDN_ID" --data-urlencode "cachegroup=$TMP_CACHEGROUP_ID" --data-urlencode "phys_location=$TMP_PHYS_LOCATION_ID" --data-url [...]
-
-	fi 
-
-	TMP_SERVER_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/servers.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["hostName"]=="'"$HOSTNAME"'"]; print match[0]')"
-	echo "Got server ID: $TMP_SERVER_ID"
-
-	curl -v -k -H "Content-Type: application/x-www-form-urlencoded" -H "Cookie: mojolicious=$TMP_TO_COOKIE" -X POST --data-urlencode "id=$TMP_SERVER_ID" --data-urlencode "status=ONLINE" $TRAFFIC_OPS_URI/server/updatestatus
-
-	sed -i -- 's/"toUser": "admin"/"toUser": "'"$TRAFFIC_OPS_USER"'"/g' /opt/traffic_stats/conf/traffic_stats.cfg
-	sed -i -- 's/"toPasswd": ""/"toPasswd": "'"$TRAFFIC_OPS_PASS"'"/g' /opt/traffic_stats/conf/traffic_stats.cfg
-	sed -i -- 's#"toUrl": "https://localhost"#"toUrl": "'"$TRAFFIC_OPS_URI"'"#g' /opt/traffic_stats/conf/traffic_stats.cfg
-
-	openssl req -newkey rsa:2048 -nodes -keyout /etc/ssl/influxdb.key -x509 -days 365 -out /etc/ssl/influxdb.crt -subj "/C=$CERT_COUNTRY/ST=$CERT_STATE/L=$CERT_CITY/O=$CERT_COMPANY"
-
-	cat /etc/ssl/influxdb.key /etc/ssl/influxdb.crt > /etc/ssl/influxdb.pem
-
-	service influxdb start
-
-	sleep 10
-
-	influx -execute 'create database cache_stats'
-	influx -execute 'create database deliveryservice_stats'
-	influx -execute 'create database daily_stats'
-	influx -execute 'create retention policy daily on cache_stats duration 26h replication 3 DEFAULT'
-	influx -execute 'create retention policy daily on deliveryservice_stats duration 26h replication 3 DEFAULT'
-	influx -execute 'create retention policy monthly on cache_stats duration 30d replication 3 DEFAULT'
-	influx -execute 'create retention policy monthly on deliveryservice_stats duration 30d replication 3 DEFAULT'
-	influx -execute 'create retention policy indefinite on daily_stats duration INF replication 3 DEFAULT'
-
-	influx --execute 'CREATE CONTINUOUS QUERY bandwidth_1min ON cache_stats BEGIN SELECT mean(value) AS "value" INTO "cache_stats"."monthly"."bandwidth.1min" FROM "cache_stats"."daily".bandwidth GROUP BY time(1m), * END'
-	influx --execute 'CREATE CONTINUOUS QUERY connections_1min ON cache_stats BEGIN SELECT mean(value) AS "value" INTO "cache_stats"."monthly"."connections.1min" FROM "cache_stats"."daily"."ats.proxy.process.http.current_client_connections" GROUP BY time(1m), * END'
-	influx --execute 'CREATE CONTINUOUS QUERY bandwidth_cdn_1min ON cache_stats BEGIN SELECT sum(value) AS "value" INTO "cache_stats"."monthly"."bandwidth.cdn.1min" FROM "cache_stats"."monthly"."bandwidth.1min" GROUP BY time(1m), cdn END'
-	influx --execute 'CREATE CONTINUOUS QUERY connections_cdn_1min ON cache_stats BEGIN SELECT sum(value) AS "value" INTO "cache_stats"."monthly"."connections.cdn.1min" FROM "cache_stats"."monthly"."connections.1min" GROUP BY time(1m), cdn END'
-	influx --execute 'CREATE CONTINUOUS QUERY bandwidth_cdn_type_1min ON cache_stats RESAMPLE FOR 5m BEGIN SELECT sum(value) AS "value" INTO "cache_stats"."monthly"."bandwidth.cdn.type.1min" FROM "cache_stats"."monthly"."bandwidth.1min" GROUP BY time(1m), cdn, type END'
-	influx --execute 'CREATE CONTINUOUS QUERY connections_cdn_type_1min ON cache_stats RESAMPLE FOR 5m BEGIN SELECT sum(value) AS "value" INTO "cache_stats"."monthly"."connections.cdn.type.1min" FROM "cache_stats"."monthly"."connections.1min" GROUP BY time(1m), cdn, type END'
-	influx --execute 'CREATE CONTINUOUS QUERY maxKbps_1min ON cache_stats RESAMPLE FOR 2m BEGIN SELECT mean(value) AS value INTO cache_stats.monthly."maxkbps.1min" FROM cache_stats.daily.maxKbps GROUP BY time(1m), * END'
-	influx --execute 'CREATE CONTINUOUS QUERY maxkbps_cdn_1min ON cache_stats RESAMPLE FOR 5m BEGIN SELECT sum(value) AS value INTO cache_stats.monthly."maxkbps.cdn.1min" FROM cache_stats.monthly."maxkbps.1min" GROUP BY time(1m), cdn END'
-
-	influx --execute 'CREATE CONTINUOUS QUERY tps_2xx_ds_1min ON deliveryservice_stats BEGIN SELECT mean(value) AS "value" INTO "deliveryservice_stats"."monthly"."tps_2xx.ds.1min" FROM "deliveryservice_stats"."daily".tps_2xx WHERE cachegroup = '"'total'"' GROUP BY time(1m), * END'
-	influx --execute 'CREATE CONTINUOUS QUERY tps_3xx_ds_1min ON deliveryservice_stats BEGIN SELECT mean(value) AS "value" INTO "deliveryservice_stats"."monthly"."tps_3xx.ds.1min" FROM "deliveryservice_stats"."daily".tps_3xx WHERE cachegroup = '"'total'"' GROUP BY time(1m), * END'
-	influx --execute 'CREATE CONTINUOUS QUERY tps_4xx_ds_1min ON deliveryservice_stats BEGIN SELECT mean(value) AS "value" INTO "deliveryservice_stats"."monthly"."tps_4xx.ds.1min" FROM "deliveryservice_stats"."daily".tps_4xx WHERE cachegroup = '"'total'"' GROUP BY time(1m), * END'
-	influx --execute 'CREATE CONTINUOUS QUERY tps_5xx_ds_1min ON deliveryservice_stats BEGIN SELECT mean(value) AS "value" INTO "deliveryservice_stats"."monthly"."tps_5xx.ds.1min" FROM "deliveryservice_stats"."daily".tps_5xx WHERE cachegroup = '"'total'"' GROUP BY time(1m), * END'
-	influx --execute 'CREATE CONTINUOUS QUERY tps_total_ds_1min ON deliveryservice_stats BEGIN SELECT mean(value) AS "value" INTO "deliveryservice_stats"."monthly"."tps_total.ds.1min" FROM "deliveryservice_stats"."daily".tps_total WHERE cachegroup = '"'total'"' GROUP BY time(1m), * END'
-	influx --execute 'CREATE CONTINUOUS QUERY kbps_ds_1min ON deliveryservice_stats BEGIN SELECT mean(value) AS "value" INTO "deliveryservice_stats"."monthly"."kbps.ds.1min" FROM "deliveryservice_stats"."daily".kbps WHERE cachegroup = '"'total'"' GROUP BY time(1m), * END'
-	influx --execute 'CREATE CONTINUOUS QUERY kbps_cg_1min ON deliveryservice_stats BEGIN SELECT mean(value) AS "value" INTO "deliveryservice_stats"."monthly"."kbps.cg.1min" FROM "deliveryservice_stats"."daily".kbps WHERE cachegroup != '"'total'"' GROUP BY time(1m), * END'
-	influx --execute 'CREATE CONTINUOUS QUERY max_kbps_ds_1day ON deliveryservice_stats BEGIN SELECT max(value) AS "value" INTO "deliveryservice_stats"."indefinite"."max.kbps.ds.1day" FROM "deliveryservice_stats"."monthly"."kbps.ds.1min" GROUP BY time(1d), deliveryservice, cdn END'
-
-	service influxdb stop
-
-	sed -i -- 's/;protocol = http/protocol = https/g' /etc/grafana/grafana.ini
-	sed -i -- 's/;http_port = 3000/http_port = 1443/g' /etc/grafana/grafana.ini
-	sed -i -- 's#;cert_file =#cert_file = /etc/ssl/influxdb.crt#g' /etc/grafana/grafana.ini
-	sed -i -- 's#;cert_key =#cert_key = /etc/ssl/influxdb.key#g' /etc/grafana/grafana.ini
-	sed -i -n '1h;1!H;${g;s/access\n;enabled = false/access\nenabled = true/;p;}' /etc/grafana/grafana.ini
-
-	service grafana-server start
-	curl -k -H "Content-Type: application/json" -X POST https://admin:admin@localhost:1443/api/datasources -d '{"name":"cache_stats","type":"influxdb","url":"http://c28-ts-01.cdnlab.comcast.net:8086","access":"proxy","jsonData":{},"database":"cache_stats","user":"foo","password":"fooo"}'
-	curl -k -H "Content-Type: application/json" -X POST https://admin:admin@localhost:1443/api/datasources -d '{"name":"deliveryservice_stats","type":"influxdb","url":"http://c28-ts-01.cdnlab.comcast.net:8086","access":"proxy","jsonData":{},"database":"deliveryservice_stats","user":"foo","password":"fooo"}'
-	curl -k -H "Content-Type: application/json" -X POST https://admin:admin@localhost:1443/api/datasources -d '{"name":"telegraf","type":"influxdb","url":"http://c28-ts-01.cdnlab.comcast.net:8086","access":"proxy","jsonData":{},"database":"telegraf","user":"foo","password":"fooo"}'
-	curl -k -H "Content-Type: application/json" -X POST https://admin:admin@localhost:1443/api/datasources -d '{"name":"daily_stats","type":"influxdb","url":"http://c28-ts-01.cdnlab.comcast.net:8086","access":"proxy","jsonData":{},"database":"cache_stats","user":"foo","password":"fooo"}'
-	service grafana-server stop
-
-
-	echo "INITIALIZED=1" >> /etc/environment
-}
-
-source /etc/environment
-if [ -z "$INITIALIZED" ]; then init; fi
-start
diff --git a/infrastructure/docker/traffic_vault/Dockerfile b/infrastructure/docker/traffic_vault/Dockerfile
deleted file mode 100644
index a62c338f03..0000000000
--- a/infrastructure/docker/traffic_vault/Dockerfile
+++ /dev/null
@@ -1,53 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-############################################################
-# Dockerfile to build Riak container images
-#   as Traffic Vault for Traffic Control 1.6.0
-# Based on CentOS 6.6
-############################################################
-
-# Example Build and Run:
-# docker build --rm --tag traffic_vault:1.6.0 traffic_vault
-# docker run --name my-traffic-vault --hostname my-traffic-vault --net cdnet --env ADMIN_PASS=riakadminsecret --env USER_PASS=marginallylesssecret --env CERT_COUNTRY=US --env CERT_STATE=Colorado --env CERT_CITY=Denver --env CERT_COMPANY=Kabletown --env TRAFFIC_OPS_URI=http://my-traffic-ops:3000 --env TRAFFIC_OPS_USER=superroot --env TRAFFIC_OPS_PASS=supersecreterpassward --env DOMAIN=cdnet --detach traffic_vault:1.6.0
-
-FROM centos:6.6
-MAINTAINER dev@trafficcontrol.apache.org
-
-ARG ADMIN_PASS
-ARG USER_PASS
-
-# download and install Riak
-RUN curl -s https://packagecloud.io/install/repositories/basho/riak/script.rpm.sh | bash
-RUN yum install -y riak-2.1.1-1.el6.x86_64
-
-# Set the Riak certs in the config (this cert+key will be created in the run.sh script
-RUN sed -i -- 's/## ssl.certfile = $(platform_etc_dir)\/cert.pem/ssl.certfile = \/etc\/riak\/certs\/server.crt/g' /etc/riak/riak.conf
-RUN sed -i -- 's/## ssl.keyfile = $(platform_etc_dir)\/key.pem/ssl.keyfile = \/etc\/riak\/certs\/server.key/g' /etc/riak/riak.conf
-RUN sed -i -- 's/## ssl.cacertfile = $(platform_etc_dir)\/cacertfile.pem/ssl.cacertfile = \/etc\/riak\/certs\/ca-bundle.crt/g' /etc/riak/riak.conf
-
-RUN sed -i -- "s/nodename = riak@127.0.0.1/nodename = riak@0.0.0.0/g" /etc/riak/riak.conf
-RUN sed -i -- "s/listener.http.internal = 127.0.0.1:8098/listener.http.internal = 0.0.0.0:8098/g" /etc/riak/riak.conf
-RUN sed -i -- "s/listener.protobuf.internal = 127.0.0.1:8087/listener.protobuf.internal = 0.0.0.0:8087/g" /etc/riak/riak.conf
-RUN sed -i -- "s/## listener.https.internal = 127.0.0.1:8098/listener.https.internal = 0.0.0.0:8088/g" /etc/riak/riak.conf
-
-RUN mkdir /etc/riak/certs
-
-RUN echo "tls_protocols.tlsv1.1 = on" >> /etc/riak/riak.conf
-
-EXPOSE 8098 8087 8088
-ADD run.sh /
-ENTRYPOINT /run.sh
diff --git a/infrastructure/docker/traffic_vault/run.sh b/infrastructure/docker/traffic_vault/run.sh
deleted file mode 100755
index 26010493c4..0000000000
--- a/infrastructure/docker/traffic_vault/run.sh
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/bin/bash
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-
-# Script for running the Dockerfile for Traffic Vault.
-# The Dockerfile sets up a Docker image which can be used for any new container;
-# This script, which should be run when the container is run (it's the ENTRYPOINT), will configure the container.
-#
-# The following environment variables must be set (ordinarily by `docker run -e` arguments):
-# ADMIN_PASS
-# USER_PASS
-# CERT_COUNTRY
-# CERT_STATE
-# CERT_CITY
-# CERT_COMPANY
-# TRAFFIC_OPS_URI
-# TRAFFIC_OPS_USER
-# TRAFFIC_OPS_PASS
-# DOMAIN
-# IP
-# GATEWAY
-# CREATE_TO_DB_ENTRY (If set to yes, create the TO db entry for this server if set to no, assume it it already there)
-
-start() {
-	/etc/init.d/riak restart
-	exec tail -f /var/log/riak/console.log
-}
-
-init() {
-	TMP_TO_COOKIE="$(curl -v -s -k -X POST --data '{ "u":"'"$TRAFFIC_OPS_USER"'", "p":"'"$TRAFFIC_OPS_PASS"'" }' $TRAFFIC_OPS_URI/api/4.0/user/login 2>&1 | grep 'Set-Cookie' | sed -e 's/.*mojolicious=\(.*\); expires.*/\1/')"
-	echo "Got Cookie: $TMP_TO_COOKIE"
-#	curl -v -k -X POST -H "Cookie: mojolicious=$TMP_TO_COOKIE" -F "filename=profile.traffic_vault.traffic_ops" -F "profile_to_import=@/profile.traffic_vault.traffic_ops" $TRAFFIC_OPS_URI/profile/doImport	
-
-	# \todo figure out a better way to get the IP, domain (Docker network name), gateway
-	TMP_IP=$IP
-	TMP_DOMAIN=$DOMAIN
-	TMP_GATEWAY=$GATEWAY
-
-	echo "Got IP: $TMP_IP"
-	echo "Got Domain: $TMP_DOMAIN"
-	echo "Got Gateway: $TMP_GATEWAY"
-
-	if [ "$CREATE_TO_DB_ENTRY" = "YES" ] ; then
-		TMP_CACHEGROUP_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/cachegroups.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="mid-east"]; print match[0]')"
-		echo "Got cachegroup ID: $TMP_CACHEGROUP_ID"
-	
-		TMP_SERVER_TYPE_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/types.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="RIAK"]; print match[0]')"
-		echo "Got server type ID: $TMP_SERVER_TYPE_ID"
-	
-		TMP_SERVER_PROFILE_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/profiles.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="RIAK_ALL"]; print match[0]')"
-		echo "Got server profile ID: $TMP_SERVER_PROFILE_ID"
-	
-		TMP_PHYS_LOCATION_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/phys_locations.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="plocation-nyc-1"]; print match[0]')"
-		echo "Got phys location ID: $TMP_PHYS_LOCATION_ID"
-	
-		TMP_CDN_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/cdns.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["name"]=="cdn"]; print match[0]')"
-		echo "Got cdn ID: $TMP_CDN_ID"
-	
-		curl -v -k -X POST -H "Cookie: mojolicious=$TMP_TO_COOKIE" --data-urlencode "host_name=$HOSTNAME" --data-urlencode "domain_name=$TMP_DOMAIN" --data-urlencode "interface_name=eth0" --data-urlencode "ip_address=$TMP_IP" --data-urlencode "ip_netmask=255.255.0.0" --data-urlencode "ip_gateway=$TMP_GATEWAY" --data-urlencode "interface_mtu=9000" --data-urlencode "cdn=$TMP_CDN_ID" --data-urlencode "cachegroup=$TMP_CACHEGROUP_ID" --data-urlencode "phys_location=$TMP_PHYS_LOCATION_ID" --data-url [...]
-
-	fi
-
-	TMP_SERVER_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TMP_TO_COOKIE" $TRAFFIC_OPS_URI/api/4.0/servers.json | python -c 'import json,sys;obj=json.load(sys.stdin);match=[x["id"] for x in obj["response"] if x["hostName"]=="'"$HOSTNAME"'"]; print match[0]')"
-	echo "Got server ID: $TMP_SERVER_ID"
-
-	curl -v -k -H "Content-Type: application/x-www-form-urlencoded" -H "Cookie: mojolicious=$TMP_TO_COOKIE" -X POST --data-urlencode "id=$TMP_SERVER_ID" --data-urlencode "status=ONLINE" $TRAFFIC_OPS_URI/server/updatestatus
-
-	openssl req -newkey rsa:2048 -nodes -keyout /etc/riak/certs/server.key -x509 -days 365 -out /etc/riak/certs/server.crt -subj "/C=$CERT_COUNTRY/ST=$CERT_STATE/L=$CERT_CITY/O=$CERT_COMPANY"
-	cp /etc/riak/certs/server.crt /etc/riak/certs/ca-bundle.crt
-
-	/etc/init.d/riak restart
-	riak-admin security enable
-	riak-admin security add-group admins
-	riak-admin security add-group keysusers
-	riak-admin security add-user admin password=$ADMIN_PASS groups=admins
-	riak-admin security add-user riakuser password=$USER_PASS groups=keysusers
-	riak-admin security add-source riakuser 0.0.0.0/0 password
-	riak-admin security add-source admin 0.0.0.0/0 password
-	riak-admin security grant riak_kv.list_buckets,riak_kv.list_keys,riak_kv.get,riak_kv.put,riak_kv.delete on any to admins
-	riak-admin security grant riak_kv.get,riak_kv.put,riak_kv.delete on default ssl to keysusers
-	riak-admin security grant riak_kv.get,riak_kv.put,riak_kv.delete on default dnssec to keysusers
-	riak-admin security grant riak_kv.get,riak_kv.put,riak_kv.delete on default url_sig_keys to keysusers
-
-	echo "INITIALIZED=1" >> /etc/environment
-}
-
-source /etc/environment
-if [ -z "$INITIALIZED" ]; then init; fi
-start
diff --git a/misc/jira_github_issue_import.py b/misc/jira_github_issue_import.py
deleted file mode 100755
index 77953c3758..0000000000
--- a/misc/jira_github_issue_import.py
+++ /dev/null
@@ -1,238 +0,0 @@
-#!/usr/bin/env python
-#
-# 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.
-#
-
-
-# Takes an XML file (created by JIRA issue export) and
-#  1) Performs dry-run to list labels and milestones that need to be manually created
-#  2) creates equivalent issues in github
-#
-
-import sys
-import argparse
-import xml.etree.ElementTree as ET
-import json
-import requests
-import logging
-import time
-
-logging.basicConfig(level=logging.INFO)
-repo_name = "apache/trafficcontrol"
-
-#
-# List of relevant JIRA field names
-#
-field_names = ['title', 'link', 'description', 'type', 'priority', 'status', 'assignee',
-               'reporter', 'labels', 'fixVersion', 'component', 'resolution', 'version']
-
-assignee_map = {
-    'Jan van Doorn' :'knutsel',
-    'Jeff Elsloo': 'elsloo',
-    'Jifeng Yang': 'jifyang',
-    'Dan Kirkwood' :'dangogh',
-    'David Neuman' :'dneuman64',
-    'Nir Sopher' :'nir-sopher',
-    'Jeremy Mitchell' :'mitchell852',
-    'Robert Butts' :'rob05c',
-    'Zhilin Huang' :'zhilhuan',
-    'Dewayne Richardson' :'dewrich',
-    'Rawlin Peters' :'rawlinp',
-    'Dylan Volz' :'DylanVolz',
-    'Matt Mills' :'MattMills',
-    'John Shen' :'weifensh',
-    'Derek Gelinas' :'dg4prez',
-    'Steve Malenfant': 'smalenfant',
-    'Hank Beatty': 'hbeatty',
-}
-
-milestone_map = {'2.1.0': 1,
-                 '2.2.0': 2,
-                 '3.x': 3}
-
-class GithubAPI(object):
-    ''' Base Class for callers of the Github v3API
-        
-        Handles authentication, rate limiting and sending proper headers
-    '''
-    def __init__(self, username, api_key, repo, gh_server="api.github.com"):
-        self.username = username
-        self.api_key = api_key
-        self.repo = repo
-        self.gh_server = gh_server
-        self._set_base_url()
-        self.abuse_delay = 3.5 # Github API allows only 20 requests per 60 seconds
-
-    def set_github_server(self, server_name):
-        self.gh_server = server_name
-        self._set_base_url()
-
-    def _set_base_url(self):
-        self.base_url = str.format("https://{gh_server}/repos/{repo}",
-                                   gh_server=self.gh_server,
-                                   repo=self.repo)
-
-        
-    def make_request(self, path, json_body, use_abuse_delay=False):
-        url = self.base_url + path
-        logging.debug("POST %s\n%s" % (url, json.dumps(json_body)))
-        rsp = requests.post(url,
-                            headers = {"Accept": "application/vnd.github.v3+json"},
-                            auth=requests.auth.HTTPBasicAuth(self.username,
-                                                             self.api_key),
-                            json=json_body)
-        for (name, val) in rsp.headers.iteritems():
-            logging.debug("%s:%s" % (name, val))
-        logging.debug(json.dumps(rsp.json()))
-                          
-        rsp.raise_for_status()
-        if int(rsp.headers['X-RateLimit-Remaining']) == 0:
-            wait_time = time.time() - int(rsp.headers['X-RateLimit-Reset'])
-            logging.warn("Pausing %d seconds for rate-limit" % (wait_time))
-            time.sleep(wait_time)
-
-        if use_abuse_delay:
-            time.sleep(self.abuse_delay)
-            
-        return rsp
-        
-    
-class GithubIssues(GithubAPI):
-    def __init__(self, username, api_key, repo):
-        super(GithubIssues, self).__init__(username, api_key, repo)
-
-        
-    def create_issue(self, issue):
-        rsp = self.make_request("/issues", issue, use_abuse_delay=True)
-        return rsp
-    
-
-class JiraIssueImporter(object):
-    def __init__(self, input_file):
-        self.input_file = input_file
-
-        
-    def parse(self):
-        self.tree = ET.parse(self.input_file)
-        self.root = self.tree.getroot()
-
-        
-    def collect_issues(self):
-        self.issue_list = list()
-        for item in self.root[0].findall('item'):
-            issue = dict()
-            for field in field_names:
-                if field == "labels":
-                    jira_list = item.find('labels').findall('label')
-                    issue['labels'] = [label.text for label in jira_list]
-
-                else:
-                    try:
-                        issue[field] = item.find(field).text
-                    except AttributeError:
-                        issue[field] = None
-                        logging.debug("Missing %s for item %s" % (field, item.find('title').text))
-
-            self.issue_list.append(issue)
-
-    def get_unique_values(self, field_name):
-        ''' Iterates over issues and returns list of unqiue values in a field'''
-        vals = {str(x[field_name]) for x in self.issue_list if x[field_name] is not None}
-        return vals
-
-    
-    def translate_issue_to_github(self, jira_issue):
-        ''' Translate JIRA format to Github format'''
-        new_issue = {}
-        new_issue['title'] = jira_issue['title']
-        new_issue['body'] = "%s\n\nAuthor: %s\nJIRA Link: <a href=\"%s\">%s</a>" % \
-                            (jira_issue['description'],
-                             jira_issue['reporter'],
-                             jira_issue['link'],
-                             jira_issue['link'])
-        if jira_issue['version'] is not None:
-            new_issue['body'] += "\nFound Version: %s" % (jira_issue['version'])
-
-        #if jira_issue['assignee'] != "Unassigned":
-        #    new_issue['assignees'] = [assignee_map[jira_issue['assignee']]]
-
-        if jira_issue['fixVersion'] is not None:
-                new_issue['milestone'] = milestone_map[jira_issue['fixVersion']]
-                
-        new_issue['labels'] = jira_issue['labels']
-        for extra_label in ['type', 'priority', 'component']:
-            if jira_issue[extra_label] is not None:
-                new_issue['labels'].append(jira_issue[extra_label])
-        return new_issue
-
-    
-    def translate_all_issues(self):
-        gh_issues = []
-        for i in self.issue_list:
-            gh_issues.append(self.translate_issue_to_github(i))
-            
-        return gh_issues
-
-def list_all(importer):
-    ''' Print list of unique values in JIRA fields'''
-    print "Listing all components and milestones"
-    print "Fields:\n ",
-    print '\n  '.join(field_names)
-    print
-
-    for field in field_names:
-        if field in ["description", "title", "link"]:
-            continue
-            
-        print "%s:\n " %(field),
-        print '\n  '.join(importer.get_unique_values(field))
-        print    
-    
-def main():
-    args = parse_command_line()
-    importer = JiraIssueImporter(args.input_file)
-    importer.parse()
-    importer.collect_issues()
-
-    if args.list_all:
-        list_all(importer)
-
-    else:
-        gh_issues =  importer.translate_all_issues()
-        gh_api = GithubIssues(args.username, args.api_key, repo_name)
-        for (idx, issue) in enumerate(gh_issues):
-            logging.info("Creating Issue (%d/%d): %s" % (idx, len(gh_issues), issue['title']))
-            try:
-                gh_api.create_issue(issue)
-            except requests.exceptions.HTTPError as e:
-                
-                raise e
-
-            
-def parse_command_line():
-  parser = argparse.ArgumentParser(description='Import JIRA issues from XML file into Github')
-  parser.add_argument('input_file', help='path to input XML file')
-  parser.add_argument('username', help='Github Username')
-  parser.add_argument('api_key', help='Github username/Personal Access Token')  
-  parser.add_argument('--list-all',
-                      action='store_true',
-                      help='List all issues and milestones in JIRA')
-
-
-  args = parser.parse_args()
-  print "Reading input from: %s" % (args.input_file)  
-  return args    
-
-    
-if __name__ == '__main__':
-  main()
diff --git a/traffic_ops/build/traffic_ops.spec b/traffic_ops/build/traffic_ops.spec
index d6d93505f9..fbd53e4313 100644
--- a/traffic_ops/build/traffic_ops.spec
+++ b/traffic_ops/build/traffic_ops.spec
@@ -63,9 +63,6 @@ cp "${TC_DIR}/LICENSE" %{_builddir}
 # avoid detecting LICENSE as an unpackaged RPM file
 rm LICENSE
 
-# update the go version referenced in install_go.sh
-sed -i.bak 's/__GO_VERSION__/%{go_version}/g' install/bin/install_go.sh
-
 # copy traffic_ops_golang binary
 godir=src/github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang
 ( mkdir -p "$godir" && \
diff --git a/traffic_ops/install/bin/_postinstall.py b/traffic_ops/install/bin/_postinstall.py
index ddb1930fa1..5b30e8fe3f 100755
--- a/traffic_ops/install/bin/_postinstall.py
+++ b/traffic_ops/install/bin/_postinstall.py
@@ -1336,8 +1336,7 @@ no_database, # type: bool
 			logging.error("Missing database connection variable: %s", e)
 			logging.error(
 				"Can't connect to the database.  " \
-				"Use the script `/opt/traffic_ops/install/bin/todb_bootstrap.sh` " \
-				"on the db server to create it and run `postinstall` again."
+				"Make sure traffic_ops database and username exist in postgres."
 			)
 			return 1
 
@@ -1349,8 +1348,7 @@ no_database, # type: bool
 			logging.error("Failed to set up database: %s", e)
 			logging.error(
 				"Can't connect to the database.  "
-				"Use the script `/opt/traffic_ops/install/bin/todb_bootstrap.sh` "
-				"on the db server to create it and run `postinstall` again."
+				"Make sure traffic_ops database and username exist in postgres."
 			)
 
 		try:
diff --git a/traffic_ops/install/bin/install_go.sh b/traffic_ops/install/bin/install_go.sh
deleted file mode 100755
index 10ae7ebc15..0000000000
--- a/traffic_ops/install/bin/install_go.sh
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/env bash
-
-#
-# 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.
-#
-
-GO_DOWNLOADS_URL=https://dl.google.com/go
-GO_TARBALL_VERSION=__GO_VERSION__
-GO_TARBALL_URL=$GO_DOWNLOADS_URL/$GO_TARBALL_VERSION
-
-GO_TARBALL_VERSION_SHA_FILE=$GO_TARBALL_VERSION.sha256
-GO_TARBALL_VERSION_SHA_URL=$GO_DOWNLOADS_URL/$GO_TARBALL_VERSION_SHA_FILE
-INSTALL_DIR=/usr/local
-GOROOT=$INSTALL_DIR/go
-GO_BINARY=$GOROOT/bin/go
-
-# Make sure git is installed before proceeding
-yum -y install git
-
-rm -rf /usr/local/go
-
-cd /tmp
-rm $GO_TARBALL_VERSION
-rm $GO_TARBALL_VERSION_SHA_FILE
-curl -O $GO_TARBALL_URL
-curl -O $GO_TARBALL_VERSION_SHA_URL
-
-echo $GO_TARBALL_VERSION_SHA_FILE
-sha256sum -c <(cat $GO_TARBALL_VERSION_SHA_FILE; echo " ./$GO_TARBALL_VERSION")
-
-if [[ $? ]]; then
-    cd /usr/local
-    echo "Extracting go tarball to $INSTALL_DIR/go"
-    tar -zxf /tmp/$GO_TARBALL_VERSION
-else
-    echo "Checksum failed please verify $GO_TARBALL_VERSION against $GO_TARBALL_VERSION_SHA_FILE"
-fi
diff --git a/traffic_ops/install/bin/install_goose.sh b/traffic_ops/install/bin/install_goose.sh
deleted file mode 100755
index 5d4a3847f5..0000000000
--- a/traffic_ops/install/bin/install_goose.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env bash
-
-#
-# 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.
-#
-
-<<'MESSAGE' cat >/dev/stderr
-Traffic Ops no longer uses goose. install_goose.sh no longer installs goose and
-will be removed in a future Traffic Control release.
-MESSAGE
diff --git a/traffic_ops/install/bin/todb_bootstrap.sh b/traffic_ops/install/bin/todb_bootstrap.sh
deleted file mode 100755
index 23fa5cee7e..0000000000
--- a/traffic_ops/install/bin/todb_bootstrap.sh
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/usr/bin/env bash
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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.
-
-# To bypass the password prompts for automation, please set TODB_USERNAME_PASSWORD=<yourpassword> before you invoke
-
-# Example:
-#
-#    $ TODB_USERNAME_PASSWORD=<yourpassword> ./todb_bootstrap.sh
-#
-
-trap 'echo "Error on line ${LINENO} of ${0}"; exit 1' ERR
-set -o errexit -o nounset
-
-TODB_USERNAME=traffic_ops
-TODB_NAME=traffic_ops
-
-if [[ -z $TODB_USERNAME ]]; then
-    echo "Using environment database user: $TODB_USERNAME"
-fi
-
-if [[ -z $TODB_USERNAME_PASSWORD ]]; then
-   while true; do
-    read -rsp "Please ENTER the new password for database user '$TODB_USERNAME': " password
-    echo
-    read -rsp "Please CONFIRM enter the new password for database user '$TODB_USERNAME' again: " password_confirm
-    echo
-    [ "$password" = "$password_confirm" ] && break
-    echo "Passwords do not match, please try again"
-   done
-   TODB_USERNAME_PASSWORD="$password"
-else
-    echo "Using environment database password"
-fi
-echo "Setting up database role: $TODB_USERNAME"
-psql -U postgres -h localhost -c "CREATE USER $TODB_USERNAME WITH ENCRYPTED PASSWORD '$TODB_USERNAME_PASSWORD';"
-createdb $TODB_NAME --owner $TODB_USERNAME -U postgres -h localhost
-
-echo "Successfully set up database '$TODB_NAME' with role '$TODB_USERNAME'"