You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by de...@apache.org on 2018/06/14 18:05:15 UTC

[trafficcontrol] 03/20: straighten out vars; write configs

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

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

commit e068e34b57fdf4350041b99e377a7fe92b9320d9
Author: Dan Kirkwood <da...@gmail.com>
AuthorDate: Fri Jun 1 16:35:17 2018 +0000

    straighten out vars; write configs
---
 infrastructure/cdn-in-a-box/traffic_ops/Dockerfile |   5 +
 .../cdn-in-a-box/traffic_ops/Dockerfile-dbinit     |   8 -
 .../cdn-in-a-box/traffic_ops/Dockerfile-go         |  10 +-
 infrastructure/cdn-in-a-box/traffic_ops/config.sh  | 121 +++++++++++
 infrastructure/cdn-in-a-box/traffic_ops/dbInit.sh  |   1 +
 .../cdn-in-a-box/traffic_ops/docker-compose.yml    |  66 +++---
 infrastructure/cdn-in-a-box/traffic_ops/run-go.sh  |  64 ++++++
 infrastructure/cdn-in-a-box/traffic_ops/run.sh     | 240 +++------------------
 .../cdn-in-a-box/traffic_ops/variables.env         |  20 ++
 9 files changed, 272 insertions(+), 263 deletions(-)

diff --git a/infrastructure/cdn-in-a-box/traffic_ops/Dockerfile b/infrastructure/cdn-in-a-box/traffic_ops/Dockerfile
index c176522..1ec9bcf 100644
--- a/infrastructure/cdn-in-a-box/traffic_ops/Dockerfile
+++ b/infrastructure/cdn-in-a-box/traffic_ops/Dockerfile
@@ -55,6 +55,9 @@ RUN export PERL5LIB=/opt/traffic_ops/app/local/lib/perl5/:/opt/traffic_ops/insta
 	&& export USER=root \
 	&& /opt/traffic_ops/install/bin/download_web_deps -i
 
+# TODO: move this up along with other yum's
+RUN yum -y install nmap-ncat openssl
+
 # \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
@@ -67,5 +70,7 @@ EXPOSE 443
 WORKDIR /opt/traffic_ops/app
 ENV MOJO_MODE production
 ADD profile.origin.traffic_ops /
+
+ADD config.sh /
 ADD run.sh /
 CMD /run.sh
diff --git a/infrastructure/cdn-in-a-box/traffic_ops/Dockerfile-dbinit b/infrastructure/cdn-in-a-box/traffic_ops/Dockerfile-dbinit
index 9704aaa..8c92b79 100644
--- a/infrastructure/cdn-in-a-box/traffic_ops/Dockerfile-dbinit
+++ b/infrastructure/cdn-in-a-box/traffic_ops/Dockerfile-dbinit
@@ -30,13 +30,5 @@ RUN yum -y install \
   cpanminus && \
   yum clean all
 
-ENV POSTGRES_HOME $POSTGRES_HOME
-ENV PGPASSWORD $PGPASSWORD 
-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/cdn-in-a-box/traffic_ops/Dockerfile-go b/infrastructure/cdn-in-a-box/traffic_ops/Dockerfile-go
index b7e8038..b270863 100644
--- a/infrastructure/cdn-in-a-box/traffic_ops/Dockerfile-go
+++ b/infrastructure/cdn-in-a-box/traffic_ops/Dockerfile-go
@@ -21,11 +21,15 @@
 ############################################################
 
 
-FROM traffic_ops:2.3.0 AS trafficops-perl
+FROM centos:7
+RUN yum -y install nmap-ncat openssl
 
-COPY --from=trafficops-perl /opt/traffic_ops/app/conf /opt/traffic_ops/app/conf
+RUN mkdir -p /opt/traffic_ops/app/bin /opt/traffic_ops/app/conf/production
 COPY --from=trafficops-perl /opt/traffic_ops/app/bin/traffic_ops_golang /opt/traffic_ops/app/bin/traffic_ops_golang 
 
 EXPOSE 443
 WORKDIR /opt/traffic_ops/app
-ENTRYPOINT bash
+
+ADD config.sh /
+ADD run-go.sh /
+CMD /run-go.sh
diff --git a/infrastructure/cdn-in-a-box/traffic_ops/config.sh b/infrastructure/cdn-in-a-box/traffic_ops/config.sh
new file mode 100755
index 0000000..a7217fd
--- /dev/null
+++ b/infrastructure/cdn-in-a-box/traffic_ops/config.sh
@@ -0,0 +1,121 @@
+#!/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
+
+# 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
+
+key=/server.key
+crt=/server.crt
+
+openssl req -newkey rsa:2048 -nodes -keyout $key -x509 -days 365 -out $crt -subj "/C=$CERT_COUNTRY/ST=$CERT_STATE/L=$CERT_CITY/O=$CERT_COMPANY"
+chown trafops:trafops $key $crt
+
+cat <<-EOF >/opt/traffic_ops/app/conf/cdn.conf
+{
+    "hypnotoad" : {
+        "listen" : [
+            "https://[::]:60443?cert=$crt&key=$key&verify=0x00&ciphers=AES128-GCM-SHA256:HIGH:!RC4:!MD5:!aNULL:!EDH:!ED"
+        ],
+        "user" : "trafops",
+        "group" : "trafops",
+        "heartbeat_timeout" : 20,
+        "pid_file" : "/var/run/traffic_ops.pid",
+        "workers" : 12
+    },
+    "traffic_ops_golang" : {
+        "port" : "443",
+        "proxy_timeout" : 60,
+        "proxy_keep_alive" : 60,
+        "proxy_tls_timeout" : 60,
+        "proxy_read_header_timeout" : 60,
+        "read_timeout" : 60,
+        "read_header_timeout" : 60,
+        "write_timeout" : 60,
+        "idle_timeout" : 60,
+        "log_location_error": "/var/log/traffic_ops/error.log",
+        "log_location_warning": "/var/log/traffic_ops/warning.log",
+        "log_location_info": "/var/log/traffic_ops/info.log",
+        "log_location_debug": "/var/log/traffic_ops/debug.log",
+        "log_location_event": "/var/log/traffic_ops/access.log",
+        "max_db_connections": 20,
+        "backend_max_connections": {
+            "mojolicious": 4
+        }
+    },
+    "cors" : {
+        "access_control_allow_origin" : "*"
+    },
+    "to" : {
+        "base_url" : "http://localhost:3000",
+        "email_from" : "no-reply@traffic-ops-domain.com",
+        "no_account_found_msg" : "A Traffic Ops user account is required for access. Please contact your Traffic Ops user administrator."
+    },
+    "portal" : {
+        "base_url" : "http://localhost:8080/!#/",
+        "email_from" : "no-reply@traffic-portal-domain.com",
+        "pass_reset_path" : "user",
+        "user_register_path" : "user"
+    },
+    "secrets" : [
+        "mONKEYDOmONKEYSEE."
+    ],
+    "geniso" : {
+        "iso_root_path" : "/opt/traffic_ops/app/public"
+    },
+    "inactivity_timeout" : 60
+}
+EOF
+
+cat <<-EOF >/opt/traffic_ops/app/conf/production/database.conf
+{
+        "description": "Local PostgreSQL database on port 5432",
+        "dbname": "$DB_NAME",
+        "hostname": "$DB_SERVER",
+        "user": "$DB_USER",
+        "password": "$DB_USER_PASS",
+        "port": "$DB_PORT",
+        "ssl": false,
+        "type": "Pg"
+}
+EOF
+
+cat /opt/traffic_ops/app/conf/cdn.conf
+cat /opt/traffic_ops/app/conf/production/database.conf
diff --git a/infrastructure/cdn-in-a-box/traffic_ops/dbInit.sh b/infrastructure/cdn-in-a-box/traffic_ops/dbInit.sh
index f4392d4..2398f0c 100755
--- a/infrastructure/cdn-in-a-box/traffic_ops/dbInit.sh
+++ b/infrastructure/cdn-in-a-box/traffic_ops/dbInit.sh
@@ -26,5 +26,6 @@ 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_USER WITH ENCRYPTED PASSWORD '$DB_USER_PASS'"
 createdb $DB_NAME -h $DB_SERVER -U postgres --owner $DB_USER
diff --git a/infrastructure/cdn-in-a-box/traffic_ops/docker-compose.yml b/infrastructure/cdn-in-a-box/traffic_ops/docker-compose.yml
index 0001648..23f91ee 100644
--- a/infrastructure/cdn-in-a-box/traffic_ops/docker-compose.yml
+++ b/infrastructure/cdn-in-a-box/traffic_ops/docker-compose.yml
@@ -33,7 +33,15 @@
 version: '2.1'
 
 networks:
-  cdnnet:
+  dbnet:
+    driver: bridge
+    enable_ipv6: true
+    ipam:
+      driver: default
+      config:
+        - subnet: 172.13.239.0/24
+        - subnet: "fc01:9400:1000:8::/64"
+  trafficopsnet:
     driver: bridge
     enable_ipv6: true
     ipam:
@@ -45,19 +53,19 @@ networks:
 services:
   db:
     image: postgres:9.6.6
+    networks:
+      - dbnet
+    env_file:
+      - variables.env
     # TODO: change to expose: "5432" to limit to containers
     ports: 
       - "5432:5432"
 
   dbinit:
-    environment:
-      POSTGRES_HOME: /usr/pgsql-9.6
-      PGPASSWORD: password
-      DB_NAME: traffic_ops
-      DB_PORT: 5432
-      DB_SERVER: db
-      DB_USER_PASS: password
-      DB_USER: traffic_ops
+    networks:
+      - dbnet
+    env_file:
+      - variables.env
     build:
       context: .
       dockerfile: Dockerfile-dbinit
@@ -66,21 +74,11 @@ services:
 
   trafficops-perl:
     image: trafficops-perl
-    environment:
-      DB_NAME: traffic_ops
-      DB_PORT: 5432
-      DB_ROOT_PASS: password
-      DB_SERVER: db
-      DB_USER_PASS: password
-      DB_USER: traffic_ops
-      ADMIN_USER: superroot
-      ADMIN_PASS: password
-      CERT_COUNTRY: US
-      CERT_STATE: Colorado
-      CERT_CITY: Denver
-      CERT_COMPANY: NotComcast
-      TRAFFIC_VAULT_PASS: password
-      DOMAIN: trafficops_default
+    networks:
+      - dbnet
+      - trafficopsnet
+    env_file:
+      - variables.env
     expose: 
       - "60443"
     build:
@@ -92,21 +90,11 @@ services:
 
   trafficops:
     image: trafficops-go
-    environment:
-      DB_NAME: traffic_ops
-      DB_PORT: 5432
-      DB_ROOT_PASS: password
-      DB_SERVER: db
-      DB_USER_PASS: password
-      DB_USER: traffic_ops
-      ADMIN_USER: superroot
-      ADMIN_PASS: password
-      CERT_COUNTRY: US
-      CERT_STATE: Colorado
-      CERT_CITY: Denver
-      CERT_COMPANY: NotComcast
-      TRAFFIC_VAULT_PASS: password
-      DOMAIN: trafficops_default
+    networks:
+      - dbnet
+      - trafficopsnet
+    env_file:
+      - variables.env
     ports: 
       - "443:443"
     build:
diff --git a/infrastructure/cdn-in-a-box/traffic_ops/run-go.sh b/infrastructure/cdn-in-a-box/traffic_ops/run-go.sh
new file mode 100755
index 0000000..284ba60
--- /dev/null
+++ b/infrastructure/cdn-in-a-box/traffic_ops/run-go.sh
@@ -0,0 +1,64 @@
+#!/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
+
+set -x
+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
+
+# Write config files
+if [[ -x /config.sh ]]; then
+	/config.sh
+fi
+
+while ! nc trafficops-perl 60443 </dev/null; do # &>/dev/null; do
+        echo "waiting for trafficops-perl:60443"
+        sleep 3
+done
+
+cd /opt/traffic_ops/app
+ls -l bin
+CDNCONF=/opt/traffic_ops/app/conf/cdn.conf
+DBCONF=/opt/traffic_ops/app/conf/production/database.conf
+mkdir -p /var/log/traffic_ops
+./bin/traffic_ops_golang -cfg $CDNCONF -dbcfg $DBCONF
diff --git a/infrastructure/cdn-in-a-box/traffic_ops/run.sh b/infrastructure/cdn-in-a-box/traffic_ops/run.sh
index 48efc54..14cc836 100755
--- a/infrastructure/cdn-in-a-box/traffic_ops/run.sh
+++ b/infrastructure/cdn-in-a-box/traffic_ops/run.sh
@@ -44,250 +44,64 @@ do
 	if [[ -z $$v ]]; then echo "$v is unset"; exit 1; fi
 done
 
+# Write config files
+if [[ -x /config.sh ]]; then
+	/config.sh
+fi
+
+while true; do
+	echo "Checking for existence of role $DB_USER"
+	psql -U postgres -h $DB_SERVER -p $DB_PORT postgres -tAc "SELECT 1 FROM pg_roles WHERE rolname='$DB_USER'" | grep -q 1 && break
+	sleep 3
+done
+
 start() {
 	TO_DIR=/opt/traffic_ops/app
+	export PERL5LIB=$TO_DIR/lib:$TO_DIR/local/lib/perl5
 	cd $TO_DIR && $TO_DIR/local/bin/hypnotoad script/cdn
 	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/1.2/user/login 2>&1 | grep 'Set-Cookie' | sed -e 's/.*mojolicious=\(.*\); expires.*/\1/')"
-	echo "Got cookie: $TMP_TO_COOKIE"
+	COOKIE="$(curl -v -s -k -X POST --data '{ "u":"'"$ADMIN_USER"'", "p":"'"$ADMIN_PASS"'" }' $TRAFFIC_OPS_URI/api/1.2/user/login 2>&1 | grep 'Set-Cookie' | sed -e 's/.*mojolicious=\(.*\); expires.*/\1/')"
+	echo "Got cookie: $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=$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]+")"
+	curl -v -k -X POST -H "Cookie: mojolicious=$COOKIE" --data-urlencode "division.name=East" $TRAFFIC_OPS_URI/division/create
+	TMP_DIVISION_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$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/1.2/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]')"
+	curl -v -k -X POST -H "Cookie: mojolicious=$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=$COOKIE" $TRAFFIC_OPS_URI/api/1.2/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/1.2/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]')"
+	TMP_CACHEGROUP_TYPE="$(curl -s -k -X GET -H "Cookie: mojolicious=$COOKIE" $TRAFFIC_OPS_URI/api/1.2/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/1.2/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]')"
+	curl -v -k -X POST -H "Cookie: mojolicious=$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=$COOKIE" $TRAFFIC_OPS_URI/api/1.2/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/1.2/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]')"
+	TMP_CACHEGROUP_EDGE_TYPE="$(curl -s -k -X GET -H "Cookie: mojolicious=$COOKIE" $TRAFFIC_OPS_URI/api/1.2/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/1.2/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]')"
+	curl -v -k -X POST -H "Cookie: mojolicious=$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=$COOKIE" $TRAFFIC_OPS_URI/api/1.2/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 [...]
+	curl -v -k -X POST -H "Cookie: mojolicious=$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.region=$T [...]
 
 	echo "INITIALIZED=1" >> /etc/environment
 }
 
 source /etc/environment
-if [ -z "$INITIALIZED" ]; then init; fi
+#if [ -z "$INITIALIZED" ]; then init; fi
 start
diff --git a/infrastructure/cdn-in-a-box/traffic_ops/variables.env b/infrastructure/cdn-in-a-box/traffic_ops/variables.env
new file mode 100644
index 0000000..1ca486b
--- /dev/null
+++ b/infrastructure/cdn-in-a-box/traffic_ops/variables.env
@@ -0,0 +1,20 @@
+DOMAIN=domain
+CERT_CITY=Denver
+CERT_COMPANY=NotComcast
+CERT_COUNTRY=US
+CERT_STATE=CO
+DB_NAME=traffic_ops
+DB_USER_PASS=twelve
+DB_PORT=5432
+DB_SERVER=db
+DB_USER=traffic_ops
+POSTGRES_PASSWORD=twelve
+PGPASSWORD=twelve
+TO_ADMIN_PASSWORD=twelve
+TO_ADMIN_USER=admin
+TO_EMAIL=cdnadmin@example.com
+TO_HOST=trafficops
+TO_PORT=443
+TO_SECRET=blahblah
+TP_EMAIL=none
+TP_HOST=none

-- 
To stop receiving notification emails like this one, please contact
dewrich@apache.org.