mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
Merge branch 'imp/11.0/attachment_minio_config_file' into '11.0-test'
imp/11.0/attachment_minio_config_file into 11.0-test See merge request hibou-io/hibou-odoo/suite!164
This commit is contained in:
52
attachment_minio/README.md
Normal file
52
attachment_minio/README.md
Normal file
@@ -0,0 +1,52 @@
|
||||
# Use MinIO (or Amazon S3) for Attachment/filestore
|
||||
|
||||
MinIO provides S3 API compatible storage to scale out without a shared filesystem like NFS.
|
||||
|
||||
This module will store the bucket used in the attachment database object, thus allowing
|
||||
you to retain read-only access to the filestore by simply overriding the bucket.
|
||||
|
||||
## Setup details
|
||||
|
||||
Before installing this app, you should add several System Parameters (the most important of
|
||||
which is `ir_attachment.location`), OR set them through the config file as described later.
|
||||
|
||||
**The in database System Parameters will act as overrides to the Config File versions.**
|
||||
|
||||
| Key | Example Value | Default Value |
|
||||
|-----------------------------------|---------------|---------------|
|
||||
| ir_attachment.location | s3 | |
|
||||
| ir_attachment.location.host | minio:9000 | |
|
||||
| ir_attachment.location.bucket | odoo | |
|
||||
| ir_attachment.location.region | us-west-1 | us-west-1 |
|
||||
| ir_attachment.location.access_key | minio | |
|
||||
| ir_attachment.location.secret_key | minio_secret | |
|
||||
| ir_attachment.location.secure | 1 | |
|
||||
|
||||
**Config File:**
|
||||
|
||||
```
|
||||
attachment_minio_host = minio:9000
|
||||
attachment_minio_region = us-west-1
|
||||
attachment_minio_access_key = minio
|
||||
attachment_minio_secret_key = minio_secret
|
||||
attachment_minio_bucket = odoo
|
||||
attachment_minio_secure = False
|
||||
```
|
||||
|
||||
In general, they should all be specified other than "region" (if you are not using AWS S3)
|
||||
and "secure" which should be set if the "host" needs to be accessed over SSL/TLS.
|
||||
|
||||
Install `attachment_minio` and during the installation `base_attachment_object_storage` should move
|
||||
your existing filestore attachment files into the database or object storage.
|
||||
|
||||
For example, you can run a shell command like the following to set the parameter:
|
||||
|
||||
```
|
||||
env['ir.config_parameter'].set_param('ir_attachment.location', 's3')
|
||||
# If already installed...
|
||||
# env['ir.attachment'].force_storage()
|
||||
env.cr.commit()
|
||||
```
|
||||
|
||||
If `attachment_minio` is not already installed, you can then install it and the migration
|
||||
should be noted in the logs. **Ensure that the timeouts are long enough that the migration can finish.**
|
||||
@@ -7,40 +7,59 @@
|
||||
"author": "Hibou Corp.",
|
||||
"license": "AGPL-3",
|
||||
"description": """
|
||||
#################################################
|
||||
Use MinIO (or Amazon S3) for Attachment/filestore
|
||||
#################################################
|
||||
# Use MinIO (or Amazon S3) for Attachment/filestore
|
||||
|
||||
MinIO provides S3 API compatible storage to scale out without a shared filesystem like NFS.
|
||||
|
||||
This module will store the bucket used in the attachment database object, thus allowing
|
||||
you to retain read-only access to the filestore by simply overriding the bucket.
|
||||
|
||||
Setup details
|
||||
#############
|
||||
## Setup details
|
||||
|
||||
Before installing this app, you should add several System Parameters.
|
||||
Before installing this app, you should add several System Parameters (the most important of
|
||||
which is `ir_attachment.location`), OR set them through the config file as described later.
|
||||
|
||||
Key : Example Value : Default Value
|
||||
**The in database System Parameters will act as overrides to the Config File versions.**
|
||||
|
||||
ir_attachment.location : s3 : _
|
||||
| Key | Example Value | Default Value |
|
||||
|-----------------------------------|---------------|---------------|
|
||||
| ir_attachment.location | s3 | |
|
||||
| ir_attachment.location.host | minio:9000 | |
|
||||
| ir_attachment.location.bucket | odoo | |
|
||||
| ir_attachment.location.region | us-west-1 | us-west-1 |
|
||||
| ir_attachment.location.access_key | minio | |
|
||||
| ir_attachment.location.secret_key | minio_secret | |
|
||||
| ir_attachment.location.secure | 1 | |
|
||||
|
||||
ir_attachment.location.host : minio.yourdomain.com : _
|
||||
|
||||
ir_attachment.location.bucket : odoo-prod : _
|
||||
|
||||
ir_attachment.location.region : us-west-1 : us-west-1
|
||||
|
||||
ir_attachment.location.access_key : odoo : _
|
||||
|
||||
ir_attachment.location.secret_key : 123456 : _
|
||||
|
||||
ir_attachment.location.secure : 1 : _
|
||||
**Config File:**
|
||||
|
||||
```
|
||||
attachment_minio_host = minio:9000
|
||||
attachment_minio_region = us-west-1
|
||||
attachment_minio_access_key = minio
|
||||
attachment_minio_secret_key = minio_secret
|
||||
attachment_minio_bucket = odoo
|
||||
attachment_minio_secure = False
|
||||
```
|
||||
|
||||
In general, they should all be specified other than "region" (if you are not using AWS S3)
|
||||
and "secure" which should be set if the "host" needs to be accessed over SSL/TLS.
|
||||
|
||||
Install `attachment_minio` and during the installation `base_attachment_object_storage` should move
|
||||
your existing filestore attachment files into the database or object storage.
|
||||
|
||||
For example, you can run a shell command like the following to set the parameter:
|
||||
|
||||
```
|
||||
env['ir.config_parameter'].set_param('ir_attachment.location', 's3')
|
||||
# If already installed...
|
||||
# env['ir.attachment'].force_storage()
|
||||
env.cr.commit()
|
||||
```
|
||||
|
||||
If `attachment_minio` is not already installed, you can then install it and the migration
|
||||
should be noted in the logs. **Ensure that the timeouts are long enough that the migration can finish.**
|
||||
|
||||
""",
|
||||
"summary": "",
|
||||
"website": "",
|
||||
|
||||
@@ -15,12 +15,13 @@ class MinioAttachment(models.Model):
|
||||
|
||||
@api.model
|
||||
def _get_minio_client(self):
|
||||
config = tools.config
|
||||
params = self.env['ir.config_parameter'].sudo()
|
||||
host = params.get_param('ir_attachment.location.host')
|
||||
region = params.get_param('ir_attachment.location.region', 'us-west-1')
|
||||
access_key = params.get_param('ir_attachment.location.access_key')
|
||||
secret_key = params.get_param('ir_attachment.location.secret_key')
|
||||
secure = params.get_param('ir_attachment.location.secure')
|
||||
host = params.get_param('ir_attachment.location.host') or config.get('attachment_minio_host')
|
||||
region = params.get_param('ir_attachment.location.region') or config.get('attachment_minio_region', 'us-west-1')
|
||||
access_key = params.get_param('ir_attachment.location.access_key') or config.get('attachment_minio_access_key')
|
||||
secret_key = params.get_param('ir_attachment.location.secret_key') or config.get('attachment_minio_secret_key')
|
||||
secure = params.get_param('ir_attachment.location.secure') or config.get('attachment_minio_secure')
|
||||
if not all((host, access_key, secret_key)):
|
||||
raise exceptions.UserError('Incorrect configuration of attachment_minio.')
|
||||
return Minio(host,
|
||||
@@ -31,8 +32,9 @@ class MinioAttachment(models.Model):
|
||||
|
||||
@api.model
|
||||
def _get_minio_bucket(self, client, name=None):
|
||||
config = tools.config
|
||||
params = self.env['ir.config_parameter'].sudo()
|
||||
bucket = name or params.get_param('ir_attachment.location.bucket')
|
||||
bucket = name or params.get_param('ir_attachment.location.bucket') or config.get('attachment_minio_bucket')
|
||||
if not bucket:
|
||||
raise exceptions.UserError('Incorrect configuration of attachment_minio -- Missing bucket.')
|
||||
if not client.bucket_exists(bucket):
|
||||
|
||||
Reference in New Issue
Block a user