blob: b828121cbd3e64014d2581912c9eadc6348a6779 [file] [log] [blame]
.. This work is licensed under a Creative Commons Attribution
.. 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
Using Policy DB Migrator
########################
Policy DB Migrator is a set of shell scripts used to
install the database tables required to run ONAP Policy Framework.
.. note::
Currently the Istanbul versions of the PAP and API components require
``db-migrator`` to run prior to initialization.
Package contents
================
Policy DB Migrator is run as a docker container and consists of the following scripts:
.. code::
:number-lines:
prepare_upgrade.sh
prepare_downgrade.sh
db-migrator
``prepare_upgrade.sh`` is included as part of the docker image and is used
to copy the upgrade sql files to the run directory.
This script takes one parameter: <SCHEMA NAME>.
``prepare_downgrade.sh`` is included as part of the docker image and is used
to copy the downgrade sql files to the run directory.
This script takes one parameter: <SCHEMA NAME>.
``db-migrator`` is included as part of the docker image and is used
to run either the upgrade or downgrade operation depending on user requirements.
This script can take up to four parameters:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Parameter Name
- Parameter flag
- Value (example)
* - operation
- -o
- upgrade/downgrade/report
* - schema
- -s
- policyadmin
* - to
- -t
- 0800/0900
* - from
- -f
- 0800/0900
The container also consists of several sql files which are used to upgrade/downgrade
the policy database.
The following environment variables need to be set to enable ``db-migrator``
to run and connect to the database.
.. list-table::
:widths: 20 20
:header-rows: 1
* - Name
- Value (example)
* - SQL_HOST
- mariadb
* - SQL_DB
- policyadmin
* - SQL_USER
- policy_user
* - SQL_PASSWORD
- policy_user
* - POLICY_HOME
- /opt/app/policy
Prepare Upgrade
===============
Prior to upgrading the following script is run:
.. code::
/opt/app/policy/bin/prepare_upgrade.sh <SCHEMA NAME>
This will copy the upgrade files from ``/home/policy/sql`` to ``$POLICY_HOME/etc/db/migration/<SCHEMA NAME>/sql/``
Each individual sql file that makes up that release will be run as part of the upgrade.
Prepare Downgrade
=================
Prior to downgrading the following script is run:
.. code::
/opt/app/policy/bin/prepare_downgrade.sh <SCHEMA NAME>
This will copy the downgrade files from ``/home/policy/sql`` to ``$POLICY_HOME/etc/db/migration/<SCHEMA NAME>/sql/``
Each individual sql file that makes up that release will be run as part of the downgrade.
Upgrade
=======
.. code::
/opt/app/policy/bin/db-migrator -s <SCHEMA NAME> -o upgrade -f 0800 -t 0900
If the ``-f`` and ``-t`` flags are not specified, the script will attempt to run all available
sql files greater than the current version.
The script will return either 1 or 0 depending on successful completion.
Downgrade
=========
.. code::
/opt/app/policy/bin/db-migrator -s <SCHEMA NAME> -o downgrade -f 0900 -t 0800
If the ``-f`` and ``-t`` flags are not specified, the script will attempt to run all available
sql files less than the current version.
The script will return either 1 or 0 depending on successful completion.
Logging
=======
After every upgrade/downgrade ``db-migrator`` runs the report operation to show the
contents of the db-migrator log table.
.. code::
/opt/app/policy/bin/db-migrator -s <SCHEMA NAME> -o report
Console output will also show the sql script command as in the example below:
.. code::
upgrade 0100-jpapdpgroup_properties.sql
--------------
CREATE TABLE IF NOT EXISTS jpapdpgroup_properties (name VARCHAR(120) NULL, version VARCHAR(20) NULL,
PROPERTIES VARCHAR(255) NULL, PROPERTIES_KEY VARCHAR(255) NULL)
migration schema
================
The migration schema contains two tables which belong to ``db-migrator``.
* schema_versions - table to store the schema version currently installed by ``db-migrator``
.. list-table::
:widths: 20 20
:header-rows: 1
* - name
- version
* - policyadmin
- 0900
* policyadmin_schema_changelog - table which stores a record of each sql file that has been run
.. list-table::
:widths: 10 40 10 10 10 20 10 20
:header-rows: 1
* - ID
- script
- operation
- from_version
- to_version
- tag
- success
- atTime
* - 1
- 0100-jpapdpgroup_properties.sql
- upgrade
- 0
- 0800
- 1309210909250800u
- 1
- 2021-09-13 09:09:26
* ID: Sequence number of the operation
* script: name of the sql script which was run
* operation: operation type - upgrade/downgrade
* from_version: starting version
* to_version: target version
* tag: tag to identify operation batch
* success: 1 if script succeeded and 0 if it failed
* atTime: time script was run
Partial Upgrade/Downgrade
=========================
If an upgrade or downgrade ends with a failure status (success=0) the next time an upgrade
or downgrade is run it will start from the point of failure rather than re-run scripts
that succeeded. This allows the user to perform a partial upgrade or downgrade depending
on their requirements.
Running db-migrator
===================
The script that runs ``db-migrator`` is part of the database configuration and is in the following directory:
.. code::
oom/kubernetes/policy/resources/config/db_migrator_policy_init.sh
This script is mounted from the host file system to the policy-db-migrator container.
It is setup to run an upgrade by default.
.. code::
/opt/app/policy/bin/prepare_upgrade.sh ${SQL_DB}
/opt/app/policy/bin/db-migrator -s ${SQL_DB} -o upgrade
rc=$?
/opt/app/policy/bin/db-migrator -s ${SQL_DB} -o report
exit $rc
The following table describes what each line does:
.. list-table::
:widths: 30 30
:header-rows: 1
* - code
- description
* - /opt/app/policy/bin/prepare_upgrade.sh ${SQL_DB}
- prepare the upgrade scripts for the <SQL_DB> schema
* - /opt/app/policy/bin/db-migrator -s ${SQL_DB} -o upgrade
- run the upgrade
* - rc=$?
- assign the return code from db-migrator to a variable
* - /opt/app/policy/bin/db-migrator -s ${SQL_DB} -o report
- run the db-migrator report for the <SQL_DB> schema
* - exit $rc
- exit with the return code from db-migrator
To alter how ``db-migrator`` is run the first two lines need to be modified.
The first line can be changed to call either ``prepare_upgrade.sh`` or ``prepare_downgrade.sh``.
The second line can be changed to use different input parameters for ``db-migrator`` :
.. list-table::
:widths: 10 20 10
:header-rows: 1
* - flag
- value
- required
* - ``-o``
- upgrade/downgrade
- ``Y``
* - ``-s``
- ${SQL_DB}
- ``Y``
* - ``-f``
- current version (e.g. 0800)
- ``N``
* - ``-t``
- target version (e.g. 0900)
- ``N``
This is an example of how a downgrade from version 0900 to version 0800 could be run:
.. code::
/opt/app/policy/bin/prepare_downgrade.sh ${SQL_DB}
/opt/app/policy/bin/db-migrator -s ${SQL_DB} -o downgrade -f 0900 -t 0800
rc=$?
/opt/app/policy/bin/db-migrator -s ${SQL_DB} -o report
exit $rc
Additional Information
======================
If the target version of your upgrade or downgrade is the same as the current version,
no sql files are run.
If an upgrade is run on a database where tables already exist in the policy schema, the
current schema version is set to 0800 and only sql scripts from later versions are run.
.. note::
It is advisable to take a backup of your database prior to running this utility.
Please refer to the mariadb documentation on how to do this.
End of Document