dewrich closed pull request #2498: cdn-in-a-box add trafficmonitor
URL: https://github.com/apache/trafficcontrol/pull/2498
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/infrastructure/cdn-in-a-box/docker-compose.yml 
b/infrastructure/cdn-in-a-box/docker-compose.yml
index d7a95a2bf..1038539a1 100644
--- a/infrastructure/cdn-in-a-box/docker-compose.yml
+++ b/infrastructure/cdn-in-a-box/docker-compose.yml
@@ -98,6 +98,20 @@ services:
       - db
       - trafficops-perl
 
+  # trafficops-init is a small container that uses admin credentials to add 
needed data to trafficops
+  # after it has successfully started
+  trafficops-init:
+    build:
+      context: traffic_ops
+      dockerfile: Dockerfile-init
+    depends_on:
+      - trafficops
+    domainname: cdn.local
+    env_file:
+      - variables.env
+    networks:
+      - tcnet
+
   trafficportal:
     build:
       context: traffic_portal
@@ -112,3 +126,18 @@ services:
       - tcnet
     ports:
       - "443:443"
+
+  trafficmonitor:
+    build:
+      context: traffic_monitor
+      args:
+        TRAFFIC_PORTAL_RPM: traffic_monitor.rpm
+    domainname: cdn.local
+    env_file:
+      - variables.env
+    hostname: trafficmonitor
+    image: trafficmonitor
+    networks:
+      - tcnet
+    ports:
+      - "80:80"
diff --git a/infrastructure/cdn-in-a-box/traffic_monitor/Dockerfile 
b/infrastructure/cdn-in-a-box/traffic_monitor/Dockerfile
new file mode 100644
index 000000000..ad9c88dbb
--- /dev/null
+++ b/infrastructure/cdn-in-a-box/traffic_monitor/Dockerfile
@@ -0,0 +1,39 @@
+# 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 container images
+# Based on CentOS
+############################################################
+
+FROM centos/systemd
+
+# Default values for RPM -- override with `docker build --build-arg RPM=...'
+ARG RPM=traffic_monitor.rpm
+ADD $RPM /
+
+RUN yum install -y \
+        epel-release \
+        initscripts && \
+    yum install -y \
+        jq \
+        /$(basename $RPM) && \
+    rm /$(basename $RPM) && \
+    yum clean all
+
+EXPOSE 80
+ADD run.sh /
+ENTRYPOINT /run.sh
diff --git a/infrastructure/cdn-in-a-box/traffic_monitor/run.sh 
b/infrastructure/cdn-in-a-box/traffic_monitor/run.sh
new file mode 100755
index 000000000..f936b454b
--- /dev/null
+++ b/infrastructure/cdn-in-a-box/traffic_monitor/run.sh
@@ -0,0 +1,151 @@
+#!/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
+               {
+                               "cache_health_polling_interval_ms": 6000,
+                               "cache_stat_polling_interval_ms": 6000,
+                               "monitor_config_polling_interval_ms": 15000,
+                               "http_timeout_ms": 2000,
+                               "peer_polling_interval_ms": 5000,
+                               "peer_optimistic": true,
+                               "max_events": 200,
+                               "max_stat_history": 5,
+                               "max_health_history": 5,
+                               "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,
+                               "http_poll_no_sleep": false,
+                               "static_file_dir": 
"/opt/traffic_monitor/static/"
+               }
+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/1.2/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/1.2/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/1.2/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/1.2/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/1.2/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/1.2/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_ID" 
--data-urlencode "profile=$SERVER_PROFILE_ID" --data-urlencode "tcp_port=$PORT" 
--data-urlencode "offline_reason=creation" $TRAFFIC_OPS_URI/server/create
+
+               # Add Monitor IP to `allow_ip` Parameters
+               IP_ALLOW_PARAMS=$(curl -Lsk --cookie "mojolicious=$TO_COOKIE" 
$TRAFFIC_OPS_URI/api/1.2/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/1.2/parameters/${id}
+               done <<< "$IP_ALLOW_PARAMS"
+       fi
+
+       SERVER_ID="$(curl -s -k -X GET -H "Cookie: mojolicious=$TO_COOKIE" 
$TRAFFIC_OPS_URI/api/1.2/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/cdn-in-a-box/traffic_ops/Dockerfile 
b/infrastructure/cdn-in-a-box/traffic_ops/Dockerfile
index 50ad18dc4..38f09909b 100644
--- a/infrastructure/cdn-in-a-box/traffic_ops/Dockerfile
+++ b/infrastructure/cdn-in-a-box/traffic_ops/Dockerfile
@@ -40,21 +40,31 @@ RUN yum install -y perl-DBIx-Connector
 # Override TRAFFIC_OPS_RPM arg to use a different one using --build-arg 
TRAFFIC_OPS_RPM=...  Can be local file or http://...
 ARG TRAFFIC_OPS_RPM=traffic_ops.rpm
 ADD $TRAFFIC_OPS_RPM /
-RUN yum install -y /$(basename $TRAFFIC_OPS_RPM)
-
-# once installed, remove rpm to lower image size
-RUN rm /$(basename $TRAFFIC_OPS_RPM) && \
+RUN yum install -y \
+        /$(basename $TRAFFIC_OPS_RPM) \
+        git \
+        golang && \
+    rm /$(basename $TRAFFIC_OPS_RPM) && \
     yum clean all
 
-RUN POSTGRES_HOME=/usr/pgsql-9.6 cd /opt/traffic_ops/app && carton && rm -rf 
$HOME/.cpan*
+# if local.tar.gz exists, untar to .../app/local to keep carton from 
reinstalling the Perl universe
+# NOTE: copying Dockerfile so the COPY succeeds whether or not local.tar.gz 
exists
+WORKDIR /opt/traffic_ops/app
+COPY Dockerfile local.tar.gz /tmp/
+
+# run carton whether or not local dir was installed
+RUN [ -f /tmp/local.tar.gz ] && \
+     tar xzvf /tmp/local.tar.gz || true && \
+     POSTGRES_HOME=/usr/pgsql-9.6 carton && \
+     rm -rf $HOME/.cpan* /tmp/Dockerfile /tmp/local.tar.gz
 
-RUN /opt/traffic_ops/install/bin/install_go.sh && \
-    /opt/traffic_ops/install/bin/install_goose.sh
+RUN /opt/traffic_ops/install/bin/install_goose.sh
 
 RUN export 
PERL5LIB=/opt/traffic_ops/app/local/lib/perl5/:/opt/traffic_ops/install/lib/ \
        && export TERM=xterm \
        && export USER=root \
-       && /opt/traffic_ops/install/bin/download_web_deps -i
+       && /opt/traffic_ops/install/bin/download_web_deps -i || \
+       true # keep a failure here from failing all..
 
 # \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
diff --git a/infrastructure/cdn-in-a-box/traffic_ops/Dockerfile-go 
b/infrastructure/cdn-in-a-box/traffic_ops/Dockerfile-go
index 96e73a532..2b838b984 100644
--- a/infrastructure/cdn-in-a-box/traffic_ops/Dockerfile-go
+++ b/infrastructure/cdn-in-a-box/traffic_ops/Dockerfile-go
@@ -24,9 +24,8 @@
 FROM centos:7
 RUN yum -y install nmap-ncat openssl
 
-RUN mkdir -p /opt/traffic_ops/app/bin /opt/traffic_ops/app/conf/production
+RUN mkdir -p /opt/traffic_ops/app/bin /opt/traffic_ops/app/conf/production 
/opt/traffic_ops/app/db
 COPY --from=trafficops-perl /opt/traffic_ops/app/bin/traffic_ops_golang 
/opt/traffic_ops/app/bin/traffic_ops_golang 
-COPY --from=trafficops-perl /usr/local/go /usr/local/go
 
 EXPOSE 6443
 WORKDIR /opt/traffic_ops/app
diff --git a/infrastructure/cdn-in-a-box/traffic_ops/Dockerfile-init 
b/infrastructure/cdn-in-a-box/traffic_ops/Dockerfile-init
new file mode 100644
index 000000000..a24d78d31
--- /dev/null
+++ b/infrastructure/cdn-in-a-box/traffic_ops/Dockerfile-init
@@ -0,0 +1,26 @@
+# 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 initialize Traffic Ops
+############################################################
+
+FROM alpine
+
+RUN apk add --no-cache curl bash
+ADD init /
+CMD /trafficops-init.sh
diff --git a/infrastructure/cdn-in-a-box/traffic_ops/init/trafficops-init.sh 
b/infrastructure/cdn-in-a-box/traffic_ops/init/trafficops-init.sh
new file mode 100755
index 000000000..320fced59
--- /dev/null
+++ b/infrastructure/cdn-in-a-box/traffic_ops/init/trafficops-init.sh
@@ -0,0 +1,61 @@
+#!/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.
+
+# Required env vars
+# Check that env vars are set
+set -x
+for v in TO_HOST TO_PORT TO_ADMIN_USER TO_ADMIN_PASSWORD; do
+    [[ -z $(eval echo \$$v) ]] || continue
+    echo "$v is unset"
+    exit 1
+done
+
+TO_URL="https://$TO_HOST:$TO_PORT";
+# wait until the ping endpoint succeeds
+while ! curl -k $TO_URL/api/1.3/ping; do
+   echo waiting for trafficops
+   sleep 3
+done
+
+export COOKIEJAR=/tmp/cookiejar.$(echo $TO_URL $TO_ADMIN_USER | md5sum | awk 
'{print $1}')
+
+login() {
+    local datadir=$(mktemp -d)
+    local login="$datadir/login.json"
+    local url=$TO_URL/api/1.3/user/login
+    local datatype='Accept: application/json'
+    cat > "$login"  <<-CREDS
+    { "u" : "$TO_ADMIN_USER", "p" : "$TO_ADMIN_PASSWORD" }
+CREDS
+
+    res=$(curl -k -H "$datatype" --cookie "$COOKIEJAR" --cookie-jar 
"$COOKIEJAR" -X POST --data @"$login" "$url")
+    rm -rf "$datadir"
+    if [[ $res != *"Successfully logged in."* ]]; then
+        echo $res
+        return -1
+    fi
+}
+
+login
+
+# load json files using the API
+for f in */*.json; do
+    ep=$(dirname $f)
+    curl -k -s --cookie "$COOKIEJAR" -X POST --data @"$f" "$TO_URL/api/1.3/$ep"
+done
diff --git a/infrastructure/cdn-in-a-box/traffic_ops/init/users/tmonitor.json 
b/infrastructure/cdn-in-a-box/traffic_ops/init/users/tmonitor.json
new file mode 100644
index 000000000..c9a966d30
--- /dev/null
+++ b/infrastructure/cdn-in-a-box/traffic_ops/init/users/tmonitor.json
@@ -0,0 +1,13 @@
+{
+  "email": "[email protected]",
+  "fullName": "Traffic Monitor",
+  "gid": 0,
+  "localPasswd": "jhdslvhdfsuklvfhsuvlhs",
+  "confirmLocalPasswd": "jhdslvhdfsuklvfhsuvlhs",
+  "role": 4,
+  "rolename": "admin",
+  "tenant": "root",
+  "tenantId": 1,
+  "uid": 0,
+  "username": "tmon"
+}
diff --git a/infrastructure/cdn-in-a-box/traffic_ops/run.sh 
b/infrastructure/cdn-in-a-box/traffic_ops/run.sh
index f5fd76deb..aa7a832d6 100755
--- a/infrastructure/cdn-in-a-box/traffic_ops/run.sh
+++ b/infrastructure/cdn-in-a-box/traffic_ops/run.sh
@@ -68,6 +68,7 @@ cd $TO_DIR && \
        ./db/admin.pl --env=production reset && \
        ./db/admin.pl --env=production seed || echo "db setup failed!"
 
+# Add admin user -- all other users should be created using API
 /adduser.pl $TO_ADMIN_USER $TO_ADMIN_PASSWORD admin | psql -U$DB_USER 
-h$DB_SERVER $DB_NAME || echo "adding traffic_ops admin user failed!"
 
 cd $TO_DIR && $TO_DIR/local/bin/hypnotoad script/cdn
diff --git a/infrastructure/cdn-in-a-box/variables.env 
b/infrastructure/cdn-in-a-box/variables.env
index aa2e5ca4b..7a8d24f47 100644
--- a/infrastructure/cdn-in-a-box/variables.env
+++ b/infrastructure/cdn-in-a-box/variables.env
@@ -14,19 +14,21 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-DOMAIN=domain
 CERT_CITY=Denver
 CERT_COMPANY=NotComcast
 CERT_COUNTRY=US
 CERT_STATE=CO
 DB_NAME=traffic_ops
-DB_ROOT_PASS=twelve
-DB_USER_PASS=twelve
 DB_PORT=5432
+DB_ROOT_PASS=twelve
 DB_SERVER=db
 DB_USER=traffic_ops
-POSTGRES_PASSWORD=twelve
+DB_USER_PASS=twelve
+DOMAIN=cdn.local
 PGPASSWORD=twelve
+POSTGRES_PASSWORD=twelve
+TM_PASSWORD=twelve
+TM_USER=tmonitor
 TO_ADMIN_PASSWORD=twelve
 TO_ADMIN_USER=admin
 [email protected]


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to