diff --git a/README.md b/README.md index 2fd3988..ca49b98 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/defaults/main.yml b/defaults/main.yml index d680f59..704c2e0 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -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 diff --git a/tasks/main.yml b/tasks/main.yml index 597a015..1cbf8d4 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -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: @@ -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 }}" diff --git a/tasks/server-wide-conf.yml b/tasks/server-wide-conf.yml new file mode 100644 index 0000000..d025646 --- /dev/null +++ b/tasks/server-wide-conf.yml @@ -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'] diff --git a/templates/odoo.conf.j2 b/templates/odoo.conf.j2 index 96e01b1..2d79859 100644 --- a/templates/odoo.conf.j2 +++ b/templates/odoo.conf.j2 @@ -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