diff options
Diffstat (limited to 'pgaas/src')
152 files changed, 0 insertions, 9317 deletions
diff --git a/pgaas/src/common/postinst b/pgaas/src/common/postinst deleted file mode 100755 index f98f6f6..0000000 --- a/pgaas/src/common/postinst +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -exec 1> /tmp/pgaas.out 2>&1 -set -x -if [ -d /opt/app/postgresql-9.5.2 ] -then export ONAP=false NOTONAP=true -else export ONAP=true NOTONAP=false -fi -id - -if $ONAP -then INSTALL_ROOT= -fi - -echo STARTING $0 $(date) -umask 0 -echo STARTING $0 $(date) >> /tmp/pgaas.inst.report - -export CFGDIR=${INSTALL_ROOT}/opt/app/pgaas - -ret=0 - -if $CFGDIR/etc/do-post-install-prep -then - if su postgres -c $CFGDIR/etc/do-post-install-config - then - if su postgres -c $CFGDIR/etc/do-post-install-tools - then - if $CFGDIR/etc/do-post-install-post - then : - else echo do-post-install-post failed; ret=1 - fi - else echo do-post-install-tools failed; ret=1 - fi - else echo do-post-install-config failed; ret=1 - fi -else echo do-post-install-prep failed; ret=1 -fi - -echo ENDING $0 $(date) -echo ENDING $0 $(date) >> /tmp/pgaas.inst.report -if $NOTONAP -then sed -n '/^STARTING/,/^ENDING/p' `dirname $0`/../../proc_out >> /tmp/pgaas.inst.report -fi -exit $ret diff --git a/pgaas/src/makefile b/pgaas/src/makefile deleted file mode 100644 index 56d7ed7..0000000 --- a/pgaas/src/makefile +++ /dev/null @@ -1,47 +0,0 @@ - -DEVBIN=../../bin -PKG=pgaas -REPACKAGEDEBIANOPTS= - -INS= ../install -INSSTG= $(INS)/stage -INSCOM= $(INS)/common -KEEP= - -all: - -clean-stage: - rm -rf $(INSSTG) - -clean-common: - rm -rf $(INSCOM) - -clean-ins: clean-stage clean-common - rm -rf $(INS) - -clean-testlock: - cd testlock && $(MAKE) clobber - -clean: clean-ins clean-testlock - rm -rf *~ nohup.out - -testlock/testlock: - cd testlock && $(MAKE) testlock - -build: testlock/testlock - -stage: build clean-stage clean-common - mkdir -p $(INS) - cd stage/opt/app/pgaas && $(MAKE) stage STAGEDIR=../../../../$(INSSTG) - cd testlock && $(MAKE) stage STAGEDIR=../$(INSSTG) DISTPATH=opt/app/pgaas - find common ! -name makefile ! -name '*~' | cpio -pudmv $(INS) - - -debian: stage - sed 's/$${RELLONG}/'"$$MVN_VERSION_ONLY/" < repackage.json > $(INS)/repackage.json - repackage -b debian $(REPACKAGEDEBIANOPTS) -d $(INS) -u -X "{appname}.{suffix},{appname}.{suffix}-{version},{appname}.{suffix}-{version}-{datetime}" -y $(INS)/repackage.json - @echo debian built - -upload-javadocs: - @echo nothing to do here - diff --git a/pgaas/src/repackage.json b/pgaas/src/repackage.json deleted file mode 100644 index 365769b..0000000 --- a/pgaas/src/repackage.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "applicationName": "pgaas", - "debian": { - "conflicts": [], - "externalDependencies": [ - { - "cdf": ">= ${RELLONG}" - }, - { - "postgresql": ">= 9.5" - } - ], - "groupId": "org.onap.dcae.storage.pgaas", - "replaces": [] - }, - "description": " PostgreSQL as a Service main scripts ", - "directoryTreeTops": { - "/opt": "/opt/app/pgaas" - }, - "docker": { - "externalDependencies": [], - "tag": "latest" - }, - "executionGroup": "root", - "executionUser": "root", - "fileGroup": "postgres", - "fileUser": "postgres", - "groupId": "org.onap.dcae.storage.pgaas", - "internalDependencies": [], - "maintainer": "ONAP <dcae@lists.onap.org>", - "version": "${RELLONG}" -}
\ No newline at end of file diff --git a/pgaas/src/stage/opt/app/pgaas/bin/check_cluster b/pgaas/src/stage/opt/app/pgaas/bin/check_cluster deleted file mode 100755 index ced7c0a..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/check_cluster +++ /dev/null @@ -1,170 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -# NAME -# check_cluster - check the state of the cluster -# -# USAGE -# check_cluster [-v] [-l] [-t timeout] -# -l do not check localhost first (and restarting the service if necessary) -# -t timeout set how long to wait when accessing the servers -# -v verbose -# -# DESCRIPTION -# Loop through the nodes in the cluster, using pgwget to determine how many are masters, secondaries, down for maintenance, or not up. -# Complain about certain situations. -# If there are multiple masters, and this not the first master in the list, then: -# run pg_ctl_restart -# prevent /ro from returning true - -CDF=/opt/app/cdf -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi -PATH=$PGDIR/bin:$CDF/bin:/opt/app/pgaas/bin:$PATH - -usage() -{ - exec 1>&2 - [ $# -gt 0 ] && echo "$@" - echo "Usage: $0 [-v] [-l] [-t timeout] [-d file]" - echo -e " -l do not check localhost first (and restarting the service if necessary)" - echo -e " -t timeout set how long to wait when accessing the servers" - echo -e " -v verbose" - echo -e " -d file duplicate the status output to the given file" - exit 1 -} - -VERBOSE=false -TIMEOUT=10 -TESTLOCAL=: -DFILE= -while getopts d:lt:v c -do - case "$c" in - d ) DFILE=$OPTARG ;; - l ) TESTLOCAL=false ;; - t ) TIMEOUT=$OPTARG ;; - v ) VERBOSE=: ;; - \?) usage ;; - esac -done -shift $(($OPTIND - 1)) - -# loop through the nodes in the cluster, using pgwget to determine if any are a master. Save in $@ -master_count=0 -secondary_count=0 -total_count=0 -down_count=0 -maintenance_count=0 - -MASTERS= -SECONDARIES= -MAINTENANCES= -DOWNS= - -MSEP= -SSEP= -BSEP= -DSEP= -HOSTNAME=$(hostname -f) -FOUNDPREVIOUSMASTER= -DOPGCTLSTOP= - -if $TESTLOCAL -then - isrw=`pgwget --tries=1 --read-timeout=$TIMEOUT --quiet -O/dev/stdout http://localhost:8000/isrw` - case "$isrw" in - Master | Secondary | Maintenance ) ;; - * ) - echo "$(date)|WARNING|RESTARTED|Local iDNS-responder not responding. Restarting." - ps -fu postgres | grep "python3 /opt/app/pgaas/lib/iDNS-responder" | grep -v grep | awk '{print "kill " $2}' | sh - sleep 10 - ;; - esac -fi - -for i in $(getpropvalue -n pgnodes | sed 's/|/ /g') -do - $VERBOSE && echo -n "Checking $i" - isrw=`pgwget --tries=1 --read-timeout=10 --quiet -O/dev/stdout http://$i:8000/isrw` - $VERBOSE && echo ": $isrw" - case "$isrw" in - Master ) - (( master_count = master_count + 1 )) - (( total_count = total_count + 1 )) - MASTERS="$MASTERS$MSEP$i" - MSEP=" " - if [ -z "$FOUNDPREVIOUSMASTER" ] - then FOUNDPREVIOUSMASTER=yes - elif [ -n "$FOUNDPREVIOUSMASTER" -a "$i" = $HOSTNAME ] - then DOPGCTLSTOP=yes - fi - ;; - Secondary ) - (( secondary_count = secondary_count + 1 )) - (( total_count = total_count + 1 )) - SECONDARIES="$SECONDARIES$SSEP$i" - SSEP=" " - ;; - Maintenance ) - (( maintenance_count = maintenance_count + 1 )) - (( total_count = total_count + 1 )) - MAINTENANCES="$MAINTENANCES$BSEP$i" - BSEP=" " - ;; - * ) - DOWNS="$DOWNS$DSEP$i" - DSEP=" " - (( down_count = down_count + 1 )) - (( total_count = total_count + 1 )) - ;; - esac -done - -(( up_count = master_count + secondary_count )) - -date=$(date) -output="$date|INFO|masters=$master_count $MASTERS|secondaries=$secondary_count $SECONDARIES|maintenance=$maintenance_count $MAINTENANCES|down=$down_count $DOWNS|" -echo "$output" -if [ -n "$DFILE" ] -then (umask 022; echo "$output" > $DFILE.tmp && mv $DFILE.tmp $DFILE) -fi - -FORCEROOFF=/var/run/postgresql/force-ro-off -if [ $master_count -lt 1 ] -then echo "$date|FATAL|NOMASTER|NO MASTER FOUND|" -elif [ $master_count -gt 1 ] -then echo "$date|FATAL|MULTIPLEMASTERS|TOO MANY MASTERS FOUND|" - if [ -n "$DOPGCTLSTOP" ] - then - touch "$FORCEROOFF" - pg_ctl_stop - fi -fi -if [ -z "$DOPGCTLSTOP" -a -f "$FORCEROOFF" ] -then rm -f "$FORCEROOFF" -fi -if [ $up_count -eq 0 ] -then echo "$date|FATAL|NOREADER|NO SECONDARY FOUND" -fi -if [ $down_count -ne 0 ] -then echo "$date|ERROR|DOWN|One or more systems are down: $DOWNS" -fi diff --git a/pgaas/src/stage/opt/app/pgaas/bin/dcae_admin_db.py b/pgaas/src/stage/opt/app/pgaas/bin/dcae_admin_db.py deleted file mode 100755 index e1ac744..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/dcae_admin_db.py +++ /dev/null @@ -1,892 +0,0 @@ -#!/usr/bin/python3 -# -*- indent-tabs-mode: nil -*- -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -""" - -NAME - dcae_admin_db.py - given a database description json file, update the current VM accordingly - -USAGE - dcae_admin_db.py [options] configurationChanged json-file - dcae_admin_db.py [options] suspend - dcae_admin_db.py [options] resume - dcae_admin_db.py [options] test - - options: - - -H / --dbhost= - host name, defaults to CFG['dcae_admin_db_hostname'] - -d / --dbdir= - database directory path, defaults to CFG['db_directory'] - -c / --dbconf= - database configuration path, defaults to CFG['db_configuration'] - -D / --dbname= - database name, defaults to CFG['dcae_admin_db_databasename'] - -U / --user= - user to login as, defaults to CFG['dcae_admin_db_username'] - -P / --password= - password for user, defaults to CFG['dcae_admin_db_password'] - -B / --bindir= - postgresql bin directory, defaults to CFG['pg_bin_directory'] - -i / --ignorefile= - skip configuration if this file is present, defaults to CFG['skip_configuration_file'] - -n / --nocreate - do not create the databases / users - -I / --ignoredb - ignore current state of database - -R / --remove - remove old databases / users - -J / --jsontop= - top of json tree, as in \"['pgaas']\" - -e / --errors= - where to redirect error output, defaults to CFG['dcae_admin_db_errors_file'] then stderr - -t / --trace= - where to redirect trace output, defaults to CFG['dcae_admin_db_trace_file'] then stderr - -v / --verbose - verbose, defaults to CFG['dcae_admin_db_verbosity'] - -DESCRIPTION - This program is intended to be executed by the DCAE controller manager. - -When creating a database and set of users, execute the equivalent of this: - - CREATE USER tstdb_admin WITH PASSWORD 'tst'; - CREATE USER tstdb_user WITH PASSWORD 'tst'; - CREATE USER tstdb_viewer WITH PASSWORD 'tst'; - - CREATE ROLE testdb_common_user_role; - CREATE ROLE testdb_common_viewer_role; - - CREATE DATABASE testdb with owner tstdb_admin; - - \connect testdb - - REVOKE ALL on DATABASE testdb FROM testdb_common_viewer_role; - REVOKE ALL on DATABASE testdb FROM testdb_common_user_role; - REVOKE ALL on DATABASE testdb FROM tstdb_user; - REVOKE ALL on DATABASE testdb FROM tstdb_viewer; - - GRANT testdb_common_viewer_role TO testdb_common_user_role; /* user can do everything viewer can */ - GRANT testdb_common_user_role TO tstdb_admin; /* admin can do everything user and viewer can */ - - GRANT CONNECT ON DATABASE testdb TO testdb_common_viewer_role; /* viewer, user, admin can connect */ - - CREATE SCHEMA testdb_db_common AUTHORIZATION tstdb_admin; /* create a schema we can optionally use */ - - ALTER ROLE tstdb_admin IN DATABASE testdb SET search_path = public, testdb_db_common; /* search_path is not inherited, so set it here */ - ALTER ROLE testdb_common_user_role IN DATABASE testdb SET search_path = public, testdb_db_common; /* search_path is not inherited, so set it here */ - ALTER ROLE testdb_common_viewer_role IN DATABASE testdb SET search_path = public, testdb_db_common; /* search_path is not inherited, so set it here */ - - GRANT USAGE ON SCHEMA testdb_db_common TO testdb_common_viewer_role; /* viewer,user can select from schema */ - GRANT CREATE ON SCHEMA testdb_db_common TO tstdb_admin; /* admin can create on schema */ - - ALTER DEFAULT PRIVILEGES FOR ROLE tstdb_admin GRANT SELECT ON TABLES TO testdb_common_viewer_role; /* viewer, user, admin can select on tables */ - ALTER DEFAULT PRIVILEGES FOR ROLE tstdb_admin GRANT INSERT, UPDATE, DELETE, TRUNCATE ON TABLES TO testdb_common_user_role; /* user, admin can ins/upd/del/tru on tables */ - ALTER DEFAULT PRIVILEGES FOR ROLE tstdb_admin GRANT USAGE, SELECT, UPDATE ON SEQUENCES TO testdb_common_user_role; /* user, admin can update on sequences */ - - GRANT TEMP ON DATABASE testdb TO testdb_common_user_role; /* user, admin can create temp tables */ - - GRANT testdb_common_user_role TO tstdb_user; - GRANT testdb_common_viewer_role TO tstdb_viewer; - ALTER ROLE tstdb_user IN DATABASE testdb SET search_path = public, testdb_db_common; /* search_path is not inherited, so set it here */ - ALTER ROLE tstdb_viewer IN DATABASE testdb SET search_path = public, testdb_db_common; /* search_path is not inherited, so set it here */ - -""" - -import getopt -import psycopg2 -import sys -import re -import subprocess -import json -import os -import time - -sys.path.append("/opt/app/pgaas/lib") -sys.path.append("/opt/app/dcae-commonlogging/python") -import CommonLogger - -verbose = 0 -quiet = False -errorOutput = sys.stderr -traceOutput = sys.stderr -errorLogger = debugLogger = auditLogger = metricsLogger = None - -def usage(msg = None): - """ - Print a usage message and exit - """ - sys.stdout = sys.stderr - if msg != None: - print(msg) - print("Usage:") - print("dcae_admin_db.py [options] configurationChanged json-file") - print("dcae_admin_db.py [options] suspend") - print("dcae_admin_db.py [options] resume") - print("dcae_admin_db.py [options] test") - print("dcae_admin_db.py [options] newdb dbname admin-pswd user-pswd viewer-pswd") - print("") - print("options:") - print("-H / --dbhost= - host name, defaults to CFG['dcae_admin_db_hostname']") - print("-d / --dbdir= - database directory path, defaults to CFG['db_directory']") - print("-c / --dbconf= - database directory path, defaults to CFG['db_configuration']") - print("-D / --dbname= - database name, defaults to CFG['dcae_admin_db_databasename']") - print("-n / --nocreate - do not create the databases / users") - print("-I / --ignoredb - ignore current state of database") - print("-U / --user= - user to login as, defaults to CFG['dcae_admin_db_username']") - print("-P / --password= - password for user, defaults to CFG['dcae_admin_db_password']") - print("-B / --bindir= - postgresql bin directory, defaults to CFG['pg_bin_directory']") - print("-i / --ignorefile= - skip configuration if this file is present, defaults to CFG['skip_configuration_file']") - print("-R / --remove - remove old databases / users") - print("-J / --jsontop= - top of json tree, as in \"['pgaas']\"") - print("-l / --logcfg= - ECOMP DCAE Common Logging configuration file") - print("-e / --errors= - where to redirect error output, defaults to CFG['dcae_admin_db_errors_file'] then stderr") - print("-t / --trace= - where to redirect trace output, defaults to CFG['dcae_admin_db_trace_file'] then stderr") - print("-v - verbose") - sys.exit(2) - -def checkOption(options, name, propname, optletter, encrypted=False, cdfPropname = None): - """ - Check if the specified option exists. If not, grab it from the configuration file. - Complain if it still does not exist. - """ - if name not in options: - ret = getPgaasPropValue(propname, encrypted=encrypted, dflt=None, skipComplaining=True) - if ret is None and cdfPropname is not None: - ret = getCdfPropValue(cdfPropname, encrypted=encrypted) - options[name] = ret - requireOption("either %s or config[%s]" % (optletter, propname), options[name]) - -def reviewOpts(): - """ - Parse the options passed to the command, and return them in the dictionary - """ - try: - opts, args = getopt.getopt(sys.argv[1:], "B:c:D:d:e:H:IJ:l:nP:Rt:U:hv?", - [ "dbhost=", "dbdir=", "dbconf=", - "dbname=", "dbuser=", "dbpassword=", - "bindir=", "errors=", "trace=", "logcfg=", - "nocreate", "ignoredb", "remove", "ignorefile=", - "jsontop=", - "help", "verbose"]) - except getopt.GetoptError as err: - usage(str(err)) - - propVerbosity = getPgaasPropValue("dcae_admin_db_verbosity", dflt='0') - if propVerbosity is not None: - global verbose - verbose = int(propVerbosity) - retOptions = { } - ignoreFile = getPgaasPropValue("skip_configuration_file", dflt=None) - for o, a in opts: - if o in ("-v", "--verbose"): - # global verbose - verbose += 1 - elif o in ("-c", "--dbconf"): - retOptions["dbconf"] = a - elif o in ("-H", "--dbhost"): - retOptions["dbhost"] = a - elif o in ("-d", "--dbdir"): - retOptions["dbdir"] = a - elif o in ("-D", "--dbname"): - retOptions["dbname"] = a - elif o in ("-U", "--dbuser"): - retOptions["dbuser"] = a - elif o in ("-P", "--dbpassword"): - retOptions["dbpassword"] = a - elif o in ("-B", "--bindir"): - retOptions["bindir"] = a - elif o in ("-n", "--nocreate"): - retOptions["nocreate"] = True - elif o in ("-I", "--ignoredb"): - retOptions["ignoredb"] = True - elif o in ("-R", "--remove"): - retOptions["noremove"] = True - elif o in ("-J", "--jsontop"): - retOptions["jsontop"] = a - elif o in ("-l", "--logcfg"): - retOptions["logcfg"] = a - elif o in ("-e", "--errors"): - retOptions["errors"] = a - elif o in ("-i", "--ignorefile"): - ignoreFile = a - elif o in ("-t", "--trace"): - retOptions["trace"] = a - elif o in ("-h", "--help"): - usage() - else: - usage("unhandled option: %s" % o) - if "errors" not in retOptions: - retOptions["errors"] = getPgaasPropValue("dcae_admin_db_errors_file") - if "errors" in retOptions and retOptions["errors"] is not None: - try: - errorOutput = open(retOptions["errors"], "a") - except Exception as e: - die("Cannot open errors file '%s': %s" % (retOptions["errors"], e)) - if ignoreFile is not None: - trace("checking to see if skip_configuration_file(%s) exists" % ignoreFile) - retOptions["ignorefile"] = "yes" if os.path.isfile(ignoreFile) else "no" - trace("ignorefile=%s" % retOptions["ignorefile"]) - else: - retOptions["ignorefile"] = None - if "trace" not in retOptions: - retOptions["trace"] = getPgaasPropValue("dcae_admin_db_trace_file") - if "trace" in retOptions and retOptions["trace"] is not None: - try: - traceOutput = open(retOptions["trace"], "a") - except Exception as e: - die("Cannot open trace file '%s': %s" % (retOptions["trace"], e)) - if "logcfg" not in retOptions: - retOptions["logcfg"] = getPgaasPropValue("dcae_admin_db_common_logger_config") - if "logcfg" in retOptions and retOptions["logcfg"] is not None: - logcfg = retOptions["logcfg"] - import uuid - instanceUUID = uuid.uuid1() - serviceName = "DCAE/pgaas" - # print(">>>>>>>>>>>>>>>> using common logger. UUID=%s, serviceName=%s, cfg=%s" % (instanceUUID, serviceName, logcfg)) - global errorLogger, debugLogger, auditLogger, metricsLogger - errorLogger = CommonLogger.CommonLogger(logcfg, "error", instanceUUID=instanceUUID, serviceName=serviceName) - debugLogger = CommonLogger.CommonLogger(logcfg, "debug", instanceUUID=instanceUUID, serviceName=serviceName) - auditLogger = CommonLogger.CommonLogger(logcfg, "audit", instanceUUID=instanceUUID, serviceName=serviceName) - metricsLogger = CommonLogger.CommonLogger(logcfg, "metrics", instanceUUID=instanceUUID, serviceName=serviceName) - auditLogger.info("using common logger. UUID=%s, serviceName=%s, cfg=%s" % (instanceUUID, serviceName, logcfg)) - - checkOption(retOptions, "dbname", "dcae_admin_db_databasename", "-D") - checkOption(retOptions, "dbuser", "dcae_admin_db_username", "-U") - checkOption(retOptions, "dbpassword", "dcae_admin_db_password", "-P", encrypted=True, cdfPropname="postgres") - checkOption(retOptions, "dbhost", "dcae_admin_db_hostname", "-H") - checkOption(retOptions, "dbdir", "db_directory", "-d") - checkOption(retOptions, "bindir", "pg_bin_directory", "-B") - if "jsontop" not in retOptions: - retOptions["jsontop"] = getPgaasPropValue("dcae_admin_db_jsontop") - trace("env=%s" % str(os.environ)) - trace("ignorefile=%s" % ignoreFile) - return retOptions, args - -def main(): - keyedOptions, args = reviewOpts() - trace("Invoked as: %s" % str(sys.argv)) - audit("Invoked as: %s" % str(sys.argv)) - - if len(args) == 0: - usage("no operation specified") - elif args[0] == "configurationChanged": - if len(args) != 2: - usage("too many arguments") - configurationChanged(keyedOptions, args[1]) - elif args[0] == "suspend": - if len(args) != 1: - usage("too many arguments") - suspendOperations(keyedOptions) - elif args[0] == "resume": - if len(args) != 1: - usage("too many arguments") - resumeOperations(keyedOptions) - elif args[0] == "test": - if len(args) != 1: - usage("too many arguments") - testOperations(keyedOptions) - elif args[0] == "newdb": - if len(args) != 5: - usage("wrong number of arguments") - newDb(keyedOptions, args[1], args[2], args[3], args[4]) - else: - usage("unrecognized operation '%s'" % args[0]) - -def suspendOperations(options): - """ - Execute the "suspend" sub-command. - """ - runProgram(["pkill", "repmgrd"]) - program = options["bindir"] + "/pg_ctl" - cmd = [program, "stop", "-D", options["dbdir"]] - runProgram(cmd) - audit("suspendOperations") - -def resumeOperations(options): - """ - Execute the "resume" sub-command. - """ - cmd = [options["bindir"] + "/pg_ctl", "start", "-D", options["dbdir"], "-o", "configfile=" + options["dbconf"]] - runProgram(cmd) - runProgram(["/opt/app/pgaas/bin/repmgrcd", "-d"]) - audit("resumeOperations") - -def testOperations(options): - """ - Respond to the "test" sub-command. - """ - program = options["bindir"] + "/pg_ctl" - cmd = [program, "status", "-D", options["dbdir"]] - ret = runProgram(cmd) - # pg_ctl: no server running - # pg_ctl: server is running (PID: 13988) - # does /var/run/postgresql/inmaintenance exist? -> YELLOW - cmdRepmgr = ["pgrep", "repmgrd"] - retRepmgr = runProgram(cmdRepmgr) - - msg = "????" - if os.path.isfile("/var/run/postgresql/inmaintenance"): - msg = "YELLOW: in maintenance mode" - elif re.search("no server running", ret): - msg = "RED: no PG server running" - elif re.search("server is running", ret) and re.search("[0-9]+", retRepmgr): - msg = "GREEN" - elif re.search("server is running", ret): - msg = "YELLOW: no repmgrd running" - elif re.search("[0-9]+", retRepmgr): - msg = "YELLOW: no PG server running" - else: - msg = "YELLOW: neither PG server nor repmgrd are running" - audit("test: " + msg) - print(msg, end="") - -def runProgram(cmd): - """ - Run the given command, returning the standard output as a string. - If there is an error, return None. - """ - try: - p=subprocess.Popen(cmd,shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE) - (stdout, stderr) = p.communicate() - except Exception as e: - print("Error running program because: {0}".format(e), file=errorOutput) - return None - else: - if stderr: - print("Error running program because: {0} ".format(stderr), file=errorOutput) - return None - else: - trace("runProgram() => " + str(stdout), minLevel=2) - return stdout.decode('utf-8').rstrip('\n') - -def configurationChanged(options, jsonFile): - """ - We received a new JSON configuration file - """ - audit("configurationChanged " + jsonFile) - if options["ignorefile"] == "yes": - trace("skipping database reconfiguration because skip_configuration_file exists") - return - - if not os.path.isfile(jsonFile): - die("json file %s does not exist" % jsonFile) - - try: - inp = json.load(open(jsonFile,"r")) - except Exception as e: - die("Cannot open jsonFile '%s': %s" % (jsonFile, e)) - - if verbose: - dumpJSON(inp, "incoming JSON") - - jsonTop = options["jsontop"] - if not jsonTop is None: - e = "inp" + jsonTop - trace("eval(%s)" % e) - inp = eval(e,{"__builtins__":None},{"inp":inp}) - if verbose: - dumpJSON(inp, "modified JSON") - - setupDictionaryDatabases(options, inp) - -def setupDictionaryDatabases(options, inp): - """ - Set up the databases listed in the dictionary - """ - - # trace("version=%s" % requireJSON("version", inp, "version")) - requireJSON("databases", inp, "databases") - con = None - try: - con = dbConnect(database = options["dbname"], user = options["dbuser"], password = options["dbpassword"], host = options["dbhost"]) - setupDatabases(con, options, requireJSON("databases", inp, "databases")) - - except psycopg2.DatabaseError as e: - die('Error %s' % e) - - finally: - if con: - con.commit() - con.close() - -def newDb(options, dbName, adminPswd, userPswd, viewerPswd): - """ - Given the database name and passwords, set up a database and corresponding users. - For example, with dbname="foo", adminPswd="fooa", userPswd="foou" and viewerPswd="foov", - act the same as if we had received the json configuration: - { - 'databases': { - 'foo': { - 'ownerRole': 'foo_admin', - 'roles': { - 'foo_admin': { - 'password': 'fooa', - 'role': 'admin' - }, - 'foo_user': { - 'password': 'foou', - 'role': 'writer' - }, - 'foo_viewer': { - 'password': 'foov', - 'role': 'reader' - } - } - } - } - } - """ - if not re.match("^[A-Za-z][A-Za-z0-9_]*$", dbName): - errorPrint("'%s' is not a valid database name" % dbName) - return - - adminName = dbName + "_admin" - userName = dbName + "_user" - viewerName = dbName + "_viewer" - - setupDictionaryDatabases(options, { - 'databases': { - dbName: { - 'ownerRole': adminName, - 'roles': { - adminName: { - 'password': adminPswd, - 'role': 'admin' - }, - userName: { - 'password': userPswd, - 'role': 'writer' - }, - viewerName: { - 'password': viewerPswd, - 'role': 'reader' - } - } - } - } - }) - -def dumpJSON(js, msg): - tracePrint("vvvvvvvvvvvvvvvv %s" % msg) - tracePrint(json.dumps(js, indent=4)) - tracePrint("^^^^^^^^^^^^^^^^ %s" % msg) - -def setupDatabases(con, options, dbList): - """ - Do what is needed to set up all of the databases - """ - currentDatabases = dbGetFirstColumnAsMap(con, "select datname from pg_database where datistemplate = false") - currentRolenames = dbGetFirstColumnAsMap(con, "select rolname from pg_roles") - trace("currentDatabases = " + str(currentDatabases)) - for dbName in dbList: - trace("dbName='%s'" % str(dbName)) - setupDatabase(con, options, currentDatabases, currentRolenames, dbName, dbList[dbName]) - -def setupDatabase(con, options, currentDatabases, currentRolenames, dbName, dbInfo): - """ - Do what is needed to set up a given databases and its users - """ - - dbOwnerRole = requireJSON("databases[].ownerRole", dbInfo, "ownerRole") - trace("dbName='%s', dbOwnerRole='%s'" % (dbName, dbOwnerRole)) - doesDbExist = dbName in currentDatabases - trace("does %s exist? %s" % (dbName, doesDbExist)) - foundOwnerRole = False - dbRoles = dbInfo["roles"] - for name in dbRoles: - u = dbRoles[name] - if name == dbOwnerRole and u["role"] == "admin": - foundOwnerRole = True - if u["role"] not in ("admin","writer","reader"): - die("For database %s, the role '%s' is not one of admin/writer/reader" % (dbName, u.role)) - if not foundOwnerRole: - die("For database %s, information on the ownerRole '%s' was not found" % (dbName, dbOwnerRole)) - for name in dbRoles: - userInfo = dbRoles[name] - if name in currentRolenames and ("ignoredb" not in options or not options["ignoredb"]): - trace("The role %s already exists, skipping" % name) - updatePassword(con, options, dbName, name, userInfo) - else: - setupUser(con, options, dbName, name, userInfo) - if doesDbExist and ("ignoredb" not in options or not options["ignoredb"]): - trace("The database %s already exists, skipping" % dbName) - else: - makeDatabase(con, options, dbName, dbOwnerRole, dbInfo, dbRoles) - for name in dbRoles: - userInfo = dbRoles[name] - if name in currentRolenames and ("ignoredb" not in options or not options["ignoredb"]): - trace("The role %s already exists, skipping grants" % name) - else: - modifyGrants(con, options, dbName, name, userInfo) - -def makeDatabase(con, options, dbName, dbOwnerRole, dbInfo, dbRoles): - """ - Execute the SQL to create a database - - TODO: verify grants against what is actually there - """ - ownerRole = dbInfo["ownerRole"] - userRole = "{0}_common_user_role".format(dbName) - viewerRole = "{0}_common_viewer_role".format(dbName) - - optionalDbExecute(con, options, "CREATE ROLE {0}".format(userRole)) - optionalDbExecute(con, options, "CREATE ROLE {0}".format(viewerRole)) - - trace("Creating database %s with owner '%s'" % (dbName, ownerRole)) - optionalDbExecute(con, options, "CREATE DATABASE %s WITH OWNER %s" % (dbName, ownerRole)) - con2 = None - try: - con2 = dbConnect(database = dbName, user = options["dbuser"], password = options["dbpassword"], host = options["dbhost"]) - - optionalDbExecute(con2, options, "REVOKE ALL on DATABASE {0} FROM {1}".format(dbName, viewerRole)) - optionalDbExecute(con2, options, "REVOKE ALL on DATABASE {0} FROM {1}".format(dbName, userRole)) - for name in dbRoles: - userInfo = dbRoles[name] - if userInfo["role"] == "writer" or userInfo["role"] == "reader": - optionalDbExecute(con2, options, "REVOKE ALL on DATABASE {0} FROM {1}".format(dbName, name)) - - # user can do everything viewer can - optionalDbExecute(con2, options, "GRANT {0} TO {1}".format(viewerRole, userRole)) - # admin can do everything user and viewer can - optionalDbExecute(con2, options, "GRANT {0} TO {1}".format(userRole, ownerRole)) - - # viewer, user, admin can connect - optionalDbExecute(con2, options, "GRANT CONNECT ON DATABASE {0} TO {1}".format(dbName, viewerRole)) - - # create a schema we can optionally use * - schemaName = "{0}_db_common".format(dbName) - optionalDbExecute(con2, options, "CREATE SCHEMA if not exists {0} AUTHORIZATION {1}".format(schemaName, ownerRole)) - - # search_path is not inherited, so set it here - for role in [ ownerRole, userRole, viewerRole ]: - optionalDbExecute(con2, options, "ALTER ROLE {1} IN DATABASE {0} SET search_path = public, {2}".format(dbName, role, schemaName)) - - # viewer,user can select from schema - optionalDbExecute(con2, options, "GRANT USAGE ON SCHEMA {0} TO {1}".format(schemaName, viewerRole)) - # admin can create on schema - optionalDbExecute(con2, options, "GRANT CREATE ON SCHEMA {0} TO {1}".format(schemaName, ownerRole)) - - # viewer, user, admin can select on tables - optionalDbExecute(con2, options, "ALTER DEFAULT PRIVILEGES FOR ROLE {1} GRANT SELECT ON TABLES TO {0}".format(viewerRole, ownerRole)) - # user, admin can ins/upd/del/tru on tables - optionalDbExecute(con2, options, "ALTER DEFAULT PRIVILEGES FOR ROLE {1} GRANT INSERT, UPDATE, DELETE, TRUNCATE ON TABLES TO {0}".format(userRole, ownerRole)) - # user, admin can update on sequences - optionalDbExecute(con2, options, "ALTER DEFAULT PRIVILEGES FOR ROLE {1} GRANT USAGE, SELECT, UPDATE ON SEQUENCES TO {0}".format(userRole, ownerRole)) - - # user, admin can create temp tables - optionalDbExecute(con2, options, "GRANT TEMP ON DATABASE {0} TO {1}".format(dbName, userRole)) - - for name in dbRoles: - userInfo = dbRoles[name] - if userInfo["role"] == "writer": - optionalDbExecute(con2, options, "GRANT {0} TO {1}".format(userRole, name)) - elif userInfo["role"] == "reader": - optionalDbExecute(con2, options, "GRANT {0} TO {1}".format(viewerRole, name)) - - # search_path is not inherited, so set it here - optionalDbExecute(con2, options, "ALTER ROLE {1} IN DATABASE {0} SET search_path = public, {2}".format(dbName, name, schemaName)) - - except psycopg2.DatabaseError as e: - die('Error %s' % e) - - finally: - if con2: - con2.commit() - con2.close() - -def checkUsername(userName): - """ - A value of type name is a string of 63 or fewer characters1. A name must start - with a letter or an underscore; the rest of the string can contain letters, - digits, and underscores. - """ - trace("checkUsername(%s)" % userName) - if re.match("[A-Za-z_][A-Za-z0-9_]*$", userName): - return True - else: - errorPrint("%s is not a valid userName" % userName) - return False - -def setupUser(con, options, dbName, userName, userInfo): - """ - Do what is needed to to set up a user for a database - """ - if checkUsername(userName): - trace("For dbName='%s', create user '%s'" % (dbName, userName)) - userPassword = userInfo["password"] - optionalDbExecute(con, options, "create user %s with password '%s'" % (userName, userPassword)) - -def updatePassword(con, options, dbName, userName, userInfo): - """ - Do what is needed to update a user's password - """ - if checkUsername(userName): - trace("For dbName='%s', alter user '%s' password" % (dbName, userName)) - userPassword = userInfo["password"] - optionalDbExecute(con, options, "alter user %s with password '%s'" % (userName, userPassword)) - -def modifyGrants(con, options, dbName, userName, userInfo): - """ - Do what is needed to to set up a user for a database with the proper grants - - TODO: if user exist, verify current grants - """ - if checkUsername(userName): - userRole = userInfo["role"] - trace("For dbName='%s', set up user '%s' as a '%s'" % (dbName, userName, userRole)) - if userRole == "writer": - optionalDbExecute(con, options, "grant %s_common_user_role to %s" % (dbName, userName)) - elif userRole == "reader": - optionalDbExecute(con, options, "grant %s_common_viewer_role to %s" % (dbName, userName)) - # elif userRole == "admin": - # optionalDbExecute(con, options, "grant %s_common_admin_role to %s" % (dbName, userName)) - else: - trace("nothing to grant %s" % userName) - -def optionalDbExecute(con, options, cmd): - if "nocreate" in options and options["nocreate"]: - print(cmd) - else: - audit("Running: " + cmd) - dbExecute(con, cmd) - -""" -database utility functions -""" - -# def dbGetMap(con, cmd, args=[], skipTrace=False): -# def dbGetOneRowMap(con, cmd, args=[], skipTrace=False): - -def dbGetFirstRowOneValue(con, cmd, args=[], skipTrace=False): - """ - Do a select and return a single value from the first row - """ - row = dbGetFirstRow(con, cmd, args, skipTrace) - trace("row=" + str(row)) - if row is not None and len(row) > 0: - return row[0] - return None - -def dbGetFirstRow(con, cmd, args=[], skipTrace=False): - """ - Do a select and return the values from the first row - """ - cursor = dbExecute(con, cmd, args, skipTrace) - return cursor.fetchone() - -def dbGetFirstColumn(con, cmd, args=[], skipTrace=False): - """ - Do a select and return the first column's value from each row - """ - ret = [] - cursor = dbExecute(con, cmd, args, skipTrace) - for row in cursor: - for col in row: - ret.append(col) - break - return ret - -def dbGetFirstColumnAsMap(con, cmd, args=[], skipTrace=False, val=1): - """ - Do a select and return the first column's value from each row - """ - ret = {} - cursor = dbExecute(con, cmd, args, skipTrace) - for row in cursor: - for col in row: - ret[col] = val - break - return ret - -def dumpTable(con, tableName, max=-1): - """ - If being extra verbose, print out the entire table - """ - if verbose < 2: - return - print("================ " + tableName + " ================", file=traceOutput) - - cols = dbGetFirstColumn(con, "select column_name from information_schema.columns where table_name='" + tableName + "'", skipTrace=True) - print("num", end="|", file=traceOutput) - for col in cols: - print(col, end="|", file=traceOutput) - print("", file=traceOutput) - - if max > -1: - cursor = dbExecute(con, "select * from " + tableName + " limit " + str(max), skipTrace=True) - else: - cursor = dbExecute(con, "select * from " + tableName, skipTrace=True) - i = 0 - for row in cursor: - print("%d" % i, end="|", file=traceOutput) - i += 1 - for col in row: - print("%s" % (col), end="|", file=traceOutput) - print("", file=traceOutput) - print("================================================", file=traceOutput) - -def dbExecute(con, statement, args=[], skipTrace=False): - """ - Create a cursor, instantiate the arguments into a statement, trace print the statement, and execute the statement. - Return the cursor - """ - cursor = con.cursor() - stmt = cursor.mogrify(statement, args); - if not skipTrace: - trace("executing:" + str(stmt)) - cursor.execute(stmt) - global quiet - if not skipTrace: - trace("statusmessage=" + cursor.statusmessage + ", rowcount=" + str(cursor.rowcount)) - return cursor - -def dbConnect(database, user, password, host, autocommit = True): - """ - Create a connection, logging it in the process - Return the connection - """ - trace("connecting to database %s as %s on host %s" % (database, user, host)) - con =psycopg2.connect(database = database, user = user, password = password, host = host) - con.autocommit = autocommit - return con - -""" -Utility functions -""" - -def die(msg): - """ - Print a message to the error file and exit. - """ - errorPrint(msg) - sys.exit(1) - -def errorPrint(msg, file=errorOutput): - """ - Print a message to the error file. - """ - global errorLogger - # print("----------------> errorLogger=%s" % str(errorLogger)) - if errorLogger is not None: - errorLogger.error(msg) - else: - taggedPrint("ERROR", msg, file=file) - - -def tracePrint(msg, file=traceOutput): - """ - Print a message to the trace file. - """ - global debugLogger - # print("----------------> debugLogger=%s" % str(debugLogger)) - if debugLogger is not None: - debugLogger.debug(msg) - else: - taggedPrint("DEBUG", msg, file=file) - -def taggedPrint(tag, msg, file): - """ - Print a message to the trace file. - """ - dt = time.strftime('%Y-%m-%d %T', time.localtime()) - print("%s %s: %s" % (dt, tag, msg), file=file) - -def requireOption(nm, val): - """ - Die if a program parameter is not set - """ - return require("option", nm, val) - -def requireJSON(prnm, dict, nm): - """ - Die if a JSON value is not set - """ - if nm not in dict: - die("The JSON value '%s' is missing" % prnm) - return dict[nm] - -def require(type, nm, val): - """ - Die if a value is not set - """ - if val is None: - die("The %s '%s' is missing" % (type, nm)) - return val - -def trace(msg, minLevel=1): - """ - Print a message to trace output if verbose is turned on. - """ - global verbose - if verbose >= minLevel: - tracePrint(msg) - -def audit(msg): - """ - Print a message to audit log if one is being used - """ - global auditLogger - if auditLogger is not None: - auditLogger.info(msg) - -def getCdfPropValue(nm, encrypted=False, cfg="/opt/app/cdf/lib/cdf.cfg", dflt=None, skipComplaining=False): - """ - Return a value from the configuration file /opt/app/cdf/lib/cdf.cfg - """ - return getPropValue(nm=nm, encrypted=encrypted, cfg=cfg, dflt=dflt, skipComplaining=skipComplaining) - -def getPgaasPropValue(nm, encrypted=False, cfg="/opt/app/pgaas/lib/pgaas.cfg", dflt=None, skipComplaining=False): - """ - Return a value from the configuration file /opt/app/pgaas/lib/pgaas.cfg - """ - return getPropValue(nm=nm, encrypted=encrypted, cfg=cfg, dflt=dflt, skipComplaining=skipComplaining) - -getPropDict = { } - -def getPropValue(nm, encrypted=False, cfg=None, dflt=None, skipComplaining=False): - """ - Return a value from the specified configuration file - """ - if cfg is None: - return None - global getPropDict - if getPropDict.get(cfg): - savedDate = getPropDict[cfg] - # trace("getPropValue: savedDate[" + cfg + "]=" + str(savedDate)) - cfgDate = os.path.getmtime(cfg) - # trace("getPropValue: cfgDate=" + str(cfgDate)) - if float(savedDate) >= float(cfgDate): # cfg has not changed - val = getPropDict.get(cfg + ":" + nm) - # trace("getPropValue: val=" + val) - if val is not None: - # trace("getPropValue: getPropValue(saved) => '%s'" % str(val)) - return val - else: # clear out any previously saved keys - cfgcolon = cfg + ":" - for k in list(getPropDict.keys()): - if re.match(cfgcolon, k): - del getPropDict[k] - getPropValueProgram = '/opt/app/cdf/bin/getpropvalue' - if encrypted: - cmd = [getPropValueProgram, "-f", cfg, "-x", "-n", nm] - else: - cmd = [getPropValueProgram, "-f", cfg, "-n", nm] - # trace("getPgaasPropValue: cmd=" + str(cmd)) - - try: - with subprocess.Popen(cmd,shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE) as p: - (origString, stderrString) = p.communicate() - except Exception as e: - traceback.print_exc() - print("Error decoding string because {0}".format(e), file=errorOutput) - return None - else: - if stderrString: - if not re.search("Configuration property .* must be defined", stderrString.decode('utf-8')) and not skipComplaining: - print("Error decoding string because: {0} ".format(stderr), file=errorOutput) - return dflt - else: - trace("getPgaasPropValue() => " + str(origString), minLevel=2) - return origString.decode('utf-8').rstrip('\n') - -if __name__ == "__main__": - main() diff --git a/pgaas/src/stage/opt/app/pgaas/bin/dump-designate-zone b/pgaas/src/stage/opt/app/pgaas/bin/dump-designate-zone deleted file mode 100755 index 5e9ff44..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/dump-designate-zone +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - -import requests, sys, os, subprocess, argparse - -def checkstatus(resp, msg): - if resp.status_code >= 300: - print(resp) - print(resp.content) - raise Exception(msg) - -def reportrs(): - resp = requests.get('{0}/v2/zones/{1}/recordsets?limit=1000'.format(dns, zid), headers=osauth) - checkstatus(resp, 'Failed to list recordsets') - for rs in resp.json()['recordsets']: - tl = '' - if 'ttl' in rs and rs['ttl'] is not None: - tl = ' {0}'.format(rs['ttl']) - print('# {0}'.format(rs['id'])) - for r in rs['records']: - print('{0}{1} IN {2} {3}'.format(rs['name'], tl, rs['type'], r)) - -if __name__ == '__main__': - parser = argparse.ArgumentParser(description="Dump a Designate zone registration") - parser.add_argument("-a", "--authurl", type=str, help="Authentication URL), defaults to $DESIGNATEAUTHURL") - parser.add_argument("-t", "--tenantname", type=str, help="Tenant name") - parser.add_argument("-u", "--user", type=str, help="Username, defaults to $DESIGNATEUSER") # , default=os.environ.get('DESIGNATEUSER')) - parser.add_argument("-p", "--password", type=str, help="Password, defaults to $DESIGNATEPASSWORD") # , default=os.environ.get('DESIGNATEPASSWORD')) - parser.add_argument("-d", "--domain", type=str, help="Domain to search, defaults to $DESIGNATEDOMAIN") # , default=os.environ.get('DESIGNATEDOMAIN')) - parser.add_argument("-T", "--timeout", type=int, help="Timeout on requests, defaults to 120", default=120) # , default=os.environ.get('DESIGNATEDOMAIN')) - parser.add_argument("-v", "--verbose", help="turn on debugging", action="store_true") # , default=os.environ.get('DESIGNATEURL')) - args = parser.parse_args() - - def checkarg(arg, var, parms, dflt = None): - if not arg: arg = os.environ.get(var) - if not arg: arg = dflt - if not arg: exit(parms + "/$" + var + " not set") - return arg - - args.authurl = checkarg(args.authurl, "DESIGNATEAUTHURL", "-a/--authurl") - args.tenantname = checkarg(args.tenantname, "DESIGNATETENANTNAME", "-t/--tenantname") - args.user = checkarg(args.user, "DESIGNATEUSER", "-u/--user") - args.password = checkarg(args.password, "DESIGNATEPASSWORD", "-p/--password") - args.domain = checkarg(args.domain, "DESIGNATEDOMAIN", "-d/--domain", subprocess.run(['dnsdomainname'], stdout=subprocess.PIPE).stdout.decode('utf-8').rstrip()) - if not args.domain.endswith("."): args.domain = args.domain + "." - - print("Domain = {0}".format(args.domain)) - - resp = requests.post(args.authurl + '/tokens', json={'auth':{'tenantName': args.tenantname, 'passwordCredentials': {'username': args.user, 'password': args.password }}}, timeout=args.timeout) - checkstatus(resp, 'Failed to get identity token') - respj = resp.json()['access'] - osauth = {'X-Auth-Token': respj['token']['id'] } - dns = None - for se in respj['serviceCatalog']: - if se['type'] == 'dns': - dns = se['endpoints'][0]['publicURL'] - break - if not dns: - printf("No dns record found") - else: - print('DNS is {0}'.format(dns)) - - resp = requests.get('{0}/v2/zones'.format(dns), headers=osauth, timeout=args.timeout) - checkstatus(resp, 'Failed to list zones') - respj = resp.json()['zones'] - zid = None - for z in respj: - if args.verbose: print("Looking at %s" % z, file=sys.stderr) - if z['name'] == args.domain: - zid = z['id'] - break - - if not zid: - print("Domain {0} not found".format(args.domain)) - else: - print('Zone is {0}'.format(zid)) - reportrs() diff --git a/pgaas/src/stage/opt/app/pgaas/bin/gen-repmgr-info b/pgaas/src/stage/opt/app/pgaas/bin/gen-repmgr-info deleted file mode 100755 index b210e58..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/gen-repmgr-info +++ /dev/null @@ -1,247 +0,0 @@ -#!/usr/bin/perl -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -# NAME -# gen-repmgr-info - extract information about the system appropriate for use with repmgr -# -# DESCRIPTION -# gen-repmgr-info -n hosts options... -# -# for a list of hosts such as "uiopzxc5pepstg00.grant.example.com|uiopzxc5pepstg01.grant.example.com|uiopmtc6njpstg00.grant.example.com|uiopmtc6njpstg01.grant.example.com" -# extract various pieces of information about the list. For example, generate a list of repmgr node numbers like this: -# uiopzxc5pepstg00.grant.example.com 100 -# uiopzxc5pepstg01.grant.example.com 101 -# uiopmtc6njpstg00.grant.example.com 200 -# uiopmtc6njpstg01.grant.example.com 201 - -use strict vars; - -use Getopt::Std; -use Digest::SHA qw(sha256_hex); - -sub usage { - my $msg = shift; - print "$msg\n" if $msg; - print "Usage: $0 -n 'node|node|node|...' [-S] [-s site] [-L] [-l node] [-c node] [-C node] [-m] [-M node] [-e] [-v] [-p]\n"; - print "-n list of nodes (FQDNs), |-separated\n"; - print "-S show list of all sites and their node # values\n"; - print "-s site\tshow the node # value for a given site\n"; - print "-L show list of all nodes and their node # values\n"; - print "-l node\tshow the node # value for a given node\n"; - print "-C node\tshow the machine name that a given node should cascade from, or DEFAULT\n"; - print "-c node\tshow the machine node # that a given node should cascade from, or DEFAULT\n"; - print "-e node\tshow the list of nodes on the same site as the given node, |-separated\n"; - print "-m\twhich system is the 'master'\n"; - print "-M node\twhich system matches the given node, taking FQDN into consideration\n"; - print "-v\tverbose\n"; - print "-p\tprint the node names in sorted order\n"; - exit 1; -} - - -my %optargs; -getopts('C:c:e:E:Ll:M:mn:pPSs:v', \%optargs) or usage(); -my $verbose = $optargs{v}; - -my $pgnodes = $optargs{n} or usage("-n is required"); - -# generate the data about the nodes -my @pgnodes = sort split(/[|]/, $pgnodes); - -# @sites contains the list of all site names. -# For uiopzxc5pepstg01.grant.example.com, the sitename will be uiopzxc5pepstg. -my @sites = genSites(); -my %pgnodesToSite = genPgnodeToSites(); - -# The %siteValues contains 100, 200, etc for each site name -# print "\nsites=" . join("\n", @sites); -my %siteValues = genSiteValues(); - -# The %pgnodeValues contains 100, 101, 200, 201, etc for each node name -my %pgnodeValues = genPgnodeValues(); -# The %valuesToPgnode contains node names for each value -my %valuesToPgnode = genValuesToPgnodes(); - -if ($optargs{L}) { - for my $pgnode (@pgnodes) { - print "$pgnode $pgnodeValues{$pgnode}\n"; - } -} - -if ($optargs{S}) { - for my $site (@sites) { - print "$site $siteValues{$site}\n"; - } -} - -if ($optargs{s}) { - for my $site (@sites) { - print "$siteValues{$site}\n" if $site eq $optargs{s}; - } -} - -if ($optargs{l}) { - for my $pgnode (@pgnodes) { - print "$pgnodeValues{$pgnode}\n" if $pgnode eq $optargs{l}; - } -} - -if ($optargs{c}) { - my $pgnode = $optargs{c}; - my $pgnodeValue = $pgnodeValues{$pgnode}; - my $masterValue = int($pgnodeValue / 100) * 100; - if (($masterValue > 100) && (($masterValue % 100) > 0)) { - print "$masterValue\n"; - } else { - print "DEFAULT\n"; - } -} - -if ($optargs{C}) { - my $pgnode = $optargs{C}; - my $pgnodeValue = $pgnodeValues{$pgnode}; - my $masterValue = int($pgnodeValue / 100) * 100; - # print "pgnode=$pgnode, pgnodeValue=$pgnodeValue, masterValue=$masterValue\n"; - if (($pgnodeValue % 100) > 0) { - print "$valuesToPgnode{$masterValue}\n"; - } else { - print "DEFAULT\n"; - } -} - -sub enodes { - my $pgnodeSearch = $optargs{e}; - my $siteSearch = $pgnodesToSite{$pgnodeSearch}; - my $ret = ""; - # print "looking for $pgnodeSearch in $siteSearch\n"; - my $sep = ""; - for my $pgnode (@pgnodes) { - my $site = $pgnodesToSite{$pgnode}; - # print "looking at $pgnode in $site\n"; - if ($site eq $siteSearch) { - $ret .= "$sep$pgnode"; - $sep = "|"; - } - } - return $ret; -} - -if ($optargs{e}) { - my $ret = enodes(); - print "$ret\n"; -} - -if ($optargs{E}) { - print sha256_hex(enodes()) . "\n"; -} - -if ($optargs{m}) { - print "$pgnodes[0]\n"; -} - -if ($optargs{M}) { - my $node = $optargs{M}; - if ($node =~ /[.]/) { - print "$node\n"; - } else { - my $found; - for my $pgnode (@pgnodes) { - if ($pgnode =~ /^$node[.]/) { - print $node; - $found = 1; - last; - } - } - } -} - -sub pnodes { - return join("|", @pgnodes); -} - -if ($optargs{p}) { - print pnodes() . "\n"; -} - -if ($optargs{P}) { - print sha256_hex(pnodes()) . "\n"; -} - -# for a given node name uiopzxc5pepstg01.grant.example.com, the return uiopzxc5pepstg. -sub nodeToSite { - my $site = shift; - $site =~ s/[.].*//; - $site =~ s/\d*$//; - return $site; -} - -# from a list of nodes, generate the sorted list of sites -sub genSites { - my %sites = (); - # print "pgnodes=" . join("\n", @pgnodes); - for my $pgnode (@pgnodes) { - my $site = nodeToSite($pgnode); - $sites{$site} = $site; - } - my @sites = sort keys %sites; - return @sites; -} - -# from a list of nodes, generate a mapping from them to their sites -sub genPgnodeToSites { - my %sites = (); - for my $pgnode (@pgnodes) { - $sites{$pgnode} = nodeToSite($pgnode); - } - return %sites; -} - -# generate the 100, 200, etc for each site name -sub genSiteValues { - my %siteValues; - for (my $i = 0; $i <= $#sites; $i++) { - $siteValues{$sites[$i]} = ($i+1) * 100; - } - # print "\nsiteValues=\n"; for my $site (@sites) { print "$site $siteValues{$site}\n"; } - return %siteValues; -} - -sub genPgnodeValues { - my %pgnodeValues; - my $i = 0; - my $lastSite = ''; - for my $pgnode (@pgnodes) { - my $thisSite = nodeToSite($pgnode); - if ($thisSite eq $lastSite) { - $i++; - } else { - $i = 0; - } - $lastSite = $thisSite; - $pgnodeValues{$pgnode} = $siteValues{$thisSite} + $i; - } - # print "\nnodeValues=\n"; for my $pgnode (@pgnodes) { print "$pgnode $pgnodeValues{$pgnode}\n"; } - return %pgnodeValues; -} - -sub genValuesToPgnodes { - my %valuesToPgnode; - for my $pgnode (keys %pgnodeValues) { - my $value = $pgnodeValues{$pgnode}; - $valuesToPgnode{$value} = $pgnode; - } - return %valuesToPgnode; -} - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/healthcheck_status b/pgaas/src/stage/opt/app/pgaas/bin/healthcheck_status deleted file mode 100644 index 4e99de0..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/healthcheck_status +++ /dev/null @@ -1,3 +0,0 @@ -curl http://localhost:8000/healthcheck/status -curl http://localhost:8000/healthcheck/writablestatus -curl http://localhost:8000/healthcheck/readonlystatus diff --git a/pgaas/src/stage/opt/app/pgaas/bin/in.json b/pgaas/src/stage/opt/app/pgaas/bin/in.json deleted file mode 100755 index 697a51f..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/in.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - # sample configuration file for dcae_admin_db - "vmConfiguration": { - "$class": "org.onap.dcae.controller.service.storage.postgres.service.PostgresServiceConfiguration", - "state": "master", - "databases": { - "odcit": { - "created": "2016-05-10T01:52:39.431+0000", - "description": "A&AI DCAE Central Inventory", - "ownerRole": "odcit_admin", - "contacts": {"ws4361": { - "created": "2016-05-10T01:52:39.431+0000", - "fullName": "Wen Shang" - }}, - "roles": { - "odcit_admin": { - "created": "2016-05-10T01:52:39.431+0000", - "password": "odcit123", - "role": "admin", - "roleComments": [] - }, - "odcit_user": { - "created": "2016-05-10T01:52:39.431+0000", - "password": "odcit123", - "role": "writer", - "roleComments": [] - }, - "odcit_viewer": { - "created": "2016-05-10T01:52:39.431+0000", - "password": "odcit123", - "role": "reader", - "roleComments": [] - } - } - }, - "dmaap": { - "created": "2016-05-10T01:52:39.431+0000", - "description": "DMAAP Databus Configuration", - "ownerRole": "dmaap_admin", - "contacts": {"dl715d": { - "created": "2016-05-10T01:52:39.431+0000", - "fullName": "Dominic Lunanuova" - }}, - "roles": { - "dmaap_admin": { - "created": "2016-05-10T01:52:39.431+0000", - "password": "dmaap123", - "role": "admin", - "roleComments": [] - }, - "dmaap_user": { - "created": "2016-05-10T01:52:39.431+0000", - "password": "dmaap123", - "role": "writer", - "roleComments": [] - }, - "dmaap_viewer": { - "created": "2016-05-10T01:52:39.431+0000", - "password": "dmaap123", - "role": "reader", - "roleComments": [] - } - } - }, - "dcae_inv": { - "created": "2016-05-10T01:52:39.431+0000", - "description": "Running DCAE Services", - "ownerRole": "dcae_inv_admin", - "contacts": { - "mh677g": { - "created": "2016-05-10T01:52:39.431+0000", - "fullName": "Michael Hwang" - }}, - "roles": { - "dcae_inv_admin": { - "created": "2016-05-10T01:52:39.431+0000", - "password": "dcae_inv123", - "role": "admin", - "roleComments": [] - }, - "dcae_inv_user": { - "created": "2016-05-10T01:52:39.431+0000", - "password": "dcae_inv123", - "role": "writer", - "roleComments": [] - }, - "dcae_inv_viewer": { - "created": "2016-05-10T01:52:39.431+0000", - "password": "dcae_inv123", - "role": "reader", - "roleComments": [] - } - } - } - } - } -}
\ No newline at end of file diff --git a/pgaas/src/stage/opt/app/pgaas/bin/isrw b/pgaas/src/stage/opt/app/pgaas/bin/isrw deleted file mode 100755 index d9e925e..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/isrw +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi - -export PATH=$PATH:$PGDIR/bin:/opt/java/jdk/jdk170/bin:/opt/app/cdf/bin:/opt/app/pgaas/bin:$PATH - -if [ -f /var/run/postgresql/inmaintenance ] -then - echo "Maintenance" -else - case `show_pg_is_in_recovery` in - *f* ) echo "Master" ;; - *t* ) echo "Secondary" ;; - esac -fi diff --git a/pgaas/src/stage/opt/app/pgaas/bin/list_masters b/pgaas/src/stage/opt/app/pgaas/bin/list_masters deleted file mode 100755 index a5e4506..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/list_masters +++ /dev/null @@ -1,79 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -# NAME -# list_masters - loop through the nodes in the cluster, using pgwget to determine if any are a master. - -CDF=/opt/app/cdf -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi -PATH=$PGDIR/bin:$CDF/bin:/opt/app/pgaas/bin:$PATH - -usage() -{ - exec 1>&2 - [ $# -gt 0 ] && echo "$@" - echo "Usage: $0 [-r] [-v]" - echo -e " -r check /ro instead of /rw" - echo -e " -v verbose" - exit 1 -} - -VERBOSE=false -CMD=rw -QUIET=--quiet -OUTPUT=-O/dev/null -while getopts rvQ c -do - case "$c" in - r ) CMD=ro ;; - Q ) QUIET= OUTPUT= ;; - v ) VERBOSE=: ;; - \?) usage ;; - esac -done -shift $(($OPTIND - 1)) - -# loop through the nodes in the cluster, using pgwget to determine if any are a master. Save in $@ -for i in $(getpropvalue -n pgnodes | sed 's/|/ /g') -do - $VERBOSE && echo "Checking $i" - if pgwget $QUIET $OUTPUT http://$i:8000/$CMD - then set -- "$@" $i - fi -done - -echo "$@" -case "$CMD" in - rw ) - case $# in - 1 ) exit 0 ;; # one master exists and is running - 0 ) exit 1 ;; # no masters exist - * ) exit 2 ;; # more than one master exist - esac - ;; - ro ) - case $# in - 0 ) exit 1 ;; # no masters exist - * ) exit 0 ;; # one or more masters+secondaries exist - esac - ;; -esac diff --git a/pgaas/src/stage/opt/app/pgaas/bin/makefile b/pgaas/src/stage/opt/app/pgaas/bin/makefile deleted file mode 100644 index 3e08be0..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/makefile +++ /dev/null @@ -1,69 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -all: - -STAGEDIR=/dev/null -DISTPATH=/opt/app/pgaas - -PYFILES= dcae_admin_db.py -SHFILES= check_cluster isrw list_masters pg_copy \ - pg_ctl_promote pg_ctl_restart pg_ctl_start pg_ctl_status pg_ctl_stop repmgrc repmgrdc \ - runpsql runpsqll startpsql setpropvalue show_pg_is_in_recovery show_pg_stat_activity show_pg_stat_archiver show_pg_stat_bgwriter \ - show_pg_stat_database show_pg_stat_database_conflicts show_pg_statio_user_functions show_pg_statio_user_indexes \ - show_pg_statio_user_sequences show_pg_statio_user_tables show_pg_stat_user_indexes show_pg_stat_user_tables \ - update_var_run_isrw startbackup stopbackup - -stage: - rm -rf $(STAGEDIR)/$(DISTPATH)/bin - mkdir -p $(STAGEDIR)/$(DISTPATH)/bin - for i in *; do \ - case $$i in \ - *.py ) \ - j=`basename $$i .py`; \ - cp $$i $(STAGEDIR)/$(DISTPATH)/bin/$$j; \ - chmod a+x $(STAGEDIR)/$(DISTPATH)/bin/$$j; \ - ;; \ - makefile | *~ ) ;; \ - * ) \ - if [ -f $$i ]; then \ - cp $$i $(STAGEDIR)/$(DISTPATH)/bin/$$i; \ - chmod a+x $(STAGEDIR)/$(DISTPATH)/bin/$$i; \ - fi; \ - ;; \ - esac; \ - done - -NODES="uiopmno5qwpstg01.grant.example.com|uiopmno5qwpstg00.grant.example.com|uiopmno6qwpstg00.grant.example.com|uiopmno6qwpstg01.grant.example.com" - -test-admin: - sudo -u postgres ./dcae_admin_db.py configurationChanged in.json - -test-gen: - ./gen-repmgr-info -n $(NODES) - ./gen-repmgr-info -S -L -n $(NODES) - ./gen-repmgr-info -s uiopmno6qwpstg -n $(NODES) - ./gen-repmgr-info -l uiopmno6qwpstg01.grant.example.com -n $(NODES) - ./gen-repmgr-info -c uiopmno5qwpstg00.grant.example.com -n $(NODES) - ./gen-repmgr-info -c uiopmno5qwpstg01.grant.example.com -n $(NODES) - ./gen-repmgr-info -c uiopmno6qwpstg00.grant.example.com -n $(NODES) - ./gen-repmgr-info -c uiopmno6qwpstg01.grant.example.com -n $(NODES) - ./gen-repmgr-info -e uiopmno5qwpstg01.grant.example.com -n $(NODES) - ./gen-repmgr-info -e uiopmno6qwpstg01.grant.example.com -n $(NODES) - ./gen-repmgr-info -m -n $(NODES) - ./gen-repmgr-info -C uiopmno5qwpstg00.grant.example.com -n $(NODES) - ./gen-repmgr-info -C uiopmno5qwpstg01.grant.example.com -n $(NODES) - ./gen-repmgr-info -C uiopmno6qwpstg00.grant.example.com -n $(NODES) - ./gen-repmgr-info -C uiopmno6qwpstg01.grant.example.com -n $(NODES) - ./gen-repmgr-info -p -n $(NODES) diff --git a/pgaas/src/stage/opt/app/pgaas/bin/pg_copy b/pgaas/src/stage/opt/app/pgaas/bin/pg_copy deleted file mode 100755 index ee2272b..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/pg_copy +++ /dev/null @@ -1,97 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi - -export PATH=$PATH:$PGDIR/bin - -# pg_dump -C -h localhost -U localuser dbname | psql -h remotehost -U remoteuser dbname -# pg_dump -C -h remotehost -U remoteuser dbname | psql -h localhost -U localuser dbname - -usage() -{ - exec 1>&2 - [ $# -gt 0 ] && echo "$@" - b=$(basename $0) - echo "Usage: $b [-v] -H fromhost [-P fromport] -U fromuser -D fromdb [-A | -S] -h tohost [-p toport] -h touser -d todb" - echo "Copy a database from a one host to a another" - echo -e "-H\tFQDN of host to copy from" - echo -e "-P\tport of database being copied from" - echo -e "-U\tUSER to login as on remote host being copied from" - echo -e "-W\tPASSWORD to use to login as on remote host being copied from" - echo -e "-D\tDB database on host to be copied from" - echo -e "-A\tcopy data only" - echo -e "-S\tcopy schema only" - echo -e "-h\tFQDN of host to copy to" - echo -e "-p\tport of database being copied to" - echo -e "-u\tUSER to login as on host being copied to" - echo -e "-w\tPASSWORD to use to login as on host being copied to" - echo -e "-d\tDB database on host to be copied to" - exit 1 -} - -REMOTEDATAONLY= -REMOTESCHEMAONLY= -REMOTEHOST= -REMOTEPORT= -REMOTEUSER= -REMOTEPASSWORD= -REMOTEDB= -LOCALHOST= -LOCALPORT= -LOCALUSER= -LOCALDB= -LOCALPASSWORD - -while getopts ASH:P:U:W:D:h:p::u:w:d: c -do - case $c in - A ) REMOTEDATAONLY=-a ;; - S ) REMOTESCHEMAONLY=-s ;; - H ) REMOTEHOST=$OPTARG ;; - P ) REMOTEPORT=$OPTARG ;; - U ) REMOTEUSER=$OPTARG ;; - W ) REMOTEPASSWORD=$OPTARG ;; - D ) REMOTEDB=$OPTARG;; - h ) LOCALHOST=$OPTARG ;; - p ) LOCALPORT=$OPTARG ;; - u ) LOCALUSER=$OPTARG ;; - w ) LOCALPASSWORD=$OPTARG ;; - d ) LOCALDB=$OPTARG;; - esac -done - - -[ -z "$REMOTEHOST" ] && usage "Missing -H option" -[ -z "$REMOTEPORT" ] && usage "Missing -P option" -[ -z "$REMOTEUSER" ] && usage "Missing -U option" -[ -z "$REMOTEDB" ] && usage "Missing -D option" -[ -z "$REMOTEPASSWORD" ] && usage "Missing -W option" -[ -z "$LOCALHOST" ] && usage "Missing -h option" -[ -z "$LOCALPORT" ] && usage "Missing -p option" -[ -z "$LOCALUSER" ] && usage "Missing -u option" -[ -z "$LOCALPASSWORD" ] && usage "Missing -w option" -[ -z "$LOCALDB" ] && usage "Missing -d option" -[ -n "$REMOTEDATAONLY" -a -n "$REMOTESCHEMAONLY" ] && usage "Either -A or -S may be specified, but not both" - -PGPASSWORD="$REMOTEPASSWORD" pg_dump -C $REMOTEDATAONLY $REMOTESCHEMAONLY -h $REMOTEHOST -U $REMOTEUSER $REMOTEDB | -PGPASSWORD="$LOCALPASSWORD" psql -h $LOCALHOST -U $LOCALUSER $LOCALDB diff --git a/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_promote b/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_promote deleted file mode 100755 index c976afa..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_promote +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi - -export PATH=$PATH:$PGDIR/bin - -pg_ctl promote -D /dbroot/pgdata/main/ diff --git a/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_restart b/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_restart deleted file mode 100755 index 6929d60..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_restart +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi - -export PATH=$PATH:$PGDIR/bin - -CONF=/opt/app/pgaas/main/postgresql.conf -if [ ! -f $CONF ] -then echo "$0: Cannot find PostgreSQL configuration" 1>&2; exit 1 -fi - -pg_ctl stop -D /dbroot/pgdata/main/ -echo Restarting in 5 -sleep 1 -echo Restarting in 4 -sleep 1 -echo Restarting in 3 -sleep 1 -echo Restarting in 2 -sleep 1 -echo Restarting in 1 -sleep 1 -pg_ctl start -D /dbroot/pgdata/main/ -o "-c config_file=$CONF" diff --git a/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_start b/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_start deleted file mode 100755 index 42117df..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_start +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi - -export PATH=$PATH:$PGDIR/bin - -CONF=/opt/app/pgaas/main/postgresql.conf -if [ ! -f $CONF ] -then echo "$0: Cannot find PostgreSQL configuration" 1>&2; exit 1 -fi - -pg_ctl start -D /dbroot/pgdata/main/ -o "-c config_file=$CONF" diff --git a/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_status b/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_status deleted file mode 100755 index 3383835..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_status +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi - -export PATH=$PATH:$PGDIR/bin - -pg_ctl status -D /dbroot/pgdata/main/ diff --git a/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_stop b/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_stop deleted file mode 100755 index b6c3563..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_stop +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi - -export PATH=$PATH:$PGDIR/bin - -pg_ctl stop -D /dbroot/pgdata/main/ diff --git a/pgaas/src/stage/opt/app/pgaas/bin/pgaas-verify-install b/pgaas/src/stage/opt/app/pgaas/bin/pgaas-verify-install deleted file mode 100644 index 607c8a7..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/pgaas-verify-install +++ /dev/null @@ -1,240 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -die() -{ - exec 1>&2 - echo "$@" - logger --stderr --priority local1.error --tag "DCAE" "$@" - exit 1 -} - -usage() -{ - exec 1>&2 - [ $# -gt 0 ] && echo "$@" - b=$(basename $0) - echo "Usage: $b [-v]" - echo "$b runs a variety of tests on the PG VM and database" - echo "It should be run as root or postgres." - echo "If run as root, it will do additional tests that are" - echo "not possible as a normal user. If not run as root or" - echo "postgres, other tests may fail." - echo " -v verbose" - echo " -P do not print VERIFIED" - exit 1 -} - -PRINTVERIFIED=: -while getopts Pv c -do - case $c in - P ) PRINTVERIFIED=false ;; - v ) set -x ;; - '?' ) usage ;; - esac -done -shift `expr $OPTIND - 1` - -# this can be run as root -ROOT=false -case `id` in - *"(root)"* ) ROOT=true ;; - *"(postgres)"* ) ;; - * ) echo "$0 should be run as either root or postgres" ;; -esac - -VERIFIEDCOUNT=0 -FAILEDCOUNT=0 -TOTALCOUNT=0 - -verified() -{ - (( VERIFIEDCOUNT = VERIFIEDCOUNT + 1 )) - (( TOTALCOUNT = TOTALCOUNT + 1 )) - $PRINTVERIFIED && echo "VERIFIED: $@" -} - -failed() -{ - (( FAILEDCOUNT = FAILEDCOUNT + 1 )) - (( TOTALCOUNT = TOTALCOUNT + 1 )) - echo "FAILED: $@" -} - -tabtext() -{ - echo "$@" | sed 's/^/ /' -} - -HOSTNAME=$(hostname -f) - -################################################################ -################ things set up by ################ -################ openstack ################ -################################################################ - -case $HOSTNAME in - *.*.* ) verified "hostname has a FQDN" ;; - * ) failed "hostname does not have a FQDN" ;; -esac - -################################################################ -################ things set up by ################ -################ controller dcae_install ################ -################################################################ - -#### user dcae is no longer used -#### if grep '^dcae:' /etc/passwd > /dev/null -#### then verified "dcae user exists" -#### else failed "dcae user does not exist" -#### fi -#### if $ROOT -#### then -#### if [ -s /etc/sudoers.d/dcae-postgres ] -#### then verified "dcae can sudo to postgres" -#### else failed "dcae cannot sudo to postgres" -#### fi -#### fi - -SHOWDF=false -SHOWMOUNT=false -for i in /opt/tools /opt/logs /dbroot/pgdata /dbroot/pglogs /dbroot/pgbackup -do - if df -h 2>&1 | grep " $i"'$' > /dev/null - then verified "$i has its own filesystem" - else failed "$i does not have its own filesystem"; SHOWDF=true - fi - - if mount | grep "^$i " | grep rw > /dev/null - then verified "$i is on a read-write filesystem" - else failed "$i is not on a read-write filesystem"; SHOWMOUNT=true - fi -done -$SHOWDF && tabtext "$(df -h 2>&1)" -$SHOWMOUNT && tabtext "$(mount 2>&1)" - -if grep '^postgres:' /etc/passwd > /dev/null -then verified "postgres user exists" -else failed "postgres user does not exist" -fi - -################################################################ -################ things set up by ################ -################ cdf package ################ -################################################################ - -if [ -d /opt/app/cdf ] -then verified "/opt/app/cdf is present" -else failed "/opt/app/cdf is present" -fi - -cdfcall=$(/opt/app/cdf/bin/getpropvalue -n foo 2>&1) -case "$cdfcall" in - *Configuration?property*must?be?defined* ) verified "CDF is installed and working" ;; - * ) failed "CDF is not installed and working"; tabtext "$cdfcall" ;; -esac - -################################################################ -################ things set up by ################ -################ pgaas-prep step ################ -################################################################ - -if grep "^pgnodes=.*$HOSTNAME" /opt/app/cdf/lib/cdf.cfg > /dev/null -then verified "HOSTNAME is part of cluster (cdf.cfg pgnodes)" -else failed "HOSTNAME is not part of cluster (cdf.cfg pgnodes)" -fi - -# check for certificate presence goes here - -if [ -s /lib/systemd/system/pgaas-idns.service ] -then verified "found pgaas-idns service properly installed for Ubuntu 16" -elif [ -s /etc/init/pgaas-idns.conf ] -then verified "found pgaas-idns service properly installed for Ubuntu 14" -else failed "pgaas-idns service has not been installed properly" -fi - -if ps -ef | grep '[i]DNS-responder' > /dev/null -then verified "iDNS-responder is running" - if ps -fu postgres | grep '[i]DNS-responder' > /dev/null - then verified "iDNS-responder is running as postgres" - else failed "iDNS-responder is running, but not as postgres" - fi -else failed "postgres does not have a logger process running" -fi - -if [ -d /var/run/postgresql ] -then verified "/var/run/postgresql exists" -else failed "/var/run/postgresql does not exist" -fi - -if [ -s /etc/logrotate.d/pgaas ] -then verified "/etc/logrotate.d/pgaas has been installed" -else failed "/etc/logrotate.d/pgaas has not been installed" -fi - - -################################################################ -################ things set up by ################ -################ pgaas-config step ################ -################################################################ - -if ps -fu postgres | grep "[p]ostgres: logger process" > /dev/null -then verified "postgres is running" -else failed "postgres does not have a logger process running" -fi - -if pgrep repmgrd > /dev/null -then verified "repmgrd is running" -else failed "repmgrd is not running" -fi - -if [ -f /opt/app/pgaas/bin/runpsqll ] -then - verified "/opt/app/pgaas/bin/runpsqll is installed" - roles=$( /opt/app/pgaas/bin/runpsqll "select rolname from pg_roles" ) - case "$roles" in - *repmgr* ) verified "postgres repmgr role name is present" ;; - * ) failed "postgres repmgr role name was not added"; tabtext "$roles" ;; - esac - rolcount=$( /opt/app/pgaas/bin/runpsqll "select count(rolname) from pg_roles" | awk 'NF > 0 {print $1}' ) - case $rolcount in - 1 | 2 ) failed "no additional postgresql role names have been added"; tabtext "$roles" ;; - * ) verified "additional postgresql role names have been added" ;; - esac - dxpgtemporal=$( /opt/app/pgaas/bin/runpsqll "select count(extname) from pg_extension where extname = 'temporal_tables'" | awk 'NF > 0 {print $1}' ) - case $dxpgtemporal in - 1 ) verified "temporal_tables extension has been added" ;; - * ) failed "temporal_tables extension has not been added" ;; - esac -else - failed "/opt/app/pgaas/bin/runpsqll is not installed" -fi - -if [ -f /opt/app/pgaas/bin/check_cluster ] -then - verified "/opt/app/pgaas/bin/check_cluster is installed" - ckcl=$( /opt/app/pgaas/bin/check_cluster 2>&1 ) - case $ckcl in - *No?such?file?or?directory* ) failed "check_cluster not found"; tabtext "$ckcl" ;; - *ERROR* ) failed "check_cluster returned error:"; tabtext "$ckcl" ;; - *WARNING* ) failed "check_cluster returned a warning:"; tabtext "$ckcl" ;; - * ) verified "check_cluster succeeded" ;; - esac -else - failed "/opt/app/pgaas/bin/check_cluster is not installed" -fi - -echo "$VERIFIEDCOUNT tests passed, $FAILEDCOUNT tests failed, $TOTALCOUNT total tests run" diff --git a/pgaas/src/stage/opt/app/pgaas/bin/pgwget b/pgaas/src/stage/opt/app/pgaas/bin/pgwget deleted file mode 100644 index d1d5f98..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/pgwget +++ /dev/null @@ -1,4 +0,0 @@ -# this command is used to access the iDNS status server running on a PGaaS instance - -wgetpswd=`/opt/app/cdf/bin/getpropvalue -x -n wgetpswd` -wget --http-user=pgaas --http-password=$wgetpswd "$@" diff --git a/pgaas/src/stage/opt/app/pgaas/bin/repmgrc b/pgaas/src/stage/opt/app/pgaas/bin/repmgrc deleted file mode 100644 index 8ce6ebf..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/repmgrc +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi - -export PATH=$PATH:$PGDIR/bin - -CONF=/opt/app/pgaas/main/repmgr.conf -if [ ! -f $CONF ] -then echo "$0: Cannot find repmgr configuration" 1>&2; exit 1 -fi - -repmgr -f $CONF "$@" diff --git a/pgaas/src/stage/opt/app/pgaas/bin/repmgrd-status-changes b/pgaas/src/stage/opt/app/pgaas/bin/repmgrd-status-changes deleted file mode 100644 index a735db5..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/repmgrd-status-changes +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -# %n - node ID -# %e - event type -# %s - success (1 or 0) -# %t - timestamp -# %d - details - -nodeID="$1" -eventType="$2" -success="$3" -timestamp="$4" -details="$5" - -LOG=/opt/logs/dcae/postgresql/server/repmgrstatus.log -PROMOTIONLOG=/var/run/postgresql/repmgr-promotion -echo `date` "$@" >> $LOG - -# The following event types are available: -# master_register -# standby_register -# standby_unregister -# standby_clone -# standby_promote -# standby_follow -# standby_switchover -# standby_disconnect_manual -# witness_create -# witness_register -# witness_unregister -# repmgrd_start -# repmgrd_shutdown -# repmgrd_failover_promote -# repmgrd_failover_follow - -case "$eventType" in - standby_promote ) - if [ "$success" -eq 1 ] - then echo $(date +%Y%m%d%H%M%S) "$@" >> $PROMOTIONLOG - fi -esac diff --git a/pgaas/src/stage/opt/app/pgaas/bin/repmgrdc b/pgaas/src/stage/opt/app/pgaas/bin/repmgrdc deleted file mode 100644 index 2831ed0..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/repmgrdc +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi - -export PATH=$PATH:$PGDIR/bin - -CONF=/opt/app/pgaas/main/repmgr.conf -if [ ! -f $CONF ] -then echo "$0: Cannot find repmgr configuration" 1>&2; exit 1 -fi - -repmgrd -f $CONF "$@" diff --git a/pgaas/src/stage/opt/app/pgaas/bin/runpsql b/pgaas/src/stage/opt/app/pgaas/bin/runpsql deleted file mode 100755 index fcb1196..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/runpsql +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi - -export PATH=$PATH:$PGDIR/bin:/opt/java/jdk/jdk170/bin:/opt/app/cdf/bin:/opt/app/pgaas/bin - -[ -z "$PGUSER" ] && PGUSER=postgres -[ -z "$PGHOST" ] && PGHOST=`hostname -f` -[ -z "$PGDBNM" ] && PGDBNM=postgres -echo "$@;" | -psql --host=$PGHOST --username=$PGUSER --dbname=$PGDBNM - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/runpsqll b/pgaas/src/stage/opt/app/pgaas/bin/runpsqll deleted file mode 100755 index 864fbf8..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/runpsqll +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi - -export PATH=$PATH:$PGDIR/bin:/opt/java/jdk/jdk170/bin:/opt/app/cdf/bin:/opt/app/pgaas/bin - -[ -z "$PGUSER" ] && PGUSER=postgres -[ -z "$PGHOST" ] && PGHOST=`hostname -f` -[ -z "$PGDBNM" ] && PGDBNM=postgres -echo "$@;" | -psql --tuples-only --host=$PGHOST --username=$PGUSER --dbname=$PGDBNM - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/setpropvalue b/pgaas/src/stage/opt/app/pgaas/bin/setpropvalue deleted file mode 100755 index 2b45fa8..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/setpropvalue +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/bash - -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -die() -{ - exec 1>&2 - echo "$@" - exit 1 -} - -usage() -{ - exec 1>&2 - [ $# -gt 0 ] && echo "$@" - echo "Usage: $0 -n name -v value [-x]" - echo " -n\tname to configure" - echo " -v\tvalue to set" - echo " -x\tencrypt the value" - exit 1 -} - -NAME= -VAL= -ENCRYPT=false -FILE=/opt/app/pgaas/lib/pgaas.cfg - -while getopts f:n:v:x c -do - case "$c" in - f ) FILE=$OPTARG ;; - n ) NAME=$OPTARG ;; - v ) VAL=$OPTARG ;; - x ) ENCRYPT=true ;; - \?) usage ;; - esac -done -shift $(($OPTIND - 1)) - -[ -n "$NAME" ] || die "-n name is required" -[ -n "$VAL" ] || die "-v value is required" -[ -f "$FILE" -a -w "$FILE" ] || die "-f file must exist and be writable" - -ed $FILE <<-! - H - g/^$NAME[=]/d - g/^$NAME[.]x=/d - w - q -! - -if $ENCRYPT -then /opt/app/cdf/bin/getpropvalue -e AES -n $NAME -v $VAL >> $FILE -else echo "$NAME='$VAL'" >> $FILE -fi diff --git a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_is_in_recovery b/pgaas/src/stage/opt/app/pgaas/bin/show_pg_is_in_recovery deleted file mode 100755 index b26904d..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_is_in_recovery +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -export PATH=/opt/app/pgaas/bin:$PATH - -runpsqll "select * from pg_is_in_recovery()" - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_activity b/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_activity deleted file mode 100755 index d9f43c8..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_activity +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -export PATH=/opt/app/pgaas/bin:$PATH - -runpsql "select * from pg_stat_activity" - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_archiver b/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_archiver deleted file mode 100755 index fac0bdb..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_archiver +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -export PATH=/opt/app/pgaas/bin:$PATH - -runpsql "select * from pg_stat_archiver" - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_bgwriter b/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_bgwriter deleted file mode 100755 index cf6d01a..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_bgwriter +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -export PATH=/opt/app/pgaas/bin:$PATH - -runpsql "select * from pg_stat_bgwriter" - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_database b/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_database deleted file mode 100755 index c74316e..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_database +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -export PATH=/opt/app/pgaas/bin:$PATH - -runpsql "select * from pg_stat_database" - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_database_conflicts b/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_database_conflicts deleted file mode 100755 index 73d47bd..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_database_conflicts +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -export PATH=/opt/app/pgaas/bin:$PATH - -runpsql "select * from pg_stat_database_conflicts" - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_user_indexes b/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_user_indexes deleted file mode 100755 index 9ff29d9..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_user_indexes +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -export PATH=/opt/app/pgaas/bin:$PATH - -runpsql "select * from pg_stat_user_indexes" - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_user_tables b/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_user_tables deleted file mode 100755 index 5eb1393..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_user_tables +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -export PATH=/opt/app/pgaas/bin:$PATH - -runpsql "select * from pg_stat_user_tables" - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_statio_user_functions b/pgaas/src/stage/opt/app/pgaas/bin/show_pg_statio_user_functions deleted file mode 100755 index dfaf570..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_statio_user_functions +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -export PATH=/opt/app/pgaas/bin:$PATH - -runpsql "select * from pg_statio_user_functions" - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_statio_user_indexes b/pgaas/src/stage/opt/app/pgaas/bin/show_pg_statio_user_indexes deleted file mode 100755 index 6ec3043..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_statio_user_indexes +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -export PATH=/opt/app/pgaas/bin:$PATH - -runpsql "select * from pg_statio_user_indexes" - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_statio_user_sequences b/pgaas/src/stage/opt/app/pgaas/bin/show_pg_statio_user_sequences deleted file mode 100755 index 9d658e4..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_statio_user_sequences +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -export PATH=/opt/app/pgaas/bin:$PATH - -runpsql "select * from pg_statio_user_sequences" - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_statio_user_tables b/pgaas/src/stage/opt/app/pgaas/bin/show_pg_statio_user_tables deleted file mode 100755 index 4017988..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_statio_user_tables +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -export PATH=/opt/app/pgaas/bin:$PATH - -runpsql "select * from pg_statio_user_tables" - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/start_maintenance_mode b/pgaas/src/stage/opt/app/pgaas/bin/start_maintenance_mode deleted file mode 100644 index 47bb37e..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/start_maintenance_mode +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - -PATH=/opt/app/pgaas/bin:$PATH - -INMAINTENANCE=/var/run/postgresql/inmaintenance -ISRW=/var/run/postgresql/isrw - -if [ -f $INMAINTENANCE ] -then - echo "Already in maintenance mode" 1>&2 - exit 1 -fi - -case `< $ISRW` in - Master ) echo "This is a Master system. It cannot be set to maintenance mode" 1>&2 - exit 2 - ;; -esac - -echo "Setting maintenance mode" -echo inmaintenance > $INMAINTENANCE - -echo "Shutting down the PostgreSQL server" -pg_ctl_stop - -# the following loop is to allow iDNS to get a chance to mark this system as being down -echo "Sleeping for 20 seconds" -for i in `seq 20` -do - echo -n " $i" -done -echo " Done" - - - - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/startpsql b/pgaas/src/stage/opt/app/pgaas/bin/startpsql deleted file mode 100644 index 9e5c5b4..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/startpsql +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi - -export PATH=$PATH:$PGDIR/bin:/opt/java/jdk/jdk170/bin:/opt/app/cdf/bin:/opt/app/pgaas/bin - -[ -z "$PGUSER" ] && PGUSER=postgres -[ -z "$PGHOST" ] && PGHOST=`hostname -f` -[ -z "$PGDBNM" ] && PGDBNM=postgres - -psql --host=$PGHOST --username=$PGUSER --dbname=$PGDBNM diff --git a/pgaas/src/stage/opt/app/pgaas/bin/stop_maintenance_mode b/pgaas/src/stage/opt/app/pgaas/bin/stop_maintenance_mode deleted file mode 100644 index 5d0b8d1..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/stop_maintenance_mode +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - -PATH=/opt/app/pgaas/bin:$PATH - -INMAINTENANCE=/var/run/postgresql/inmaintenance - -if [ ! -f $INMAINTENANCE ] -then - echo "Not in maintenance mode" 1>&2 - exit 1 -fi - -echo "Restarting PostgreSQL server" -pg_ctl_start -echo "Returning server to normal rotation" -rm -f $INMAINTENANCE diff --git a/pgaas/src/stage/opt/app/pgaas/bin/update_var_run_isrw b/pgaas/src/stage/opt/app/pgaas/bin/update_var_run_isrw deleted file mode 100755 index 7b51b30..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/update_var_run_isrw +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi - -export PATH=$PATH:$PGDIR/bin:/opt/java/jdk/jdk170/bin:/opt/app/cdf/bin:/opt/app/pgaas/bin - -for i in 1 2 3 4 5 6 -do - isrw > /var/run/postgresql/isrw.tmp 2>&1 && - mv /var/run/postgresql/isrw.tmp /var/run/postgresql/isrw - sleep 10 -done diff --git a/pgaas/src/stage/opt/app/pgaas/bin/verify_pg_privileges b/pgaas/src/stage/opt/app/pgaas/bin/verify_pg_privileges deleted file mode 100755 index 628b63d..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/verify_pg_privileges +++ /dev/null @@ -1,188 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -defdbname="test" -defprefix="tst" -dbname="$defdbname" -prefix="$defprefix" - -usage() -{ - exec 1>&2 - [ -n $# ] && echo " $@" - echo "Usage: $0 -A pswd -U pswd -V pswd [-d dbname] [-p prefix] [-P] [-v]" - echo " -d dbname - database name, defaults to '$defdbname'" - echo " -p prefix - prefix of usernames, defaults to '$defprefix'" - echo " -A pswd - password for admin role" - echo " -U pswd - password for user role" - echo " -V pswd - password for viewer role" - echo " -v verbose" - echo " -P do not print VERIFIED" - exit 1 -} - -PRINTVERIFIED=: -VERBOSE=false -PSWDA= -PSWDU= -PSWDV= -while getopts A:d:p:PU:vV: c -do - case $c in - A ) PSWDA="$OPTARG" ;; - d ) dbname="$OPTARG" ;; - p ) prefix="$OPTARG" ;; - P ) PRINTVERIFIED=false ;; - U ) PSWDU="$OPTARG" ;; - v ) VERBOSE=: ;; - V ) PSWDV="$OPTARG" ;; - '?' ) usage ;; - esac -done -shift `expr $OPTIND - 1` - -[ -n "$PSWDA" ] || usage "-A is missing" -[ -n "$PSWDU" ] || usage "-U is missing" -[ -n "$PSWDV" ] || usage "-V is missing" - -admin="${prefix}_admin" -user="${prefix}_user" -viewer="${prefix}_viewer" - -TMP1=$(mktemp /tmp/vpp1.$$.XXXXXXXXXX) -TMP2=$(mktemp /tmp/vpp2.$$.XXXXXXXXXX) -trap 'rm -f $TMP1 $TMP2' 0 1 2 3 15 - -VERIFIEDCOUNT=0 -FAILEDCOUNT=0 -TOTALCOUNT=0 - -verified() -{ - (( VERIFIEDCOUNT = VERIFIEDCOUNT + 1 )) - (( TOTALCOUNT = TOTALCOUNT + 1 )) - $PRINTVERIFIED && echo "VERIFIED: $@" -} - -failed() -{ - (( FAILEDCOUNT = FAILEDCOUNT + 1 )) - (( TOTALCOUNT = TOTALCOUNT + 1 )) - echo "FAILED: $@" -} - -tabtext() -{ - echo "$@" | sed 's/^/ /' -} - -tabfile() -{ - sed 's/^/ /' "$@" -} - -runtests() -{ - name="$1" - pswd="$2" - while read cmd; read expected - do - echo "$cmd" | psql --host=localhost --dbname="$dbname" --username="$name" > $TMP1 2>&1 - if fgrep "$expected" $TMP1 > /dev/null - then verified "user $name executed $cmd, expected $expected" - $VERBOSE && echo -e "\tGot:" && tabfile "$TMP1" - else failed "user $name executed $cmd, expected $expected, got:"; tabfile $TMP1 - fi - done -} - -psql --host=localhost --dbname="$dbname" --username="$admin" <<EOF > /dev/null - drop table if exists foo; - drop table if exists foou; - drop table if exists fooud; - drop table if exists foouc; - drop table if exists foov; - drop table if exists foovd; - drop table if exists foovc; -EOF - -# tests to be run as admin user -cat <<-EOF > $TMP2 - create table foo ( fooint int ); /* table for admin to add and drop */ - CREATE TABLE - insert into foo (fooint) values (1); /* admin can add values */ - INSERT 0 1 - select count(*) from foo; /* admin can select */ - (1 row) - delete from foo where fooint = '1'; /* admin can delete */ - DELETE 1 - select * from foo; /* admin can select */ - (0 rows) - drop table foo; /* admin can drop */ - DROP TABLE - create table foou (fooint int ); /* table for user to add/delete to */ - CREATE TABLE - create table fooud (fooint int ); /* table for user to try dropping */ - CREATE TABLE - create table foov (fooint int ); /* table for viewer to try adding/deleting from */ - CREATE TABLE - create table foovd (fooint int ); /* table for viewer to try dropping */ - CREATE TABLE -EOF -runtests "$admin" "$PWDA" < $TMP2 - -# tests to be run as writer -cat <<-EOF > $TMP2 - create table foouc ( fooint int ); /* user cannot create a table */ - ERROR: - drop table fooud; /* user cannot drop a table */ - ERROR: - insert into foou (fooint) values (1); /* user can add values */ - INSERT 0 1 - select count(*) from foou; /* user can select values */ - (1 row) - insert into foou (fooint) values (2); /* user can add values */ - INSERT 0 1 - select * from foou; /* user can select values */ - (2 rows) - delete from foou where fooint = '2'; /* user can delete values */ - DELETE 1 - select * from foou; /* user can select values */ - (1 row) -EOF -runtests "$user" "$PWDU" < $TMP2 - -# tests to be run as read-only -cat <<-EOF > $TMP2 - create table foovc ( fooint int ); /* user cannot create a table */ - ERROR: - drop table foovd; /* user cannot drop a table */ - ERROR: - insert into foov (fooint) values (1); /* user can add values */ - ERROR: - select count(*) from foov; /* user can select values */ - (1 row) - insert into foov (fooint) values (2); /* user can add values */ - ERROR: - select * from foov; /* user can select values */ - (0 rows) - delete from foov where fooint = '2'; /* user can delete values */ - ERROR: - select * from foov; /* user can select values */ - (0 rows) -EOF -runtests "$viewer" "$PWDV" < $TMP2 - -echo "$VERIFIEDCOUNT tests passed, $FAILEDCOUNT tests failed, $TOTALCOUNT total tests run" diff --git a/pgaas/src/stage/opt/app/pgaas/etc/common-db-tasks b/pgaas/src/stage/opt/app/pgaas/etc/common-db-tasks deleted file mode 100644 index 517fabd..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/common-db-tasks +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -[ -n "$DBROOT" ] || die "DBROOT is not set" -[ -n "$CFGDIR" ] || die "CFGDIR is not set" - -# set up ~/.pgpass -$CFGDIR/etc/gen-pgpass -# set up repmgr.conf -$CFGDIR/etc/gen-repmgr.conf - -# We don't really need to save pwd.cfg anymore since we are now forcing the password. -# PWDCFG=$DBROOT/../pgaas/pwd.cfg -# egrep '^Global_Title|^postgres|^repmgr' ${INSTALL_ROOT}/opt/app/cdf/lib/cdf.cfg > $PWDCFG - -cd $CFGDIR/main || die "Cannot cd $CFGDIR/main" - -sed -e "s!%CFGDIR%!$CFGDIR!" < postgresql.conf.orig > postgresql.conf || die "Cannot cp postgresql.conf" -sed -e "s!%CFGDIR%!$CFGDIR!" < pg_hba.conf.orig > pg_hba.conf || die "Cannot cp pg_hba.conf" - diff --git a/pgaas/src/stage/opt/app/pgaas/etc/create-cdf-master b/pgaas/src/stage/opt/app/pgaas/etc/create-cdf-master deleted file mode 100644 index dcbbf46..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/create-cdf-master +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -set -x - -DBROOT=/dbroot/pgdata/main -CDFCFG=${INSTALL_ROOT}/opt/app/cdf/lib/cdf.cfg - -# We don't really need to save pwd.cfg anymore since we are now forcing the password. -# PWDCFG=$DBROOT/../pgaas/pwd.cfg -# if the DB already exists in Cinder storage, grab the password from there for use elsewhere -# if [ -s $PWDCFG -a $( egrep '^Global_Title' < $PWDCFG ) -eq 1 ] -# then -# TMP=$(mktemp /tmp/tmp.ccm.XXXXXXXXXX) -# trap 'rm -f $TMP' 0 1 2 3 15 -# egrep -v '^Global_Title|^postgres|^repmgr' $CDFCFG > $TMP -# egrep '^Global_Title|^postgres|^repmgr' $PWDCFG | cat $TMP - > $CDFCFG -# fi - -# generate a 64 hex random value (256 bits of randomness) for the passwords -if grep '^postgres' $CDFCFG > /dev/null -then : -else - val2= - # if .pgpass has a password for postgres, keep it - # *:*:*:postgres:4069b81b26cb01e064e242611c36e67a50f11a3d0dbe1f05d9b9aaedf2cadab1 - PGPASS=~postgres/.pgpass - if [ -f $PGPASS ] - then val2=$( grep :postgres: $PGPASS | sed 's/^.*://' ) - fi - if [ -z "$val2" ] - then - val2=$(dd if=/dev/urandom count=1 ibs=32 2>/dev/null | od -x -w1000 | sed -e 's/^0000000 //' -e 's/ //g' -e 1q) - fi - echo "ENCRYPTME.AES.postgres=$val2" | ${INSTALL_ROOT}/opt/app/cdf/bin/setencryptedvalues >> $CDFCFG -fi -if grep '^repmgr' $CDFCFG > /dev/null -then : -else - val2=$(dd if=/dev/urandom count=1 ibs=32 2>/dev/null | od -x -w1000 | sed -e 's/^0000000 //' -e 's/ //g' -e 1q) - echo "ENCRYPTME.AES.repmgr=$val2" | ${INSTALL_ROOT}/opt/app/cdf/bin/setencryptedvalues >> $CDFCFG -fi diff --git a/pgaas/src/stage/opt/app/pgaas/etc/create-cdf-secondary b/pgaas/src/stage/opt/app/pgaas/etc/create-cdf-secondary deleted file mode 100644 index 78c35f9..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/create-cdf-secondary +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -[ -n "$MASTER" ] || die "MASTER is not set" - -umask 077 -TMP=$( mktemp /tmp/tmp.ccs1.XXXXXXXXXX ) -trap 'rm -f $TMP' 0 1 2 3 15 - -bwget() -{ - ${INSTALL_ROOT}/opt/app/pgaas/bin/pgwget --progress=dot:giga "$@" -} - -done= -max=40 -for s in `seq $max` -do - echo "$s of $max: Waiting for master $MASTER to send cdf.cfg" - bwget -O$TMP http://$MASTER:8000/getcdf/`hostname -f` - ls -l $TMP - if [ -s $TMP ] - then - msg=$(cat $TMP) - case "$msg" in - OK* ) - echo "Received cdf.cfg" - done=yes - break - ;; - * ) echo "Received invalid cdf: $msg" - ;; - esac - fi - rm -f $TMP - sleep 15 -done -[ "$done" = "yes" ] || die "Master did not send cdf.cfg" - diff --git a/pgaas/src/stage/opt/app/pgaas/etc/create-db-backup b/pgaas/src/stage/opt/app/pgaas/etc/create-db-backup deleted file mode 100644 index d6e856b..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/create-db-backup +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found -fi - -$PGDIR/bin/psql <<-EOF - SELECT pg_start_backup('backup'); -EOF - -cd /dbroot/pgdata && -{ - find main | grep -v main/pg_xlog/ - find main/pg_xlog -type d -} | cpio -oc | gzip > main.cpio.gz.$$ && mv main.cpio.gz.$$ main.cpio.gz - -$PGDIR/bin/psql <<-EOF - SELECT pg_stop_backup(); -EOF -echo /dbroot/pgdata/main.cpio.gz created diff --git a/pgaas/src/stage/opt/app/pgaas/etc/create-db-master b/pgaas/src/stage/opt/app/pgaas/etc/create-db-master deleted file mode 100644 index eb8fca3..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/create-db-master +++ /dev/null @@ -1,72 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -# create a master database -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -[ -n "$PGDIR" ] || die "PGDIR is not set" -[ -n "$DBROOT" ] || die "DBROOT is not set" -[ -n "$CFGDIR" ] || die "CFGDIR is not set" - -cd $CFGDIR/main || die "Cannot cd $CFGDIR/main" - -PATH=${INSTALL_ROOT}/opt/app/pgaas/bin:$CFGDIR/etc:$PGDIR/bin:$PATH - -umask 077 -TMP=$(mktemp /tmp/tmp.cdm.XXXXXXXXXX) -trap 'rm -f $TMP' 0 1 2 3 15 - -rm -rf $DBROOT/* # initdb fails if the directory is not totally empty -pswd=$( ${INSTALL_ROOT}/opt/app/cdf/bin/getpropvalue -x -n postgres ) -echo "$pswd" > $TMP -$PGDIR/bin/initdb -D $DBROOT --pwfile=$TMP -rm -f $TMP - -$CFGDIR/etc/start-db -sleep 30 - -# create temporal tables and other extensions, if needed -$CFGDIR/etc/create-extensions - -# create repmgr user/db, if needed -$CFGDIR/etc/create-repmgr-user - -sleep 10 - -# register as master -repmgr -f $CFGDIR/main/repmgr.conf master register -echo repmgr ret=$? - -sleep 10 - -# start repmgrd -# start repmgrd (verbose logging for testing) -umask 07 -repmgrd -f $CFGDIR/main/repmgr.conf -d --verbose -echo repmgrd ret=$? -# start repmgrd (normal logging) -# repmgrd -f $CFGDIR/main/repmgr.conf -d - - -# NO LONGER NEEDED $CFGDIR/etc/create-db-backup diff --git a/pgaas/src/stage/opt/app/pgaas/etc/create-db-secondary b/pgaas/src/stage/opt/app/pgaas/etc/create-db-secondary deleted file mode 100644 index a0cc8e3..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/create-db-secondary +++ /dev/null @@ -1,122 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -# create a secondary database -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -[ -n "$MASTER" ] || die "MASTER is not set" -[ -n "$PGDIR" ] || die "PGDIR is not set" -[ -n "$DBROOT" ] || die "DBROOT is not set" -[ -n "$CFGDIR" ] || die "CFGDIR is not set" - -cd $CFGDIR/main || die "Cannot cd $CFGDIR/main" - -PATH=${INSTALL_ROOT}/opt/app/pgaas/bin:$CFGDIR/etc:$PGDIR/bin:$PATH - -bwget() -{ - ${INSTALL_ROOT}/opt/app/pgaas/bin/pgwget --progress=dot:giga "$@" -} - -umask 077 -TMP=$(mktemp /tmp/tmp.cds1.XXXXXXXXXX) -TMP2=$(mktemp /tmp/tmp.cds2.XXXXXXXXXX) -trap 'rm -f $TMP $TMP2' 0 1 2 3 15 - -# wait until master DB is active and has repmgr available -max=40 -for s in `seq $max` -do - echo "$s of $max: Asking master $MASTER if repmgr is ready" - bwget -O$TMP http://$MASTER:8000/hasrepmgr - ls -l $TMP - if [ -s $TMP ] - then - msg=$(cat $TMP) - case $msg in - OK* ) - echo "Master has repmgr ready" - done=yes - break - ;; - * ) - echo "Master does not have repmgr ready, msg=$msg" - ;; - esac - fi - rm -f $TMP - sleep 15 -done -[ "$done" = "yes" ] || die "Master never had repmgr available" - - -# clone database from master - -# make sure /dbroot/pgdata/main is empty -mv $DBROOT $DBROOT-$(date +%Y%m%d%H%M%S) -mkdir -p $DBROOT -# rm -rf $DBROOT/* - -repmgr -v -h $MASTER -U repmgr -d repmgr -D $DBROOT -f $CFGDIR/main/repmgr.conf --ignore-external-config-files standby clone - -if [ ! -f $DBROOT/PG_VERSION ] -then - umask 022 - cat /opt/logs/dcae/postgresql/server/repmgr.log >> /tmp/pgaas-failures - die repmgr clone failed -fi - -$CFGDIR/etc/start-db - -sleep 10 - -# register as standby -repmgr -f $CFGDIR/main/repmgr.conf standby register -echo repmgr ret=$? -sleep 10 - -# start repmgrd -# start repmgrd (verbose logging for testing) -umask 07 - -# wait until repmgrd starts up -max=20 -REPLOG=/opt/logs/dcae/postgresql/server/repmgr.log -done=no -for s in `seq $max` -do - cat $REPLOG > $TMP - repmgrd -f $CFGDIR/main/repmgr.conf -d --verbose - # start repmgrd (normal logging) - # repmgrd -f $CFGDIR/main/repmgr.conf -d - echo repmgrd ret=$? - sleep 5 - diff $TMP $REPLOG | grep "ERROR.*terminating" > $TMP2 - if [ -s "$TMP2" ] - then cat "$TMP2" - else done=yes; break - fi - sleep 10 -done -[ "$done" = "yes" ] || die "Secondary never started repmgrd" diff --git a/pgaas/src/stage/opt/app/pgaas/etc/create-extensions b/pgaas/src/stage/opt/app/pgaas/etc/create-extensions deleted file mode 100644 index 70306a6..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/create-extensions +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -[ -n "$PGDIR" ] || die "PGDIR is not set" - -PATH=${INSTALL_ROOT}/opt/app/pgaas/bin:$PGDIR/bin:$PATH - -TMP=$(mktemp /tmp/tmp.ce.XXXXXXXXXX) -trap 'rm -f $TMP' 0 1 2 3 15 - -echo "select datname from pg_database;" | psql --tuples-only | sed -e 's/^ *//' -e '/^$/d' -e '/^template0$/d' -e '/^repmgr$/d' > $TMP - -for db in $(< $TMP) -do - # enable temporal tables for use - if [ -f /opt/app/postgresql-9.5.2/lib/temporal_tables.so ] - then - psql --dbname=$db <<-EOF - CREATE EXTENSION temporal_tables; - EOF - else - echo "$0: temporal_tables extension is not installed" - fi - - # and other extensions - psql --dbname=$db <<-EOF - CREATE EXTENSION hstore; - CREATE EXTENSION pgcrypto; - EOF -done diff --git a/pgaas/src/stage/opt/app/pgaas/etc/create-repmgr-user b/pgaas/src/stage/opt/app/pgaas/etc/create-repmgr-user deleted file mode 100644 index 35ca401..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/create-repmgr-user +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -[ -n "$PGDIR" ] || die "PGDIR is not set" - -PATH=${INSTALL_ROOT}/opt/app/pgaas/bin:$PGDIR/bin:${INSTALL_ROOT}/opt/app/cdf/bin:$PATH -pswd=$( getpropvalue -x -n repmgr ) - -# note: The "pgaas" in "repmgr_pgaas" must match the cluster name used in repmgr.conf - -psql <<-EOF - CREATE ROLE repmgr SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN; - DROP DATABASE repmgr; - CREATE DATABASE repmgr OWNER repmgr; - ALTER USER repmgr PASSWORD '$pswd'; - ALTER USER repmgr SET search_path TO repmgr_pgaas, "\$user", public; -EOF diff --git a/pgaas/src/stage/opt/app/pgaas/etc/create-ssh-master b/pgaas/src/stage/opt/app/pgaas/etc/create-ssh-master deleted file mode 100644 index 5565041..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/create-ssh-master +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -umask 077 -mkdir -p ~postgres/.ssh -chmod 700 ~postgres/.ssh - -PGAASDIR=/dbroot/pgdata/pgaas -if [ -f $PGAASDIR/id_rsa.pub -a -f $PGAASDIR/id_rsa -a $PGAASDIR/authorized_keys ] -then - cp -p $PGAASDIR/id_rsa.pub $PGAASDIR/id_rsa $PGAASDIR/authorized_keys ~postgres/.ssh -else - ssh-keygen -t rsa -N '' -f ~postgres/.ssh/id_rsa - cp -p ~postgres/.ssh/id_rsa.pub ~postgres/.ssh/authorized_keys - cp -p ~postgres/.ssh/id_rsa ~postgres/.ssh/id_rsa.pub ~postgres/.ssh/authorized_keys $PGAASDIR -fi - diff --git a/pgaas/src/stage/opt/app/pgaas/etc/create-ssh-secondary b/pgaas/src/stage/opt/app/pgaas/etc/create-ssh-secondary deleted file mode 100644 index 2121eb3..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/create-ssh-secondary +++ /dev/null @@ -1,102 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -bwget() -{ - ${INSTALL_ROOT}/opt/app/pgaas/bin/pgwget --progress=dot:giga "$@" -} - -[ -n "$MASTER" ] || die "MASTER is not set" - - - -umask 077 -TMP=$(mktemp /tmp/tmp.css1.XXXXXXXXXX) -TMP2=$(mktemp /tmp/tmp.css2.XXXXXXXXXX) -trap 'rm -f $TMP $TMP2' 0 1 2 3 15 - -# do we have the keys already? -if [ -f $PGAASDIR/id_rsa.pub -a -f $PGAASDIR/id_rsa -a $PGAASDIR/authorized_keys ] -then - mkdir -p ~postgres/.ssh - chmod 700 ~postgres/.ssh - cp -p $PGAASDIR/id_rsa.pub $PGAASDIR/id_rsa $PGAASDIR/authorized_keys ~postgres/.ssh -else - # no? copy them from the master - done= - max=40 - for s in `seq $max` - do - echo "$s of $max: Waiting for master $MASTER to come online and send its public key" - bwget -O$TMP http://$MASTER:8000/getpubkey - ls -l $TMP - if [ -s $TMP ] - then - msg=$(cat $TMP) - case "$msg" in - ssh-rsa* ) - echo "Received public key" - mkdir -p ~postgres/.ssh - chmod 700 ~postgres/.ssh - cp -p $TMP ~postgres/.ssh/authorized_keys - done=yes - break - ;; - * ) echo "Received invalid public key: $msg" - ;; - esac - else - echo "No key available yet" - fi - rm -f $TMP - sleep 15 - done - [ "$done" = "yes" ] || die "Unable to get key from $MASTER" - - done= - max=40 - for s in `seq $max` - do - echo "$s of $max: Asking for master $MASTER to send remaining ssh files" - bwget -O$TMP2 http://$MASTER:8000/getssh/`hostname -f` - ls -l $TMP2 - if [ -s $TMP2 ] - then - msg=$(cat $TMP2) - case "$msg" in - OK* ) echo "Master has sent the remaining ssh keys" - done=yes - break - ;; - * ) echo "No ssh keys yet: $msg" - ;; - esac - fi - rm -f $TMP2 - sleep 15 - done - [ "$done" = "yes" ] || die "Master did not send ssh keys" -fi diff --git a/pgaas/src/stage/opt/app/pgaas/etc/create_dcae_rotate.sql b/pgaas/src/stage/opt/app/pgaas/etc/create_dcae_rotate.sql deleted file mode 100644 index 2200362..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/create_dcae_rotate.sql +++ /dev/null @@ -1,21 +0,0 @@ -/* - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code 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. - -*/ -create table dcae_rotate ( - basetablename varchar(129) not null, /* the base table name to derive other tables from */ - columnname varchar(64) not null, /* which column name to use as the datestamp */ - count int, /* how many periods to keep around */ - period varchar(20) /* one of 'week', 'month' or 'day' */ -); diff --git a/pgaas/src/stage/opt/app/pgaas/etc/dcae_admin_db.cfg b/pgaas/src/stage/opt/app/pgaas/etc/dcae_admin_db.cfg deleted file mode 100644 index 139597f..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/dcae_admin_db.cfg +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/pgaas/src/stage/opt/app/pgaas/etc/do-post-install-config b/pgaas/src/stage/opt/app/pgaas/etc/do-post-install-config deleted file mode 100644 index 87689ef..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/do-post-install-config +++ /dev/null @@ -1,157 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - -echo "================ $0 ================" -id -set -x - -die() -{ - echo "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -[ -n "$CFGDIR" ] || die "CFGDIR is not set" -[ -n "$ONAP" ] || die "ONAP is not set" -[ -n "$NOTONAP" ] || die "NOTONAP is not set" - -if [ -d ${INSTALL_ROOT}/opt/app/postgresql-9.5.2 ] -then PGDIR=${INSTALL_ROOT}/opt/app/postgresql-9.5.2 -elif [ -d ${INSTALL_ROOT}/usr/lib/postgresql/9.6 ] -then PGDIR=${INSTALL_ROOT}/usr/lib/postgresql/9.6 -elif [ -d ${INSTALL_ROOT}/usr/lib/postgresql/9.5 ] -then PGDIR=${INSTALL_ROOT}/usr/lib/postgresql/9.5 -else die PostgreSQL bin directory not found -fi -export PGDIR -export DBROOT=/dbroot/pgdata/main -export PATH=$PATH:${INSTALL_ROOT}/opt/app/pgaas/bin - -$CFGDIR/etc/makecerts - -cat $CFGDIR/lib/profile.additions >> ~postgres/.profile - -# Determine which system is the master. -# For central, we look first in /var/config/DCAE/chef/*-postgres.conf. -# If we don't find that, we look at the pgnodes list and pick the first one. -# For edge, we ignore /var/config/DCAE/chef/*-postgres.conf and go directly to the pgnodes list. -# Each edge site has its own master. -clustertype=$( ${INSTALL_ROOT}/opt/app/cdf/bin/getpropvalue -n cluster ) -ismaster=no - -case $clustertype in - central ) - CONFDIR1=/var/config/DCAE/chef - CONFDIR2=/tmp - CONFCOUNT1=$(ls $CONFDIR1/*-postgres.conf 2>/dev/null | wc -l) - CONFCOUNT2=$(ls $CONFDIR2/*-postgres.conf 2>/dev/null | wc -l) - CONFCOUNTBOTH=$(ls $CONFDIR1/*-postgres.conf $CONFDIR2/*-postgres.conf 2>/dev/null | wc -l) - - if [ $CONFCOUNTBOTH -eq 0 ] - then - # not OpenDCAE/ONAP, but it's better if we STILL require a pgaas-postgres.conf file. - die "No xyz-postgres.conf files were found in $CONFDIR1 or $CONFDIR2" - # Alternatively, the following code MIGHT work: - # ismaster=yes - # PGNODES=$( ${INSTALL_ROOT}/opt/app/cdf/bin/getpropvalue -n pgnodes ) - # export MASTER=$( gen-repmgr-info -n "$PGNODES" -m ) - else - if [ $CONFCOUNT1 -eq 1 ] - then CONFDIR=$CONFDIR1 - elif [ $CONFCOUNT2 -eq 1 ] - then CONFDIR=$CONFDIR2 - else CONFDIR= - fi - if [ -n "$CONFDIR" ] - then # OpenDCAE/ONAP - # We need the value of master from xyz-postgres.conf - umask 077 - TMP=$(mktemp /tmp/tmp.pi1.XXXXXXXXXX) - trap 'rm -f $TMP' 0 1 2 3 15 - cat $CONFDIR/*-postgres.conf | - sed -e 's/ *: */="/' -e 's/[ ]*$/"/' -e 's/=""/="/' -e 's/""$/"/' > $TMP - . $TMP - case "$master" in - `hostname` | `hostname -f` ) ismaster=yes ;; - *?* ) ismaster=no ;; - '' ) die "master is not set in $CONF" ;; - esac - PGNODES=$( ${INSTALL_ROOT}/opt/app/cdf/bin/getpropvalue -n pgnodes ) - export MASTER=$( gen-repmgr-info -n "$PGNODES" -M "$master" ) - [ -n "$MASTER" ] || die "Cannot determine master system. $CONF has '$master' (from env.yaml), which cannot be found in pgnodes." - else - if [ $CONFCOUNT1 -gt 1 ] - then die "More than one postgres.conf was found in $CONFDIR1: $(ls $CONFDIR1/*-postgres.conf 2>&1)" - elif [ $CONFCOUNT2 -gt 1 ] - then die "More than one postgres.conf was found in $CONFDIR2: $(ls $CONFDIR2/*-postgres.conf 2>&1)" - fi - fi - fi - ;; - edge ) - host=$( hostname -f ) - PGNODES=$( ${INSTALL_ROOT}/opt/app/cdf/bin/getpropvalue -n pgnodes ) - export MASTER=$( gen-repmgr-info -n "$PGNODES" -C $host ) - case $MASTER in - '' ) die "Cannot determine master system. Does cdf.cfg have pgnodes= in it? Is $host listed as a site?" ;; - DEFAULT ) ismaster=yes MASTER=$host ;; - esac - ;; -esac - -ssh_and_cdf_okay=no - -if pgrep postgres -then pkill postgres -fi - -case $ismaster in - yes ) # master - $CFGDIR/etc/create-ssh-master && - $CFGDIR/etc/create-cdf-master && - ssh_and_cdf_okay=yes - ;; - - no ) # secondary - $CFGDIR/etc/create-ssh-secondary && - $CFGDIR/etc/create-cdf-secondary && - touch $CFGDIR/lib/ignore-database-reconfiguration # prevent dcae_admin_db.py from looking at json DB reconfigurations && - ssh_and_cdf_okay=yes - ;; -esac - -[ "$ssh_and_cdf_okay" = yes ] || die "Could not set up ssh or cdf" - -$CFGDIR/etc/common-db-tasks -# check if we have a database already -if [ ! -s $DBROOT/PG_VERSION ] -then - # need to create it - case $ismaster in - yes ) $CFGDIR/etc/create-db-master ;; - no ) $CFGDIR/etc/create-db-secondary ;; - esac -else - # need to update it - case $ismaster in - yes ) $CFGDIR/etc/update-db-master ;; - no ) - $CFGDIR/etc/create-db-secondary # use repmgr clone even if secondary previously existed - # $CFGDIR/etc/update-db-secondary - ;; - esac -fi diff --git a/pgaas/src/stage/opt/app/pgaas/etc/do-post-install-post b/pgaas/src/stage/opt/app/pgaas/etc/do-post-install-post deleted file mode 100644 index 66eea14..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/do-post-install-post +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - -echo "================ $0 ================" -id -set -x - -die() -{ - echo "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -################ nothing needs to be done -BIN=/opt/app/pgaas/bin - -[ -d $BIN ] || die "Cannot find $BIN" - -PATH=$PATH:$BIN - -pgaas-verify-install diff --git a/pgaas/src/stage/opt/app/pgaas/etc/do-post-install-prep b/pgaas/src/stage/opt/app/pgaas/etc/do-post-install-prep deleted file mode 100644 index 02eabef..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/do-post-install-prep +++ /dev/null @@ -1,259 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - -echo "================ $0 ================" -id -set -x - -die() -{ - echo "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -umask 022 - -TMP=$( mktemp /tmp/pgprep.$$.XXXXXXXXXX ) -trap 'rm -f $TMP' 0 1 2 3 15 - -if $ONAP -then INSTALL_ROOT= -fi - - -# There needs to be a configuration file passed in, named something like pgaas-postgres.conf -# and stored either in /var/config/DCAE/chef or /tmp. We need at least one, and there cannot -# be more than one within the directory. (If one exists in both /var/config and /tmp, we trust -# the one in /var/config.) -# -# The variable "master" needs to be in xyz-postgres.conf. It should be the hostname or -# hostname -f value of the VM that is the initial PG master. -# In addition, the following values could be in postgres.conf or -# already in the environment: -# DRTR_NODE_KSTOREFILE: /opt/app/dcae-certificate/keystore.jks -# DRTR_NODE_KSTOREPASS: "No Certificate" -# DRTR_NODE_PVTKEYPASS: "No Certificate" -# PG_NODES : uiopmno1qwpstg00.research.example.com|asbczw1vepstg00.dcae.simpledemo.onap.org -# PG_JAVA_HOME : /opt/app/java/jdk/jdk170 -# PG_CLUSTER : global/central | site/edge (pick one) - -CONFDIR1=/var/config/DCAE/chef -CONFDIR2=/tmp -CONFCOUNT1=$(ls $CONFDIR1/*-postgres.conf 2>/dev/null | wc -l) -CONFCOUNT2=$(ls $CONFDIR2/*-postgres.conf 2>/dev/null | wc -l) -CONFCOUNTBOTH=$(ls $CONFDIR1/*-postgres.conf $CONFDIR2/*-postgres.conf 2>/dev/null | wc -l) - -if [ $CONFCOUNTBOTH -eq 0 ] -then - die "No xyz-postgres.conf files were found in $CONFDIR1 or $CONFDIR2" -else - if [ $CONFCOUNT1 -eq 1 ] - then CONFDIR=$CONFDIR1 - elif [ $CONFCOUNT2 -eq 1 ] - then CONFDIR=$CONFDIR2 - else CONFDIR= - fi - if [ -n "$CONFDIR" ] - then # OpenDCAE/ONAP - cat $CONFDIR/*-postgres.conf | - sed -e 's/ *: */="/' -e 's/[ ]*$/"/' -e 's/=""/="/' -e 's/""$/"/' > $TMP - . $TMP - else - if [ $CONFCOUNT1 -gt 1 ] - then die "More than one postgres.conf was found in $CONFDIR1: $(ls $CONFDIR1/*-postgres.conf 2>&1)" - elif [ $CONFCOUNT2 -gt 1 ] - then die "More than one postgres.conf was found in $CONFDIR2: $(ls $CONFDIR2/*-postgres.conf 2>&1)" - fi - fi -fi - -[ -n "$PG_NODES" ] || die "PG_NODES is not set" -[ -n "$PG_CLUSTER" ] || die "PG_CLUSTER is not set" -[ -n "$DRTR_NODE_KSTOREFILE" ] || die "DRTR_NODE_KSTOREFILE is not set" -[ -n "$DRTR_NODE_KSTOREPASS" ] || die "DRTR_NODE_KSTOREPASS is not set" -[ -n "$DRTR_NODE_PVTKEYPASS" ] || die "DRTR_NODE_PVTKEYPASS is not set" - -# create various directories with proper permissions -mkdir -p ${INSTALL_ROOT}/dbroot/pgdata/main \ - ${INSTALL_ROOT}/dbroot/pgdata/pgaas \ - ${INSTALL_ROOT}/dbroot/pglogs/main \ - ${INSTALL_ROOT}/var/run/postgresql \ - ${INSTALL_ROOT}/opt/logs/dcae/postgresql/init \ - ${INSTALL_ROOT}/opt/logs/dcae/postgresql/server \ - ${INSTALL_ROOT}/opt/logs/dcae/postgresql/idns -chmod 700 ${INSTALL_ROOT}/dbroot/pgdata/pgaas -chmod 700 ${INSTALL_ROOT}/dbroot/pglogs -chmod 700 ${INSTALL_ROOT}/dbroot/pgdata/main - -if $ONAP -then - if [ -d /var/lib/postgresql/9.5 ] - then VER=9.5 - elif [ -d /var/lib/postgresql/9.6 ] - then VER=9.6 - else die "Cannot determine version of PostgreSQL. Looking for /var/lib/postgresql/9.[56]." - fi - mv /var/lib/postgresql/$VER/main /var/lib/postgresql/$VER/main.sv - ln -s /dbroot/dbdata/main /var/lib/postgresql/$VER/main - - mv /etc/postgresql/$VER/main /etc/postgresql/$VER/main.sv - ln -s /opt/app/pgaas/main /etc/postgresql/$VER/main - -fi - -chown -R postgres:postgres ${INSTALL_ROOT}/dbroot ${INSTALL_ROOT}/var/run/postgresql ${INSTALL_ROOT}/opt/logs/dcae/postgresql - -chmod 711 ~postgres -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi -chmod 751 $PGDIR/bin - -# fix up the CDF package so that it works -if [ ! -L /opt/cdf ] -then rm -f /opt/cdf; ln -sf /opt/app/cdf /opt/cdf -fi - -PATH=${INSTALL_ROOT}/opt/app/pgaas/bin:$PATH - -# and save some values within -( - echo "allpgnodes=\"$PG_NODES\"" - case "$PG_CLUSTER" in - global | central ) - cnodes=$( gen-repmgr-info -n "$PG_NODES" -p ) - echo "pgnodes=\"$cnodes\"" - echo "cluster=central" - shanodes=$( gen-repmgr-info -n "$PG_NODES" -P ) - ;; - site | edge ) - HOSTNAME=$( hostname -f ) - lnodes=$( gen-repmgr-info -n "$PG_NODES" -e $HOSTNAME ) - echo "pgnodes=\"$lnodes\"" - if [ -z "$lnodes" ] - then die "Cannot determine the name of the system. hostname -f ($HOSTNAME) is not found in PG_NODES ($PG_NODES)" - fi - shanodes=$( gen-repmgr-info -n "$PG_NODES" -E $HOSTNAME ) - echo "cluster=edge" - ;; - * ) die "Cannot determine what type of cluster this is. PG_CLUSTER should be either 'global/central' or 'site/edge'" ;; - esac - - echo "drtr_node_kstorefile=$DRTR_NODE_KSTOREFILE" - echo "ENCRYPTME.AES.drtr_node_kstorepass='$DRTR_NODE_KSTOREPASS'" | ${INSTALL_ROOT}/opt/app/cdf/bin/setencryptedvalues - echo "ENCRYPTME.AES.drtr_node_pvtkeypass='$DRTR_NODE_PVTKEYPASS'" | ${INSTALL_ROOT}/opt/app/cdf/bin/setencryptedvalues - echo "ENCRYPTME.AES.wgetpswd=$shanodes" | ${INSTALL_ROOT}/opt/app/cdf/bin/setencryptedvalues -) >> ${INSTALL_ROOT}/opt/app/cdf/lib/cdf.cfg - -# install the init scripts for postgresql -# init.d-pgaas init-pgaas-idns.conf init-pgaas-init.conf logrotate - -INIT=${INSTALL_ROOT}/opt/app/pgaas/init - -# take care of cron jobs -if [ -d ${INSTALL_ROOT}/opt/app/platform/cron ] -then - CRONDIR=${INSTALL_ROOT}/opt/app/platform/cron/postgres - mkdir -p $CRONDIR - chown postgres:postgres $CRONDIR - chmod 755 $CRONDIR - cp $INIT/pglogs.cron $CRONDIR/pglogs.cron - su postgres -c "sh -x ${INSTALL_ROOT}/opt/app/platform/bin/mergeCron" -else - su postgres -c "crontab $INIT/pglogs.cron" -fi - -# take care of PGaaS init job -if [ -d ${INSTALL_ROOT}/opt/app/platform/init.d ] -then - INITDEST=${INSTALL_ROOT}/opt/app/platform/init.d/pgaas - cp $INIT/init.d-pgaas $INITDEST - chown postgres:postgres $INITDEST - chmod 755 $INITDEST -else - cd ${INSTALL_ROOT}/opt/app/platform/rc.d - ln -sf ../init.d/pgaas K20pgaas - ln -sf ../init.d/pgaas S20pgaas -fi - -# take care of /var/run/postgresql directory -if [ -f /usr/lib/tmpfiles.d/postgresql.conf ] -then - : # no need to create the /var/run/postgresql directory (probably because postgresql package already did it) -elif [ -d /usr/lib/tmpfiles.d ] -then - ( - echo "# Directory for PostgreSQL sockets, lockfiles and stats tempfiles" - echo "d /var/run/postgresql 2775 postgres postgres - -" - ) > /usr/lib/tmpfiles.d/postgresql.conf -else - # install an init script to create it - cp $INIT/init-pgaas-init.conf ${INSTALL_ROOT}/etc/init/pgaas-init.conf - service pgaas-init stop - sleep 1 - service pgaas-init start - sleep 1 -fi -# double check to make sure it's been created -if [ ! -d /var/run/postgresql ] -then - mkdir -p /var/run/postgresql - chown postgres:postgres /var/run/postgresql -fi - -# take care of iDNS-responder -if [ -d /lib/systemd/system -a -f /bin/systemctl ] -then - # install the init script for iDNS in systemd - cp $INIT/systemd-pgaas-idns.service /lib/systemd/system/pgaas-idns.service -# if [ -f /usr/sbin/service ] -# then -# service pgaas-idns stop -# sleep 1 -# service pgaas-idns start -# else -# systemctl stop pgaas-idns - sleep 1 - systemctl daemon-reload - sleep 1 - systemctl enable pgaas-idns - sleep 1 - systemctl start pgaas-idns -# fi - -else - # install the init script for iDNS in upstart - cp $INIT/init-pgaas-idns.conf ${INSTALL_ROOT}/etc/init/pgaas-idns.conf - service pgaas-idns stop - sleep 1 - service pgaas-idns start -fi - -# take care of log rotation -cp $INIT/logrotate ${INSTALL_ROOT}/etc/logrotate.d/pgaas -chown root:root ${INSTALL_ROOT}/etc/logrotate.d/pgaas -chmod 644 ${INSTALL_ROOT}/etc/logrotate.d/pgaas - -chown -R postgres:postgres ${INSTALL_ROOT}/opt/app/pgaas - -echo ENDING $0 $(date) -echo ENDING $0 $(date) >> /tmp/pgaas.inst.report diff --git a/pgaas/src/stage/opt/app/pgaas/etc/do-post-install-tools b/pgaas/src/stage/opt/app/pgaas/etc/do-post-install-tools deleted file mode 100644 index 16cb5e5..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/do-post-install-tools +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - -echo "================ $0 ================" -id -set -x - -die() -{ - echo "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -export CDFCFG=${INSTALL_ROOT}/opt/app/cdf/lib/cdf.cfg -export PGAASCFG=${INSTALL_ROOT}/opt/app/pgaas/lib/pgaas.cfg - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else die PostgreSQL bin directory not found -fi -CFGDIR=/opt/app/pgaas -CONF=$CFGDIR/main/postgresql.conf -if [ ! -f $CONF ] -then echo "$0: Cannot find PostgreSQL configuration" 1>&2; exit 1 -fi - - -( - grep '^postgres.x' < $CDFCFG | sed -e 's/^postgres/dcae_admin_db_password/' - echo "db_configuration=$CONF" - echo "pg_bin_directory=$PGDIR/bin" - echo "skip_configuration_file=$CFGDIR/lib/ignore-database-reconfiguration" -) >> $PGAASCFG diff --git a/pgaas/src/stage/opt/app/pgaas/etc/do-pre-rm.prep b/pgaas/src/stage/opt/app/pgaas/etc/do-pre-rm.prep deleted file mode 100755 index a03a13b..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/do-pre-rm.prep +++ /dev/null @@ -1,17 +0,0 @@ -echo STARTING $0 $(date) - -set -x -id - -if [ -d /opt/app/postgresql-9.5.2 ] -then - rm -f $INSTALL_ROOT/opt/app/platform/postgres/pglogs.cron - su postgres -c "$INSTALL_ROOT/opt/app/platform/bin/mergeCron" - rmdir $INSTALL_ROOT/opt/app/platform/postgres - rm -f $INSTALL_ROOT/opt/app/platform/init.d/pgaas - rm -f $INSTALL_ROOT/opt/app/platform/rc.d/K20pgaas - rm -f $INSTALL_ROOT/opt/app/platform/rc.d/S20pgaas -fi - -rm -f $INSTALL_ROOT/etc/init/pgaas-idns.conf $INSTALL_ROOT/etc/init/pgaas-init.conf -rm -f $INSTALL_ROOT/etc/logrotate.d/pgaas diff --git a/pgaas/src/stage/opt/app/pgaas/etc/gen-pgpass b/pgaas/src/stage/opt/app/pgaas/etc/gen-pgpass deleted file mode 100644 index f97d573..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/gen-pgpass +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -# create ~postgres/.pgpass -postgrespswd=$( ${INSTALL_ROOT}/opt/app/cdf/bin/getpropvalue -x -n postgres ) -repmgrpswd=$( ${INSTALL_ROOT}/opt/app/cdf/bin/getpropvalue -x -n repmgr ) -umask 077 -pswdfile=~postgres/.pgpass -if [ -f $pswdfile ] -then - sed -i -e '/:postgres:/d' -e '/:repmgr:/d' $pswdfile -fi - -echo "*:*:*:postgres:$postgrespswd" >> $pswdfile -echo "*:*:*:repmgr:$repmgrpswd" >> $pswdfile -chmod 600 $pswdfile diff --git a/pgaas/src/stage/opt/app/pgaas/etc/gen-recovery.conf b/pgaas/src/stage/opt/app/pgaas/etc/gen-recovery.conf deleted file mode 100644 index 1ad41c2..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/gen-recovery.conf +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -[ -n "$DBROOT" ] || die "DBROOT is not set" - -cd $DBROOT || die "Cannot cd $DBROOT" -PATH=${INSTALL_ROOT}/opt/app/pgaas/bin:${INSTALL_ROOT}/opt/app/cdf/bin:$PATH - -PGNODES=$( getpropvalue -n pgnodes ) -HOSTNAME=`hostname -f` -PGNODEVALUE=$( gen-repmgr-info -n "$PGNODES" -l "$HOSTNAME" ) - -# node_name from repmgr.conf => application_name in recovery.conf conninfo line -# "node" value from repmgr.conf => primary_slot_name in recovery.conf with the string "repmgr_slot_" prefixed -# node_name in repmgr.conf can be the $HOSTNAME value ? - -pswd=$( ${INSTALL_ROOT}/opt/app/cdf/bin/getpropvalue -x -n repmgr ) - -appname=$HOSTNAME -PGNODEVALUE=$( gen-repmgr-info -n "$PGNODES" -l "$HOSTNAME" ) -umask 07 -cat <<-EOF > $DBROOT/recovery.conf - standby_mode = 'on' - primary_conninfo = 'user=repmgr password=$pswd host=$HOSTNAME port=5432 application_name=$HOSTNAME sslmode=prefer sslcompression=1' - recovery_target_timeline = 'latest' - primary_slot_name = repmgr_slot_$PGNODEVALUE -EOF - diff --git a/pgaas/src/stage/opt/app/pgaas/etc/gen-repmgr.conf b/pgaas/src/stage/opt/app/pgaas/etc/gen-repmgr.conf deleted file mode 100755 index 924a097..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/gen-repmgr.conf +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -[ -n "$CFGDIR" ] || die "CFGDIR is not set" - -cd $CFGDIR/main || die "Cannot cd $CFGDIR/main" -PATH=${INSTALL_ROOT}/opt/app/pgaas/bin:${INSTALL_ROOT}/opt/app/cdf/bin:$PATH -LOGDIR=/opt/logs/dcae/postgresql/server - -PGNODES=$( getpropvalue -n pgnodes ) - -CLUSTER=pgaas -HOSTNAME=`hostname -f` -PGNODEVALUE=$( gen-repmgr-info -n "$PGNODES" -l "$HOSTNAME" ) -UPSTREAMPGNODE=$( gen-repmgr-info -n "$PGNODES" -c "$HOSTNAME" ) - -UPSTREAMTEXT="#upstream_node=" -case $UPSTREAMPGNODE in - DEFAULT ) ;; - * ) UPSTREAMTEXT="upstream_node=$UPSTREAMPGNODE" ;; -esac - -cat <<-EOF > repmgr.conf - cluster=$CLUSTER - node=$PGNODEVALUE - node_name=$HOSTNAME - conninfo='host=$HOSTNAME user=repmgr dbname=repmgr' - use_replication_slots=1 - $UPSTREAMTEXT - - failover=automatic - promote_command='repmgr standby promote -f $CFGDIR/main/repmgr.conf' - follow_command='repmgr standby follow -f $CFGDIR/main/repmgr.conf' - event_notification_command='/opt/app/pgaas/bin/repmgrd-status-changes %n %e %s "%t" "%d"' - - #Log level: possible values are DEBUG, INFO, NOTICE, WARNING, ERR, ALERT, CRIT or EMERG - loglevel=INFO - logfile='$LOGDIR/repmgr.log' -EOF - diff --git a/pgaas/src/stage/opt/app/pgaas/etc/lock-and-create-db-backup b/pgaas/src/stage/opt/app/pgaas/etc/lock-and-create-db-backup deleted file mode 100644 index cb8586d..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/lock-and-create-db-backup +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=${INSTALL_ROOT}/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found -fi - -export PATH=$PGDIR/bin:${INSTALL_ROOT}/opt/java/jdk/jdk170/bin:${INSTALL_ROOT}/opt/app/cdf/bin:${INSTALL_ROOT}/opt/app/pgaas/bin:$PATH - -LOCKFILE=/var/lock/create-db-backup - -testlock -s -t 0 -r 99 ${LOCKFILE} create-db-backup -retc=$? - -if [ $retc -eq 99 ] -then - echo Backup is already being created -fi -exit $retc - diff --git a/pgaas/src/stage/opt/app/pgaas/etc/makecerts b/pgaas/src/stage/opt/app/pgaas/etc/makecerts deleted file mode 100755 index 494c78b..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/makecerts +++ /dev/null @@ -1,98 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -# NAME -# makecerts - Create elf-signed certificates for PostgreSQL -# -# USAGE -# makecerts [--force-overwrite] -# -# FILES -# /opt/app/pgaas/etc -# ssleay.cnf - template -# /opt/app/pgaas/lib -# ssl-cert-snakeoil.pem - public key -# ssl-cert-snakeoil.key - private key - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -dir=${INSTALL_ROOT}/opt/app/pgaas -etcdir=$dir/etc -libdir=$dir/lib -template="$etcdir/ssleay.cnf" - -usage() -{ - exec 1>&2 - echo "Usage: $0 [--force-overwrite]" - echo "Create self-signed certificates for $dir" - exit 1 -} - -set -x - -if [ -f "$libdir/ssl-cert-snakeoil.pem" ] && [ -f "$libdir/ssl-cert-snakeoil.key" ]; then - if [ "$1" != "--force-overwrite" ]; then - exit 0 - fi -fi - -# make_snakeoil - -if ! HostName="$(hostname -f)" ; then - HostName="$(hostname)" - echo "$0: Could not get FQDN, using \"$HostName\"." - echo "$0: You may want to fix your /etc/hosts and/or DNS setup and run" - echo "$0: '$0 --force-overwrite'" - echo "$0: again." -fi -if [ ${#HostName} -gt 64 ] ; then - AltName="DNS:$HostName" - HostName="$(hostname)" -fi - - -TMPFILE="$(mktemp /tmp/tmp.mc1.XXXXXXXXXX)" || die mktemp failed -TMPOUT="$(mktemp /tmp/tmp.mc2.XXXXXXXXXX)" || die mktemp failed - -trap "rm -f $TMPFILE $TMPOUT" EXIT 1 2 3 15 - -# create_temporary_cnf - sed -e s#@HostName@#"$HostName"# $template > $TMPFILE - [ -z "$AltName" ] || echo "subjectAltName=$AltName" >> $TMPFILE - -# create the certificate. - -umask 077 - -if ! openssl req -config $TMPFILE -new -x509 -days 3650 -nodes \ - -out $libdir/ssl-cert-snakeoil.pem \ - -keyout $libdir/ssl-cert-snakeoil.key > $TMPOUT 2>&1 -then - echo Could not create certificate. Openssl output was: >&2 - cat $TMPOUT >&2 - die openssl failed -fi -chmod 644 $libdir/ssl-cert-snakeoil.pem -chmod 600 $libdir/ssl-cert-snakeoil.key -# hash symlink -ln -sf ssl-cert-snakeoil.pem $libdir/$(openssl x509 -hash -noout -in $libdir/ssl-cert-snakeoil.pem) diff --git a/pgaas/src/stage/opt/app/pgaas/etc/makefile b/pgaas/src/stage/opt/app/pgaas/etc/makefile deleted file mode 100644 index b5a5484..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/makefile +++ /dev/null @@ -1,44 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -all: - -STAGEDIR=/dev/null -DISTPATH=/opt/app/pgaas - -CFGFILES= create_dcae_rotate.sql - -stage: - rm -rf $(STAGEDIR)/$(DISTPATH)/etc - mkdir -p $(STAGEDIR)/$(DISTPATH)/etc - for i in *; do \ - case $$i in \ - *.py | gen*.conf ) \ - j=`basename $$i .py`; \ - cp $$i $(STAGEDIR)/$(DISTPATH)/etc/$$j; \ - chmod a+x $(STAGEDIR)/$(DISTPATH)/etc/$$j; \ - ;; \ - *.conf | *.cfg | *.cnf | *.sql ) \ - cp $$i $(STAGEDIR)/$(DISTPATH)/etc/$$i; \ - chmod a+r $(STAGEDIR)/$(DISTPATH)/etc/$$i; \ - ;; \ - makefile | *~ ) ;; \ - * ) \ - if [ -f $$i ]; then \ - cp $$i $(STAGEDIR)/$(DISTPATH)/etc/$$i; \ - chmod a+rx $(STAGEDIR)/$(DISTPATH)/etc/$$i; \ - fi; \ - ;; \ - esac; \ - done diff --git a/pgaas/src/stage/opt/app/pgaas/etc/reset-db-secondary b/pgaas/src/stage/opt/app/pgaas/etc/reset-db-secondary deleted file mode 100644 index 5be1c60..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/reset-db-secondary +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - -die() -{ - echo "$@" 1>&2 - exit 1 -} - -export CFGDIR=/opt/app/pgaas - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else die PostgreSQL bin directory not found -fi -export PGDIR - -export DBROOT=/dbroot/pgdata/main -export PATH=$PATH:/opt/app/pgaas/bin:/opt/app/pgaas/etc:/opt/app/cdf/bin:/opt/app/postgresql-config/etc - -clustertype=$( getpropvalue -n cluster ) -PGNODES=$( getpropvalue -n pgnodes ) -case $clustertype in - central ) - export MASTER=$( gen-repmgr-info -n "$PGNODES" -M "$master" ) - ;; - edge ) - host=$( hostname -f ) - export MASTER=$( gen-repmgr-info -n "$PGNODES" -C $host ) - ;; -esac - -[ -n "$CFGDIR" ] || die "CFGDIR is not set" -[ -n "$MASTER" ] || die "MASTER is not set" -[ -n "$PGDIR" ] || die "PGDIR is not set" -[ -n "$DBROOT" ] || die "DBROOT is not set" - -# make certain that everything is down -pkill repmgrd -pkill repmgr -pg_ctl_stop - -# reset the database to a fresh copy of what is on the master -create-db-secondary diff --git a/pgaas/src/stage/opt/app/pgaas/etc/ssleay.cnf b/pgaas/src/stage/opt/app/pgaas/etc/ssleay.cnf deleted file mode 100644 index 2b665cc..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/ssleay.cnf +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - -# -# SSLeay example configuration file. -# - -RANDFILE = /dev/urandom - -[ req ] -default_bits = 2048 -default_keyfile = privkey.pem -distinguished_name = req_distinguished_name -prompt = no -policy = policy_anything -req_extensions = v3_req -x509_extensions = v3_req - -[ req_distinguished_name ] -commonName = @HostName@ - -[ v3_req ] -basicConstraints = CA:FALSE diff --git a/pgaas/src/stage/opt/app/pgaas/etc/start-db b/pgaas/src/stage/opt/app/pgaas/etc/start-db deleted file mode 100644 index a91d16a..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/start-db +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -[ -n "$PGDIR" ] || die "PGDIR is not set" -[ -n "$DBROOT" ] || die "DBROOT is not set" -[ -n "$CFGDIR" ] || die "CFGDIR is not set" - -rm -f $DBROOT/postmaster.pid -chmod 600 $CFGDIR/lib/*.key -$PGDIR/bin/pg_ctl start -D $DBROOT -o "-c config_file=$CFGDIR/main/postgresql.conf" diff --git a/pgaas/src/stage/opt/app/pgaas/etc/update-db-master b/pgaas/src/stage/opt/app/pgaas/etc/update-db-master deleted file mode 100644 index db0d5ba..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/update-db-master +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -# update a master database -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -[ -n "$PGDIR" ] || die "PGDIR is not set" -[ -n "$DBROOT" ] || die "DBROOT is not set" -[ -n "$CFGDIR" ] || die "CFGDIR is not set" - -cd $CFGDIR/main || die "Cannot cd $CFGDIR/main" - -PATH=${INSTALL_ROOT}/opt/app/pgaas/bin:$CFGDIR/etc:$PGDIR/bin:$PATH - -# update postgresql.conf - got new ones -# update pg_hba.conf - got new ones -# set up repmgr.conf - in common - -# start the DB -start-db -sleep 10 - -# make sure the postgres password is right -$CFGDIR/etc/update-postgres-user - -# create temporal tables and other extensions, if needed -$CFGDIR/etc/create-extensions - -# create repmgr user/db, if needed -$CFGDIR/etc/create-repmgr-user - -# register as master -repmgr -f $CFGDIR/main/repmgr.conf master register -echo repmgr ret=$? - -# start repmgrd -# start repmgrd (verbose logging for testing) -umask 07 -repmgrd -f $CFGDIR/main/repmgr.conf -d --verbose -echo repmgrd ret=$? -# start repmgrd (normal logging) -# repmgrd -f $CFGDIR/main/repmgr.conf -d diff --git a/pgaas/src/stage/opt/app/pgaas/etc/update-db-secondary b/pgaas/src/stage/opt/app/pgaas/etc/update-db-secondary deleted file mode 100644 index e06c810..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/update-db-secondary +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -# update a secondary database -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -[ -n "$MASTER" ] || die "MASTER is not set" -[ -n "$PGDIR" ] || die "PGDIR is not set" -[ -n "$DBROOT" ] || die "DBROOT is not set" -[ -n "$CFGDIR" ] || die "CFGDIR is not set" - -cd $CFGDIR/main || die "Cannot cd $CFGDIR/main" - -PATH=${INSTALL_ROOT}/opt/app/pgaas/bin:$CFGDIR/etc:$PGDIR/bin:$PATH - -umask 077 -TMP=$(mktemp /tmp/tmp.uds1.XXXXXXXXXX) -trap 'rm -f $TMP' 0 1 2 3 15 - -# update postgresql.conf - got new ones -# update pg_hba.conf - got new ones -# set up repmgr.conf - in common - -# replace/update recovery.conf -if [ -f $DBROOT/recovery.conf ];then mv $DBROOT/recovery.conf $DBROOT/recovery.conf.upgraded;fi -$CFGDIR/etc/gen-recovery.conf - -# wait until master DB is active and has repmgr available -max=40 -for s in `seq $max` -do - echo "$s of $max: Asking master $MASTER if repmgr is ready" - pgwget --progress=dot:giga -O$TMP http://$MASTER:8000/hasrepmgr - if [ -s $TMP ] - then - msg=$(cat $TMP) - case $msg in - OK* ) - echo "Master has repmgr ready" - done=yes - break - ;; - * ) - echo "Master does not have repmgr ready, msg=$msg" - ;; - esac - fi - rm -f $TMP - sleep 15 -done -[ "$done" = "yes" ] || die "Master never had repmgr available" - - -$CFGDIR/etc/start-db - -sleep 10 - -# make sure the postgres password is right -$CFGDIR/etc/update-postgres-user - -# register as standby -repmgr -f $CFGDIR/main/repmgr.conf standby register -echo repmgr ret=$? -sleep 10 - -# start repmgrd -# start repmgrd (verbose logging for testing) -umask 07 -repmgrd -f $CFGDIR/main/repmgr.conf -d --verbose -echo repmgrd ret=$? -# start repmgrd (normal logging) -# repmgrd -f $CFGDIR/main/repmgr.conf -d - -chmod 600 recovery.conf diff --git a/pgaas/src/stage/opt/app/pgaas/etc/update-postgres-user b/pgaas/src/stage/opt/app/pgaas/etc/update-postgres-user deleted file mode 100644 index 0466ad8..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/update-postgres-user +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -[ -n "$PGDIR" ] || die "PGDIR is not set" - -PATH=${INSTALL_ROOT}/opt/app/pgaas/bin:$PGDIR/bin:${INSTALL_ROOT}/opt/app/cdf/bin:$PATH -pswd=$( getpropvalue -x -n postgres ) - -psql <<-EOF - ALTER USER postgres PASSWORD '$pswd'; - EOF diff --git a/pgaas/src/stage/opt/app/pgaas/init/init-pgaas-idns.conf b/pgaas/src/stage/opt/app/pgaas/init/init-pgaas-idns.conf deleted file mode 100644 index 62714f1..0000000 --- a/pgaas/src/stage/opt/app/pgaas/init/init-pgaas-idns.conf +++ /dev/null @@ -1,21 +0,0 @@ -# PGaaS - PostgreSQL as a Service -# -# The PGaaS iDNS server provides information on the system, primarily for the iDNS system - -description "PGaaS iDNS server" - -start on runlevel [2345] -stop on runlevel [!2345] - -respawn -respawn limit 10 5 -umask 022 -setuid postgres - -pre-start script - test -x /opt/app/pgaas/lib/iDNS-responder || { stop; exit 0; } -end script - -script - /opt/app/pgaas/lib/iDNS-responder -end script diff --git a/pgaas/src/stage/opt/app/pgaas/init/init-pgaas-init.conf b/pgaas/src/stage/opt/app/pgaas/init/init-pgaas-init.conf deleted file mode 100644 index 6f03c1f..0000000 --- a/pgaas/src/stage/opt/app/pgaas/init/init-pgaas-init.conf +++ /dev/null @@ -1,24 +0,0 @@ -# PGaaS - PostgreSQL as a Service -# -# The PGaaS init process needs a directory to be created on reboot -# -# The best way to do this is to have a file in /usr/lib/tmpfiles.d/pgaas: -# d /var/run/postgresql 2755 postgres postgres - -# -# This is a workaround because systemd-tmpfiles is not present. - -description "PGaaS /var/run/postgresql setup" - -start on runlevel [2345] -stop on runlevel [!2345] - -umask 022 - -pre-start script - mkdir -p /var/run/postgresql - chown postgres:postgres /var/run/postgresql -end script - -script - : -end script diff --git a/pgaas/src/stage/opt/app/pgaas/init/logrotate b/pgaas/src/stage/opt/app/pgaas/init/logrotate deleted file mode 100644 index 8531ed6..0000000 --- a/pgaas/src/stage/opt/app/pgaas/init/logrotate +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -# rotate PGaaS log files - -/opt/logs/dcae/postgresql/init/*.log /opt/logs/dcae/postgresql/idns/*.log /opt/logs/dcae/postgresql/server/*.log { - missingok - compress - daily - rotate 60 - create - dateext -} diff --git a/pgaas/src/stage/opt/app/pgaas/init/makefile b/pgaas/src/stage/opt/app/pgaas/init/makefile deleted file mode 100644 index d2d8285..0000000 --- a/pgaas/src/stage/opt/app/pgaas/init/makefile +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -all: - -STAGEDIR=/dev/null -DISTPATH=/opt/app/pgaas - -stage: - rm -rf $(STAGEDIR)/$(DISTPATH)/init - mkdir -p $(STAGEDIR)/$(DISTPATH)/init - for i in *; do \ - case $$i in \ - *.py ) \ - j=`basename $$i .py`; \ - cp $$i $(STAGEDIR)/$(DISTPATH)/init/$$j; \ - chmod a+x $(STAGEDIR)/$(DISTPATH)/init/$$j; \ - ;; \ - makefile | *~ ) ;; \ - * ) \ - if [ -f $$i ]; then \ - cp $$i $(STAGEDIR)/$(DISTPATH)/init/$$i; \ - chmod a+x $(STAGEDIR)/$(DISTPATH)/init/$$i; \ - fi; \ - ;; \ - esac; \ - done diff --git a/pgaas/src/stage/opt/app/pgaas/init/pglogs.cron b/pgaas/src/stage/opt/app/pgaas/init/pglogs.cron deleted file mode 100644 index ff621ba..0000000 --- a/pgaas/src/stage/opt/app/pgaas/init/pglogs.cron +++ /dev/null @@ -1,4 +0,0 @@ -30 * * * * ( date ; find /dbroot/pglogs -type f -mtime +3 -exec rm {} + ) >> /tmp/cleanpglogs.log 2>&1 -50 1 * * * ( mv -f /tmp/cleanpglogs.log /tmp/cleanpglogs.log.old ) > /dev/null 2>&1 -* * * * * [ -x /opt/app/pgaas/bin/update_var_run_isrw ] && /opt/app/pgaas/bin/update_var_run_isrw -* * * * * [ -x /opt/app/pgaas/bin/check_cluster ] && /opt/app/pgaas/bin/check_cluster -d /var/run/postgresql/check_cluster >> /opt/logs/dcae/postgresql/idns/cluster.log diff --git a/pgaas/src/stage/opt/app/pgaas/init/systemd-pgaas-idns.service b/pgaas/src/stage/opt/app/pgaas/init/systemd-pgaas-idns.service deleted file mode 100644 index 007ca36..0000000 --- a/pgaas/src/stage/opt/app/pgaas/init/systemd-pgaas-idns.service +++ /dev/null @@ -1,16 +0,0 @@ -# PGaaS - PostgreSQL as a Service -# -# The PGaaS iDNS server provides information on the system, primarily for the iDNS system - -[Unit] -Description=PGaaS iDNS server - -[Service] -User=postgres -Group=postgres -ExecStart= /opt/app/pgaas/lib/iDNS-responder -Restart=always -RestartSec=10 - -[Install] -WantedBy=multi-user.target diff --git a/pgaas/src/stage/opt/app/pgaas/init/tmpfiles-pgaas-init.conf b/pgaas/src/stage/opt/app/pgaas/init/tmpfiles-pgaas-init.conf deleted file mode 100644 index 9341a95..0000000 --- a/pgaas/src/stage/opt/app/pgaas/init/tmpfiles-pgaas-init.conf +++ /dev/null @@ -1,7 +0,0 @@ -# PGaaS - PostgreSQL as a Service -# -# The PGaaS init process needs a directory to be created on reboot -# - -d /var/run/postgresql 0755 postgres postgres - - diff --git a/pgaas/src/stage/opt/app/pgaas/lib/CommonLogger.py b/pgaas/src/stage/opt/app/pgaas/lib/CommonLogger.py deleted file mode 100755 index a50303f..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/CommonLogger.py +++ /dev/null @@ -1,941 +0,0 @@ -#!/usr/bin/python -# -*- indent-tabs-mode: nil -*- vi: set expandtab: -"""ECOMP Common Logging library in Python. - -CommonLogger.py - -# Copyright (C) 2016 AT&T Intellectual Property. All rights reserved. -# -# This code is licensed under the Apache License, Version 2.0; -# you may not use this code for any purpose except in compliance -# with the Apache License. You may obtain a copy of the License -# at http://www.att.com/openecomp.html. - -Original Written by: Terry Schmalzried -Date written: October 1, 2015 -Last updated: December 1, 2016 - -version 0.8 -""" - -from __future__ import print_function -import os, sys, getopt, logging, logging.handlers, time, re, uuid, socket, threading, collections - -class CommonLogger: - """ECOMP Common Logging object. - - Public methods: - __init__ - setFields - debug - info - warn - error - fatal - """ - - UnknownFile = -1 - ErrorFile = 0 - DebugFile = 1 - AuditFile = 2 - MetricsFile = 3 - DateFmt = '%Y-%m-%dT%H:%M:%S' - verbose = False - - def __init__(self, configFile, logKey, **kwargs): - """Construct a Common Logger for one Log File. - - Arguments: - configFile -- configuration filename. - logKey -- the keyword in configFile that identifies the log filename. - - Keyword arguments: Annotations are d:debug, a=audit, m=metrics, e=error - style -- the log file format (style) to use when writing log messages, - one of CommonLogger.ErrorFile, CommonLogger.DebugFile, - CommonLogger.AuditFile and CommonLogger.MetricsFile, or - one of the strings "error", "debug", "audit" or "metrics". - May also be set in the config file using a field named - <logKey>Style (where <logKey> is the value of the logKey - parameter). The keyword value overrides the value in the - config file. - requestID (dame) -- optional default value for this log record field. - serviceInstanceID (am) -- optional default value for this log record field. - threadID (am) -- optional default value for this log record field. - serverName (am) -- optional default value for this log record field. - serviceName (am) -- optional default value for this log record field. - instanceUUID (am) -- optional default value for this log record field. - severity (am) -- optional default value for this log record field. - serverIPAddress (am) -- optional default value for this log record field. - server (am) -- optional default value for this log record field. - IPAddress (am) -- optional default value for this log record field. - className (am) -- optional default value for this log record field. - timer (am) -- (ElapsedTime) optional default value for this log record field. - partnerName (ame) -- optional default value for this log record field. - targetEntity (me) -- optional default value for this log record field. - targetServiceName (me) -- optional default value for this log record field. - statusCode (am) -- optional default value for this log record field. - responseCode (am) -- optional default value for this log record field. - responseDescription (am) -- optional default value for this log record field. - processKey (am) -- optional default value for this log record field. - targetVirtualEntity (m) -- optional default value for this log record field. - customField1 (am) -- optional default value for this log record field. - customField2 (am) -- optional default value for this log record field. - customField3 (am) -- optional default value for this log record field. - customField4 (am) -- optional default value for this log record field. - errorCategory (e) -- optional default value for this log record field. - errorCode (e) -- optional default value for this log record field. - errorDescription (e) -- optional default value for this log record field. - - Note: the pipe '|' character is not allowed in any log record field. - """ - - self._monitorFlag = False - - # Get configuration parameters - self._logKey = str(logKey) - self._configFile = str(configFile) - self._rotateMethod = 'time' - self._timeRotateIntervalType = 'midnight' - self._timeRotateInterval = 1 - self._sizeMaxBytes = 0 - self._sizeRotateMode = 'a' - self._socketHost = None - self._socketPort = 0 - self._typeLogger = 'filelogger' - self._backupCount = 6 - self._logLevelThreshold = self._intLogLevel('') - self._logFile = None - self._begTime = None - self._begMsec = 0 - self._fields = {} - self._fields["style"] = CommonLogger.UnknownFile - try: - self._configFileModified = os.path.getmtime(self._configFile) - for line in open(self._configFile): - line = line.split('#',1)[0] # remove comments - if '=' in line: - key, value = [x.strip() for x in line.split('=',1)] - if key == 'rotateMethod' and value.lower() in ['time', 'size', 'none']: - self._rotateMethod = value.lower() - elif key == 'timeRotateIntervalType' and value in ['S', 'M', 'H', 'D', 'W0', 'W1', 'W2', 'W3', 'W4', 'W5', 'W6', 'midnight']: - self._timeRotateIntervalType = value - elif key == 'timeRotateInterval' and int( value ) > 0: - self._timeRotateInterval = int( value ) - elif key == 'sizeMaxBytes' and int( value ) >= 0: - self._sizeMaxBytes = int( value ) - elif key == 'sizeRotateMode' and value in ['a']: - self._sizeRotateMode = value - elif key == 'backupCount' and int( value ) >= 0: - self._backupCount = int( value ) - elif key == self._logKey + 'SocketHost': - self._socketHost = value - elif key == self._logKey + 'SocketPort' and int( value ) == 0: - self._socketPort = int( value ) - elif key == self._logKey + 'LogType' and value.lower() in ['filelogger', 'stdoutlogger', 'stderrlogger', 'socketlogger', 'nulllogger']: - self._typeLogger = value.lower() - elif key == self._logKey + 'LogLevel': - self._logLevelThreshold = self._intLogLevel(value.upper()) - elif key == self._logKey + 'Style': - self._fields["style"] = value - elif key == self._logKey: - self._logFile = value - except Exception as x: - print("exception reading '%s' configuration file: %s" %(self._configFile, str(x)), file=sys.stderr) - sys.exit(2) - except: - print("exception reading '%s' configuration file" %(self._configFile), file=sys.stderr) - sys.exit(2) - - if self._logFile is None: - print('configuration file %s is missing definition %s for log file' %(self._configFile, self._logKey), file=sys.stderr) - sys.exit(2) - - - # initialize default log fields - # timestamp will automatically be generated - for key in ['style', 'requestID', 'serviceInstanceID', 'threadID', 'serverName', 'serviceName', 'instanceUUID', \ - 'severity', 'serverIPAddress', 'server', 'IPAddress', 'className', 'timer', \ - 'partnerName', 'targetEntity', 'targetServiceName', 'statusCode', 'responseCode', \ - 'responseDescription', 'processKey', 'targetVirtualEntity', 'customField1', \ - 'customField2', 'customField3', 'customField4', 'errorCategory', 'errorCode', \ - 'errorDescription' ]: - if key in kwargs and kwargs[key] != None: - self._fields[key] = kwargs[key] - - self._resetStyleField() - - # Set up logger - self._logLock = threading.Lock() - with self._logLock: - self._logger = logging.getLogger(self._logKey) - self._logger.propagate = False - self._createLogger() - - self._defaultServerInfo() - - # spawn a thread to monitor configFile for logLevel and logFile changes - self._monitorFlag = True - self._monitorThread = threading.Thread(target=self._monitorConfigFile, args=()) - self._monitorThread.daemon = True - self._monitorThread.start() - - - def _createLogger(self): - if self._typeLogger == 'filelogger': - self._mkdir_p(self._logFile) - if self._rotateMethod == 'time': - self._logHandler = logging.handlers.TimedRotatingFileHandler(self._logFile, \ - when=self._timeRotateIntervalType, interval=self._timeRotateInterval, \ - backupCount=self._backupCount, encoding=None, delay=False, utc=True) - elif self._rotateMethod == 'size': - self._logHandler = logging.handlers.RotatingFileHandler(self._logFile, \ - mode=self._sizeRotateMode, maxBytes=self._sizeMaxBytes, \ - backupCount=self._backupCount, encoding=None, delay=False) - - else: - self._logHandler = logging.handlers.WatchedFileHandler(self._logFile, \ - mode=self._sizeRotateMode, \ - encoding=None, delay=False) - elif self._typeLogger == 'stderrlogger': - self._logHandler = logging.handlers.StreamHandler(sys.stderr) - elif self._typeLogger == 'stdoutlogger': - self._logHandler = logging.handlers.StreamHandler(sys.stdout) - elif self._typeLogger == 'socketlogger': - self._logHandler = logging.handlers.SocketHandler(self._socketHost, self._socketPort) - elif self._typeLogger == 'nulllogger': - self._logHandler = logging.handlers.NullHandler() - - if self._fields["style"] == CommonLogger.AuditFile or self._fields["style"] == CommonLogger.MetricsFile: - self._logFormatter = logging.Formatter(fmt='%(begtime)s,%(begmsecs)03d+00:00|%(endtime)s,%(endmsecs)03d+00:00|%(message)s', datefmt=CommonLogger.DateFmt) - else: - self._logFormatter = logging.Formatter(fmt='%(asctime)s,%(msecs)03d+00:00|%(message)s', datefmt='%Y-%m-%dT%H:%M:%S') - self._logFormatter.converter = time.gmtime - self._logHandler.setFormatter(self._logFormatter) - self._logger.addHandler(self._logHandler) - - def _resetStyleField(self): - styleFields = ["error", "debug", "audit", "metrics"] - if self._fields['style'] in styleFields: - self._fields['style'] = styleFields.index(self._fields['style']) - - def __del__(self): - if self._monitorFlag == False: - return - - self._monitorFlag = False - - if self._monitorThread is not None and self._monitorThread.is_alive(): - self._monitorThread.join() - - self._monitorThread = None - - - def _defaultServerInfo(self): - - # If not set or purposely set = None, then set default - if self._fields.get('server') is None: - try: - self._fields['server'] = socket.getfqdn() - except Exception as err: - try: - self._fields['server'] = socket.gethostname() - except Exception as err: - self._fields['server'] = "" - - # If not set or purposely set = None, then set default - if self._fields.get('serverIPAddress') is None: - try: - self._fields['serverIPAddress'] = socket.gethostbyname(self._fields['server']) - except Exception as err: - self._fields['serverIPAddress'] = "" - - - def _monitorConfigFile(self): - while self._monitorFlag: - try: - fileTime = os.path.getmtime(self._configFile) - if fileTime > self._configFileModified: - self._configFileModified = fileTime - ReopenLogFile = False - logFile = self._logFile - with open(self._configFile) as fp: - for line in fp: - line = line.split('#',1)[0] # remove comments - if '=' in line: - key, value = [x.strip() for x in line.split('=',1)] - if key == 'rotateMethod' and value.lower() in ['time', 'size', 'none'] and self._rotateMethod != value: - self._rotateMethod = value.lower() - ReopenLogFile = True - elif key == 'timeRotateIntervalType' and value in ['S', 'M', 'H', 'D', 'W0', 'W1', 'W2', 'W3', 'W4', 'W5', 'W6', 'midnight']: - self._timeRotateIntervalType = value - ReopenLogFile = True - elif key == 'timeRotateInterval' and int( value ) > 0: - self._timeRotateInterval = int( value ) - ReopenLogFile = True - elif key == 'sizeMaxBytes' and int( value ) >= 0: - self._sizeMaxBytes = int( value ) - ReopenLogFile = True - elif key == 'sizeRotateMode' and value in ['a']: - self._sizeRotateMode = value - ReopenLogFile = True - elif key == 'backupCount' and int( value ) >= 0: - self._backupCount = int( value ) - ReopenLogFile = True - elif key == self._logKey + 'SocketHost' and self._socketHost != value: - self._socketHost = value - ReopenLogFile = True - elif key == self._logKey + 'SocketPort' and self._socketPort > 0 and self._socketPort != int( value ): - self._socketPort = int( value ) - ReopenLogFile = True - elif key == self._logKey + 'LogLevel' and self._logLevelThreshold != self._intLogLevel( value.upper() ): - self._logLevelThreshold = self._intLogLevel(value.upper()) - elif key == self._logKey + 'LogType' and self._typeLogger != value and value.lower() in ['filelogger', 'stdoutlogger', 'stderrlogger', 'socketlogger', 'nulllogger']: - self._typeLogger = value.lower() - ReopenLogFile = True - elif key == self._logKey + 'Style': - self._fields["style"] = value - self._resetStyleField() - elif key == self._logKey and self._logFile != value: - logFile = value - ReopenLogFile = True - if ReopenLogFile: - with self._logLock: - self._logger.removeHandler(self._logHandler) - self._logFile = logFile - self._createLogger() - except Exception as err: - pass - - time.sleep(5) - - - def setFields(self, **kwargs): - """Set default values for log fields. - - Keyword arguments: Annotations are d:debug, a=audit, m=metrics, e=error - style -- the log file format (style) to use when writing log messages - requestID (dame) -- optional default value for this log record field. - serviceInstanceID (am) -- optional default value for this log record field. - threadID (am) -- optional default value for this log record field. - serverName (am) -- optional default value for this log record field. - serviceName (am) -- optional default value for this log record field. - instanceUUID (am) -- optional default value for this log record field. - severity (am) -- optional default value for this log record field. - serverIPAddress (am) -- optional default value for this log record field. - server (am) -- optional default value for this log record field. - IPAddress (am) -- optional default value for this log record field. - className (am) -- optional default value for this log record field. - timer (am) -- (ElapsedTime) optional default value for this log record field. - partnerName (ame) -- optional default value for this log record field. - targetEntity (me) -- optional default value for this log record field. - targetServiceName (me) -- optional default value for this log record field. - statusCode (am) -- optional default value for this log record field. - responseCode (am) -- optional default value for this log record field. - responseDescription (am) -- optional default value for this log record field. - processKey (am) -- optional default value for this log record field. - targetVirtualEntity (m) -- optional default value for this log record field. - customField1 (am) -- optional default value for this log record field. - customField2 (am) -- optional default value for this log record field. - customField3 (am) -- optional default value for this log record field. - customField4 (am) -- optional default value for this log record field. - errorCategory (e) -- optional default value for this log record field. - errorCode (e) -- optional default value for this log record field. - errorDescription (e) -- optional default value for this log record field. - - Note: the pipe '|' character is not allowed in any log record field. - """ - - for key in ['style', 'requestID', 'serviceInstanceID', 'threadID', 'serverName', 'serviceName', 'instanceUUID', \ - 'severity', 'serverIPAddress', 'server', 'IPAddress', 'className', 'timer', \ - 'partnerName', 'targetEntity', 'targetServiceName', 'statusCode', 'responseCode', \ - 'responseDescription', 'processKey', 'targetVirtualEntity', 'customField1', \ - 'customField2', 'customField3', 'customField4', 'errorCategory', 'errorCode', \ - 'errorDescription' ]: - if key in kwargs: - if kwargs[key] != None: - self._fields[key] = kwargs[key] - elif key in self._fields: - del self._fields[key] - - self._defaultServerInfo() - - - def debug(self, message, **kwargs): - """Write a DEBUG level message to the log file. - - Arguments: - message -- value for the last log record field. - - Keyword arguments: Annotations are d:debug, a=audit, m=metrics, e=error - style -- the log file format (style) to use when writing log messages - requestID (dame) -- optional default value for this log record field. - serviceInstanceID (am) -- optional default value for this log record field. - threadID (am) -- optional default value for this log record field. - serverName (am) -- optional default value for this log record field. - serviceName (am) -- optional default value for this log record field. - instanceUUID (am) -- optional default value for this log record field. - severity (am) -- optional default value for this log record field. - serverIPAddress (am) -- optional default value for this log record field. - server (am) -- optional default value for this log record field. - IPAddress (am) -- optional default value for this log record field. - className (am) -- optional default value for this log record field. - timer (am) -- (ElapsedTime) optional default value for this log record field. - partnerName (ame) -- optional default value for this log record field. - targetEntity (me) -- optional default value for this log record field. - targetServiceName (me) -- optional default value for this log record field. - statusCode (am) -- optional default value for this log record field. - responseCode (am) -- optional default value for this log record field. - responseDescription (am) -- optional default value for this log record field. - processKey (am) -- optional default value for this log record field. - targetVirtualEntity (m) -- optional default value for this log record field. - customField1 (am) -- optional default value for this log record field. - customField2 (am) -- optional default value for this log record field. - customField3 (am) -- optional default value for this log record field. - customField4 (am) -- optional default value for this log record field. - errorCategory (e) -- optional default value for this log record field. - errorCode (e) -- optional default value for this log record field. - errorDescription (e) -- optional default value for this log record field. - begTime (am) -- optional starting time for this audit/metrics log record. - - Note: the pipe '|' character is not allowed in any log record field. - """ - - self._log('DEBUG', message, errorCategory = 'DEBUG', **kwargs) - - def info(self, message, **kwargs): - """Write an INFO level message to the log file. - - Arguments: - message -- value for the last log record field. - - Keyword arguments: Annotations are d:debug, a=audit, m=metrics, e=error - style -- the log file format (style) to use when writing log messages - requestID (dame) -- optional default value for this log record field. - serviceInstanceID (am) -- optional default value for this log record field. - threadID (am) -- optional default value for this log record field. - serverName (am) -- optional default value for this log record field. - serviceName (am) -- optional default value for this log record field. - instanceUUID (am) -- optional default value for this log record field. - severity (am) -- optional default value for this log record field. - serverIPAddress (am) -- optional default value for this log record field. - server (am) -- optional default value for this log record field. - IPAddress (am) -- optional default value for this log record field. - className (am) -- optional default value for this log record field. - timer (am) -- (ElapsedTime) optional default value for this log record field. - partnerName (ame) -- optional default value for this log record field. - targetEntity (me) -- optional default value for this log record field. - targetServiceName (me) -- optional default value for this log record field. - statusCode (am) -- optional default value for this log record field. - responseCode (am) -- optional default value for this log record field. - responseDescription (am) -- optional default value for this log record field. - processKey (am) -- optional default value for this log record field. - targetVirtualEntity (m) -- optional default value for this log record field. - customField1 (am) -- optional default value for this log record field. - customField2 (am) -- optional default value for this log record field. - customField3 (am) -- optional default value for this log record field. - customField4 (am) -- optional default value for this log record field. - errorCategory (e) -- optional default value for this log record field. - errorCode (e) -- optional default value for this log record field. - errorDescription (e) -- optional default value for this log record field. - begTime (am) -- optional starting time for this audit/metrics log record. - - Note: the pipe '|' character is not allowed in any log record field. - """ - - self._log('INFO', message, errorCategory = 'INFO', **kwargs) - - def warn(self, message, **kwargs): - """Write a WARN level message to the log file. - - Arguments: - message -- value for the last log record field. - - Keyword arguments: Annotations are d:debug, a=audit, m=metrics, e=error - style -- the log file format (style) to use when writing log messages - requestID (dame) -- optional default value for this log record field. - serviceInstanceID (am) -- optional default value for this log record field. - threadID (am) -- optional default value for this log record field. - serverName (am) -- optional default value for this log record field. - serviceName (am) -- optional default value for this log record field. - instanceUUID (am) -- optional default value for this log record field. - severity (am) -- optional default value for this log record field. - serverIPAddress (am) -- optional default value for this log record field. - server (am) -- optional default value for this log record field. - IPAddress (am) -- optional default value for this log record field. - className (am) -- optional default value for this log record field. - timer (am) -- (ElapsedTime) optional default value for this log record field. - partnerName (ame) -- optional default value for this log record field. - targetEntity (me) -- optional default value for this log record field. - targetServiceName (me) -- optional default value for this log record field. - statusCode (am) -- optional default value for this log record field. - responseCode (am) -- optional default value for this log record field. - responseDescription (am) -- optional default value for this log record field. - processKey (am) -- optional default value for this log record field. - targetVirtualEntity (m) -- optional default value for this log record field. - customField1 (am) -- optional default value for this log record field. - customField2 (am) -- optional default value for this log record field. - customField3 (am) -- optional default value for this log record field. - customField4 (am) -- optional default value for this log record field. - errorCategory (e) -- optional default value for this log record field. - errorCode (e) -- optional default value for this log record field. - errorDescription (e) -- optional default value for this log record field. - begTime (am) -- optional starting time for this audit/metrics log record. - - Note: the pipe '|' character is not allowed in any log record field. - """ - - self._log('WARN', message, errorCategory = 'WARN', **kwargs) - - def error(self, message, **kwargs): - """Write an ERROR level message to the log file. - - Arguments: - message -- value for the last log record field. - - Keyword arguments: Annotations are d:debug, a=audit, m=metrics, e=error - style -- the log file format (style) to use when writing log messages - requestID (dame) -- optional default value for this log record field. - serviceInstanceID (am) -- optional default value for this log record field. - threadID (am) -- optional default value for this log record field. - serverName (am) -- optional default value for this log record field. - serviceName (am) -- optional default value for this log record field. - instanceUUID (am) -- optional default value for this log record field. - severity (am) -- optional default value for this log record field. - serverIPAddress (am) -- optional default value for this log record field. - server (am) -- optional default value for this log record field. - IPAddress (am) -- optional default value for this log record field. - className (am) -- optional default value for this log record field. - timer (am) -- (ElapsedTime) optional default value for this log record field. - partnerName (ame) -- optional default value for this log record field. - targetEntity (me) -- optional default value for this log record field. - targetServiceName (me) -- optional default value for this log record field. - statusCode (am) -- optional default value for this log record field. - responseCode (am) -- optional default value for this log record field. - responseDescription (am) -- optional default value for this log record field. - processKey (am) -- optional default value for this log record field. - targetVirtualEntity (m) -- optional default value for this log record field. - customField1 (am) -- optional default value for this log record field. - customField2 (am) -- optional default value for this log record field. - customField3 (am) -- optional default value for this log record field. - customField4 (am) -- optional default value for this log record field. - errorCategory (e) -- optional default value for this log record field. - errorCode (e) -- optional default value for this log record field. - errorDescription (e) -- optional default value for this log record field. - begTime (am) -- optional starting time for this audit/metrics log record. - - Note: the pipe '|' character is not allowed in any log record field. - """ - - self._log('ERROR', message, errorCategory = 'ERROR', **kwargs) - - def fatal(self, message, **kwargs): - """Write a FATAL level message to the log file. - - Arguments: - message -- value for the last log record field. - - Keyword arguments: Annotations are d:debug, a=audit, m=metrics, e=error - style -- the log file format (style) to use when writing log messages - requestID (dame) -- optional default value for this log record field. - serviceInstanceID (am) -- optional default value for this log record field. - threadID (am) -- optional default value for this log record field. - serverName (am) -- optional default value for this log record field. - serviceName (am) -- optional default value for this log record field. - instanceUUID (am) -- optional default value for this log record field. - severity (am) -- optional default value for this log record field. - serverIPAddress (am) -- optional default value for this log record field. - server (am) -- optional default value for this log record field. - IPAddress (am) -- optional default value for this log record field. - className (am) -- optional default value for this log record field. - timer (am) -- (ElapsedTime) optional default value for this log record field. - partnerName (ame) -- optional default value for this log record field. - targetEntity (me) -- optional default value for this log record field. - targetServiceName (me) -- optional default value for this log record field. - statusCode (am) -- optional default value for this log record field. - responseCode (am) -- optional default value for this log record field. - responseDescription (am) -- optional default value for this log record field. - processKey (am) -- optional default value for this log record field. - targetVirtualEntity (m) -- optional default value for this log record field. - customField1 (am) -- optional default value for this log record field. - customField2 (am) -- optional default value for this log record field. - customField3 (am) -- optional default value for this log record field. - customField4 (am) -- optional default value for this log record field. - errorCategory (e) -- optional default value for this log record field. - errorCode (e) -- optional default value for this log record field. - errorDescription (e) -- optional default value for this log record field. - begTime (am) -- optional starting time for this audit/metrics log record. - - Note: the pipe '|' character is not allowed in any log record field. - """ - - self._log('FATAL', message, errorCategory = 'FATAL', **kwargs) - - def _log(self, logLevel, message, **kwargs): - """Write a message to the log file. - - Arguments: - logLevel -- value ('DEBUG', 'INFO', 'WARN', 'ERROR', 'FATAL', ...) for the log record. - message -- value for the last log record field. - - Keyword arguments: Annotations are d:debug, a=audit, m=metrics, e=error - style -- the log file format (style) to use when writing log messages - requestID (dame) -- optional default value for this log record field. - serviceInstanceID (am) -- optional default value for this log record field. - threadID (am) -- optional default value for this log record field. - serverName (am) -- optional default value for this log record field. - serviceName (am) -- optional default value for this log record field. - instanceUUID (am) -- optional default value for this log record field. - severity (am) -- optional default value for this log record field. - serverIPAddress (am) -- optional default value for this log record field. - server (am) -- optional default value for this log record field. - IPAddress (am) -- optional default value for this log record field. - className (am) -- optional default value for this log record field. - timer (am) -- (ElapsedTime) optional default value for this log record field. - partnerName (ame) -- optional default value for this log record field. - targetEntity (me) -- optional default value for this log record field. - targetServiceName (me) -- optional default value for this log record field. - statusCode (am) -- optional default value for this log record field. - responseCode (am) -- optional default value for this log record field. - responseDescription (am) -- optional default value for this log record field. - processKey (am) -- optional default value for this log record field. - targetVirtualEntity (m) -- optional default value for this log record field. - customField1 (am) -- optional default value for this log record field. - customField2 (am) -- optional default value for this log record field. - customField3 (am) -- optional default value for this log record field. - customField4 (am) -- optional default value for this log record field. - errorCategory (e) -- optional default value for this log record field. - errorCode (e) -- optional default value for this log record field. - errorDescription (e) -- optional default value for this log record field. - begTime (am) -- optional starting time for this audit/metrics log record. - - Note: the pipe '|' character is not allowed in any log record field. - """ - - # timestamp will automatically be inserted - style = int(self._getVal('style', '', **kwargs)) - requestID = self._getVal('requestID', '', **kwargs) - serviceInstanceID = self._getVal('serviceInstanceID', '', **kwargs) - threadID = self._getVal('threadID', threading.currentThread().getName(), **kwargs) - serverName = self._getVal('serverName', '', **kwargs) - serviceName = self._getVal('serviceName', '', **kwargs) - instanceUUID = self._getVal('instanceUUID', '', **kwargs) - upperLogLevel = self._noSep(logLevel.upper()) - severity = self._getVal('severity', '', **kwargs) - serverIPAddress = self._getVal('serverIPAddress', '', **kwargs) - server = self._getVal('server', '', **kwargs) - IPAddress = self._getVal('IPAddress', '', **kwargs) - className = self._getVal('className', '', **kwargs) - timer = self._getVal('timer', '', **kwargs) - partnerName = self._getVal('partnerName', '', **kwargs) - targetEntity = self._getVal('targetEntity', '', **kwargs) - targetServiceName = self._getVal('targetServiceName', '', **kwargs) - statusCode = self._getVal('statusCode', '', **kwargs) - responseCode = self._getVal('responseCode', '', **kwargs) - responseDescription = self._noSep(self._getVal('responseDescription', '', **kwargs)) - processKey = self._getVal('processKey', '', **kwargs) - targetVirtualEntity = self._getVal('targetVirtualEntity', '', **kwargs) - customField1 = self._getVal('customField1', '', **kwargs) - customField2 = self._getVal('customField2', '', **kwargs) - customField3 = self._getVal('customField3', '', **kwargs) - customField4 = self._getVal('customField4', '', **kwargs) - errorCategory = self._getVal('errorCategory', '', **kwargs) - errorCode = self._getVal('errorCode', '', **kwargs) - errorDescription = self._noSep(self._getVal('errorDescription', '', **kwargs)) - nbegTime = self._getArg('begTime', {}, **kwargs) - - detailMessage = self._noSep(message) - if bool(re.match(r" *$", detailMessage)): - return # don't log empty messages - - useLevel = self._intLogLevel(upperLogLevel) - if CommonLogger.verbose: print("logger STYLE=%s" % style) - if useLevel < self._logLevelThreshold: - if CommonLogger.verbose: print("skipping because of level") - pass - else: - with self._logLock: - if style == CommonLogger.ErrorFile: - if CommonLogger.verbose: print("using CommonLogger.ErrorFile") - self._logger.log(50, '%s|%s|%s|%s|%s|%s|%s|%s|%s|%s' \ - %(requestID, threadID, serviceName, partnerName, targetEntity, targetServiceName, - errorCategory, errorCode, errorDescription, detailMessage)) - elif style == CommonLogger.DebugFile: - if CommonLogger.verbose: print("using CommonLogger.DebugFile") - self._logger.log(50, '%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s' \ - %(requestID, threadID, serverName, serviceName, instanceUUID, upperLogLevel, - severity, serverIPAddress, server, IPAddress, className, timer, detailMessage)) - elif style == CommonLogger.AuditFile: - if CommonLogger.verbose: print("using CommonLogger.AuditFile") - endAuditTime, endAuditMsec = self._getTime() - if type(nbegTime) is dict and 'begTime' in nbegTime and 'begMsec' in nbegTime: - d = { 'begtime': self._noSep(nbegTime['begTime']), 'begmsecs': float(self._noSep(nbegTime['begMsec'])), 'endtime': endAuditTime, 'endmsecs': endAuditMsec } - elif self._begTime is not None: - d = { 'begtime': self._begTime, 'begmsecs': self._begMsec, 'endtime': endAuditTime, 'endmsecs': endAuditMsec } - else: - d = { 'begtime': endAuditTime, 'begmsecs': endAuditMsec, 'endtime': endAuditTime, 'endmsecs': endAuditMsec } - self._begTime = None - unused = "" - self._logger.log(50, '%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s' \ - %(requestID, serviceInstanceID, threadID, serverName, serviceName, partnerName, - statusCode, responseCode, responseDescription, instanceUUID, upperLogLevel, - severity, serverIPAddress, timer, server, IPAddress, className, unused, - processKey, customField1, customField2, customField3, customField4, detailMessage), extra=d) - elif style == CommonLogger.MetricsFile: - if CommonLogger.verbose: print("using CommonLogger.MetricsFile") - endMetricsTime, endMetricsMsec = self._getTime() - if type(nbegTime) is dict and 'begTime' in nbegTime and 'begMsec' in nbegTime: - d = { 'begtime': self._noSep(nbegTime['begTime']), 'begmsecs': float(self._noSep(nbegTime['begMsec'])), 'endtime': endMetricsTime, 'endmsecs': endMetricsMsec } - elif self._begTime is not None: - d = { 'begtime': self._begTime, 'begmsecs': self._begMsec, 'endtime': endMetricsTime, 'endmsecs': endMetricsMsec } - else: - d = { 'begtime': endMetricsTime, 'begmsecs': endMetricsMsec, 'endtime': endMetricsTime, 'endmsecs': endMetricsMsec } - self._begTime = None - unused = "" - self._logger.log(50, '%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s' \ - %(requestID, serviceInstanceID, threadID, serverName, serviceName, partnerName, - targetEntity, targetServiceName, statusCode, responseCode, responseDescription, - instanceUUID, upperLogLevel, severity, serverIPAddress, timer, server, IPAddress, - className, unused, processKey, targetVirtualEntity, customField1, customField2, - customField3, customField4, detailMessage), extra=d) - else: - print("!!!!!!!!!!!!!!!! style not set: %s" % self._fields["style"]) - - def _getTime(self): - ct = time.time() - lt = time.localtime(ct) - return (time.strftime(CommonLogger.DateFmt, lt), (ct - int(ct)) * 1000) - - def setStartRecordEvent(self): - """ - Set the start time to be saved for both audit and metrics records - """ - self._begTime, self._begMsec = self._getTime() - - def getStartRecordEvent(self): - """ - Retrieve the start time to be used for either audit and metrics records - """ - begTime, begMsec = self._getTime() - return {'begTime':begTime, 'begMsec':begMsec} - - def _getVal(self, key, default, **kwargs): - val = self._fields.get(key) - if key in kwargs: val = kwargs[key] - if val is None: val = default - return self._noSep(val) - - def _getArg(self, key, default, **kwargs): - val = None - if key in kwargs: val = kwargs[key] - if val is None: val = default - return val - - def _noSep(self, message): - if message is None: return '' - return re.sub(r'[\|\n]', ' ', str(message)) - - def _intLogLevel(self, logLevel): - if logLevel == 'FATAL': useLevel = 50 - elif logLevel == 'ERROR': useLevel = 40 - elif logLevel == 'WARN': useLevel = 30 - elif logLevel == 'INFO': useLevel = 20 - elif logLevel == 'DEBUG': useLevel = 10 - else: useLevel = 0 - return useLevel - - def _mkdir_p(self, filename): - """Create missing directories from a full filename path like mkdir -p""" - - if filename is None: - return - - folder=os.path.dirname(filename) - - if folder == "": - return - - if not os.path.exists(folder): - try: - os.makedirs(folder) - except OSError as err: - print("error number %d creating %s directory to hold %s logfile: %s" %(err.errno, err.filename, filename, err.strerror), file=sys.stderr) - sys.exit(2) - except Exception as err: - print("error creating %s directory to hold %s logfile: %s" %(folder, filename, str(err)), file=sys.stderr) - sys.exit(2) - -if __name__ == "__main__": - - def __checkOneTime(line): - format = r'[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3}[+]00:00[|]' - m = re.match(format, line) - if not m: - print("ERROR: time string did not match proper time format, %s" %line) - print("\t: format=%s" % format) - return 1 - return 0 - - def __checkTwoTimes(line, different): - format = r'[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:([0-9]{2}),([0-9]{3})[+]00:00[|][0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:([0-9]{2}),([0-9]{3})[+]00:00[|]' - m = re.match(format, line) - if not m: - print("ERROR: time strings did not match proper time format, %s" %line) - print("\t: format=%s" % format) - return 1 - second1 = int(m.group(1)) - msec1 = int(m.group(2)) - second2 = int(m.group(3)) - msec2 = int(m.group(4)) - if second1 > second2: second2 += 60 - t1 = second1 * 1000 + msec1 - t2 = second2 * 1000 + msec2 - diff = t2 - t1 - # print("t1=%d (%d,%d) t2=%d (%d,%d), diff = %d" % (t1, second1, msec1, t2, second2, msec2, diff)) - if different: - if diff < 500: - print("ERROR: times did not differ enough: %s" % line) - return 1 - else: - if diff > 10: - print("ERROR: times were too far apart: %s" % line) - return 1 - return 0 - - def __checkBegTime(line): - format = "begTime should be ([-0-9T:]+)" - # print("checkBegTime(%s)" % line) - strt = 'begTime should be ' - i = line.index(strt) - rest = line[i+len(strt):].rstrip() - if not line.startswith(rest + ","): - print("ERROR: line %s should start with %s" % (line,rest)) - return 1 - return 0 - - def __checkLog(logfile, numLines, numFields): - lineCount = 0 - errorCount = 0 - with open(logfile, "r") as fp: - for line in fp: - # print("saw line %s" % line) - lineCount += 1 - c = line.count('|') - if c != numFields: - print("ERROR: wrong number of fields. Expected %d, got %d: %s" % (numFields, c, line)) - errorCount += 1 - if re.search("should not appear", line): - print("ERROR: a line appeared that should not have appeared, %s" % line) - errorCount += 1 - elif re.search("single time", line): - errorCount += __checkOneTime(line) - elif re.search("time should be the same", line): - errorCount += __checkTwoTimes(line, different=False) - elif re.search("time should be ", line): - errorCount += __checkTwoTimes(line, different=True) - elif re.search("begTime should be ", line): - errorCount += __checkBegTime(line) - else: - print("ERROR: an unknown message appeared, %s" % line) - errorCount += 1 - - if lineCount != numLines: - print("ERROR: expected %d lines, but got %d lines" % (numLines, lineCount)) - errorCount += 1 - return errorCount - - import os, argparse - parser = argparse.ArgumentParser(description="test the CommonLogger functions") - parser.add_argument("-k", "--keeplogs", help="Keep the log files after finishing the tests", action="store_true") - parser.add_argument("-v", "--verbose", help="Print debugging messages", action="store_true") - args = parser.parse_args() - - spid = str(os.getpid()) - if args.keeplogs: - spid = "" - logcfg = "/tmp/cl.log" + spid + ".cfg" - errorLog = "/tmp/cl.error" + spid + ".log" - metricsLog = "/tmp/cl.metrics" + spid + ".log" - auditLog = "/tmp/cl.audit" + spid + ".log" - debugLog = "/tmp/cl.debug" + spid + ".log" - if args.verbose: CommonLogger.verbose = True - - import atexit - def cleanupTmps(): - for f in [ logcfg, errorLog, metricsLog, auditLog, debugLog ]: - try: - os.remove(f) - except: - pass - if not args.keeplogs: - atexit.register(cleanupTmps) - - with open(logcfg, "w") as o: - o.write("error = " + errorLog + "\n" + - "errorLogLevel = WARN\n" + - "metrics = " + metricsLog + "\n" + - "metricsLogLevel = INFO\n" + - "audit = " + auditLog + "\n" + - "auditLogLevel = INFO\n" + - "debug = " + debugLog + "\n" + - "debugLogLevel = DEBUG\n") - - import uuid - instanceUUID = uuid.uuid1() - serviceName = "testharness" - errorLogger = CommonLogger(logcfg, "error", style=CommonLogger.ErrorFile, instanceUUID=instanceUUID, serviceName=serviceName) - debugLogger = CommonLogger(logcfg, "debug", style=CommonLogger.DebugFile, instanceUUID=instanceUUID, serviceName=serviceName) - auditLogger = CommonLogger(logcfg, "audit", style=CommonLogger.AuditFile, instanceUUID=instanceUUID, serviceName=serviceName) - metricsLogger = CommonLogger(logcfg, "metrics", style=CommonLogger.MetricsFile, instanceUUID=instanceUUID, serviceName=serviceName) - - testsRun = 0 - errorCount = 0 - errorLogger.debug("error calling debug (should not appear)") - errorLogger.info("error calling info (should not appear)") - errorLogger.warn("error calling warn (single time)") - errorLogger.error("error calling error (single time)") - errorLogger.setStartRecordEvent() - time.sleep(1) - errorLogger.fatal("error calling fatal, after setStartRecordEvent and sleep (start should be ignored, single time)") - testsRun += 6 - errorCount += __checkLog(errorLog, 3, 10) - - auditLogger.debug("audit calling debug (should not appear)") - auditLogger.info("audit calling info (time should be the same)") - auditLogger.warn("audit calling warn (time should be the same)") - auditLogger.error("audit calling error (time should be the same)") - bt = auditLogger.getStartRecordEvent() - # print("bt=%s" % bt) - time.sleep(1) - auditLogger.setStartRecordEvent() - time.sleep(1) - auditLogger.fatal("audit calling fatal, after setStartRecordEvent and sleep, time should be different)") - time.sleep(1) - auditLogger.fatal("audit calling fatal, begTime should be %s" % bt['begTime'], begTime=bt) - testsRun += 7 - errorCount += __checkLog(auditLog, 5, 25) - - debugLogger.debug("debug calling debug (single time)") - debugLogger.info("debug calling info (single time)") - debugLogger.warn("debug calling warn (single time)") - debugLogger.setStartRecordEvent() - time.sleep(1) - debugLogger.error("debug calling error, after SetStartRecordEvent and sleep (start should be ignored, single time)") - debugLogger.fatal("debug calling fatal (single time)") - errorCount += __checkLog(debugLog, 5, 13) - testsRun += 6 - - metricsLogger.debug("metrics calling debug (should not appear)") - metricsLogger.info("metrics calling info (time should be the same)") - metricsLogger.warn("metrics calling warn (time should be the same)") - bt = metricsLogger.getStartRecordEvent() - time.sleep(1) - metricsLogger.setStartRecordEvent() - time.sleep(1) - metricsLogger.error("metrics calling error, after SetStartRecordEvent and sleep, time should be different") - metricsLogger.fatal("metrics calling fatal (time should be the same)") - time.sleep(1) - metricsLogger.fatal("metrics calling fatal, begTime should be %s" % bt['begTime'], begTime=bt) - testsRun += 6 - errorCount += __checkLog(metricsLog, 5, 28) - - print("%d tests run, %d errors found" % (testsRun, errorCount)) diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/green-flasher-12x10.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/green-flasher-12x10.gif Binary files differdeleted file mode 100644 index c6d33b5..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/green-flasher-12x10.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/grey-flasher-12x10.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/grey-flasher-12x10.gif Binary files differdeleted file mode 100644 index dfa81a2..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/grey-flasher-12x10.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/makefile b/pgaas/src/stage/opt/app/pgaas/lib/gif/makefile deleted file mode 100644 index 105033d..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/makefile +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -all: - -test: - -STAGEDIR=/dev/null -DISTPATH=/opt/app/pgaas - -stage: - mkdir -p $(STAGEDIR)/$(DISTPATH)/lib/gif - for i in *; do \ - case $$i in \ - *.py ) \ - j=`basename $$i .py`; \ - cp $$i $(STAGEDIR)/$(DISTPATH)/lib/gif/$$j; \ - chmod a+x $(STAGEDIR)/$(DISTPATH)/lib/gif/$$j; \ - ;; \ - makefile | *~ ) ;; \ - * ) \ - cp $$i $(STAGEDIR)/$(DISTPATH)/lib/gif/$$i; \ - chmod a+x $(STAGEDIR)/$(DISTPATH)/lib/gif/$$i; \ - ;; \ - esac; \ - done diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/red-flasher-12x10.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/red-flasher-12x10.gif Binary files differdeleted file mode 100644 index ab16a81..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/red-flasher-12x10.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-G-12x25.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-G-12x25.gif Binary files differdeleted file mode 100644 index 0ce2785..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-G-12x25.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-R-12x25.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-R-12x25.gif Binary files differdeleted file mode 100644 index 0750594..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-R-12x25.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-Y-12x25.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-Y-12x25.gif Binary files differdeleted file mode 100644 index 4f95bf0..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-Y-12x25.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-g-12x25.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-g-12x25.gif Binary files differdeleted file mode 100644 index 0ce2785..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-g-12x25.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-g2-12x25.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-g2-12x25.gif Binary files differdeleted file mode 100644 index 1be7fa1..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-g2-12x25.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-master-green.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-master-green.gif Binary files differdeleted file mode 100644 index 1be7fa1..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-master-green.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-master-red.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-master-red.gif Binary files differdeleted file mode 100644 index daa6960..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-master-red.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-master-yellow.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-master-yellow.gif Binary files differdeleted file mode 100644 index 1bd8731..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-master-yellow.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-r-12x25.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-r-12x25.gif Binary files differdeleted file mode 100644 index 0750594..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-r-12x25.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-r2-12x25.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-r2-12x25.gif Binary files differdeleted file mode 100644 index ff26986..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-r2-12x25.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-r3-12x25.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-r3-12x25.gif Binary files differdeleted file mode 100644 index daa6960..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-r3-12x25.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-secondary-green.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-secondary-green.gif Binary files differdeleted file mode 100644 index c6d33b5..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-secondary-green.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-secondary-red.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-secondary-red.gif Binary files differdeleted file mode 100644 index ab16a81..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-secondary-red.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-secondary-yellow.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-secondary-yellow.gif Binary files differdeleted file mode 100644 index 5e16750..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-secondary-yellow.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-y-12x25.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-y-12x25.gif Binary files differdeleted file mode 100644 index 4f95bf0..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-y-12x25.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-y2-12x25.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-y2-12x25.gif Binary files differdeleted file mode 100644 index 886e548..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-y2-12x25.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-y3-12x25.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-y3-12x25.gif Binary files differdeleted file mode 100644 index 1bd8731..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-y3-12x25.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/yellow-flasher-12x10.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/yellow-flasher-12x10.gif Binary files differdeleted file mode 100644 index 5e16750..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/yellow-flasher-12x10.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/iDNS-responder.py b/pgaas/src/stage/opt/app/pgaas/lib/iDNS-responder.py deleted file mode 100755 index f295040..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/iDNS-responder.py +++ /dev/null @@ -1,1105 +0,0 @@ -#!/usr/bin/env python3 -# -*- indent-tabs-mode: nil -*- -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -import http.server, socket -import time, os, sys, re, subprocess, traceback, html, base64, argparse -import psycopg2 -# TODO - move lots of code to a common library to share with other python modules -# sys.path.append("/opt/app/pgaas/lib") -# import dbtools - -DEF_HOST_NAME = os.popen("hostname -f").readlines()[0].strip() -DEF_PORT_NUMBER = 8000 - -validPerDbTables = [ "pg_tables", "pg_indexes", "pg_views" ] -topButton = " <font size='1'><a href='#'>^</a></font>" - -getLogDict = { } -def openLogFile(fname): - """ - Open a log file for append and remember the file descriptor. - Remember its inode/dev pair. - If either changes, reopen it. - """ - reopen = False - try: - curstat = os.stat(fname) - except: - reopen = True - global getLogDict - # print("top: reopen(%s)=%s" % (fname, reopen)) - if not reopen and getLogDict.get(fname): - # print("found getLogDict.get(" + fname + ")") - d = getLogDict[fname] - fd = d["fd"] if "fd" in d else None - oldstat = d["stat"] if "stat" in d else None - if fd is None: - reopen = True - elif oldstat is None: - reopen = True - elif oldstat.st_ino != curstat.st_ino or oldstat.st_dev != curstat.st_dev: - reopen = True - if reopen or not getLogDict.get(fname): - # print("closing old fd") - oldd = getLogDict.get(fname) - if oldd is not None: - oldfd = oldd.get("fd") - if oldfd is not None: - oldfd.close() - # print("reopening " + fname) - fd = open(fname, "a") - st = os.stat(fname) - getLogDict[fname] = { "fd": fd, "stat": st } - return getLogDict[fname]["fd"] - -def traceMsg(msg): - """ print a trace message. By default, this goes to trace.out """ - file = sys.stderr if testOn else openLogFile("/opt/logs/dcae/postgresql/idns/trace.log") - print(time.asctime(), msg, file=file) - file.flush() - -def errTrace(msg): - """ print an error message. By default, sys.stderr is rerouted to error.log """ - file = sys.stderr if testOn else openLogFile("/opt/logs/dcae/postgresql/idns/error.log") - sys.stderr = file - print(time.asctime(), msg, file=file) - file.flush() - -def debugTrace(msg): - """ print a debug message. By default, this goes to debug.log """ - if debugOn: - file = sys.stderr if testOn else openLogFile("/opt/logs/dcae/postgresql/idns/debug.log") - print(time.asctime(), msg, file=file) - file.flush() - -def readFile(file, defStr = None, mode = "r"): - """ read a file and return its contents """ - ret = defStr - try: - with open(file, mode) as f: - ret = f.read() - except Exception as e: - if defStr is not None: - ret = defStr - pass - else: - raise e - return ret - -def readFileBinary(file, defStr = None): - return readFile(file, defStr = defStr, mode = "rb") - -def readFileHtml(file, defStr = None): - """ read a file and return its contents, escaping anything important to HTML """ - return html.escape(readFile(file, defStr)) - -def readPipe(cmd, ignoreError = False): - """ read a pipe and return its contents """ - ret = "" - try: - with os.popen(cmd) as p: - ret = p.read() - except Exception as e: - if ignoreError: - pass - else: - raise e - return ret - -def readPipeHtml(file, defStr = None): - """ read a pipe and return its contents, escaping anything important to HTML """ - return html.escape(readPipe(file, defStr)) - -def readFileOrGz(file, defStr = None): - """ read a file and return its contents. If the file ends in .gz, use gunzip on it """ - if file.endswith(".gz"): - return readPipe("gunzip < '" + file + "'", defStr) - else: - return readFile(file, defStr) - -def readFileOrGzHtml(file, defStr = None): - """ read a file and return its contents, escaping anything important to HTML. If the file ends in .gz, use gunzip on it """ - return html.escape(readFileOrGz(file, defStr)) - -def getCdfPropValue(nm, encrypted=False, cfg="/opt/app/cdf/lib/cdf.cfg", dflt=None): - """ - Return a value from the configuration file /opt/app/cdf/lib/cdf.cfg - """ - return getPropValue(nm=nm, encrypted=encrypted, cfg=cfg, dflt=dflt) - -def getPgaasPropValue(nm, encrypted=False, cfg="/opt/app/pgaas/lib/pgaas.cfg", dflt=None): - """ - Return a value from the configuration file /opt/app/pgaas/lib/pgaas.cfg - """ - return getPropValue(nm=nm, encrypted=encrypted, cfg=cfg, dflt=dflt) - -getPropDict = { } - -def getPropValue(nm, encrypted=False, cfg=None, dflt=None): - """ - Return a value from the specified configuration file - """ - if cfg is None: - return None - global getPropDict - if getPropDict.get(cfg): - savedDate = getPropDict[cfg] - debugTrace("getPropValue: savedDate[" + cfg + "]=" + str(savedDate)) - cfgDate = os.path.getmtime(cfg) - debugTrace("getPropValue: cfgDate=" + str(cfgDate)) - if float(savedDate) >= float(cfgDate): # cfg has not changed - val = getPropDict.get(cfg + ":" + nm) - debugTrace("getPropValue: val=" + str(val)) - if val is not None: - debugTrace("getPropValue: getPropValue(saved) => '%s'" % str(val)) - return val - else: # clear out any previously saved keys - cfgcolon = cfg + ":" - for k in list(getPropDict.keys()): - if re.match(cfgcolon, k): - del getPropDict[k] - getPropValueProgram = '/opt/app/cdf/bin/getpropvalue' - if encrypted: - cmd = [getPropValueProgram, "-f", cfg, "-x", "-n", nm] - else: - cmd = [getPropValueProgram, "-f", cfg, "-n", nm] - debugTrace("getPropValue: cmd=%s" % str(cmd)) - - try: - with subprocess.Popen(cmd,shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE) as p: - (origString, stderrString) = p.communicate() - except Exception as e: - traceback.print_exc() - errTrace("Error decoding string because {0}".format(e)) - return None - else: - if stderrString: - if not re.search("Configuration property .* must be defined", stderrString.decode('utf-8')): # and dflt is not None: - errTrace("Error decoding string because: {0} ".format(stderrString)) - return dflt - else: - debugTrace("getPropValue() => '%s'" % str(origString)) - getPropDict[cfg] = os.path.getmtime(cfg) - val = origString.decode('utf-8').rstrip('\n') - debugTrace("getPropValue() => '%s'" % val) - getPropDict[cfg + ":" + nm] = val - return val - -def checkFileAge(full_path,number_of_days): - """ - return True if the file is >= number_of_days old from right now - """ - time_n_days_ago = time.time() - (number_of_days * 24 * 60 * 60) - stat = os.stat(full_path) - return time_n_days_ago >= stat.st_mtime - -def jumpTable(prefix, *args): - """ - Return a string consisting of a series of <a href='#prefix-xxx'>xxx</a>. - Include <font size='1'></font> around all of it. - """ - header = "<font size='1'>" - sep = "" - for table in args: - header = header + sep + "<a href='#" + prefix + "-" + table + "'>" + table + "</a> " - sep = " | " - header = header + "</font>" - return header - -def addFilenameHrefs(prefix, str): - """ - for each line in a list of filenames, change the last two elements of the path to an anchor. - """ - ret = "" - for line in str.splitlines(): - line = re.sub("/([^/]+)/([^/]+)$", '/\g<1>' + "/<a href='" + prefix + '\g<1>/\g<2>' + "'>" + '\g<2>' + "</a>", line) - ret = ret + line + "\n" - return ret - -def ifEmpty(str, defStr): - """ if a string is empty, return the defStr in its place """ - if str is None or str == "": - str = defStr - return str - -def isExe(fname): - """ check if a path exists and is executable """ - return os.path.exists(fname) and os.access(fname, os.X_OK) - -def replaceQuoteNewline(str): - return re.sub('"', "'", re.sub("\n", " ", str)) - -class MyHandler(http.server.BaseHTTPRequestHandler): - - def isServerUp(self): - """ - Check if the postgres server is up and running by calling pg_ctl and - looking for "server is running" (or "no server running"). - Then call ps -fu postgres and make sure we're not waiting on a master: - postgres 20815 20812 0 15:52 ? 00:00:00 postgres: startup process waiting for 000000010000000000000001 - """ - PGCTLPATH1 = "/usr/lib/postgresql/9.6/bin/pg_ctl" - PGCTLPATH2 = "/usr/lib/postgresql/9.5/bin/pg_ctl" - PGCTLPATH3 = "/opt/app/postgresql-9.5.2/bin/pg_ctl" - if isExe(PGCTLPATH1): - statusLines = readPipe(PGCTLPATH1 + " status -D /dbroot/pgdata/main/") - elif isExe(PGCTLPATH2): - statusLines = readPipe(PGCTLPATH2 + " status -D /dbroot/pgdata/main/") - else: - statusLines = readPipe(PGCTLPATH3 + " status -D /dbroot/pgdata/main/") - debugTrace("isServerUp(): statusLines = %s" % statusLines) - psLines = readPipe("ps -fu postgres") - debugTrace("isServerUp(): ps -fu postgres = %s" % psLines) - ret = len(statusLines) > 0 and re.search("server is running", statusLines, re.MULTILINE) and not re.search("startup process\\s+waiting", psLines, re.MULTILINE) - debugTrace("isServerUp(): returning = %s" % ret) - return ret - - def isRepmgrdUp(self): - """ - Check if the repmgrd server is up and running by calling "pgrep repmgrd" and - looking for a process id. - """ - statusLines = readPipe("pgrep repmgrd") - debugTrace("isServerUp(): statusLines = %s" % statusLines) - ret = len(statusLines) > 0 and re.search("[0-9]+", statusLines, re.MULTILINE) != None - debugTrace("isServerUp(): returning = %s" % ret) - return ret - - def isMaster(self): - """ - Check if the postgresql server is a master by asking the server if it is in recovery (meaning not a master) - """ - ret = None - con = None - try: - pwd = getCdfPropValue("postgres", True) - # debugTrace("using pwd=%s" % pwd) - con = psycopg2.connect(database = "postgres", user="postgres", password=pwd, host= HOST_NAME) - str = dbGetFirstRowOneValue(con, "select pg_is_in_recovery()") - debugTrace("pg_is_in_recovery() <= %s" % str) - ret = not str - - except psycopg2.DatabaseError as e: - errTrace('Database Error %s' % e) - - except Exception as e: - traceback.print_exc() - errTrace(str(e)) - - finally: - if con is not None: - con.close() - - debugTrace("isMaster(): returning = %s" % ret) - return ret - - def hasRepmgr(self): - """ - Check if the postgresql server is a master by asking the server if it is in recovery (meaning not a master) - """ - ret = None - con = None - try: - pwd = getCdfPropValue("postgres", True) - # debugTrace("using pwd=%s" % pwd) - con = psycopg2.connect(database = "postgres", user="postgres", password=pwd, host= HOST_NAME) - str = dbGetFirstRowOneValue(con, "select * from pg_database where datname = 'repmgr'") - debugTrace("repmgr database check() <= %s" % str) - ret = str - - except psycopg2.DatabaseError as e: - errTrace('Database Error %s' % e) - - except Exception as e: - traceback.print_exc() - errTrace(str(e)) - - finally: - if con is not None: - con.close() - - debugTrace("isMaster(): returning = %s" % ret) - return ret - - def isValidPgHost(self, host): - """ - Check a hostname against the list of nodes stored in the pgnodes CDF configuration file. - """ - pgnodes = getCdfPropValue("pgnodes", "").split('|') - ret = host in pgnodes - debugTrace("isValidPgHost(): looking for host='%s' in pgnodes='%s' => %s" % (host, str(pgnodes), ret)) - return ret - - def checkAuth(self): - """ - HTTP/1.1 401 Unauthorized - Date: Mon, 04 Feb 2014 16:50:53 GMT - WWW-Authenticate: Basic realm="WallyWorld" - - Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== - """ - pswd = getCdfPropValue("wgetpswd", True) - b64pswd = base64.b64encode(("pgaas:" + pswd).encode("ascii")) - basicPlusPswd = "Basic %s" % b64pswd.decode("ascii") - - if self.headers['Authorization'] == None: - return False - elif self.headers['Authorization'] == basicPlusPswd: - return True - else: - return False - - def pgStatus(self, *pgargs): - """ return a table(s), using the system database of postgres """ - return self.pgStatusDBx("postgres", *pgargs) - - def pgStatusDB(self, DB, *pgargs): - """ return a table(s), using the given database """ - return self.pgStatusDBx(DB, *pgargs) - - def pgStatusDBx(self, DB, *pgargs): - """ return a table(s), using the given database """ - debugTrace("pgStatusDBx(DB=" + DB + ")") - con = None - ret = None - try: - con = psycopg2.connect(database = DB, user="postgres", password=getCdfPropValue("postgres", True), host= HOST_NAME) - ret = getTableHtmls(con, DB, pgargs) - - except psycopg2.DatabaseError as e: - errTrace('Database Error %s' % e) - - except Exception as e: - traceback.print_exc() - errTrace(str(e)) - - finally: - if con is not None: - con.close() - - return ret - - def do_HEAD(self): - """Respond to a HEAD request.""" - self.doHEADandGET(False) - - def do_GET(self): - """Respond to a GET request.""" - self.doHEADandGET(True) - - def doHEADandGET(self, sendMsg): - resp = 400 - msg = "" - sendBinary = False - contentType = "text/plain" - global debugOn - - if self.path == "/statusall": - self.path = "/all/status/pgstatus" - elif self.path == "/pgstatusall": - self.path = "/pgstatus" - - if self.path == '/ro': - if os.path.isfile("/var/run/postgresql/force-ro-off"): - isrw = "FORCE-RO-OFF" - elif os.path.isfile("/var/run/postgresql/force-ro-on"): - isrw = "Secondary" - else: - isrw = readFile("/var/run/postgresql/isrw", "n/a") - debugTrace("/ro: isrw returns %s" % isrw) - if re.match("Secondary", isrw) or re.match("Master", isrw): - resp = 200 - msg = "server is up" - else: - msg = "server is not up " + isrw - errTrace("/ro: isrw returns %s" % isrw) - - elif self.path == '/rw': - isrw = readFile("/var/run/postgresql/isrw", "n/a") - debugTrace("/rw: isrw returns %s" % isrw) - if re.match("Master", isrw): - resp = 200 - msg = "master server is up" - elif re.match("Secondary", isrw): - msg = "non-master server is up" - else: - msg = "server is not up " + isrw - errTrace("/ro: isrw returns %s" % isrw) - - elif self.path == '/isrw': - isrw = readFile("/var/run/postgresql/isrw", "n/a") - debugTrace("/isrw: returns %s" % isrw) - resp = 200 - msg = isrw - - elif self.path == '/healthcheck/status': - hs = readFile("/var/run/postgresql/check_cluster", "n/a") - debugTrace("/healthcheck/status: returns %s" % hs) - resp = 429 if hs == "n/a" else 200 - msg = '{ "output": "%s" }' % replaceQuoteNewline(hs) - - elif self.path == '/healthcheck/writablestatus': - isrw = readFile("/var/run/postgresql/isrw", "n/a") - debugTrace("/rw: isrw returns %s" % isrw) - resp = 429 - if re.match("Master", isrw): - resp = 200 - msg = '{ "output": "master server is up" }' - elif re.match("Secondary", isrw): - msg = '{ "output": "non-master server is up" }' - else: - msg = '{ "output": "server is not up %s" }' % replaceQuoteNewline(isrw) - errTrace("/ro: isrw returns %s" % isrw) - - elif self.path == '/healthcheck/readonlystatus': - if os.path.isfile("/var/run/postgresql/force-ro-off"): - isrw = "FORCE-RO-OFF" - elif os.path.isfile("/var/run/postgresql/force-ro-on"): - isrw = "Secondary" - else: - isrw = readFile("/var/run/postgresql/isrw", "n/a") - debugTrace("/ro: isrw returns %s" % isrw) - resp = 429 - if re.match("Secondary", isrw) or re.match("Master", isrw): - resp = 200 - msg = '{ "output": "server is up" }' - else: - msg = '{ "output": "server is not up %s" }' % replaceQuoteNewline(isrw) - errTrace("/ro: isrw returns %s" % isrw) - - elif self.path == '/': - ui = readFile("/opt/app/pgaas/man/iDNS-responder.swagger.json", "n/a") - debugTrace("/: returns %s" % ui) - msg = ui - if ui != "n/a": - resp = 200 - contentType = "application/json" - - elif not self.checkAuth(): - resp = 401 - msg = "not authenticated" - - elif self.path == '/ismaster': - masterYes = self.isMaster() - msg = "" - if masterYes: - resp = 200 - msg = "master server" - else: - msg = "non-master server" - - elif self.path == '/issecondary': - masterYes = self.isMaster() - msg = "" - if not masterYes: - resp = 200 - msg = "secondary server" - else: - msg = "non-secondary server" - - elif self.path == '/ismaintenance': - msg = "" - if os.path.exists("/var/run/postgresql/inmaintenance"): - resp = 200 - msg = "in maintenance mode" - else: - msg = "not in maintenance mode" - - elif self.path == '/getpubkey': - try: - resp = 200 - msg = readFile(os.path.expanduser("~postgres/.ssh/id_rsa.pub")) - except: - traceback.print_exc() - resp = 404 - msg = "key does not exist" - - elif re.match("/getssh/", self.path): - # getssh/hostname - push ssh pub/private keys across - host = re.sub("^/getssh/", "", self.path) - debugTrace("#1: /getssh/ host='%s'" % host) - host = re.sub("[^a-zA-Z0-9_.-]", "", host) - debugTrace("#2: /getssh/ host='%s'" % host) - if self.isValidPgHost(host): - p = readPipe("scp -o StrictHostKeyChecking=no -i ~postgres/.ssh/id_rsa ~postgres/.ssh/id_rsa* postgres@" + host + ":.ssh/ 2>&1") - debugTrace("#3: /getssh/ to '%s' returns '%s'" % (host, p)) - msg = "OK " + p - resp = 200 - else: - msg = "NOT OK INVALID HOST" - resp = 404 - - elif re.match("/getcdf/", self.path): - # getcdf/hostname - push cdf.cfg file across - fi = "/opt/app/cdf/lib/cdf.cfg" - # make sure that the file exists and contains the encrypted postgres password - if re.search("postgres.x", readFile(fi, "n/a")) and re.search("repmgr.x", readFile(fi, "n/a")): - host = re.sub("^/getcdf/", "", self.path) - debugTrace("#1: /getcdf/ host='%s'" % host) - host = re.sub("[^a-zA-Z0-9_.-]", "", host) - debugTrace("#2: /getcdf/ host='%s'" % host) - if self.isValidPgHost(host): - p = readPipe("scp -o StrictHostKeyChecking=no -i ~postgres/.ssh/id_rsa " + fi + " postgres@" + host + ":/opt/app/cdf/lib/cdf.cfg 2>&1") - debugTrace("#3: /getcdf/ to '%s' returns '%s'" % (host, p)) - msg = "OK " + p - resp = 200 - else: - msg = "NOT OK INVALID HOST" - resp = 404 - else: - msg = "NOT OK YET" - resp = 404 - - elif self.path == '/hasrepmgr': - repmgrYes = self.hasRepmgr() - msg = "" - if repmgrYes: - resp = 200 - msg = "OK" - else: - msg = "NOT OK YET" - - elif self.path == '/status': - resp = 200 - contentType = "text/html" - isServerUp = self.isServerUp() - isRepmgrdUp = self.isRepmgrdUp() - isMaster = self.isMaster() - color = "green" if (isServerUp and isRepmgrdUp) else "yellow" if (isServerUp or isRepmgrdUp) else "red" - dashed = "solid" if isMaster else "dashed" - jump = jumpTable("status", "ps", "repmgr", "df", "uptime", "loadavg", "cpuinfo", "meminfo", "pgaas-failures", "pgaas-inst-report", "nslookup", "ip-addr-show", "who-br") - - msg = """<table style='border: 10px %s %s' width='100%%'><tr><td> - <b>isServerUp</b> %s - <b>isRepmgrdUp</b> %s - <b>isMaster</b> %s - <b>isrw</b> %s %s\n<br/> - %s - <h2><a name='status-ps'>ps</a>%s</h2>\n<pre>\n%s\n</pre>\n - <h2><a name='status-repmgr'>repmgr cluster show</a>%s</h2>\n<pre>\n%s\n</pre>\n - <h2><a name='status-df'>df</a>%s</h2>\n<pre>\n%s\n</pre>\n - <h2><a name='status-uptime'>uptime</a>%s</h2>\n<pre>\n%s\n</pre>\n - <h2>/proc/uptime%s</h2>\n<pre>\n%s\n</pre>\n - <h2><a name='status-loadavg'>loadavg</a>%s</h2>\n<pre>\n%s\n</pre>\n - <h2><a name='status-cpuinfo'>cpuinfo</a>%s</h2>\n<pre>\n%s\n</pre>\n - <h2><a name='status-meminfo'>meminfo</a>%s</h2>\n<pre>\n%s\n</pre>\n - <h2><a name='status-pgaas-failures'>pgaas-failures</a>%s</h2>\n<pre>\n%s\n</pre>\n - <h2><a name='status-pgaas-inst-report'>pgaas.inst.report</a>%s</h2>\n<pre>\n%s\n</pre>\n - <h2><a name='status-nslookup'>nslookup</a>%s</h2>\n<pre>\n%s\n</pre>\n - <h2><a name='status-ip-addr-show'>ip addr</a>%s</h2>\n<pre>\n%s\n</pre>\n - <h2><a name='status-who-br'>who -br</a>%s</h2>\n<pre>\n%s\n</pre>\n - </td></tr></table>""" % (color, dashed, isServerUp, isRepmgrdUp, isMaster, - readFileHtml("/var/run/postgresql/isrw", "n/a"), - readPipeHtml("hostname -f"), jump, - topButton, readPipeHtml("ps -fu postgres"), - topButton, readPipeHtml("/opt/app/pgaas/bin/repmgrc cluster show"), - topButton, readPipeHtml("df -h"), - topButton, readPipeHtml("uptime", defStr="n/a"), - topButton, readFileHtml("/proc/uptime", defStr="n/a"), - topButton, readFileHtml("/proc/loadavg", defStr="n/a"), - topButton, readFileHtml("/proc/cpuinfo", defStr="n/a"), - topButton, readFileHtml("/proc/meminfo", defStr="n/a"), - topButton, readFileHtml("/tmp/pgaas-failures", defStr="n/a"), - topButton, readFileHtml("/tmp/pgaas.inst.report", defStr="n/a"), - topButton, readPipeHtml("nslookup $(hostname -f)", defStr="n/a"), - topButton, readPipeHtml("ip addr show", defStr="n/a"), - topButton, readPipeHtml("who -br", defStr="n/a")) - - elif self.path == '/stoplight': - isServerUp = self.isServerUp() - isRepmgrdUp = self.isRepmgrdUp() - isMaster = self.isMaster() - color = "green" if (isServerUp and isRepmgrdUp) else "yellow" if (isServerUp or isRepmgrdUp) else "red" - masterSecondary = "master" if isMaster else "secondary" - sendBinary = True - contentType = "image/gif" - msg = readFileBinary("/opt/app/postgresql/lib/gif/stoplight-" + masterSecondary + "-" + color + ".gif", "") - - elif re.match("/perdb-", self.path): - # /perdb- - rest = re.sub("^/perdb-", "", self.path) - debugTrace("#1: /perdb- others='%s'" % rest) - rest = re.sub("[^a-zA-Z0-9_./-]", "", rest) - debugTrace("#2: /perdb- rest='%s'" % rest) - pgothers = [ x for x in rest.split('-') if x in validPerDbTables ] - resp = 200 - contentType = "text/html" - con = None - try: - pwd = getCdfPropValue("postgres", True) - con = psycopg2.connect(database = "postgres", user="postgres", password=pwd, host= HOST_NAME) - databases = dbGetFirstColumn(con, "select datname from pg_database") - debugTrace("after select datname from pg_database") - databases[:] = [DB for DB in databases if not re.match("template[0-9]", DB)] - msg = msg + jumpTable("db", *databases) + "<br/>" - for DB in databases: - debugTrace("looking at DB=" + DB) - msg = msg + "<h1><a name='db-" + DB + "'>" + DB + "</a>" + topButton + "</h1>\n" - msg = msg + jumpTable(DB + "-table", *pgothers) - msg = msg + self.pgStatusDB(DB, *pgothers) - - except psycopg2.DatabaseError as e: - errTrace('Database Error %s' % e) - msg = "DB is down" - - except Exception as e: - traceback.print_exc() - errTrace(str(e)) - - finally: - if con is not None: - con.close() - - elif self.path == '/pgstatus': - tables = [ "pg_stat_activity", "pg_stat_archiver", "pg_stat_bgwriter", "pg_stat_database", "pg_stat_database_conflicts", "pg_stat_user_tables", "pg_stat_user_indexes", "pg_statio_user_tables", "pg_statio_user_indexes", "pg_statio_user_sequences", "pg_roles", "pg_database", "pg_tables", "pg_namespace", "pg_roles", "pg_group" ] - header = jumpTable("postgres-table", *tables) - msg = self.pgStatus(*tables) - if msg is not None: - contentType = "text/html" - resp = 200 - msg = header + msg - - elif self.path == '/pg_stat_activity': - msg = self.pgStatus("pg_stat_activity") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_stat_archiver': - msg = self.pgStatus("pg_stat_archiver") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_stat_bgwriter': - msg = self.pgStatus("pg_stat_bgwriter") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_stat_database': - msg = self.pgStatus("pg_stat_database") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_stat_database_conflicts': - msg = self.pgStatus("pg_stat_database_conflicts") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_stat_user_tables': - msg = self.pgStatus("pg_stat_user_tables") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_stat_user_indexes': - msg = self.pgStatus("pg_stat_user_indexes") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_statio_user_tables': - msg = self.pgStatus("pg_statio_user_tables") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_statio_user_indexes': - msg = self.pgStatus("pg_statio_user_indexes") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_statio_user_sequences': - msg = self.pgStatus("pg_statio_user_sequences") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_roles': - msg = self.pgStatus("pg_roles") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_database': - msg = self.pgStatus("pg_database") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_tables': - msg = self.pgStatus("pg_tables") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_namespace': - msg = self.pgStatus("pg_namespace") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_group': - msg = self.pgStatus("pg_group") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif re.match("/all/", self.path) or re.match("/small/", self.path): - if re.match("/small/", self.path): - height = 40 - else: - height = 400 - # /all/others - rest = re.sub("^/all/", "", self.path) - rest = re.sub("^/small/", "", self.path) - rest = re.sub("[^a-zA-Z0-9_./-]", "", rest) - debugTrace("/all/ rest='%s'" % rest) - others = rest.split('/') - try: - resp = 200 - contentType = "text/html" - pgnodes = getCdfPropValue("pgnodes", "").split('|') - msg = msg + jumpTable("node", *pgnodes) - for node in pgnodes: - hnode = html.escape(node) - msg = msg + "<h2><a name='node-" + hnode + "'>" + hnode + "</a>" + topButton + "</h2>\n" - msg = msg + jumpTable(hnode + "-other", *others) - for other in others: - msg = msg + "<h3><a name='" + hnode + "-other-" + other + "'>" + other + "</a>" + topButton + "</h3>\n" - msg = msg + "<iframe src='http://" + hnode + ":" + str(PORT_NUMBER) + "/" + other + "' frameborder='1' scrolling='yes' height='" + str(height) + "' width='1200'></iframe>\n" - except Exception as e: - traceback.print_exc() - errTrace(str(e)) - - # ATT-ONLY CODE BEGIN - elif self.path == '/swmstatus': - resp = 200 - contentType = "text/html" - msg = "<pre>\n%s\n</pre>" % readPipeHtml("set -x;sed -n '/^STARTING/,/^ENDING/p' /opt/app/aft/aftswmnode/stage/*/com/att/ecomp/dcae/storage/pgaas/*/*/proc_out") - # ATT-ONLY CODE END - - elif self.path == '/debugon': - msg = "ON" - resp = 200 - debugOn = True - - elif self.path == '/debugoff': - msg = "OFF" - resp = 200 - debugOn = False - - elif self.path == '/log' or self.path == '/log/': - msg = "<h2>%s</h2><pre>\n%s\n</pre>" % (self.path, addFilenameHrefs("/log/", readPipeHtml("ls -l /opt/logs/dcae/postgresql/*/*"))) - resp = 200 - contentType = "text/html" - - elif self.path == '/mlog' or self.path == '/mlog/': - # /opt/app/dcae-controller-service-common-vm-manager/logs - msg = "<h2>%s</h2><pre>\n%s\n</pre>" % (self.path, addFilenameHrefs("/mlog/", readPipeHtml("ls -l /opt/app/dcae-controller-service-common-vm-manager/logs/*"))) - resp = 200 - contentType = "text/html" - - elif self.path == '/tmp' or self.path == '/tmp/': - msg = "<h2>%s</h2><pre>\n%s\n</pre>" % (self.path, addFilenameHrefs("/tmp/", readPipeHtml("ls -l /tmp/*"))) - resp = 200 - contentType = "text/html" - - elif re.match("/log/", self.path): - # /log/dir/path - rest = re.sub("^/log/", "", self.path) - debugTrace("#1: /log/ others='%s'" % rest) - rest = re.sub("[^a-zA-Z0-9_./-]", "", rest) - rest = re.sub("/[.][.]/", "", rest) - debugTrace("#2: /log/ rest='%s'" % rest) - msg = "<h2>%s</h2><pre>\n%s\n</pre>" % (rest, ifEmpty(readFileOrGzHtml("/opt/logs/dcae/postgresql/" + rest, "n/a"), "<i>empty</i>")) - resp = 200 - contentType = "text/html" - - elif re.match("/mlog/", self.path): - # /log/dir/path - rest = re.sub("^/mlog/", "", self.path) - debugTrace("#1: /mlog/ others='%s'" % rest) - rest = re.sub("[^a-zA-Z0-9_./-]", "", rest) - rest = re.sub("/[.][.]/", "", rest) - rest = re.sub("^logs/", "", rest) - debugTrace("#2: /mlog/ rest='%s'" % rest) - msg = "<h2>%s</h2><pre>\n%s\n</pre>" % (rest, ifEmpty(readFileOrGzHtml("/opt/app/dcae-controller-service-common-vm-manager/logs/" + rest, "n/a"), "<i>empty</i>")) - resp = 200 - contentType = "text/html" - - elif re.match("/tmp/", self.path): - # /log/dir/path - rest = re.sub("^/tmp/", "", self.path) - debugTrace("#1: /tmp/ others='%s'" % rest) - rest = re.sub("[^a-zA-Z0-9_./-]", "", rest) - rest = re.sub("/[.][.]/", "", rest) - rest = re.sub("^tmp/", "", rest) - debugTrace("#2: /tmp/ rest='%s'" % rest) - msg = "<h2>%s</h2><pre>\n%s\n</pre>" % (rest, ifEmpty(readFileOrGzHtml("/tmp/" + rest, "n/a"), "<i>empty</i>")) - resp = 200 - contentType = "text/html" - - elif self.path == '/oldro': - serverYes = self.isServerUp() - if serverYes: - resp = 200 - msg = "server is up" - else: - msg = "server is not up" - - elif self.path == '/oldrw': - serverYes = self.isServerUp() - masterYes = self.isMaster() - msg = "" - if serverYes: - if masterYes: - resp = 200 - msg = "master server is up" - elif masterYes is not None: - msg = "non-master server is up" - else: - msg = "master status is up, but not answering" - else: - if masterYes: - msg = "status is down, but responded as master server" - elif masterYes is not None: - msg = "status is down, but responded as non-master" - else: - msg = "status is down, server is not up" - - elif self.path == "/help": - resp = 200 - contentType = "text/html" - msg = """<pre> - <a href='/statusall'>statusall</a> == all/status/pgstatus - <a href='/ro'>ro</a> == iDNS readonly - <a href='/rw'>rw</a> == iDNS readwrite - <a href='/isrw'>isrw</a> == /var/run/postgresql/isrw - <a href='/ismaster'>ismaster</a> == is master - <a href='/issecondary'>issecondary</a> == is secondary - <a href='/ismaintenance'>ismaintenance</a> == is in maintenance mode - <a href='/healthcheck/status'>healthcheck/status</a> == Consul healthcheck - <a href='/healthcheck/writablestatus'>healthcheck/writablestatus</a> == Consul writable healthcheck - <a href='/healthcheck/readonlystatus'>healthcheck/readonlystatus</a> == Consul readonly healthcheck - <a href='/getpubkey'>getpubkey</a> == retrieve public key - <a href='/hasrepmgr'>hasrepmgr</a> == repmgr id and database are set up - <a href='/status'>status</a> == lots of info - <a href='/perdb-pg_tables-pg_indexes-pg_views'>perdb</a>-{<a href='/perdb-pg_tables'>pg_tables</a>-<a href='/perdb-pg_indexes'>pg_indexes</a>-<a href='/perdb-pg_views'>pg_views</a>} == info per DB - <a href='/pgstatus'>pgstatus</a> == lots of database info - <a href='/pg_stat_activity'>pg_stat_activity</a>, <a href='/pg_stat_archiver'>pg_stat_archiver</a>, <a href='/pg_stat_bgwriter'>pg_stat_bgwriter</a>, - <a href='/pg_stat_database'>pg_stat_database</a>, <a href='/pg_stat_database_conflicts'>pg_stat_database_conflicts</a>, <a href='/pg_stat_user_tables'>pg_stat_user_tables</a>, - <a href='/pg_stat_user_indexes'>pg_stat_user_indexes</a>, <a href='/pg_statio_user_tables'>pg_statio_user_tables</a>, <a href='/pg_statio_user_indexes'>pg_statio_user_indexes</a>, - <a href='/pg_statio_user_sequences'>pg_statio_user_sequences</a>, - <a href='/pg_roles'>pg_roles</a>, <a href='/pg_database'>pg_database</a>, - <a href='/pg_tables'>pg_tables</a>, <a href='/pg_namespace'>pg_namespace</a>, - <a href='/pg_group'>pg_group</a>, - <a href='/swmstatus'>swm proc_out files</a> - <a href='/log'>log</a> == ls -l logs - log/foo == log foo - <a href='/mlog'>mlog</a> == ls -l manager logs - mlog/foo == mlog foo - <a href='/tmp'>tmp</a> == ls -l /tmp - </pre>""" - else: - resp = 404 - msg = "path does not exist" - - # TODO == encode msg when binary - if sendBinary: - debugTrace("%s: Returning %d/%d/%s" % (self.path, resp, len(msg), "--binary--")) - else: - debugTrace("%s: Returning %d/%d/%s" % (self.path, resp, len(msg), msg)) - traceMsg("- %s - \"%s %s %s\" %d %d" % (self.client_address[0], self.command, self.path, self.request_version, resp, len(msg))) - self.send_response(resp) - if resp == 401: - self.send_header('WWW-Authenticate', 'Basic realm="PGaaS"') - self.send_header("Content-type", contentType) - self.end_headers() - if sendMsg: - if msg is None: - msg = "" - if sendBinary: - self.wfile.write(msg) - else: - self.wfile.write((msg + "\n").encode("utf-8")) - sys.stderr.flush() - -""" -database utility functions -""" - -# def dbGetMap(con, cmd, args=[], skipTrace=False): -# def dbGetOneRowMap(con, cmd, args=[], skipTrace=False): - -def dbGetFirstRowOneValue(con, cmd, args=[], skipTrace=False): - """ - Do a select and return a single value from the first row - """ - row = dbGetFirstRow(con, cmd, args, skipTrace) - debugTrace("row=" + str(row)) - if row is not None and len(row) > 0: - return row[0] - return None - -def dbGetFirstRow(con, cmd, args=[], skipTrace=False): - """ - Do a select and return the values from the first row - """ - cursor = dbExecute(con, cmd, args, skipTrace) - return cursor.fetchone() - -def dbGetFirstColumn(con, cmd, args=[], skipTrace=False): - """ - Do a select and return the first column's value from each row - """ - ret = [] - cursor = dbExecute(con, cmd, args, skipTrace) - for row in cursor: - for col in row: - ret.append(col) - break - return ret - -def dbGetFirstColumnAsMap(con, cmd, args=[], skipTrace=False, val=1): - """ - Do a select and return the first column's value from each row - """ - ret = {} - cursor = dbExecute(con, cmd, args, skipTrace) - for row in cursor: - for col in row: - ret[col] = val - break - return ret - -def dumpTable(con, tableName, max=-1): - """ - If being extra verbose, print out the entire table - """ - if verbose < 2: - return - traceOutput = sys.stderr if testOn else openLogFile("/opt/logs/dcae/postgresql/idns/debug.log") - print("================ " + tableName + " ================", file=traceOutput) - - cols = dbGetFirstColumn(con, "select column_name from information_schema.columns where table_name='" + tableName + "'", skipTrace=True) - print("num", end="|", file=traceOutput) - for col in cols: - print(col, end="|", file=traceOutput) - print("", file=traceOutput) - - if max > -1: - cursor = dbExecute(con, "select * from " + tableName + " limit " + str(max), skipTrace=True) - else: - cursor = dbExecute(con, "select * from " + tableName, skipTrace=True) - i = 0 - for row in cursor: - print("%d" % i, end="|", file=traceOutput) - i += 1 - for col in row: - print("%s" % (col), end="|", file=traceOutput) - print("", file=traceOutput) - print("================================================", file=traceOutput) - -def getTableHtmls(con, DB, tableNames): - """ - Retrieve a dump of all specified tables, in HTML format - """ - ret = "" - for tn in tableNames: - ret = ret + getTableHtml(con, DB, tn) - return ret - -def getTableHtml(con, DB, tableName, max=-1): - """ - Retrieve a dump of a given table, in HTML format - """ - # errTrace("getting %s" % str(tableName)) - ret = "<h2><a name='" + DB + "-table-" + tableName + "'>" + DB + " " + tableName + "</a>" + topButton + "</h2>\n" - ret = ret + "<table border='1'>\n" - # ret = ret + "<tr><th colspan='" + str(len(cols)+1) + "'>" + tableName + "</th></tr>\n" - cols = dbGetFirstColumn(con, "select column_name from information_schema.columns where table_name='" + tableName + "'", skipTrace=True) - - ret = ret + "<tr><th>num</th>" - for col in cols: - ret = ret + "<th>" + str(col) + "</th>" - ret = ret + "</tr>\n" - - if max > -1: - cursor = dbExecute(con, "select * from " + tableName + " limit " + str(max), skipTrace=True) - else: - cursor = dbExecute(con, "select * from " + tableName, skipTrace=True) - i = 0 - for row in cursor: - ret = ret + "<tr><th>" + str(i) + "</th>" - i = i + 1 - for col in row: - ret = ret + "<td>" + str(col) + "</td>" - ret = ret + "</tr>\n" - ret = ret + "</table>\n" - return ret - -def dbExecute(con, statement, args=[], skipTrace=False): - """ - Create a cursor, instantiate the arguments into a statement, trace print the statement, and execute the statement. - Return the cursor - """ - cursor = con.cursor() - stmt = cursor.mogrify(statement, args); - if not skipTrace: - debugTrace("executing:" + str(stmt)) - cursor.execute(stmt) - if not skipTrace: - debugTrace("statusmessage=" + cursor.statusmessage + ", rowcount=" + str(cursor.rowcount)) - return cursor - -class HTTPServerIPv6(http.server.HTTPServer): - address_family = socket.AF_INET6 - -if __name__ == '__main__': - parser = argparse.ArgumentParser(description="Respond to HTTP requests") - parser.add_argument("-d","--debug",help="turn on debugging",action="store_true") - parser.add_argument("-t","--test",help="turn on test mode",action="store_true") - parser.add_argument("-H", "--host", type=str, help="Hostname, defaults to '%s'" % DEF_HOST_NAME, - default=DEF_HOST_NAME) - parser.add_argument("-P", "--port", type=int, help="Port to listen on, defaults to '%d'" % DEF_PORT_NUMBER, - default=DEF_PORT_NUMBER) - args = parser.parse_args() - - global debugOn, testOn, HOST_NAME, PORT_NUMBER - debugOn = args.debug - testOn = args.test - HOST_NAME = args.host - PORT_NUMBER = args.port - - if not debugOn: - sys.stderr = openLogFile("/opt/logs/dcae/postgresql/idns/error.log") - - # server_class = http.server.HTTPServer - # httpd = server_class(("0.0.0.0", PORT_NUMBER), MyHandler) - server_class = HTTPServerIPv6 - httpd = server_class(("", PORT_NUMBER), MyHandler) - errTrace("Server Starts - %s:%s" % (HOST_NAME, PORT_NUMBER)) - try: - httpd.serve_forever() - except KeyboardInterrupt: - pass - httpd.server_close() - errTrace("Server Stops - %s:%s" % (HOST_NAME, PORT_NUMBER)) diff --git a/pgaas/src/stage/opt/app/pgaas/lib/init-logger.cfg b/pgaas/src/stage/opt/app/pgaas/lib/init-logger.cfg deleted file mode 100644 index e48183c..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/init-logger.cfg +++ /dev/null @@ -1,40 +0,0 @@ -# You may change this file while your program is running and CommonLogger will automatically reconfigure accordingly. -# Changing these parameters may leave old log files lying around. - - -#--- Parameters that apply to all logs -# -# rotateMethod: time or size -#... Note: the following two parameters apply only when rotateMethod=time -# timeRotateIntervalType: S, M, H, D, W0 - W6, or midnight (seconds, minutes, hours, days, weekday (0=Monday), or midnight UTC) -# timeRotateInterval: >= 1 (1 means every timeRotateIntervalType, 2 every other, 3 every third, etc.) -#... Note: the following parameter applies only when rotateMethod=size -# sizeMaxBytes: >= 0 (0 means no limit, else maximum filesize in Bytes) -# backupCount: >= 0 (Number of rotated backup files to retain. If rotateMethod=time, 0 retains *all* backups. If rotateMethod=size, 0 retains *no* backups.) -# -rotateMethod = none -# timeRotateIntervalType = midnight -# timeRotateInterval = 1 -# sizeMaxBytes = 0 -# backupCount = 6 - - -#--- Parameters that define log filenames and their initial LogLevel threshold -#... Note: CommonLogger will exit if your process does not have permission to write to the file. -# - -error = /opt/logs/dcae/postgresql/init/error.log -errorLogLevel = WARN -errorStyle = error - -metrics = /opt/logs/dcae/postgresql/init/metrics.log -metricsLogLevel = INFO -metricsStyle = metrics - -audit = /opt/logs/dcae/postgresql/init/audit.log -auditLogLevel = INFO -auditStyle = audit - -debug = /opt/logs/dcae/postgresql/init/debug.log -debugLogLevel = DEBUG -debugStyle = debug diff --git a/pgaas/src/stage/opt/app/pgaas/lib/makefile b/pgaas/src/stage/opt/app/pgaas/lib/makefile deleted file mode 100644 index ea58dba..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/makefile +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -all: - -STAGEDIR=/dev/null -DISTPATH=/opt/app/pgaas - -stage: - rm -rf $(STAGEDIR)/$(DISTPATH)/lib - mkdir -p $(STAGEDIR)/$(DISTPATH)/lib - for i in *; do \ - case $$i in \ - [!C]*.py ) \ - j=`basename $$i .py`; \ - cp $$i $(STAGEDIR)/$(DISTPATH)/lib/$$j; \ - chmod a+x $(STAGEDIR)/$(DISTPATH)/lib/$$j; \ - ;; \ - makefile | *~ ) ;; \ - * ) \ - if [ -f $$i ]; then \ - cp $$i $(STAGEDIR)/$(DISTPATH)/lib/$$i; \ - chmod a+x $(STAGEDIR)/$(DISTPATH)/lib/$$i; \ - fi; \ - ;; \ - esac; \ - done - diff --git a/pgaas/src/stage/opt/app/pgaas/lib/pgaas.cfg b/pgaas/src/stage/opt/app/pgaas/lib/pgaas.cfg deleted file mode 100644 index e28d5e6..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/pgaas.cfg +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -#### -#### PostgreSQL as a Service Configuration Parameters -#### - -db_directory=/dbroot/pgdata/main -# db_configuration= -# pg_bin_directory= - -dcae_admin_db_hostname=localhost -dcae_admin_db_databasename=postgres -dcae_admin_db_username=postgres -dcae_admin_db_verbosity=1 -dcae_admin_db_jsontop="['vmConfiguration']" -dcae_admin_db_errors_file=/opt/logs/dcae/postgresql/init/error.log -dcae_admin_db_trace_file=/opt/logs/dcae/postgresql/init/trace.log -dcae_admin_db_common_logger_config=/opt/app/pgaas/lib/init-logger.cfg -# skip_configuration_file= diff --git a/pgaas/src/stage/opt/app/pgaas/lib/profile.additions b/pgaas/src/stage/opt/app/pgaas/lib/profile.additions deleted file mode 100644 index ad9decf..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/profile.additions +++ /dev/null @@ -1,10 +0,0 @@ - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found -fi -export PATH="$PGDIR/bin:/opt/app/cdf/bin:/opt/app/pgaas/bin:$PATH" diff --git a/pgaas/src/stage/opt/app/pgaas/main/makefile b/pgaas/src/stage/opt/app/pgaas/main/makefile deleted file mode 100644 index ca8af9a..0000000 --- a/pgaas/src/stage/opt/app/pgaas/main/makefile +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -all: - -STAGEDIR=/dev/null -DISTPATH=/opt/app/pgaas - -stage: - rm -rf $(STAGEDIR)/$(DISTPATH)/main - mkdir -p $(STAGEDIR)/$(DISTPATH)/main - for i in *; do \ - case $$i in \ - *.py ) \ - j=`basename $$i .py`; \ - cp $$i $(STAGEDIR)/$(DISTPATH)/main/$$j; \ - chmod a+x $(STAGEDIR)/$(DISTPATH)/main/$$j; \ - ;; \ - makefile | *~ ) ;; \ - * ) \ - if [ -f $$i ]; then \ - cp $$i $(STAGEDIR)/$(DISTPATH)/main/$$i; \ - chmod a+x $(STAGEDIR)/$(DISTPATH)/main/$$i; \ - fi; \ - ;; \ - esac; \ - done diff --git a/pgaas/src/stage/opt/app/pgaas/main/pg_hba.conf.orig b/pgaas/src/stage/opt/app/pgaas/main/pg_hba.conf.orig deleted file mode 100644 index 7bf51c1..0000000 --- a/pgaas/src/stage/opt/app/pgaas/main/pg_hba.conf.orig +++ /dev/null @@ -1,127 +0,0 @@ -# PostgreSQL Client Authentication Configuration File -# =================================================== -# -# Refer to the "Client Authentication" section in the PostgreSQL -# documentation for a complete description of this file. A short -# synopsis follows. -# -# This file controls: which hosts are allowed to connect, how clients -# are authenticated, which PostgreSQL user names they can use, which -# databases they can access. Records take one of these forms: -# -# local DATABASE USER METHOD [OPTIONS] -# host DATABASE USER ADDRESS METHOD [OPTIONS] -# hostssl DATABASE USER ADDRESS METHOD [OPTIONS] -# hostnossl DATABASE USER ADDRESS METHOD [OPTIONS] -# -# (The uppercase items must be replaced by actual values.) -# -# The first field is the connection type: "local" is a Unix-domain -# socket, "host" is either a plain or SSL-encrypted TCP/IP socket, -# "hostssl" is an SSL-encrypted TCP/IP socket, and "hostnossl" is a -# plain TCP/IP socket. -# -# DATABASE can be "all", "sameuser", "samerole", "replication", a -# database name, or a comma-separated list thereof. The "all" -# keyword does not match "replication". Access to replication -# must be enabled in a separate record (see example below). -# -# USER can be "all", a user name, a group name prefixed with "+", or a -# comma-separated list thereof. In both the DATABASE and USER fields -# you can also write a file name prefixed with "@" to include names -# from a separate file. -# -# ADDRESS specifies the set of hosts the record matches. It can be a -# host name, or it is made up of an IP address and a CIDR mask that is -# an integer (between 0 and 32 (IPv4) or 128 (IPv6) inclusive) that -# specifies the number of significant bits in the mask. A host name -# that starts with a dot (.) matches a suffix of the actual host name. -# Alternatively, you can write an IP address and netmask in separate -# columns to specify the set of hosts. Instead of a CIDR-address, you -# can write "samehost" to match any of the server's own IP addresses, -# or "samenet" to match any address in any subnet that the server is -# directly connected to. -# -# METHOD can be "trust", "reject", "md5", "password", "gss", "sspi", -# "ident", "peer", "pam", "ldap", "radius" or "cert". Note that -# "password" sends passwords in clear text; "md5" is preferred since -# it sends encrypted passwords. -# -# OPTIONS are a set of options for the authentication in the format -# NAME=VALUE. The available options depend on the different -# authentication methods -- refer to the "Client Authentication" -# section in the documentation for a list of which options are -# available for which authentication methods. -# -# Database and user names containing spaces, commas, quotes and other -# special characters must be quoted. Quoting one of the keywords -# "all", "sameuser", "samerole" or "replication" makes the name lose -# its special character, and just match a database or username with -# that name. -# -# This file is read on server startup and when the postmaster receives -# a SIGHUP signal. If you edit the file on a running system, you have -# to SIGHUP the postmaster for the changes to take effect. You can -# use "pg_ctl reload" to do that. - -# Put your actual configuration here -# ---------------------------------- -# -# If you want to allow non-local connections, you need to add more -# "host" records. In that case you will also need to make PostgreSQL -# listen on a non-local interface via the listen_addresses -# configuration parameter, or via the -i or -h command line switches. - -### @authcomment@ -### -### # TYPE DATABASE USER ADDRESS METHOD -### -### @remove-line-for-nolocal@# "local" is for Unix domain socket connections only -### @remove-line-for-nolocal@local all all @authmethodlocal@ -### # IPv4 local connections: -### host all all 127.0.0.1/32 @authmethodhost@ -### # IPv6 local connections: -### host all all ::1/128 @authmethodhost@ -### # Allow replication connections from localhost, by a user with the -### # replication privilege. -### @remove-line-for-nolocal@#local replication @default_username@ @authmethodlocal@ -### #host replication @default_username@ 127.0.0.1/32 @authmethodhost@ -### #host replication @default_username@ ::1/128 @authmethodhost@ - -# DO NOT DISABLE! -# If you change this first entry you will need to make sure that the -# database superuser can access the database using some other method. -# Noninteractive access to all databases is required during automatic -# maintenance (custom daily cronjobs, replication, and similar tasks). -# -# Database administrative login by Unix domain socket -local all postgres peer - -# TYPE DATABASE USER ADDRESS METHOD - -# DCAE IPv4/IPv6 remote connections: -host all all 0.0.0.0/0 md5 -host all all ::/0 md5 - -# "local" is for Unix domain socket connections only -local all all peer -# IPv4 local connections: -host all all 127.0.0.1/32 md5 -# IPv6 local connections: -host all all ::1/128 md5 -# Allow replication connections from localhost, by a user with the -# replication privilege. -# local replication postgres peer -# host replication postgres 127.0.0.1/32 md5 -# host replication postgres 0.0.0.0/0 md5 -# host replication postgres ::1/128 md5 - -local replication repmgr md5 -host replication repmgr 127.0.0.1/32 md5 -host replication repmgr 0.0.0.0/0 md5 -host replication repmgr ::1/128 md5 - -local repmgr repmgr md5 -host repmgr repmgr 127.0.0.1/32 md5 -host repmgr repmgr 0.0.0.0/0 md5 -host repmgr repmgr ::1/128 md5 diff --git a/pgaas/src/stage/opt/app/pgaas/main/pg_ident.conf b/pgaas/src/stage/opt/app/pgaas/main/pg_ident.conf deleted file mode 100644 index a5870e6..0000000 --- a/pgaas/src/stage/opt/app/pgaas/main/pg_ident.conf +++ /dev/null @@ -1,42 +0,0 @@ -# PostgreSQL User Name Maps -# ========================= -# -# Refer to the PostgreSQL documentation, chapter "Client -# Authentication" for a complete description. A short synopsis -# follows. -# -# This file controls PostgreSQL user name mapping. It maps external -# user names to their corresponding PostgreSQL user names. Records -# are of the form: -# -# MAPNAME SYSTEM-USERNAME PG-USERNAME -# -# (The uppercase quantities must be replaced by actual values.) -# -# MAPNAME is the (otherwise freely chosen) map name that was used in -# pg_hba.conf. SYSTEM-USERNAME is the detected user name of the -# client. PG-USERNAME is the requested PostgreSQL user name. The -# existence of a record specifies that SYSTEM-USERNAME may connect as -# PG-USERNAME. -# -# If SYSTEM-USERNAME starts with a slash (/), it will be treated as a -# regular expression. Optionally this can contain a capture (a -# parenthesized subexpression). The substring matching the capture -# will be substituted for \1 (backslash-one) if present in -# PG-USERNAME. -# -# Multiple maps may be specified in this file and used by pg_hba.conf. -# -# No map names are defined in the default configuration. If all -# system user names and PostgreSQL user names are the same, you don't -# need anything in this file. -# -# This file is read on server startup and when the postmaster receives -# a SIGHUP signal. If you edit the file on a running system, you have -# to SIGHUP the postmaster for the changes to take effect. You can -# use "pg_ctl reload" to do that. - -# Put your actual configuration here -# ---------------------------------- - -# MAPNAME SYSTEM-USERNAME PG-USERNAME diff --git a/pgaas/src/stage/opt/app/pgaas/main/postgresql.conf.orig b/pgaas/src/stage/opt/app/pgaas/main/postgresql.conf.orig deleted file mode 100644 index cb4d13a..0000000 --- a/pgaas/src/stage/opt/app/pgaas/main/postgresql.conf.orig +++ /dev/null @@ -1,655 +0,0 @@ -# ----------------------------- -# PostgreSQL configuration file -# ----------------------------- -# -# This file consists of lines of the form: -# -# name = value -# -# (The "=" is optional.) Whitespace may be used. Comments are introduced with -# "#" anywhere on a line. The complete list of parameter names and allowed -# values can be found in the PostgreSQL documentation. -# -# The commented-out settings shown in this file represent the default values. -# Re-commenting a setting is NOT sufficient to revert it to the default value; -# you need to reload the server. -# -# This file is read on server startup and when the server receives a SIGHUP -# signal. If you edit the file on a running system, you have to SIGHUP the -# server for the changes to take effect, or use "pg_ctl reload". Some -# parameters, which are marked below, require a server shutdown and restart to -# take effect. -# -# Any parameter can also be given as a command-line option to the server, e.g., -# "postgres -c log_connections=on". Some parameters can be changed at run time -# with the "SET" SQL command. -# -# Memory units: kB = kilobytes Time units: ms = milliseconds -# MB = megabytes s = seconds -# GB = gigabytes min = minutes -# TB = terabytes h = hours -# d = days - - -#------------------------------------------------------------------------------ -# FILE LOCATIONS -#------------------------------------------------------------------------------ - -# The default values of these variables are driven from the -D command-line -# option or PGDATA environment variable, represented here as ConfigDir. - -data_directory = '/dbroot/pgdata/main' # for DCAE -#data_directory = 'ConfigDir' # use data in another directory - # (change requires restart) -hba_file = '%CFGDIR%/main/pg_hba.conf' # for DCAE -#hba_file = 'ConfigDir/pg_hba.conf' # host-based authentication file - # (change requires restart) -ident_file = '%CFGDIR%/main/pg_ident.conf' # for DCAE -#ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file - # (change requires restart) - -# If external_pid_file is not explicitly set, no extra PID file is written. -external_pid_file = '/var/run/postgresql/main.pid' # for DCAE -#external_pid_file = '' # write an extra PID file - # (change requires restart) - - -#------------------------------------------------------------------------------ -# CONNECTIONS AND AUTHENTICATION -#------------------------------------------------------------------------------ - -# - Connection Settings - - -# DCAE -- for 1607 IST30, set to '*' to allow remote connections -listen_addresses = '*' # for DCAE - -#listen_addresses = 'localhost' # what IP address(es) to listen on; - # comma-separated list of addresses; - # defaults to 'localhost'; use '*' for all - # (change requires restart) -#port = 5432 # (change requires restart) -#max_connections = 100 # (change requires restart) -# Note: Increasing max_connections costs ~400 bytes of shared memory per -# connection slot, plus lock space (see max_locks_per_transaction). -#superuser_reserved_connections = 3 # (change requires restart) -unix_socket_directories = '/var/run/postgresql,/tmp' # for DCAE -#unix_socket_directories = '/tmp' # comma-separated list of directories - # (change requires restart) -#unix_socket_group = '' # (change requires restart) -#unix_socket_permissions = 0777 # begin with 0 to use octal notation - # (change requires restart) -#bonjour = off # advertise server via Bonjour - # (change requires restart) -#bonjour_name = '' # defaults to the computer name - # (change requires restart) - -# - Security and Authentication - - -#authentication_timeout = 1min # 1s-600s -ssl = true # for DCAE -#ssl = off # (change requires restart) -#ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers - # (change requires restart) -#ssl_prefer_server_ciphers = on # (change requires restart) -#ssl_ecdh_curve = 'prime256v1' # (change requires restart) -ssl_cert_file = '%CFGDIR%/lib/ssl-cert-snakeoil.pem' # for DCAE -#ssl_cert_file = 'server.crt' # (change requires restart) -ssl_key_file = '%CFGDIR%/lib/ssl-cert-snakeoil.key' # for DCAE -#ssl_key_file = 'server.key' # (change requires restart) -#ssl_ca_file = '' # (change requires restart) -#ssl_crl_file = '' # (change requires restart) -#password_encryption = on -#db_user_namespace = off -#row_security = on - -# GSSAPI using Kerberos -#krb_server_keyfile = '' -#krb_caseins_users = off - -# - TCP Keepalives - -# see "man 7 tcp" for details - -#tcp_keepalives_idle = 0 # TCP_KEEPIDLE, in seconds; - # 0 selects the system default -#tcp_keepalives_interval = 0 # TCP_KEEPINTVL, in seconds; - # 0 selects the system default -#tcp_keepalives_count = 0 # TCP_KEEPCNT; - # 0 selects the system default - - -#------------------------------------------------------------------------------ -# RESOURCE USAGE (except WAL) -#------------------------------------------------------------------------------ - -# - Memory - - -#shared_buffers = 32MB # min 128kB - # (change requires restart) -#huge_pages = try # on, off, or try - # (change requires restart) -#temp_buffers = 8MB # min 800kB -#max_prepared_transactions = 0 # zero disables the feature - # (change requires restart) -# Note: Increasing max_prepared_transactions costs ~600 bytes of shared memory -# per transaction slot, plus lock space (see max_locks_per_transaction). -# It is not advisable to set max_prepared_transactions nonzero unless you -# actively intend to use prepared transactions. -#work_mem = 4MB # min 64kB -#maintenance_work_mem = 64MB # min 1MB -#autovacuum_work_mem = -1 # min 1MB, or -1 to use maintenance_work_mem -#max_stack_depth = 2MB # min 100kB -#dynamic_shared_memory_type = posix # the default is the first option - # supported by the operating system: - # posix - # sysv - # windows - # mmap - # use none to disable dynamic shared memory - -# - Disk - - -#temp_file_limit = -1 # limits per-session temp file space - # in kB, or -1 for no limit - -# - Kernel Resource Usage - - -#max_files_per_process = 1000 # min 25 - # (change requires restart) -#shared_preload_libraries = '' # (change requires restart) - -# - Cost-Based Vacuum Delay - - -#vacuum_cost_delay = 0 # 0-100 milliseconds -#vacuum_cost_page_hit = 1 # 0-10000 credits -#vacuum_cost_page_miss = 10 # 0-10000 credits -#vacuum_cost_page_dirty = 20 # 0-10000 credits -#vacuum_cost_limit = 200 # 1-10000 credits - -# - Background Writer - - -#bgwriter_delay = 200ms # 10-10000ms between rounds -#bgwriter_lru_maxpages = 100 # 0-1000 max buffers written/round -#bgwriter_lru_multiplier = 2.0 # 0-10.0 multipler on buffers scanned/round - -# - Asynchronous Behavior - - -#effective_io_concurrency = 1 # 1-1000; 0 disables prefetching -#max_worker_processes = 8 - - -#------------------------------------------------------------------------------ -# WRITE AHEAD LOG -#------------------------------------------------------------------------------ - -# - Settings - - -# TLH - this is where we do WAL settings -wal_level = hot_standby # minimal, archive, hot_standby, or logical - # (change requires restart) -#fsync = on # turns forced synchronization on or off -#synchronous_commit = on # synchronization level; - # off, local, remote_write, or on -#wal_sync_method = fsync # the default is the first option - # supported by the operating system: - # open_datasync - # fdatasync (default on Linux) - # fsync - # fsync_writethrough - # open_sync -#full_page_writes = on # recover from partial page writes -#wal_compression = off # enable compression of full-page writes -wal_log_hints = on # also do full page writes of non-critical updates - # (change requires restart) -#wal_buffers = -1 # min 32kB, -1 sets based on shared_buffers - # (change requires restart) -#wal_writer_delay = 200ms # 1-10000 milliseconds - -#commit_delay = 0 # range 0-100000, in microseconds -#commit_siblings = 5 # range 1-1000 - -# - Checkpoints - - -#checkpoint_timeout = 5min # range 30s-1h -#max_wal_size = 1GB -#min_wal_size = 80MB -#checkpoint_completion_target = 0.5 # checkpoint target duration, 0.0 - 1.0 -#checkpoint_warning = 30s # 0 disables - -# - Archiving - - -archive_mode = on # enables archiving; off, on, or always - # (change requires restart) -archive_command = 'test ! -f /dbroot/pglogs/main/%f && cp %p /dbroot/pglogs/main/%f' - # command to use to archive a logfile segment - # placeholders: %p = path of file to archive - # %f = file name only - # e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f' -archive_timeout = 0 # force a logfile segment switch after this - # number of seconds; 0 disables - - -#------------------------------------------------------------------------------ -# REPLICATION -#------------------------------------------------------------------------------ - -# - Sending Server(s) - - -# Set these on the master and on any standby that will send replication data. - -max_wal_senders = 4 # max number of walsender processes - # (change requires restart) -#wal_keep_segments = 0 # in logfile segments, 16MB each; 0 disables -#wal_sender_timeout = 60s # in milliseconds; 0 disables - -max_replication_slots = 5 # max number of replication slots - # (change requires restart) - # DCAE NOTE: if we ever grow our cluster, change this value to - # the number of nodes + 1 -#track_commit_timestamp = off # collect timestamp of transaction commit - # (change requires restart) - -# - Master Server - - -# These settings are ignored on a standby server. - -#synchronous_standby_names = '' # standby servers that provide sync rep - # comma-separated list of application_name - # from standby(s); '*' = all -#vacuum_defer_cleanup_age = 0 # number of xacts by which cleanup is delayed - -# - Standby Servers - - -# These settings are ignored on a master server. - -hot_standby = on # "on" allows queries during recovery - # (change requires restart) -#max_standby_archive_delay = 30s # max delay before canceling queries - # when reading WAL from archive; - # -1 allows indefinite delay -#max_standby_streaming_delay = 30s # max delay before canceling queries - # when reading streaming WAL; - # -1 allows indefinite delay -#wal_receiver_status_interval = 10s # send replies at least this often - # 0 disables -#hot_standby_feedback = off # send info from standby to prevent - # query conflicts -#wal_receiver_timeout = 60s # time that receiver waits for - # communication from master - # in milliseconds; 0 disables -#wal_retrieve_retry_interval = 5s # time to wait before retrying to - # retrieve WAL after a failed attempt - - -#------------------------------------------------------------------------------ -# QUERY TUNING -#------------------------------------------------------------------------------ - -# - Planner Method Configuration - - -#enable_bitmapscan = on -#enable_hashagg = on -#enable_hashjoin = on -#enable_indexscan = on -#enable_indexonlyscan = on -#enable_material = on -#enable_mergejoin = on -#enable_nestloop = on -#enable_seqscan = on -#enable_sort = on -#enable_tidscan = on - -# - Planner Cost Constants - - -#seq_page_cost = 1.0 # measured on an arbitrary scale -#random_page_cost = 4.0 # same scale as above -#cpu_tuple_cost = 0.01 # same scale as above -#cpu_index_tuple_cost = 0.005 # same scale as above -#cpu_operator_cost = 0.0025 # same scale as above -#effective_cache_size = 4GB - -# - Genetic Query Optimizer - - -#geqo = on -#geqo_threshold = 12 -#geqo_effort = 5 # range 1-10 -#geqo_pool_size = 0 # selects default based on effort -#geqo_generations = 0 # selects default based on effort -#geqo_selection_bias = 2.0 # range 1.5-2.0 -#geqo_seed = 0.0 # range 0.0-1.0 - -# - Other Planner Options - - -#default_statistics_target = 100 # range 1-10000 -#constraint_exclusion = partition # on, off, or partition -#cursor_tuple_fraction = 0.1 # range 0.0-1.0 -#from_collapse_limit = 8 -#join_collapse_limit = 8 # 1 disables collapsing of explicit - # JOIN clauses - - -#------------------------------------------------------------------------------ -# ERROR REPORTING AND LOGGING -#------------------------------------------------------------------------------ - -# - Where to Log - - -#log_destination = 'stderr' # Valid values are combinations of - # stderr, csvlog, syslog, and eventlog, - # depending on platform. csvlog - # requires logging_collector to be on. - -# This is used when logging to stderr: -logging_collector = on # for DCAE -#logging_collector = off # Enable capturing of stderr and csvlog - # into log files. Required to be on for - # csvlogs. - # (change requires restart) - -# These are only used if logging_collector is on: -log_directory = '/opt/logs/dcae/postgresql/server' # for DCAE -#log_directory = 'pg_log' # directory where log files are written, - # can be absolute or relative to PGDATA -log_filename = 'error.log' # for DCAE -#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern, - # can include strftime() escapes -log_file_mode = 0666 # for DCAE -#log_file_mode = 0600 # creation mode for log files, - # begin with 0 to use octal notation -#log_truncate_on_rotation = off # If on, an existing log file with the - # same name as the new log file will be - # truncated rather than appended to. - # But such truncation only occurs on - # time-driven rotation, not on restarts - # or size-driven rotation. Default is - # off, meaning append to existing files - # in all cases. -log_rotation_age = 1d # for DCAE -#log_rotation_age = 1d # Automatic rotation of logfiles will - # happen after that time. 0 disables. -log_rotation_size = 0 # for DCAE -#log_rotation_size = 10MB # Automatic rotation of logfiles will - # happen after that much log output. - # 0 disables. - -# These are relevant when logging to syslog: -#syslog_facility = 'LOCAL0' -#syslog_ident = 'postgres' - -# This is only relevant when logging to eventlog (win32): -#event_source = 'PostgreSQL' - -# - When to Log - - -#client_min_messages = notice # values in order of decreasing detail: - # debug5 - # debug4 - # debug3 - # debug2 - # debug1 - # log - # notice - # warning - # error - -#log_min_messages = warning # values in order of decreasing detail: - # debug5 - # debug4 - # debug3 - # debug2 - # debug1 - # info - # notice - # warning - # error - # log - # fatal - # panic - -#log_min_error_statement = error # values in order of decreasing detail: - # debug5 - # debug4 - # debug3 - # debug2 - # debug1 - # info - # notice - # warning - # error - # log - # fatal - # panic (effectively off) - -#log_min_duration_statement = -1 # -1 is disabled, 0 logs all statements - # and their durations, > 0 logs only - # statements running at least this number - # of milliseconds - - -# - What to Log - - -#debug_print_parse = off -#debug_print_rewritten = off -#debug_print_plan = off -#debug_pretty_print = on -#log_checkpoints = off -#log_connections = off -#log_disconnections = off -#log_duration = off -#log_error_verbosity = default # terse, default, or verbose messages -#log_hostname = off -log_line_prefix = '%t|%a|%u|%d|%i|%e|%r|%c|' # for DCAE -#log_line_prefix = '' # special values: - # %a = application name - # %u = user name - # %d = database name - # %r = remote host and port - # %h = remote host - # %p = process ID - # %t = timestamp without milliseconds - # %m = timestamp with milliseconds - # %i = command tag - # %e = SQL state - # %c = session ID - # %l = session line number - # %s = session start timestamp - # %v = virtual transaction ID - # %x = transaction ID (0 if none) - # %q = stop here in non-session - # processes - # %% = '%' - # e.g. '<%u%%%d> ' -#log_lock_waits = off # log lock waits >= deadlock_timeout -#log_statement = 'none' # none, ddl, mod, all -#log_replication_commands = off -#log_temp_files = -1 # log temporary files equal or larger - # than the specified size in kilobytes; - # -1 disables, 0 logs all temp files -#log_timezone = 'GMT' - - -# - Process Title - - -#cluster_name = '' # added to process titles if nonempty - # (change requires restart) -#update_process_title = on - - -#------------------------------------------------------------------------------ -# RUNTIME STATISTICS -#------------------------------------------------------------------------------ - -# - Query/Index Statistics Collector - - -#track_activities = on -#track_counts = on -#track_io_timing = off -#track_functions = none # none, pl, all -#track_activity_query_size = 1024 # (change requires restart) -#stats_temp_directory = 'pg_stat_tmp' - - -# - Statistics Monitoring - - -#log_parser_stats = off -#log_planner_stats = off -#log_executor_stats = off -#log_statement_stats = off - - -#------------------------------------------------------------------------------ -# AUTOVACUUM PARAMETERS -#------------------------------------------------------------------------------ - -#autovacuum = on # Enable autovacuum subprocess? 'on' - # requires track_counts to also be on. -#log_autovacuum_min_duration = -1 # -1 disables, 0 logs all actions and - # their durations, > 0 logs only - # actions running at least this number - # of milliseconds. -#autovacuum_max_workers = 3 # max number of autovacuum subprocesses - # (change requires restart) -#autovacuum_naptime = 1min # time between autovacuum runs -#autovacuum_vacuum_threshold = 50 # min number of row updates before - # vacuum -#autovacuum_analyze_threshold = 50 # min number of row updates before - # analyze -#autovacuum_vacuum_scale_factor = 0.2 # fraction of table size before vacuum -#autovacuum_analyze_scale_factor = 0.1 # fraction of table size before analyze -#autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum - # (change requires restart) -#autovacuum_multixact_freeze_max_age = 400000000 # maximum multixact age - # before forced vacuum - # (change requires restart) -#autovacuum_vacuum_cost_delay = 20ms # default vacuum cost delay for - # autovacuum, in milliseconds; - # -1 means use vacuum_cost_delay -#autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for - # autovacuum, -1 means use - # vacuum_cost_limit - - -#------------------------------------------------------------------------------ -# CLIENT CONNECTION DEFAULTS -#------------------------------------------------------------------------------ - -# - Statement Behavior - - -#search_path = '"$user", public' # schema names -#default_tablespace = '' # a tablespace name, '' uses the default -#temp_tablespaces = '' # a list of tablespace names, '' uses - # only default tablespace -#check_function_bodies = on -#default_transaction_isolation = 'read committed' -#default_transaction_read_only = off -#default_transaction_deferrable = off -#session_replication_role = 'origin' -#statement_timeout = 0 # in milliseconds, 0 is disabled -#lock_timeout = 0 # in milliseconds, 0 is disabled -#vacuum_freeze_min_age = 50000000 -#vacuum_freeze_table_age = 150000000 -#vacuum_multixact_freeze_min_age = 5000000 -#vacuum_multixact_freeze_table_age = 150000000 -#bytea_output = 'hex' # hex, escape -#xmlbinary = 'base64' -#xmloption = 'content' -#gin_fuzzy_search_limit = 0 -#gin_pending_list_limit = 4MB - -# - Locale and Formatting - - -#datestyle = 'iso, mdy' -#intervalstyle = 'postgres' -#timezone = 'GMT' -#timezone_abbreviations = 'Default' # Select the set of available time zone - # abbreviations. Currently, there are - # Default - # Australia (historical usage) - # India - # You can create your own file in - # share/timezonesets/. -#extra_float_digits = 0 # min -15, max 3 -#client_encoding = sql_ascii # actually, defaults to database - # encoding - -# These settings are initialized by initdb, but they can be changed. -#lc_messages = 'C' # locale for system error message - # strings -#lc_monetary = 'C' # locale for monetary formatting -#lc_numeric = 'C' # locale for number formatting -#lc_time = 'C' # locale for time formatting - -# default configuration for text search -#default_text_search_config = 'pg_catalog.simple' - -# - Other Defaults - - -#dynamic_library_path = '$libdir' -#local_preload_libraries = '' -#session_preload_libraries = '' - - -#------------------------------------------------------------------------------ -# LOCK MANAGEMENT -#------------------------------------------------------------------------------ - -#deadlock_timeout = 1s -#max_locks_per_transaction = 64 # min 10 - # (change requires restart) -# Note: Each lock table slot uses ~270 bytes of shared memory, and there are -# max_locks_per_transaction * (max_connections + max_prepared_transactions) -# lock table slots. -#max_pred_locks_per_transaction = 64 # min 10 - # (change requires restart) - - -#------------------------------------------------------------------------------ -# VERSION/PLATFORM COMPATIBILITY -#------------------------------------------------------------------------------ - -# - Previous PostgreSQL Versions - - -#array_nulls = on -#backslash_quote = safe_encoding # on, off, or safe_encoding -#default_with_oids = off -#escape_string_warning = on -#lo_compat_privileges = off -#operator_precedence_warning = off -#quote_all_identifiers = off -#sql_inheritance = on -#standard_conforming_strings = on -#synchronize_seqscans = on - -# - Other Platforms and Clients - - -#transform_null_equals = off - - -#------------------------------------------------------------------------------ -# ERROR HANDLING -#------------------------------------------------------------------------------ - -#exit_on_error = off # terminate session on any error? -#restart_after_crash = on # reinitialize after backend crash? - - -#------------------------------------------------------------------------------ -# CONFIG FILE INCLUDES -#------------------------------------------------------------------------------ - -# These options allow settings to be loaded from files other than the -# default postgresql.conf. - -#include_dir = 'conf.d' # include files ending in '.conf' from - # directory 'conf.d' -#include_if_exists = 'exists.conf' # include file only if it exists -#include = 'special.conf' # include file - - -#------------------------------------------------------------------------------ -# CUSTOMIZED OPTIONS -#------------------------------------------------------------------------------ - -# Add settings for extensions here - -# repmgr / repmgrd -shared_preload_libraries = 'repmgr_funcs' diff --git a/pgaas/src/stage/opt/app/pgaas/makefile b/pgaas/src/stage/opt/app/pgaas/makefile deleted file mode 100644 index 75ad62b..0000000 --- a/pgaas/src/stage/opt/app/pgaas/makefile +++ /dev/null @@ -1,40 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -STAGEDIR=/dev/null -all: - -stage: - for i in bin lib etc man init main; do \ - ( cd $$i && $(MAKE) stage STAGEDIR=../$(STAGEDIR) ) \ - done - for i in lib/gif; do \ - ( cd $$i && $(MAKE) stage STAGEDIR=../../$(STAGEDIR) ) \ - done - -clean: - for i in bin lib etc man init main; do \ - ( cd $$i && $(MAKE) clean ) \ - done - for i in lib/gif; do \ - ( cd $$i && $(MAKE) stage STAGEDIR=../../$(STAGEDIR) clean ) \ - done - -clobber: - for i in bin lib etc man init main; do \ - ( cd $$i && $(MAKE) clobber ) \ - done - for i in lib/gif; do \ - ( cd $$i && $(MAKE) stage STAGEDIR=../../$(STAGEDIR) clobber ) \ - done diff --git a/pgaas/src/stage/opt/app/pgaas/man/.gitignore b/pgaas/src/stage/opt/app/pgaas/man/.gitignore deleted file mode 100644 index 87ed949..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.1 -todo diff --git a/pgaas/src/stage/opt/app/pgaas/man/check_cluster.man b/pgaas/src/stage/opt/app/pgaas/man/check_cluster.man deleted file mode 100644 index 071e9d0..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/check_cluster.man +++ /dev/null @@ -1,40 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH check_cluster 1PG {{DATE}} ONAP ONAP -.SH NAME -check_cluster - check the state of the cluster -.SH SYNOPSIS -check_cluster [-d file] [-v] [-l] [-t timeout] -.HP 20 --d file -duplicate the status output to the given file -.HP 20 --l -do not check localhost first (and restarting the service if necessary) -.HP 20 --t timeout -set how long to wait when accessing the servers -.HP 20 --v -verbose -.SH DESCRIPTION -Loop through the nodes in the cluster, using pgwget to determine how many are -masters, secondaries, in maintenance, or not up. -Complain about certain situations. -If there are multiple masters, and this not the first master in the list, then: - -run pg_ctl_restart - -to prevent /ro from returning true -.PP -When \-d is used, the filename will have ".tmp" appended, writing the output to that temp filename, and then renaming the ".tmp" file to the given filename. diff --git a/pgaas/src/stage/opt/app/pgaas/man/dcae_admin_db.man b/pgaas/src/stage/opt/app/pgaas/man/dcae_admin_db.man deleted file mode 100644 index 5b13a7b..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/dcae_admin_db.man +++ /dev/null @@ -1,72 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH dcae_admin_db.py 1PG {{DATE}} ONAP ONAP -.SH NAME -dcae_admin_db.py - interface with DCAE controller -.SH SYNOPSIS -dcae_admin_db.py [options] configurationChanged json-file -.br -dcae_admin_db.py [options] suspend -.br -dcae_admin_db.py [options] resume -.br -dcae_admin_db.py [options] test -.SS OPTIONS -.HP 20 --H / --dbhost= -host name, defaults to CFG['dcae_admin_db_hostname'] -.HP 20 --d / --dbdir= -database directory path, defaults to CFG['db_directory'] -.HP 20 --c / --dbconf= -database configuration path, defaults to CFG['db_configuration'] -.HP 20 --D / --dbname= -database name, defaults to CFG['dcae_admin_db_databasename'] -.HP 20 --U / --user= -user to login as, defaults to CFG['dcae_admin_db_username'] -.HP 20 --P / --password= -password for user, defaults to CFG['dcae_admin_db_password'] -.HP 20 --B / --bindir= -postgresql bin directory, defaults to CFG['pg_bin_directory'] -.HP 20 --i / --ignorefile= -skip configuration if this file is present, defaults to CFG['skip_configuration_file'] -.HP 20 --n / --nocreate -do not create the databases / users -.HP 20 --I / --ignoredb -ignore current state of database -.HP 20 --R / --remove -remove old databases / users -.HP 20 --J / --jsontop= -top of json tree, as in \"['pgaas']\" -.HP 20 --e / --errors= -where to redirect error output, defaults to CFG['dcae_admin_db_errors_file'] then stderr -.HP 20 --t / --trace= -where to redirect trace output, defaults to CFG['dcae_admin_db_trace_file'] then stderr -.HP 20 --v / --verbose -verbose, defaults to CFG['dcae_admin_db_verbosity'] -.SH DESCRIPTION -This program is intended to be executed by the DCAE controller manager. -Given a database description json file, update the current VM accordingly diff --git a/pgaas/src/stage/opt/app/pgaas/man/iDNS-responder.swagger.json b/pgaas/src/stage/opt/app/pgaas/man/iDNS-responder.swagger.json deleted file mode 100644 index 2b59cda..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/iDNS-responder.swagger.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "version": "1.1.0", - "title": "PostgreSQL as a Service REST API" - }, - "paths": { - "/rw": { - "get": { - "description": "Gets a string indicating if this is a PostgreSQL Master server\n", - "responses": { - "200": { - "description": "Successful response", - "schema": { - "title": "status", - "type": "string" - } - } - } - } - }, - "/ro": { - "get": { - "description": "Gets a string indicating if this is either a PostgreSQL Master or Secondary server\n", - "responses": { - "200": { - "description": "Successful response", - "schema": { - "title": "status", - "type": "string" - } - } - } - } - }, - "/healthcheck/status": { - "get": { - "description": "Gets a string indicating the status of this server\n", - "responses": { - "200": { - "description": "Successful response", - "schema": { - "title": "output", - "type": "string" - } - }, - "429": { - "description": "Error response", - "schema": { - "title": "output", - "type": "string" - } - } - } - } - } - } -} diff --git a/pgaas/src/stage/opt/app/pgaas/man/iDNS-responder.swagger.yaml b/pgaas/src/stage/opt/app/pgaas/man/iDNS-responder.swagger.yaml deleted file mode 100644 index 5f3ffee..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/iDNS-responder.swagger.yaml +++ /dev/null @@ -1,68 +0,0 @@ -# Example YAML to get you started quickly. -# Be aware that YAML has indentation based scoping. -# Code completion support is available so start typing for available options. -swagger: '2.0' - -# This is your document metadata -info: - version: "1.1.0" - title: PostgreSQL as a Service REST API - -# Describe your paths here -paths: - # This is a path endpoint. Change it. - /rw: - # This is a HTTP operation - get: - # Describe this verb here. Note: you can use markdown - description: | - Gets a string indicating if this is a PostgreSQL Master server - # Expected responses for this operation: - responses: - # Response code - 200: - description: Successful response - # A schema describing your response object. - # Use JSON Schema format - schema: - title: status - type: string - /ro: - # This is a HTTP operation - get: - # Describe this verb here. Note: you can use markdown - description: | - Gets a string indicating if this is either a PostgreSQL Master or Secondary server - # Expected responses for this operation: - responses: - # Response code - 200: - description: Successful response - # A schema describing your response object. - # Use JSON Schema format - schema: - title: status - type: string - /healthcheck/status: - # This is a HTTP operation - get: - # Describe this verb here. Note: you can use markdown - description: | - Gets a string indicating the status of this server - # Expected responses for this operation: - responses: - # Response code - 200: - description: Successful response - # A schema describing your response object. - # Use JSON Schema format - schema: - title: output - type: string - 429: - description: Error response - # A schema describing your response object. - # Use JSON Schema format - schema: - title: output - type: string diff --git a/pgaas/src/stage/opt/app/pgaas/man/isrw.man b/pgaas/src/stage/opt/app/pgaas/man/isrw.man deleted file mode 100644 index 5aed4b1..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/isrw.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH isrw 1PG {{DATE}} ONAP ONAP -.SH NAME -isrw - check if a running PostgreSQL is a master or secondary -.SH SYNOPSIS -isrw -.SH DESCRIPTION -Either prints Master or Secondary depending on the state of the running PostgreSQL server. diff --git a/pgaas/src/stage/opt/app/pgaas/man/list_masters.man b/pgaas/src/stage/opt/app/pgaas/man/list_masters.man deleted file mode 100644 index d254fef..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/list_masters.man +++ /dev/null @@ -1,30 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH list_masters 1PG {{DATE}} ONAP ONAP -.SH NAME -list_masters - loop through the nodes in the cluster, using a remote call to determine if any are a master. -.SH SYNOPSIS -list_masters -.SH DESCRIPTION -List_masters loops through the nodes in the cluster, using a remote call to the iDNS-responder running on each server to determine if any are a master. -The names of the masters are printed (there should only be one). -.SS Exit Codes -.HP 20 -0 -one master exists and is running -.HP 20 -1 -no masters exist -.HP 20 -2 -more than one master exist diff --git a/pgaas/src/stage/opt/app/pgaas/man/makefile b/pgaas/src/stage/opt/app/pgaas/man/makefile deleted file mode 100644 index 4ce3f6c..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/makefile +++ /dev/null @@ -1,101 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - - -.SUFFIXES: .man .1 - -TR2MAN = -%.1 : %.man - $(TR2MAN) - -STAGEDIR=/dev/null -DISTPATH=/opt/app/pgaas - -TRFILES := $(wildcard *.man) -MANFILES := $(patsubst %.man,%.1,$(wildcard *.man)) - -all: $(MANFILES) - -stage: $(MANFILES) - rm -rf $(STAGEDIR)/$(DISTPATH)/man - mkdir -p $(STAGEDIR)/$(DISTPATH)/man - cp -p $(MANFILES) *.yaml *.json $(STAGEDIR)/$(DISTPATH)/man - -clean: - rm -f *~ - -clobber: clean - rm -f *.1 - -# really should not need to list each of the files individually here with how to make them - -check_cluster.1: check_cluster.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -dcae_admin_db.1: dcae_admin_db.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -isrw.1: isrw.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -list_masters.1: list_masters.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -pg_ctl_promote.1: pg_ctl_promote.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -pg_ctl_restart.1: pg_ctl_restart.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -pg_ctl_start.1: pg_ctl_start.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -pg_ctl_status.1: pg_ctl_status.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -pg_ctl_stop.1: pg_ctl_stop.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -repmgrc.1: repmgrc.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -repmgrdc.1: repmgrdc.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -runpsqll.1: runpsqll.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -runpsql.1: runpsql.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -setpropvalue.1: setpropvalue.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -show_pg_is_in_recovery.1: show_pg_is_in_recovery.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -show_pg_stat_activity.1: show_pg_stat_activity.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -show_pg_stat_archiver.1: show_pg_stat_archiver.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -show_pg_stat_bgwriter.1: show_pg_stat_bgwriter.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -show_pg_stat_database_conflicts.1: show_pg_stat_database_conflicts.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -show_pg_stat_database.1: show_pg_stat_database.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -show_pg_statio_user_functions.1: show_pg_statio_user_functions.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -show_pg_statio_user_indexes.1: show_pg_statio_user_indexes.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -show_pg_statio_user_sequences.1: show_pg_statio_user_sequences.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -show_pg_statio_user_tables.1: show_pg_statio_user_tables.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -show_pg_stat_user_indexes.1: show_pg_stat_user_indexes.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -show_pg_stat_user_tables.1: show_pg_stat_user_tables.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -startpsql.1: startpsql.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -start_maintenance_mode.1: start_maintenance_mode.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -stop_maintenance_mode.1: stop_maintenance_mode.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -update_var_run_isrw.1: update_var_run_isrw.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ diff --git a/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_promote.man b/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_promote.man deleted file mode 100644 index 9e12376..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_promote.man +++ /dev/null @@ -1,20 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH pg_ctl_promote 1PG {{DATE}} ONAP ONAP -.SH NAME -pg_ctl_promote - helper function to run pg_ctl promote -.SH SYNOPSIS -pg_ctl_promote -.SH DESCRIPTION -Finds the pg_ctl command, the location of the database and its configurations and runs "pg_ctl promote". - diff --git a/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_restart.man b/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_restart.man deleted file mode 100644 index 6fb7519..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_restart.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH pg_ctl_restart 1PG {{DATE}} ONAP ONAP -.SH NAME -pg_ctl_restart - helper function to run pg_ctl restart -.SH SYNOPSIS -pg_ctl_restart -.SH DESCRIPTION -Finds the pg_ctl command, the location of the database and its configurations and runs "pg_ctl stop" and "pg_ctl start". diff --git a/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_start.man b/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_start.man deleted file mode 100644 index cb6a3e5..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_start.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH pg_ctl_start 1PG {{DATE}} ONAP ONAP -.SH NAME -pg_ctl_start - helper function to run pg_ctl start -.SH SYNOPSIS -pg_ctl_start -.SH DESCRIPTION -Finds the pg_ctl command, the location of the database and its configurations and runs "pg_ctl start". diff --git a/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_status.man b/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_status.man deleted file mode 100644 index 3051fdc..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_status.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH pg_ctl_status 1PG {{DATE}} ONAP ONAP -.SH NAME -pg_ctl_status - helper function to run pg_ctl status -.SH SYNOPSIS -pg_ctl_status -.SH DESCRIPTION -Finds the pg_ctl command, the location of the database and its configurations and runs "pg_ctl status". diff --git a/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_stop.man b/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_stop.man deleted file mode 100644 index e437a6a..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_stop.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH pg_ctl_stop 1PG {{DATE}} ONAP ONAP -.SH NAME -pg_ctl_stop - helper function to run pg_ctl stop -.SH SYNOPSIS -pg_ctl_stop -.SH DESCRIPTION -Finds the pg_ctl command, the location of the database and its configurations and runs "pg_ctl stop". diff --git a/pgaas/src/stage/opt/app/pgaas/man/repmgrc.man b/pgaas/src/stage/opt/app/pgaas/man/repmgrc.man deleted file mode 100644 index f327913..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/repmgrc.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH repmgr 1PG {{DATE}} ONAP ONAP -.SH NAME -repmgrc - helper function to run repmgr command -.SH SYNOPSIS -repmgrc -.SH DESCRIPTION -Finds the repmgr command and its configurations and runs "repmgr" appropriately. diff --git a/pgaas/src/stage/opt/app/pgaas/man/repmgrdc.man b/pgaas/src/stage/opt/app/pgaas/man/repmgrdc.man deleted file mode 100644 index 5e8e0ad..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/repmgrdc.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH repmgrd 1PG {{DATE}} ONAP ONAP -.SH NAME -repmgrdc - helper function to run repmgrd command -.SH SYNOPSIS -repmgrdc -.SH DESCRIPTION -Finds the repmgrd command and its configurations and runs "repmgrd" appropriately. diff --git a/pgaas/src/stage/opt/app/pgaas/man/runpsql.man b/pgaas/src/stage/opt/app/pgaas/man/runpsql.man deleted file mode 100644 index 393f437..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/runpsql.man +++ /dev/null @@ -1,21 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH runpsql 1PG {{DATE}} ONAP ONAP -.SH NAME -runpsql - run the psql command that is given on the command line -.SH SYNOPSIS -runpsql sql command ... -.SH DESCRIPTION -Locate the psql command and run the command specified as the arguments on the command line. -.SH "SEE ALSO" -runpsqll, startpsql diff --git a/pgaas/src/stage/opt/app/pgaas/man/runpsqll.man b/pgaas/src/stage/opt/app/pgaas/man/runpsqll.man deleted file mode 100644 index 556aea0..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/runpsqll.man +++ /dev/null @@ -1,22 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH runpsqll 1PG {{DATE}} ONAP ONAP -.SH NAME -runpsqll - run the psql command that is given on the command line, no labels -.SH SYNOPSIS -runpsqll sql command ... -.SH DESCRIPTION -Locate the psql command and run the command specified as the arguments on the command line. -Only output the tuples. -.SH "SEE ALSO" -runpsql, startpsql diff --git a/pgaas/src/stage/opt/app/pgaas/man/setpropvalue.man b/pgaas/src/stage/opt/app/pgaas/man/setpropvalue.man deleted file mode 100644 index 78b7fb5..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/setpropvalue.man +++ /dev/null @@ -1,26 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH setpropvalue 1PG {{DATE}} ONAP ONAP -.SH NAME -setpropvalue - set a property in the CDF property file -.SH SYNOPSIS -setpropvalue -n name -v value [-x] -.HP 20 --n -name to configure -.HP 20 --v -value to set -.HP 20 --x -encrypt the value diff --git a/pgaas/src/stage/opt/app/pgaas/man/show_pg_is_in_recovery.man b/pgaas/src/stage/opt/app/pgaas/man/show_pg_is_in_recovery.man deleted file mode 100644 index d9391d4..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/show_pg_is_in_recovery.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH show_pg_is_in_recovery 1PG {{DATE}} ONAP ONAP -.SH NAME -show_pg_is_in_recovery - convenience program to extract info from the database -.SH SYNOPSIS -show_pg_is_in_recovery -.SH DESCRIPTION -show_pg_is_in_recovery is a convenience program to extract the pg_is_in_recovery information from the database. diff --git a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_activity.man b/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_activity.man deleted file mode 100644 index 3c8e829..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_activity.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH show_pg_stat_activity 1PG {{DATE}} ONAP ONAP -.SH NAME -show_pg_stat_activity - convenience program to extract info from the database -.SH SYNOPSIS -show_pg_stat_activity -.SH DESCRIPTION -show_pg_stat_activity is a convenience program to extract the pg_stat_activity information from the database. diff --git a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_archiver.man b/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_archiver.man deleted file mode 100644 index 8fc85e1..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_archiver.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH show_pg_stat_archiver 1PG {{DATE}} ONAP ONAP -.SH NAME -show_pg_stat_archiver - convenience program to extract info from the database -.SH SYNOPSIS -show_pg_stat_archiver -.SH DESCRIPTION -show_pg_stat_archiver is a convenience program to extract the pg_stat_archiver information from the database. diff --git a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_bgwriter.man b/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_bgwriter.man deleted file mode 100644 index 3b960d8..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_bgwriter.man +++ /dev/null @@ -1,20 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH show_pg_stat_bgwriter 1PG {{DATE}} ONAP ONAP -.SH NAME -show_pg_stat_bgwriter - convenience program to extract info from the database -.SH SYNOPSIS -show_pg_stat_bgwriter -.SH DESCRIPTION -show_pg_stat_bgwriter is a convenience program to extract the pg_stat_bgwriter information from the database. - diff --git a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_database.man b/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_database.man deleted file mode 100644 index b6e0e7a..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_database.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH show_pg_stat_database 1PG {{DATE}} ONAP ONAP -.SH NAME -show_pg_stat_database - convenience program to extract info from the database -.SH SYNOPSIS -show_pg_stat_database -.SH DESCRIPTION -show_pg_stat_database is a convenience program to extract the pg_stat_database information from the database. diff --git a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_database_conflicts.man b/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_database_conflicts.man deleted file mode 100644 index 78e29c3..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_database_conflicts.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH show_pg_stat_database_conflicts 1PG {{DATE}} ONAP ONAP -.SH NAME -show_pg_stat_database_conflicts - convenience program to extract info from the database -.SH SYNOPSIS -show_pg_stat_database_conflicts -.SH DESCRIPTION -show_pg_stat_database_conflicts is a convenience program to extract the pg_stat_database_conflicts information from the database. diff --git a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_user_indexes.man b/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_user_indexes.man deleted file mode 100644 index 3b76d21..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_user_indexes.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH show_pg_stat_user_indexes 1PG {{DATE}} ONAP ONAP -.SH NAME -show_pg_stat_user_indexes - convenience program to extract info from the database -.SH SYNOPSIS -show_pg_stat_user_indexes -.SH DESCRIPTION -show_pg_stat_user_indexes is a convenience program to extract the pg_stat_user_indexes information from the database. diff --git a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_user_tables.man b/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_user_tables.man deleted file mode 100644 index 2356ebd..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_user_tables.man +++ /dev/null @@ -1,20 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH show_pg_stat_user_indexes 1PG {{DATE}} ONAP ONAP -.SH NAME -show_pg_stat_user_tables - convenience program to extract info from the database -.SH SYNOPSIS -show_pg_stat_user_tables -.SH DESCRIPTION -show_pg_stat_user_tables is a convenience program to extract the pg_stat_user_tables information from the database. - diff --git a/pgaas/src/stage/opt/app/pgaas/man/show_pg_statio_user_functions.man b/pgaas/src/stage/opt/app/pgaas/man/show_pg_statio_user_functions.man deleted file mode 100644 index cd51933..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/show_pg_statio_user_functions.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH show_pg_statio_user_functions 1PG {{DATE}} ONAP ONAP -.SH NAME -show_pg_statio_user_functions - convenience program to extract info from the database -.SH SYNOPSIS -show_pg_statio_user_functions -.SH DESCRIPTION -show_pg_statio_user_functions is a convenience program to extract the pg_statio_user_functions information from the database. diff --git a/pgaas/src/stage/opt/app/pgaas/man/show_pg_statio_user_indexes.man b/pgaas/src/stage/opt/app/pgaas/man/show_pg_statio_user_indexes.man deleted file mode 100644 index 713e144..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/show_pg_statio_user_indexes.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH show_pg_statio_user_indexes 1PG {{DATE}} ONAP ONAP -.SH NAME -show_pg_statio_user_indexes - convenience program to extract info from the database -.SH SYNOPSIS -show_pg_statio_user_indexes -.SH DESCRIPTION -show_pg_statio_user_indexes is a convenience program to extract the pg_statio_user_indexes information from the database. diff --git a/pgaas/src/stage/opt/app/pgaas/man/show_pg_statio_user_sequences.man b/pgaas/src/stage/opt/app/pgaas/man/show_pg_statio_user_sequences.man deleted file mode 100644 index fce6db4..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/show_pg_statio_user_sequences.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH show_pg_statio_user_sequences 1PG {{DATE}} ONAP ONAP -.SH NAME -show_pg_statio_user_sequences - convenience program to extract info from the database -.SH SYNOPSIS -show_pg_statio_user_sequences -.SH DESCRIPTION -show_pg_statio_user_sequences is a convenience program to extract the pg_statio_user_sequences information from the database. diff --git a/pgaas/src/stage/opt/app/pgaas/man/show_pg_statio_user_tables.man b/pgaas/src/stage/opt/app/pgaas/man/show_pg_statio_user_tables.man deleted file mode 100644 index ec2cc5c..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/show_pg_statio_user_tables.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH show_pg_statio_user_tables 1PG {{DATE}} ONAP ONAP -.SH NAME -show_pg_statio_user_tables - convenience program to extract info from the database -.SH SYNOPSIS -show_pg_statio_user_tables -.SH DESCRIPTION -show_pg_statio_user_tables is a convenience program to extract the pg_statio_user_tables information from the database. diff --git a/pgaas/src/stage/opt/app/pgaas/man/start_maintenance_mode.man b/pgaas/src/stage/opt/app/pgaas/man/start_maintenance_mode.man deleted file mode 100644 index 8e098a4..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/start_maintenance_mode.man +++ /dev/null @@ -1,28 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH start_maintenance_mode 1PG {{DATE}} ONAP ONAP -.SH NAME -start_maintenance_mode - convert this system to maintenance mode -.SH SYNOPSIS -start_maintenance_mode -.SH DESCRIPTION -Take this system out of the normal rotation and mark it as being in maintenance mode. -This command may only be used on a secondary system and not on a master system. -After this command is run, the PostgreSQL server will be brought down, but may be -restarted manually using the pg_ctl_start. -Note that the health checks will not regard this system as being in the normal -rotation until the command stop_maintenance_mode is executed, allowing the DBA to perform -whatever is needed to perform a backup or other maintenance routines, -such as copying the database files. -.SH FILES -/var/run/postgresql/inmaintenance diff --git a/pgaas/src/stage/opt/app/pgaas/man/startpsql.man b/pgaas/src/stage/opt/app/pgaas/man/startpsql.man deleted file mode 100644 index 5bba06e..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/startpsql.man +++ /dev/null @@ -1,21 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH startpsq 1PG {{DATE}} ONAP ONAP -.SH NAME -startpsql - run the psql command -.SH SYNOPSIS -startpsql -.SH DESCRIPTION -Locate the psql command and run it. -.SH "SEE ALSO" -runpsql, runpsqll diff --git a/pgaas/src/stage/opt/app/pgaas/man/stop_maintenance_mode.man b/pgaas/src/stage/opt/app/pgaas/man/stop_maintenance_mode.man deleted file mode 100644 index 9ed24bc..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/stop_maintenance_mode.man +++ /dev/null @@ -1,24 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH stop_maintenance_mode 1PG {{DATE}} ONAP ONAP -.SH NAME -stop_maintenance_mode - convert this system to maintenance mode -.SH SYNOPSIS -stop_maintenance_mode -.SH DESCRIPTION -Mark this system as no longer being in maintenance mode, and -return this system back to the normal rotation. -This command may only be used on a secondary system and not on a master system. -This command will also restart the PostgreSQL server. -.SH FILES -/var/run/postgresql/inmaintenance diff --git a/pgaas/src/stage/opt/app/pgaas/man/todo b/pgaas/src/stage/opt/app/pgaas/man/todo deleted file mode 100644 index c2b57f8..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/todo +++ /dev/null @@ -1,5 +0,0 @@ -ls: cannot access ../man/gen-repmgr-info.man: No such file or directory -ls: cannot access ../man/pgaas-verify-install.man: No such file or directory -ls: cannot access ../man/pgwget.man: No such file or directory -ls: cannot access ../man/repmgrd-status-changes.man: No such file or directory -ls: cannot access ../man/verify_pg_privileges.man: No such file or directory diff --git a/pgaas/src/stage/opt/app/pgaas/man/update_var_run_isrw.man b/pgaas/src/stage/opt/app/pgaas/man/update_var_run_isrw.man deleted file mode 100644 index 98470f0..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/update_var_run_isrw.man +++ /dev/null @@ -1,23 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH startpsq 1PG {{DATE}} ONAP ONAP -.SH NAME -update_var_run_isrw - update the /var/run/postgresql/isrw file -.SH SYNOPSIS -update_var_run_isrw -.SH DESCRIPTION -This program updates the /var/run/postgresql/isrw file using the output of the isrw(1PG) command. -The file is updated 6 times separated by 10 seconds. -It is meant to be run from the postgres cron. -.SH "SEE ALSO" -isrw diff --git a/pgaas/src/testlock/.gitignore b/pgaas/src/testlock/.gitignore deleted file mode 100644 index 0618485..0000000 --- a/pgaas/src/testlock/.gitignore +++ /dev/null @@ -1 +0,0 @@ -testlock diff --git a/pgaas/src/testlock/makefile b/pgaas/src/testlock/makefile deleted file mode 100644 index 8e23640..0000000 --- a/pgaas/src/testlock/makefile +++ /dev/null @@ -1,59 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code 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. - -STAGEDIR=/dev/null -DISTPATH=/dev/null - -all: testlock - -TESTLOCK=./testlock - -ttestlock: testlock - @echo;echo should print usage list - -$(TESTLOCK) - @echo;echo should print usage list - -$(TESTLOCK) -? - @echo;echo should print missing lock filename - -$(TESTLOCK) -t 0 - @echo;echo should print missing command - -$(TESTLOCK) -t 0 /var/tmp/tl - @echo;echo should run immediately - $(TESTLOCK) -t 0 /var/tmp/tl /bin/echo hello - @echo;echo grab lock, done SHOULD run after lock becomes available - date;$(TESTLOCK) /var/tmp/tl sleep 5 & sleep 1; $(TESTLOCK) /var/tmp/tl /bin/echo done;date - $(TESTLOCK) /var/tmp/tl true # cleanup - @echo;echo grab lock, not waiting should NOT run - date;$(TESTLOCK) /var/tmp/tl sleep 5 & sleep 1; $(TESTLOCK) -t 0 /var/tmp/tl /bin/echo not waiting;date - $(TESTLOCK) /var/tmp/tl true # cleanup - @echo;echo grab lock, echo should NOT run because lock does not become available in 4 seconds - date;$(TESTLOCK) /var/tmp/tl sleep 5 & sleep 1; $(TESTLOCK) -t 3 /var/tmp/tl /bin/echo waiting up to 3 seconds;date - $(TESTLOCK) /var/tmp/tl true # cleanup - @echo;echo grab lock, echo should SILENTLY NOT run because lock does not become available in 4 seconds - date;$(TESTLOCK) /var/tmp/tl sleep 5 & sleep 1; $(TESTLOCK) -t 3 -s /var/tmp/tl /bin/echo waiting up to 3 seconds;date - $(TESTLOCK) /var/tmp/tl true # cleanup - @echo;echo grab lock, echo SHOULD run after lock becomes available in 5 seconds - date;$(TESTLOCK) /var/tmp/tl sleep 5 & sleep 1; $(TESTLOCK) -t 10 /var/tmp/tl /bin/echo waiting up to 10 seconds;date - $(TESTLOCK) /var/tmp/tl true # cleanup - -testlock: testlock.c - gcc -o testlock testlock.c - -clean: - rm -f *~ - -clobber: clean - rm -f testlock - -stage: testlock - cp -p testlock $(STAGEDIR)/$(DISTPATH)/bin/testlock - chmod a+x $(STAGEDIR)/$(DISTPATH)/bin/testlock diff --git a/pgaas/src/testlock/testlock.1 b/pgaas/src/testlock/testlock.1 deleted file mode 100644 index 12dbb9d..0000000 --- a/pgaas/src/testlock/testlock.1 +++ /dev/null @@ -1,38 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code 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. -.TH testlock 1 "April 26 2006" "" "" -.SH NAME -testlock \- lock a file and run a command with the lock held -.SH SYNOPSIS -testlock [-v] [-t timeout] [-s] [-r exittcode] filename command args ... -.SH DESCRIPTION -.PP -Testlock will acquire a file lock and then execute a command while the lock is held. -If no timeout is provided, testlock will wait indefinitely until the file can be locked, -and then execute the command. -If a timeout is given, it will stop waiting after that many seconds have passed. -.SS Options -.IP -t -Abort if the lock cannot be acquired after -.I timeout -seconds. -If -.I timeout -is 0, the lock will be totally non-blocking. -.IP -s -Silently ignore errors with locking. -(Other errors will still be reported.) -.IP -r exitcode -If the lock cannot be acquired, use this exit code instead of the default exit code of 99. -.SH AUTHOR -Tony Hansen. diff --git a/pgaas/src/testlock/testlock.c b/pgaas/src/testlock/testlock.c deleted file mode 100644 index 41bea59..0000000 --- a/pgaas/src/testlock/testlock.c +++ /dev/null @@ -1,110 +0,0 @@ -/* - Usage: testlock [-t timeout] [-s] filename command args ... - - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code 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. - -*/ - -#include <sys/file.h> -#include <stdio.h> -#include <unistd.h> -#include <getopt.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <stdlib.h> -#include <stdbool.h> -#include <errno.h> -#include <string.h> - -void usage(const char *prog0, const char *msg) -{ - if (msg) fprintf(stderr, "%s\n", msg); - fprintf(stderr, "Usage: %s [-v] [-t timeout] [-s] [-r retcode] lock-filename command args ...\n", prog0); - fprintf(stderr, "-t ##\thow long to wait for a lock to be freed. 0 means exit immediately\n"); - fprintf(stderr, "-s\tsilently ignore errors with locking\n"); - fprintf(stderr, "-r ##\texit with this code when the lock fails\n"); - fprintf(stderr, "-v\tbe verbose\n"); - fprintf(stderr, "Note:\tlock-filename is created (if it does not exist) and truncated before locking.\n"); - fprintf(stderr, "\tlock-filename is not removed after the command finishes\n"); - exit(1); -} - -int main(int argc, char **argv) -{ - const char *prog0 = argv[0]; - - int c; - int timeout = -1; - bool silent = false; - bool verbose = false; - int nolockret = 99; - - while ((c = getopt(argc, argv, "t:r:sv?")) != -1) { - switch (c) { - case 's': silent = true; break; - case 't': timeout = atoi(optarg); break; - case 'r': nolockret = atoi(optarg); break; - case 'v': verbose = true; break; - default: usage(prog0, NULL); - } - } - - argc -= optind; - argv += optind; - - if (argc < 1) { - usage(prog0, "Missing lock filename"); - } else if (argc < 2) { - usage(prog0, "Missing command to run"); - } - - const char *lockFilename = *argv++; - if (verbose) printf("lockfilename=%s\n", lockFilename); - - int lockfd = creat(lockFilename, 0666); - if (lockfd < 0) { - fprintf(stderr, "Cannot open %s: %s\n", lockFilename, strerror(errno)); - exit(2); - } - - if (timeout < 0) { - /* wait forever */ - lockf(lockfd, F_LOCK, 0); - } else { - /* try each second (for up to timeout seconds) to get the lock */ - int lockret = lockf(lockfd, F_TLOCK, 0); - int count = 0; - while ((lockret < 0) && (count++ < timeout)) { - sleep(1); - lockret = lockf(lockfd, F_TLOCK, 0); - } - if (lockret < 0) { - if (!silent) { - fprintf(stderr, "Cannot lock %s: %s\n", lockFilename, strerror(errno)); - } - exit(nolockret); - } - } - - /* now execute the given command */ - if (verbose) { - char **a = argv; - printf("calling program '%s'\n", *a); - while (*++a) { - printf("with argument '%s'\n", *a); - } - } - execvp(argv[0], argv); -} diff --git a/pgaas/src/testlock/testlock.md b/pgaas/src/testlock/testlock.md deleted file mode 100644 index 8ec2a48..0000000 --- a/pgaas/src/testlock/testlock.md +++ /dev/null @@ -1,27 +0,0 @@ -# testlock 1 "April 26 2006" "" "" -## NAME -testlock \- lock a file and run a command with the lock held -## SYNOPSIS -testlock [-v] [-t timeout] [-s] [-r exittcode] filename command args ... -## DESCRIPTION - -Testlock will acquire a file lock and then execute a command while the lock is held. -If no timeout is provided, testlock will wait indefinitely until the file can be locked, -and then execute the command. -If a timeout is given, it will stop waiting after that many seconds have passed. - -### Options - --t -Abort if the lock cannot be acquired after _timeout_ seconds. -If _timeout_ is 0, the lock will be totally non-blocking. - --s -Silently ignore errors with locking. -(Other errors will still be reported.) - --r exitcode -If the lock cannot be acquired, use this exit code instead of the default exit code of 99. - -## AUTHOR -Tony Hansen. |