#! /bin/sh # # Copyright (c) 2019,2024 Red Hat. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # for more details. # # Upgrade an older (perl) postgresql PMDA to latest (python) version # . $PCP_DIR/etc/pcp.env if grep -q ^postgresql "$PCP_PMCDCONF_PATH" 2>/dev/null then if grep -q '^postgresql.*perl ' "$PCP_PMCDCONF_PATH" 2>/dev/null then # convert original perl implementation to python sed -i $PCP_PMCDCONF_PATH 2>/dev/null \ -e "s,perl $PCP_PMDAS_DIR/postgresql/pmdapostgresql.pl,$PCP_PYTHON_PROG $PCP_PMDAS_DIR/postgresql/pmdapostgresql.python,g" fi if grep -q ^postgresql "$PCP_PMCDCONF_PATH" 2>/dev/null then if grep ^postgresql "$PCP_PMCDCONF_PATH" | grep -q "$PCP_PYTHON_PROG" 2>/dev/null then : # already using $PCP_PYTHON_PROG, leave this line untouched else # convert hard-coded python binary to PCP_PYTHON_PROG sed -i $PCP_PMCDCONF_PATH 2>/dev/null \ -e "s,python3 $PCP_PMDAS_DIR/postgresql/,$PCP_PYTHON_PROG $PCP_PMDAS_DIR/postgresql/,g" \ -e "s,python $PCP_PMDAS_DIR/postgresql/,$PCP_PYTHON_PROG $PCP_PMDAS_DIR/postgresql/,g" \ # end fi fi fi perlpath=`which $PCP_PERL_PROG` original="$PCP_PMDAS_DIR/postgresql/postgresql.conf" upgraded="$PCP_PMDAS_DIR/postgresql/pmdapostgresql.conf" if [ -x "$perlpath" -a -f "$original" ] then mv -f "$upgraded" "$upgraded".saved # # Extract perl parameters in the way the original PMDA did; then # convert old format into new and finally move old config aside. # "$perlpath" > "$upgraded" << EOF my \$database = undef; # default: 'dbi:Pg:dbname=postgres;host=host;port=port'; my \$username = undef; # default: 'postgres'; -- DB username for DB login my \$password = undef; # default: ''; -- DBI parameter, often unused for postgres my \$os_user = undef; # default: ''; -- O/S user to run the PMDA as eval \`cat $PCP_PMDAS_DIR/postgresql/postgresql.conf\`; exit 0 unless defined(\$database) or defined(\$username) or defined(\$password) or defined(\$os_user); print "[authentication]\n"; if (defined(\$database)) { my (\$host, \$port, \$dbname) = (\$database, \$database, \$database); \$host =~ s/.*host=(\w+).*/\$1/g; if (\$host eq '' or \$host eq \$database) { print "host=local\n"; } else { print "host=\$host\n"; } \$port =~ s/.*port=(\d+).*/\$1/g; if (\$port eq '' or \$port eq \$database) { print "port=5432\n"; } else { print "port=\$port\n"; } \$dbname =~ s/.*dbname=(\w+).*/\$1/g; if (\$dbname eq '' or \$host eq \$database) { print "dbname=postgres\n"; } else { print "dbname=\$dbname\n"; } } else { print "dbname=postgres\n"; print "host=local\n"; print "port=5432\n"; } \$username='postgres' unless (defined(\$username) and \$username ne ''); print "user=\$username\n"; \$password='password' unless (defined(\$password) and \$password ne ''); print "password=\$password\n"; \$os_user='postgres' unless (defined(\$os_user) and \$os_user ne ''); print "osuser=\$os_user\n"; EOF chmod 600 "$upgraded" mv -f "$original" "$original".saved fi exit 0