From 430b30c15fd993ae76b386c207a746a60a246e9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20-=20Le=20Filament?= <theo@le-filament.com> Date: Tue, 13 Aug 2024 10:43:54 +0200 Subject: [PATCH] feat: disable parts of docker-compose for updater instances and build instances are now selectable --- tasks/main.yml | 87 +++++++++++++++++--------------- templates/docker-compose.yaml.j2 | 52 ++++++++++--------- vars/main.yml | 14 ++--- 3 files changed, 82 insertions(+), 71 deletions(-) diff --git a/tasks/main.yml b/tasks/main.yml index c8a003a..8f3869b 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -54,45 +54,6 @@ test_instance_need_build and test_instance_is_selected -- name: "Copy odoo.conf file" - vars: - template_admin_passwd: "{{ odoo_source_instance.value.master_pass | pbkdf2_passwd(65534 | random(seed=inventory_hostname) | string) }}" - template_server_wide_modules: "{{ odoo_instance_setup.server_wide_modules | join(',') }}{% if odoo_instance.value.odoo_server_wide_modules is defined %},{{ odoo_instance.value.odoo_server_wide_modules | join(',') }}{% endif %}" - template_dbfilter: "^({{ odoo_source_instance.value.db }}|{{ odoo_instance.value.db }})$" - template_db_name: "{{ odoo_source_instance.value.db }}" - template_db_password: "{{ odoo_source_instance.value.db_pass }}" - template_db_user: "{{ odoo_source_instance.value.db_user }}" - template_db_maxconn: "{{ odoo_instance.value.odoo_db_maxconn }}" - template_limit_time_cpu: "{{ odoo_instance.value.odoo_limit_time_cpu }}" - template_limit_time_real: "{{ odoo_instance.value.odoo_limit_time_real }}" - template_force_workers: "{{odoo_instance.value.force_odoo_workers}}" - template_modules_auto_install_disabled: "{{ (odoo_instance_setup.modules_auto_install_disabled | default(['mail_bot'])) | join(',') }}{% if odoo_instance.value.modules_auto_install_disabled is defined %},{{ odoo_instance.value.modules_auto_install_disabled | join(',') }}{% endif %}" - template_modules_auto_install_enabled: "{{ (odoo_instance_setup.modules_auto_install_enabled | default(['web'])) | join(',') }}{% if odoo_instance.value.modules_auto_install_enabled is defined %},{{ odoo_instance.value.modules_auto_install_enabled | join(',') }}{% endif %}" - template_extra_conf: "{{ odoo_instance.value.odoo_extra_conf }}" - ansible.builtin.template: - src: "odoo.conf.j2" - dest: "/home/docker/{{ odoo_instance.key }}/odoo/odoo.conf" - owner: "root" - group: "root" - mode: "0600" - loop: "{{ odoo_instances | dict2items }}" - loop_control: - label: "{{ odoo_instance.key }}" - when: > - test_instance_need_build - and test_instance_is_selected - register: result - -# notify: -# - "rebuild odoo image" -- name: "Add instance to restart list if files was changed" - set_fact: - instances_to_rebuild: "{{ instances_to_rebuild + [item.item.key] }}" - loop: "{{ result.results | flatten(levels=1) }}" - loop_control: - label: "{{ item.item.key }}" - when: test_result_item_has_changed - - name: Copy private GitLab ssh keys file ansible.builtin.copy: content: "{{ git_modules_privkey | default('') }}" @@ -173,7 +134,52 @@ label: "{{ item.item.key }}" when: test_result_item_has_changed +- name: "Copy odoo.conf file" + tags: + - "odoo_config" + - "odoo_config_odoo" + vars: + template_admin_passwd: "{{ odoo_source_instance.value.master_pass | pbkdf2_passwd(65534 | random(seed=inventory_hostname) | string) }}" + template_server_wide_modules: "{{ odoo_instance_setup.server_wide_modules | join(',') }}{% if odoo_instance.value.odoo_server_wide_modules is defined %},{{ odoo_instance.value.odoo_server_wide_modules | join(',') }}{% endif %}" + template_dbfilter: "^({{ odoo_source_instance.value.db }}|{{ odoo_instance.value.db }})$" + template_db_name: "{{ odoo_source_instance.value.db }}" + template_db_password: "{{ odoo_source_instance.value.db_pass }}" + template_db_user: "{{ odoo_source_instance.value.db_user }}" + template_db_maxconn: "{{ odoo_instance.value.odoo_db_maxconn }}" + template_limit_time_cpu: "{{ odoo_instance.value.odoo_limit_time_cpu }}" + template_limit_time_real: "{{ odoo_instance.value.odoo_limit_time_real }}" + template_force_workers: "{{odoo_instance.value.force_odoo_workers}}" + template_modules_auto_install_disabled: "{{ (odoo_instance_setup.modules_auto_install_disabled | default(['mail_bot'])) | join(',') }}{% if odoo_instance.value.modules_auto_install_disabled is defined %},{{ odoo_instance.value.modules_auto_install_disabled | join(',') }}{% endif %}" + template_modules_auto_install_enabled: "{{ (odoo_instance_setup.modules_auto_install_enabled | default(['web'])) | join(',') }}{% if odoo_instance.value.modules_auto_install_enabled is defined %},{{ odoo_instance.value.modules_auto_install_enabled | join(',') }}{% endif %}" + template_extra_conf: "{{ odoo_instance.value.odoo_extra_conf }}" + ansible.builtin.template: + src: "odoo.conf.j2" + dest: "/home/docker/{{ odoo_instance.key }}/odoo/odoo.conf" + owner: "root" + group: "root" + mode: "0600" + loop: "{{ odoo_instances | dict2items }}" + loop_control: + label: "{{ odoo_instance.key }}" + when: > + test_instance_need_build + and test_instance_is_selected + register: result + +# notify: +# - "rebuild odoo image" +- name: "Add instance to restart list if files was changed" + set_fact: + instances_to_rebuild: "{{ instances_to_rebuild + [item.item.key] }}" + loop: "{{ result.results | flatten(levels=1) }}" + loop_control: + label: "{{ item.item.key }}" + when: test_result_item_has_changed + - name: Copy Dockerfile to retrieve private repos and extra OCA ones + tags: + - "odoo_config" + - "odoo_config_dockerfile" vars: template_odoo_instance: "{{ odoo_instance }}" template_odoo_instance_setup: "{{ odoo_instance_setup }}" @@ -205,6 +211,8 @@ - name: Copy docker compose service tags: + - "odoo_config" + - "odoo_config_compose" - "docker_proxy" - "metabase" vars: @@ -293,7 +301,6 @@ tags: - "docker_proxy" - "metabase" - - "odoo" ansible.builtin.meta: flush_handlers - name: "Restart instances: remove instance containers" diff --git a/templates/docker-compose.yaml.j2 b/templates/docker-compose.yaml.j2 index 1f42b28..47b637f 100644 --- a/templates/docker-compose.yaml.j2 +++ b/templates/docker-compose.yaml.j2 @@ -21,16 +21,16 @@ services: volumes: - filestore:/opt/odoo/data:z {# if prod and banking #} -{% if template_instance_is_prod and banking | default(false) %} +{% if not (template_updater_mode | default(false)) and template_instance_is_prod and banking | default(false) %} - ./bank/:/ofx/:ro {% endif %} -{% if private_pull is defined %} +{% if not (template_updater_mode | default(false)) and private_pull is defined %} - ../import/:/import/:ro {% endif %} networks: default: inverseproxy_shared: -{% if restrict_internet_access %} +{% if not (template_updater_mode | default(false)) and restrict_internet_access %} {% if whitelisted_urls is defined %} whitelists_proxy: {% endif %} @@ -39,13 +39,13 @@ services: {% endif %} {% endif %} {# if prod and mailname #} -{% if template_instance_is_prod and mailname | default(false) %} +{% if not (template_updater_mode | default(false)) and template_instance_is_prod and mailname | default(false) %} email_proxy: {% endif %} restart: unless-stopped labels: {# if prod #} -{% if template_instance_is_prod %} +{% if not (template_updater_mode | default(false)) and template_instance_is_prod %} co.elastic.logs/multiline.pattern: '^[0-9]{2}' co.elastic.logs/multiline.negate: 'true' co.elastic.logs/multiline.match: "after" @@ -96,12 +96,12 @@ services: {% endif %} labels: {# if prod #} -{% if template_instance_is_prod %} +{% if not (template_updater_mode | default(false)) and template_instance_is_prod %} co.elastic.logs/module: postgresql {% else %} co.elastic.logs/enabled: "false" {% endif %} -{% if template_odoo_instance.value.odoo_remote_db_access | default(false) %} +{% if not (template_updater_mode | default(false)) and template_odoo_instance.value.odoo_remote_db_access | default(false) %} networks: default: public: @@ -114,7 +114,7 @@ services: smtp: {# if prod and mailname #} -{% if template_instance_is_prod and mailname | default(false) %} +{% if not (template_updater_mode | default(false)) and template_instance_is_prod and mailname | default(false) %} image: tecnativa/postfix-relay container_name: {{ template_odoo_instance.key }}_smtp networks: @@ -175,19 +175,20 @@ services: co.elastic.logs/enabled: "false" {# if not prod #} {% if template_instance_is_prod is false %} - traefik.docker.network: "inverseproxy_smtp" traefik.enable: "true" - traefik.http.routers.{{ template_odoo_instance.key }}smtp.middlewares: "auth@file, smtp-stripprefix@file" + traefik.docker.network: "inverseproxy_smtp" + traefik.http.services.{{ template_odoo_instance.key }}smtp.loadbalancer.server.port: "8025" + traefik.http.routers.{{ template_odoo_instance.key }}smtp.entrypoints: "{{ template_traefik_entrypoints | default(default_traefik_entrypoints) }}" traefik.http.routers.{{ template_odoo_instance.key }}smtp.rule: "(Host(`{{ template_odoo_instance_domains | join('`) || Host(`') }}`)) && PathPrefix(`/smtp/`)" + traefik.http.routers.{{ template_odoo_instance.key }}smtp.middlewares: "auth@file, smtp-stripprefix@file" traefik.http.routers.{{ template_odoo_instance.key }}smtp.service: "{{ template_odoo_instance.key }}smtp" - traefik.http.services.{{ template_odoo_instance.key }}smtp.loadbalancer.server.port: "8025" networks: default: inverseproxy_smtp: {% endif %} {% endif %} -{% if restrict_internet_access and template_odoo_instance.value.extra_urls is defined %} +{% if not (template_updater_mode | default(false)) and restrict_internet_access and template_odoo_instance.value.extra_urls is defined %} {% for server in template_odoo_instance.value.extra_urls %} {{ server.url }}: image: tecnativa/whitelist @@ -207,7 +208,7 @@ services: {% endfor %} {% endif %} -{% if template_odoo_instance.value.metabase | default(false) %} +{% if not (template_updater_mode | default(false)) and template_odoo_instance.value.metabase | default(false) %} metabase: image: metabase/metabase container_name: {{ template_odoo_instance.key }}_metabase @@ -218,19 +219,20 @@ services: inverseproxy_bi: labels: co.elastic.logs/enabled: "false" - traefik.docker.network: "inverseproxy_bi" traefik.enable: "true" + traefik.docker.network: "inverseproxy_bi" + traefik.http.services.metabase.loadbalancer.server.port: "3000" traefik.http.middlewares.metabase-stripprefix.stripprefix.prefixes: "/metabase" - traefik.http.routers.metabase.middlewares: "metabase-stripprefix" + traefik.http.routers.metabase.entrypoints: "{{ template_traefik_entrypoints | default(default_traefik_entrypoints) }}" traefik.http.routers.metabase.rule: "(Host(`{{ template_odoo_instance_domains | join('`) || Host(`') }}`)) && PathPrefix(`/metabase`)" + traefik.http.routers.metabase.middlewares: "metabase-stripprefix" traefik.http.routers.metabase.service: "metabase" - traefik.http.services.metabase.loadbalancer.server.port: "3000" restart: unless-stopped volumes: - metabase:/metabase-data:z {% endif %} -{% if template_odoo_instance.value.extra_app is defined %} +{% if not (template_updater_mode | default(false)) and template_odoo_instance.value.extra_app is defined %} app: image: {{ template_odoo_instance.value.extra_app.image }} container_name: {{ template_odoo_instance.value.extra_app.name }} @@ -254,19 +256,19 @@ networks: inverseproxy_shared: external: true {# if not prod #} -{% if template_instance_is_prod is false %} +{% if template_updater_mode | default(false) or template_instance_is_prod is false %} inverseproxy_smtp: external: true {% endif %} -{% if template_odoo_instance.value.extra_app is defined %} +{% if not (template_updater_mode | default(false)) and template_odoo_instance.value.extra_app is defined %} inverseproxy_app: external: true {% endif %} -{% if template_odoo_instance.value.metabase | default(false) %} +{% if not (template_updater_mode | default(false)) and template_odoo_instance.value.metabase | default(false) %} inverseproxy_bi: external: true {% endif %} -{% if restrict_internet_access %} +{% if not (template_updater_mode | default(false)) and restrict_internet_access %} {% if whitelisted_urls is defined %} whitelists_proxy: external: true @@ -282,7 +284,7 @@ networks: {% endif %} {% endif %} {# if prod and mailname #} -{% if template_instance_is_prod and mailname | default(false) %} +{% if not (template_updater_mode | default(false)) and template_instance_is_prod and mailname | default(false) %} email_proxy: driver_opts: encrypted: 1 @@ -293,7 +295,7 @@ networks: encrypted: 1 {% endif %} {% endif %} -{% if template_odoo_instance.value.odoo_remote_db_access | default(false) %} +{% if not (template_updater_mode | default(false)) and template_odoo_instance.value.odoo_remote_db_access | default(false) %} public: {% endif %} @@ -301,9 +303,9 @@ volumes: filestore: db: {# if prod and mailname #} -{% if template_instance_is_prod and mailname | default(false) %} +{% if not (template_updater_mode | default(false)) and template_instance_is_prod and mailname | default(false) %} smtp: {% endif %} -{% if template_odoo_instance.value.metabase | default(false) %} +{% if not (template_updater_mode | default(false)) and template_odoo_instance.value.metabase | default(false) %} metabase: {% endif %} diff --git a/vars/main.yml b/vars/main.yml index 8797626..4f9cafd 100644 --- a/vars/main.yml +++ b/vars/main.yml @@ -2,8 +2,9 @@ allow_pull: "{{ pull is undefined or pull is truthy(convert_bool=True) }}" allow_rebuild: "{{ rebuild is undefined or rebuild is truthy(convert_bool=True) }}" allow_remove_key: "{{ remove_key is undefined or remove_key is truthy(convert_bool=True) }}" allow_restart: "{{ restart is undefined or restart is truthy(convert_bool=True) }}" -odoo_instance_noprod: "{{ odoo_instance_kind is undefined or odoo_instance_kind == 'all' or odoo_instance_kind == 'noprod' }}" -odoo_instance_prod: "{{ odoo_instance_kind is undefined or odoo_instance_kind == 'all' or odoo_instance_kind == 'prod' }}" +selected_odoo_instance_noprod: "{{ selected_odoo_instance_kind is undefined or selected_odoo_instance_kind == 'all' or selected_odoo_instance_kind == 'noprod' }}" +selected_odoo_instance_prod: "{{ selected_odoo_instance_kind is undefined or selected_odoo_instance_kind == 'all' or selected_odoo_instance_kind == 'prod' }}" +selected_odoo_instance_build: "{{ selected_odoo_instance_kind is undefined or selected_odoo_instance_kind == 'all' or selected_odoo_instance_kind == 'build' }}" odoo_instance: "{{ {'key': item, 'value': odoo_instances[item]} if item is string else item }}" odoo_instance_setup: "{{ odoo_setup_conf[odoo_instance.value.odoo_setup_version | default(odoo_setup_version)] }}" @@ -20,9 +21,10 @@ odoo_image_instance_setup: "{{ odoo_setup_conf[odoo_image_instance.value.odoo_se test_result_item_has_changed: "{{ item.item is defined and item.changed is defined and item.changed is true }}" test_instance_is_prod: "{{ odoo_instance.value.prod_instance | default(false) == odoo_instance.key }}" -test_instance_is_prod_selected: "{{ odoo_instance_prod and test_instance_is_prod }}" -test_instance_is_noprod_selected: "{{ odoo_instance_noprod and test_instance_is_prod is false }}" - -test_instance_is_selected: "{{ (test_instance_is_prod_selected or test_instance_is_noprod_selected) and (selected_odoo_instance is undefined or selected_odoo_instance == odoo_instance.key) and (selected_odoo_version is undefined or odoo_instance_version in selected_odoo_version) }}" +test_instance_is_prod_selected: "{{ selected_odoo_instance_prod and test_instance_is_prod }}" +test_instance_is_noprod_selected: "{{ selected_odoo_instance_noprod and test_instance_is_prod is false }}" test_instance_need_build: "{{ odoo_instance.value.image_instance | default(false) == odoo_instance.key }}" +test_instance_need_build_selected: "{{ selected_odoo_instance_build and test_instance_need_build }}" + +test_instance_is_selected: "{{ (test_instance_is_prod_selected or test_instance_is_noprod_selected or test_instance_need_build_selected) and (selected_odoo_instance is undefined or selected_odoo_instance == odoo_instance.key) and (selected_odoo_version is undefined or odoo_instance_version in selected_odoo_version) }}" -- GitLab