Skip to main content

CLI tool to manage Odoo Major Upgrades

Project description

Gitlab CI codecov License: AGPL v3

PyPI - Python Version PyPI - Downloads GitLab last commit GitLab stars

odoo-openupgrade-wizard

Odoo Openupgrade Wizard is a tool that helps developpers to make major upgrade of Odoo Community Edition. (formely OpenERP). It works with Openupgrade OCA tools. (https://github.com/oca/openupgrade)

this tool is useful for complex migrations:

  • migrate several versions
  • take advantage of the migration to install / uninstall modules
  • execute sql requests or odoo shell scripts between each migration
  • analyse workload

It will create a migration environment (with all the code available) and provides helpers to run (and replay) migrations until it works.

  • To develop and contribute to the library, refer to the DEVELOP.md file.
  • Refer to the ROADMAP.md file to see the current limitation, bugs, and task to do.
  • See authors in the CONTRIBUTORS.md file.

Table of Contents

Installation

Prerequites:

  • The tools run on debian system
  • You should have docker installed on your system
  • Some features require extra packages. To have all the features available run:

Installation:

The library is available on PyPI.

To install it simply run :

pipx install odoo-openupgrade-wizard

(See alternative installation in DEVELOP.md file.)

Usage

Note:

the term odoo-openupgrade-wizard can be replaced by oow in all the command lines below.

Command: init

odoo-openupgrade-wizard init\
  --initial-version=10.0\
  --final-version=12.0\
  --project-name=my-customer-10-12\
  --extra-repository=OCA/web,OCA/server-tools

Initialize a folder to make a migration from a 10.0 and a 12.0 database. This will generate the following structure :

filestore/
log/
    2022_03_25__23_12_41__init.log
    ...
postgres_data/
scripts/
    step_1__update__10.0/
        pre-migration.sql
        post-migration.py
    step_2__upgrade__11.0/
        ...
    step_3__upgrade__12.0/
        ...
    step_4__update__12.0/
        ...
src/
    env_10.0/
        extra_debian_requirements.txt
        Dockerfile
        odoo.conf
        extra_python_requirements.txt
        repos.yml
        src/
    env_11.0/
        ...
    env_12.0/
        ...
config.yml
modules.csv

At this step, you should change the autogenerated files. You can use default files, if you have a very simple odoo instance without custom code, extra repositories, or dependencies...

Note:

  • In your repos.yml, preserve openupgrade and server-tools repositories to have all the features of the librairies available.
  • In your repos.yml file, the odoo project should be in ./src/odoo and the openupgrade project should be in ./src/openupgrade/ folder.

Command: pull-submodule

Prerequites: init

if you already have a repos.yml file on github / gitlab, it can be convenient to synchronize the repository, instead of copy past the repos.yml manually.

In that case, you can add extra values, in the config.yml file in the section

odoo_version_settings:
  12.0:
      repo_url: url_of_the_repo_that_contains_a_repos_yml_file
      repo_branch: 12.0
      repo_file_path: repos.yml

then run following command :

odoo-openupgrade-wizard pull-submodule

Command: get-code

Prerequites: init

odoo-openupgrade-wizard get-code

This command will simply get all the Odoo code required to run all the steps for your migration with the gitaggregate tools.

The code is defined in the repos.yml of each environment folders. (or in the directory repo_submodule if you use pull-submodule feature.)

Note

  • This step could take a big while !

Optional arguments

if you want to update the code of some given versions, you can provide an extra parameter:

odoo-openupgrade-wizard get-code --versions 10.0,11.0

Command: docker-build

Prerequites: init + get-code

This will build local docker images that will be used in the following steps.

At this end of this step executing the following command should show a docker image per version.

$ docker images --filter "reference=odoo-openupgrade-wizard-*"

REPOSITORY                                                 TAG       IMAGE ID       CREATED       SIZE
odoo-openupgrade-wizard-image---my-customer-10-12---12.0   latest    ef664c366208   2 weeks ago   1.39GB
odoo-openupgrade-wizard-image---my-customer-10-12---11.0   latest    24e283fe4ae4   2 weeks ago   1.16GB
odoo-openupgrade-wizard-image---my-customer-10-12---10.0   latest    9d94dce2bd4e   2 weeks ago   924MB

Optional arguments

  • if you want to (re)build an image for some given versions, you can provide an extra parameter: --versions 10.0,12.0

Note

  • This step could take a big while also !

Command: run (BETA)

Prerequites: init + get-code + build

odoo-openupgrade-wizard run\
    --step 1\
    --database DB_NAME

Run an Odoo instance with the environment defined by the step argument.

The database will be created, if it doesn't exists.

if stop-after-init is disabled, the odoo instance will be available at your host, at the following url : http://localhost:9069 (Port depends on your host_odoo_xmlrpc_port setting of your config.yml file)

Optional arguments

  • You can add --init-modules=purchase,sale to install modules.

  • You can add stop-after-init flag to turn off the process at the end of the installation.

Command: install-from-csv

Prerequites: init + get-code + build

odoo-openupgrade-wizard install-from-csv\
    --database DB_NAME

Install the list of the modules defined in your modules.csv files on the given database.

The database will be created, if it doesn't exists.

To get a correct modules.csv file, the following query can be used:

psql -c "copy (select name, shortdesc from ir_module_module where state = 'installed' order by 1) to stdout csv" coopiteasy

Command: upgrade (BETA)

Prerequites: init + get-code + build

odoo-openupgrade-wizard upgrade\
    --database DB_NAME

Realize an upgrade of the database from the initial version to the final version, following the different steps.

For each step, it will :

  1. Execute the pre-migration.sql of the step.
  2. Realize an "update all" (in an upgrade or update context)
  3. Execute the scripts via XML-RPC (via odoorpc) defined in the post-migration.py file.

Optional arguments

  • You can add --first-step=2 to start at the second step.

  • You can add --last-step=3 to end at the third step.

Command: generate-module-analysis (BETA)

Prerequites: init + get-code + build

odoo-openupgrade-wizard generate-module-analysis\
    --database DB_NAME
    --step 2
    --modules MODULE_LIST

Realize an analyze between the target version (in parameter via the step argument) and the previous version. It will generate analysis_file.txt files present in OpenUpgrade project. You can also use this fonction to analyze differences for custom / OCA modules between several versions, in case of refactoring.

Command: estimate-workload

Prerequites: init + get-code

odoo-openupgrade-wizard estimate-workload

Generate an HTML file name analysis.html with all the information regarding the work to do for the migration.

  • checks that the modules are present in each version. (by managing the renaming or merging of modules)
  • check that the analysis and migration have been done for the official modules present in odoo/odoo

Command: psql

Prerequites: init

odoo-openupgrade-wizard psql
    --database DB_NAME
    --command "SQL_REQUEST"

Execute an SQL Request on the target database.

Optional arguments

  • If no database is provided, default postgres database will be used. exemple:
odoo-openupgrade-wizard psql --command "\l";

Result:

                              List of databases
    Name    | Owner | Encoding |  Collate   |   Ctype    | Access privileges
------------+-------+----------+------------+------------+-------------------
 postgres   | odoo  | UTF8     | en_US.utf8 | en_US.utf8 |
 template0  | odoo  | UTF8     | en_US.utf8 | en_US.utf8 | =c/odoo          +
            |       |          |            |            | odoo=CTc/odoo
 template1  | odoo  | UTF8     | en_US.utf8 | en_US.utf8 | =c/odoo          +
            |       |          |            |            | odoo=CTc/odoo
 test_psql  | odoo  | UTF8     | en_US.utf8 | en_US.utf8 |

Note : Pager is enabled by default.

  • you can pass extra psql arguments inline.
odoo-openupgrade-wizard psql
    --database=test_psql
    --command "select id, name from res_partner where name ilike '%admin%';"
    -H

Result:

<table border="1">
  <tr>
    <th align="center">id</th>
    <th align="center">name</th>
  </tr>
  <tr valign="top">
    <td align="right">3</td>
    <td align="left">Administrator</td>
  </tr>
</table>
<p>(1 row)<br />
</p>

See all the options here https://www.postgresql.org/docs/current/app-psql.html

Command: copydb

Prerequites: init

odoo-openupgrade-wizard copydb
    --source DB_NAME
    --dest NEW_DB_NAME

Create an Odoo database by copying an existing one.

This script copies using postgres CREATEDB WITH TEMPLATE. It also copies the filestore.

Command: dropdb

Prerequites: init

odoo-openupgrade-wizard dropdb
    --database DB_NAME

Delete an Odoo database and its filestore.

This command will always success even if DB_NAME does not exists.

Command: dumpdb

Prerequites: init

odoo-openupgrade-wizard dumpdb
    --database DB_NAME
    --database-path DATABASE_PATH
    --filestore-path FILESTORE_PATH

Dump the database DB_NAME to DATABASE_PATH and export the filestore related to DB_NAME into FILESTORE_PATH. To choose the format of the backup files look at the --database-format and --filestore-format.

WARNING: DATABASE_PATH should be a sub directory of the project path in orter to have the postgresql container able to write the dump file. For example, the project path is /path/to/myproject (where you run the init command), then DATABASE_PATH can be any of the subdirectory of /path/to/myproject.

Optional arguments

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

odoo_openupgrade_wizard-0.7.0.tar.gz (42.1 kB view hashes)

Uploaded Source

Built Distribution

odoo_openupgrade_wizard-0.7.0-py3-none-any.whl (54.8 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page