# HG changeset patch # User Vincent Hatakeyama <vincent.hatakeyama@xcg-consulting.fr> # Date 1650612870 -7200 # Fri Apr 22 09:34:30 2022 +0200 # Node ID 42f3e42cc8268152ab216444eda66ca83b0d1808 # Parent 77afbae22895796d2c0267c8628fcf23ff4ba831 ✨ chown when creating data module diff --git a/NEWS.rst b/NEWS.rst --- a/NEWS.rst +++ b/NEWS.rst @@ -2,6 +2,11 @@ History ======= +16.4.0 +------ + +When creating the data volume to store session and filestore, also run chown on them avoiding to have to do it manually. + 16.3.0 ------ diff --git a/odoo_scripts/docker_client.py b/odoo_scripts/docker_client.py --- a/odoo_scripts/docker_client.py +++ b/odoo_scripts/docker_client.py @@ -25,21 +25,23 @@ @classmethod def create_volume( cls, volume_name: str, extra_labels: Dict[str, str] = None - ) -> docker.models.volumes.Volume: + ) -> Tuple[docker.models.volumes.Volume, bool]: """Return the volume passed in parameter, creating it if it does not exist. :param volume_name: name of the volume to create :param extra_labels: extra labels to put on the volume (only on creation) + :return: a tuple, the first one is the volume, the second is a boolean + indicating that the volume has just been created (true if created) """ volumes = cls.client.volumes.list(filters={"name": volume_name}) if volumes: _logger.debug("Volume %s already exists", volume_name) - return volumes[0] + return (volumes[0], False) _logger.debug("Creating volume %s", volume_name) labels = dict(odoo_scripts="") if extra_labels: labels.update(extra_labels) - return cls.client.volumes.create(name=volume_name, labels=labels) + return (cls.client.volumes.create(name=volume_name, labels=labels), True) @staticmethod def put_file(src, container, dst): diff --git a/odoo_scripts/docker_dev_start.py b/odoo_scripts/docker_dev_start.py --- a/odoo_scripts/docker_dev_start.py +++ b/odoo_scripts/docker_dev_start.py @@ -40,9 +40,9 @@ _logger = logging.getLogger(__name__) -__version__ = "3.4.0" +__version__ = "3.4.1" __date__ = "2017-08-11" -__updated__ = "2022-04-04" +__updated__ = "2022-04-21" def __parser(project_name: str) -> ArgumentParser: @@ -579,6 +579,9 @@ arg.append("--db_user") arg.append(user) + # directories to run chown on + chown_directories = set() + # data volume handling base_data_volume_name = "{}_data".format(project_name) if odoo_type == ODOO_7: @@ -601,8 +604,16 @@ client.create_volume(filestore_volume_name, {"mounted in": target}) mounts.append(target, filestore_volume_name) else: - data_volume_path = "/mnt/data" + data_volume_path = "/var/lib/data" mounts.append(Mount(data_volume_path, base_data_volume_name)) + _, created = DockerClient.create_volume( + base_data_volume_name, + { + "mounted in": data_volume_path, + }, + ) + if created: + chown_directories.add(data_volume_path) arg.append("--data-dir") arg.append(data_volume_path) @@ -627,7 +638,7 @@ "/opt/odoo/data", ] else: - extra_volumes = ["/var/lib/odoo"] + extra_volumes = [] for extra_volume in extra_volumes: volume_name = "{}_{}".format(project_name, extra_volume.replace("/", "_")) DockerClient.create_volume( @@ -641,13 +652,15 @@ # make sure the permission in the volumes are correct if run_chown: - chown_directories = ["/mnt"] + chown_directories.add("/mnt") if odoo_type not in (ODOO_7, ODOO_8): - chown_directories.append("/var/lib/odoo") + chown_directories.add("/var/lib/odoo") + + if chown_directories: _logger.info("chown container’s %s to Odoo user", ", ".join(chown_directories)) client.containers.run( image, - command=["odoo", "--recursive"] + chown_directories, + command=["odoo", "--recursive"] + list(chown_directories), remove=True, entrypoint="/bin/chown", mounts=mounts, @@ -843,13 +856,15 @@ modules = c.modules _logger.debug("addon modules: %s", ",".join(modules)) target_module_directory = "/mnt/addons" - mounts.extend(modules_mount(modules, project_path, target_module_directory)[0]) - all_addons_dir = [target_module_directory] - if odoo_type in (ODOO_7, ODOO_8): - all_addons_dir.append("/opt/odoo/sources/odoo/addons") - if all_addons_dir: - arg.append("--addons-path") - arg.append(",".join(all_addons_dir)) + mount_list, _ = modules_mount(modules, project_path, target_module_directory) + if mount_list: + mounts.extend(mount_list) + all_addons_dir = [target_module_directory] + if odoo_type in (ODOO_7, ODOO_8): + all_addons_dir.append("/opt/odoo/sources/odoo/addons") + if all_addons_dir: + arg.append("--addons-path") + arg.append(",".join(all_addons_dir)) apply_flake8(nmspc, odoo_type) apply_isort(nmspc, odoo_type)