Alex Lourie has uploaded a new change for review.

Change subject: packaging: added option to provide dbowner to validators
......................................................................

packaging: added option to provide dbowner to validators

This patch is an amendment to gerrit.ovirt.org/12512 and
it adds an option to provide validators with db owner user.

It can be then used to update ownership on all objects in
the database.

Change-Id: I5145115548826f419b105770ead202e808351013
Bug-Url: https://bugzilla.redhat.com/893459
Signed-off-by: Alex Lourie <alou...@redhat.com>
---
M backend/manager/tools/dbutils/common.sh
M backend/manager/tools/dbutils/encodingvalidator.sh
M backend/manager/tools/dbutils/fkvalidator.sh
M backend/manager/tools/dbutils/validatedb.sh
M packaging/fedora/setup/engine-upgrade.py
5 files changed, 41 insertions(+), 4 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/09/14609/1

diff --git a/backend/manager/tools/dbutils/common.sh 
b/backend/manager/tools/dbutils/common.sh
index 4205bbe..d86fcea 100755
--- a/backend/manager/tools/dbutils/common.sh
+++ b/backend/manager/tools/dbutils/common.sh
@@ -6,6 +6,7 @@
     PORT="5432"
     DATABASE="engine"
     USERNAME="engine"
+    DBOBJECT_OWNER="engine"
     VERBOSE=false
     LOGFILE="$ME.log"
 
@@ -20,3 +21,25 @@
     export PGPASSFILE
 }
 
+fn_db_set_dbobjects_ownership() {
+    cmd="select c.relname \
+         from   pg_class c join pg_roles r on r.oid = c.relowner join 
pg_namespace n on n.oid = c.relnamespace \
+         where  c.relkind in ('r','v','S') \
+         and    n.nspname = 'public' and r.rolname != '${DBOBJECT_OWNER}';"
+    res=$(execute_command "${cmd}" engine ${SERVERNAME} ${PORT})
+    if [ -n "${res}" ]; then
+        cmd=""
+        for tab in $(echo $res); do
+            cmd=${cmd}"alter table $tab owner to ${DBOBJECT_OWNER}; "
+        done
+        if [ -n "${cmd}" ]; then
+            echo -n "Changing ownership of objects in database '$DATABASE' to 
owner '$DBOBJECT_OWNER' ... "
+            res=$(execute_command "${cmd}" engine ${SERVERNAME} ${PORT})
+            if [ $? -eq 0 ]; then
+                echo "completed successfully."
+            else
+                return 1
+            fi
+        fi
+    fi
+}
diff --git a/backend/manager/tools/dbutils/encodingvalidator.sh 
b/backend/manager/tools/dbutils/encodingvalidator.sh
index bdf7d31..68185a8 100755
--- a/backend/manager/tools/dbutils/encodingvalidator.sh
+++ b/backend/manager/tools/dbutils/encodingvalidator.sh
@@ -40,7 +40,7 @@
 FIXIT=false
 QUIET=false
 
-while getopts hs:u:p:l:d:qfv option; do
+while getopts hs:u:p:l:d:o:qfv option; do
     case $option in
         s) SERVERNAME=$OPTARG;;
         p) PORT=$OPTARG;;
@@ -102,7 +102,7 @@
 encoding=$(get)
 
 if [[ "${encoding}" = "UTF8" || "${encoding}" = "utf8" ]]; then
-   echo "Database template1 has already UTF8 default encoding configured. 
nothing to do, exiting..."
+   echo "Database template1 has UTF8 default encoding configured. Nothing to 
do."
    exit 0
 elif [ "${FIXIT}" = "false" ]; then
    echo "Database template1 is configured with an incompatible encoding: 
${encoding}"
diff --git a/backend/manager/tools/dbutils/fkvalidator.sh 
b/backend/manager/tools/dbutils/fkvalidator.sh
index 106807d..1f52628 100755
--- a/backend/manager/tools/dbutils/fkvalidator.sh
+++ b/backend/manager/tools/dbutils/fkvalidator.sh
@@ -28,12 +28,13 @@
 
 
 usage() {
-    printf "Usage: ${ME} [-h] [-s SERVERNAME [-p PORT]] [-d DATABASE] [-u 
USERNAME] [-l LOGFILE] [-f] [-q] [-v]\n"
+    printf "Usage: ${ME} [-h] [-s SERVERNAME [-p PORT]] [-d DATABASE] [-u 
USERNAME] [-o DBOWNER] [-l LOGFILE] [-f] [-q] [-v]\n"
     printf "\n"
     printf "\t-s SERVERNAME - The database servername for the database  (def. 
${SERVERNAME})\n"
     printf "\t-p PORT       - The database port for the database        (def. 
${PORT})\n"
     printf "\t-d DATABASE   - The database name                         (def. 
${DATABASE})\n"
     printf "\t-u USERNAME   - The username for the database             (def. 
engine)\n"
+    printf "\t-o DBOWNER    - The owner of the database                 (def. 
engine)\n"
     printf "\t-l LOGFILE    - The logfile for capturing output          (def. 
${LOGFILE})\n"
     printf "\t-f            - Fix the non consistent data by removing it from 
DB.\n"
     printf "\t-v            - Turn on verbosity                         
(WARNING: lots of output)\n"
@@ -78,6 +79,7 @@
         s) SERVERNAME=$OPTARG;;
         p) PORT=$OPTARG;;
         d) DATABASE=$OPTARG;;
+        o) DBOBJECT_OWNER=$OPTARG;;
         u) USERNAME=$OPTARG;;
         l) LOGFILE=$OPTARG;;
         f) FIXIT=true;;
@@ -90,6 +92,7 @@
 
 # Install fkvalidator procedures
 psql -w -U ${USERNAME} -h ${SERVERNAME} -p ${PORT} -f ./fkvalidator_sp.sql 
${DATABASE} > /dev/null
+fn_db_set_dbobjects_ownership()
 
 if [[ "${FIXIT}" = "true" && ! "${QUIET}" = "true" ]]; then
     echo "Caution, this operation should be used with care. Please contact 
support prior to running this command"
diff --git a/backend/manager/tools/dbutils/validatedb.sh 
b/backend/manager/tools/dbutils/validatedb.sh
index de0c116..907f691 100755
--- a/backend/manager/tools/dbutils/validatedb.sh
+++ b/backend/manager/tools/dbutils/validatedb.sh
@@ -10,6 +10,8 @@
         write log to this file.
     --user=username
         user name to use to connect to the DB
+    --dbowner=username
+        user name to use to create objects in the DB
     --host=hostname
         server to use to connect to the DB
     --port=port
@@ -34,6 +36,9 @@
         ;;
         --user=*)
             USERNAME="-u ${v}"
+        ;;
+        --dbowner=*)
+            DBOWNER="-o ${v}"
         ;;
         --host=*)
             SERVERNAME="-s ${v}"
@@ -60,6 +65,6 @@
 validationlist="fkvalidator.sh encodingvalidator.sh"
 
 for script in ${validationlist}; do
-        $dbutils/${script} ${USERNAME} ${SERVERNAME} ${PORT} ${DATABASE} -q 
${extra_params} || error=1
+        $dbutils/${script} ${USERNAME} ${DBOWNER} ${SERVERNAME} ${PORT} 
${DATABASE} -q ${extra_params} || error=1
 done
 exit ${error}
diff --git a/packaging/fedora/setup/engine-upgrade.py 
b/packaging/fedora/setup/engine-upgrade.py
index f348d5d..49fd8dd 100755
--- a/packaging/fedora/setup/engine-upgrade.py
+++ b/packaging/fedora/setup/engine-upgrade.py
@@ -1088,6 +1088,9 @@
         "--user={admin}".format(
             admin=utils.getDbAdminUser(),
         ),
+        "--dbowner={dbowner}".format(
+            dbowner=SERVER_ADMIN,
+        ),
         "--host={host}".format(
             host=SERVER_NAME
         ),
@@ -1121,6 +1124,9 @@
         "--user={admin}".format(
             admin=utils.getDbAdminUser(),
         ),
+        "--dbowner={dbowner}".format(
+            dbowner=SERVER_ADMIN,
+        ),
         "--host={host}".format(
             host=SERVER_NAME
         ),


--
To view, visit http://gerrit.ovirt.org/14609
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I5145115548826f419b105770ead202e808351013
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Alex Lourie <alou...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to