Skip to content

Commit

Permalink
Merge pull request #142 from coopdevs/feat-odoo-server-wide-modules
Browse files Browse the repository at this point in the history
Handle odoo server wide modules
  • Loading branch information
danypr92 authored Dec 20, 2022
2 parents 0b51a65 + 84895d8 commit e62751d
Show file tree
Hide file tree
Showing 5 changed files with 84 additions and 35 deletions.
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,17 @@ odoo_role_enable_queue_job: true
This option add to the Odoo configuration file the option to enable queue\_job as a new thread/process: https://github.com/OCA/queue/blob/12.0/queue\_job/README.rst#id12
* Server-wide modules
If you need to install some wide-server modules apart from `db_filter` and `queue_job`, use:
```yaml
odoo_role_odoo_server_wide_modules: ['module1', 'module2']
```

By default, it configures as a server-wide modules `web` and `base` -as long as they are mandatory from Odoo v12- in every case and `db_filter` and `queue_job` if the corresponding variables are set to `true` .

* Workers configuration

You can also define how many workers you want to use to execute the jobs:
```yaml
odoo_role_channels: root:2
Expand Down
2 changes: 2 additions & 0 deletions defaults/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ odoo_role_enabled_rest_framework: false
odoo_role_enable_queue_job: false
# Support for Dbfilter From Header https://github.com/OCA/server-tools/tree/12.0/dbfilter_from_header
odoo_role_enable_dbfilter_from_header: false
# Support for loading system-wide modules
odoo_role_odoo_server_wide_modules: ["base","web"]

# Customize the Odoo timeouts
odoo_role_limit_time_cpu: 60
Expand Down
73 changes: 45 additions & 28 deletions tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,51 @@
shell: "cd {{ odoo_role_odoo_path }} && {{ odoo_role_odoo_python_path }} setup.py install"
when: odoo_role_desired_tar_download.changed or odoo_role_desired_git_download.changed

- name: Populate community db modules
set_fact:
community_db_modules: "{{ community_db_modules | default({}) | combine ({ item : odoo_role_odoo_community_modules_dict[item] | default([]) }) }}"
with_items: "{{ odoo_role_odoo_dbs }}"

- name: Populate community shared modules
set_fact:
community_shared_modules: "{{ odoo_role_odoo_community_modules_dict['shared'] | default(odoo_role_odoo_community_modules.split(',')) }}"

- name: Join db + shared community modules
set_fact:
community_modules: "{{ community_modules | default({}) | combine ({ item : community_shared_modules + community_db_modules[item] }) }}"
with_items: "{{ odoo_role_odoo_dbs }}"

- name: Populate core db modules
set_fact:
core_db_modules: "{{ core_db_modules | default({}) | combine ({ item : odoo_role_odoo_core_modules_dict[item] | default([]) }) }}"
with_items: "{{ odoo_role_odoo_dbs }}"

- name: Populate core shared modules
set_fact:
core_shared_modules: "{{ odoo_role_odoo_core_modules_dict['shared'] | default(odoo_role_odoo_core_modules.split(',')) }}"

- name: Join db + shared core modules
set_fact:
core_modules: "{{ core_modules | default({}) | combine ({ item : core_shared_modules + core_db_modules[item] }) }}"
with_items: "{{ odoo_role_odoo_dbs }}"

- name: Join core + community modules
set_fact:
modules: "{{ modules | default([]) + item.value }}"
with_dict:
- "{{ core_modules }}"
- "{{ community_modules }}"
no_log: True

- name: Create unique list of modules
set_fact:
all_modules: "{{ modules | unique | sort }}"
when: modules is defined

- name: Check server wide configuration
import_tasks: server-wide-conf.yml
tags: ['server-wide']

- name: Add Odoo config
become: true
template:
Expand Down Expand Up @@ -169,34 +214,6 @@

- import_tasks: community-modules.yml

- name: Populate community db modules
set_fact:
community_db_modules: "{{ community_db_modules | default({}) | combine ({ item : odoo_role_odoo_community_modules_dict[item] | default([]) }) }}"
with_items: "{{ odoo_role_odoo_dbs }}"

- name: Populate community shared modules
set_fact:
community_shared_modules: "{{ odoo_role_odoo_community_modules_dict['shared'] | default(odoo_role_odoo_community_modules.split(',')) }}"

- name: Join db + shared community modules
set_fact:
community_modules: "{{ community_modules | default({}) | combine ({ item : community_shared_modules + community_db_modules[item] }) }}"
with_items: "{{ odoo_role_odoo_dbs }}"

- name: Populate core db modules
set_fact:
core_db_modules: "{{ core_db_modules | default({}) | combine ({ item : odoo_role_odoo_core_modules_dict[item] | default([]) }) }}"
with_items: "{{ odoo_role_odoo_dbs }}"

- name: Populate core shared modules
set_fact:
core_shared_modules: "{{ odoo_role_odoo_core_modules_dict['shared'] | default(odoo_role_odoo_core_modules.split(',')) }}"

- name: Join db + shared core modules
set_fact:
core_modules: "{{ core_modules | default({}) | combine ({ item : core_shared_modules + core_db_modules[item] }) }}"
with_items: "{{ odoo_role_odoo_dbs }}"

- name: Force update odoo modules
become: true
become_user: "{{ odoo_role_odoo_user }}"
Expand Down
25 changes: 25 additions & 0 deletions tasks/server-wide-conf.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
---
- name: Generate server wide modules configuration (db_filter_from_header)
set_fact:
odoo_role_odoo_server_wide_modules: "{{ odoo_role_odoo_server_wide_modules + ['dbfilter_from_header'] }}"
when: odoo_role_enable_dbfilter_from_header | bool
tags: ['server-wide']

- name: Check requirements for db_filter (odoo_role_channels)
ansible.builtin.fail:
msg: "Role Error: odoo_role_channels var is needed when queue_job is activated" # not required. The customized message that is printed. If omitted, prints a generic message.
when: odoo_role_enable_dbfilter_from_header | bool and odoo_role_channels is not defined
tags: ['server-wide']

- name: Generate server wide modules configuration (queue_job)
ansible.builtin.set_fact:
odoo_role_odoo_server_wide_modules: "{{ odoo_role_odoo_server_wide_modules + ['queue_job'] }}"
when: odoo_role_enable_queue_job | bool
tags: ['server-wide']

- name: Check if server_wide modules are declared
ansible.builtin.fail:
msg: "Role Error: {{ item }} module is configured as a server wide module but it is not present in modules dict"
with_items: "{{ odoo_role_odoo_server_wide_modules }}"
when: (item not in all_modules)
tags: ['server-wide']
8 changes: 1 addition & 7 deletions templates/odoo.conf.j2
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,7 @@
logfile = {{ odoo_role_odoo_log_path }}/odoo.log
{% endif %}
log_level = {{ odoo_role_odoo_log_level }}
{% if odoo_role_enable_queue_job and not odoo_role_enable_dbfilter_from_header %}
server_wide_modules = web,queue_job
{% elif not odoo_role_enable_queue_job and odoo_role_enable_dbfilter_from_header %}
server_wide_modules = web,dbfilter_from_header
{% elif odoo_role_enable_queue_job and odoo_role_enable_dbfilter_from_header %}
server_wide_modules = web,dbfilter_from_header,queue_job
{% endif %}
server_wide_modules = {{ odoo_role_odoo_server_wide_modules | join(',') }}
; Custom Modules
addons_path = {{ odoo_role_odoo_modules_path }}, {{ odoo_role_odoo_path }}/addons

Expand Down

0 comments on commit e62751d

Please sign in to comment.