add script for modules auto-install in odoo devops guide
This commit is contained in:
parent
8054a0956d
commit
4084da5ee3
@ -7,15 +7,18 @@ Ce script python va permettre d'automatiser l'installation des modules de base
|
|||||||
??? note "init.py"
|
??? note "init.py"
|
||||||
```
|
```
|
||||||
import odoorpc
|
import odoorpc
|
||||||
|
import subprocess
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
|
||||||
# Configuration
|
# Configuration
|
||||||
ODOO_URL = 'http://localhost:10014'
|
ODOO_URL = 'http://localhost:10014'
|
||||||
ODOO_DB = 'odoo'
|
ODOO_DB = 'odoo'
|
||||||
ODOO_USERNAME = 'garagenum@gmail.com'
|
ODOO_USERNAME = 'garagenum@gmail.com'
|
||||||
ODOO_PASSWORD = 'bellinux@dm!'
|
ODOO_PASSWORD = 'bellinux'
|
||||||
|
|
||||||
# Modules to install
|
# Applications to install
|
||||||
MODULES_TO_INSTALL = [
|
APPS_TO_INSTALL = [
|
||||||
'account',
|
'account',
|
||||||
'sale_management',
|
'sale_management',
|
||||||
'purchase',
|
'purchase',
|
||||||
@ -44,23 +47,115 @@ Ce script python va permettre d'automatiser l'installation des modules de base
|
|||||||
'delivery',
|
'delivery',
|
||||||
]
|
]
|
||||||
|
|
||||||
# Connect to the Odoo server
|
MODULES_TO_INSTALL = [
|
||||||
odoo = odoorpc.ODOO('localhost', port=10014)
|
{'url': 'https://github.com/odoomates/odooapps',
|
||||||
odoo.login(ODOO_DB, ODOO_USERNAME, ODOO_PASSWORD)
|
'apps': [
|
||||||
|
{'name': 'accounting_pdf_reports'},
|
||||||
|
{'name': 'om_account_asset'},
|
||||||
|
{'name': 'om_account_bank_statement_import'},
|
||||||
|
{'name': 'om_account_budget'},
|
||||||
|
{'name': 'om_fiscal_year'},
|
||||||
|
{'name': 'om_recurring_payments'},
|
||||||
|
{'name': 'om_account_daily_reports'},
|
||||||
|
{'name': 'om_account_followup'},
|
||||||
|
{'name': 'om_account_accountant', 'dir': 'om_account_accountant'}
|
||||||
|
]},
|
||||||
|
]
|
||||||
|
|
||||||
# Check if each module is installed or not
|
def connect_odoo():
|
||||||
for module_name in MODULES_TO_INSTALL:
|
# Connect to the Odoo server
|
||||||
module_id = odoo.env['ir.module.module'].search([('name', '=', module_name)])
|
odoo = odoorpc.ODOO('localhost', port=10014)
|
||||||
|
odoo.login(ODOO_DB, ODOO_USERNAME, ODOO_PASSWORD)
|
||||||
|
return odoo
|
||||||
|
|
||||||
|
|
||||||
|
def install_app(odoo, odoo_app):
|
||||||
|
# Check if each module is installed or not
|
||||||
|
print(f"Checking {odoo_app} installation...")
|
||||||
|
module_id = odoo.env['ir.module.module'].search([('name', '=', odoo_app)])
|
||||||
if module_id:
|
if module_id:
|
||||||
module = odoo.env['ir.module.module'].browse(module_id)[0]
|
module = odoo.env['ir.module.module'].browse(module_id)[0]
|
||||||
if module.state not in ['installed', 'to upgrade']:
|
if module.state not in ['installed', 'to upgrade']:
|
||||||
module.button_immediate_install()
|
module.button_immediate_install()
|
||||||
print(f"Module {module_name} has been installed.")
|
print(f"Module {odoo_app} has been installed.")
|
||||||
else:
|
else:
|
||||||
print(f"Module {module_name} is already installed.")
|
print(f"Module {odoo_app} is already installed.")
|
||||||
else:
|
else:
|
||||||
print(f"Module {module_name} not found.")
|
print(f"Module {odoo_app} not found.")
|
||||||
|
|
||||||
print("Script execution finished!")
|
def install_apps(odoo):
|
||||||
|
for odoo_app in APPS_TO_INSTALL:
|
||||||
|
install_app(odoo, odoo_app)
|
||||||
|
|
||||||
|
def dl_modules(group):
|
||||||
|
repo_url = group['url'].rstrip('/')
|
||||||
|
addons_path = "addons"
|
||||||
|
os.makedirs(addons_path, exist_ok=True)
|
||||||
|
git_dir_path = os.path.join(addons_path, '.git')
|
||||||
|
|
||||||
|
sparse_checkout_lines = []
|
||||||
|
search_git = True
|
||||||
|
for app in group['apps']:
|
||||||
|
app_dir = app['dir'] if 'dir' in app else app['name']
|
||||||
|
app_path = os.path.join(addons_path, app_dir)
|
||||||
|
backup_git_path = os.path.join(app_path, ".git_backup")
|
||||||
|
|
||||||
|
sparse_checkout_lines.append(f"{app_dir}\n")
|
||||||
|
subprocess.run(["mkdir", "-p", app_path])
|
||||||
|
if search_git and os.path.isdir(backup_git_path):
|
||||||
|
subprocess.run(["mkdir", "-p", git_dir_path])
|
||||||
|
shutil.copytree(backup_git_path, git_dir_path, dirs_exist_ok=True)
|
||||||
|
search_git = False
|
||||||
|
|
||||||
|
for app in group['apps']:
|
||||||
|
app_dir = app['dir'] if 'dir' in app else app['name']
|
||||||
|
app_path = os.path.join(addons_path, app_dir)
|
||||||
|
backup_git_path = os.path.join(app_path, ".git_backup")
|
||||||
|
shutil.rmtree(backup_git_path)
|
||||||
|
subprocess.run(["mkdir", "-p", backup_git_path])
|
||||||
|
shutil.copytree(git_dir_path, backup_git_path, dirs_exist_ok=True)
|
||||||
|
print(f"backup for app {app['name']}")
|
||||||
|
|
||||||
|
|
||||||
|
sparse_checkout_file_path = os.path.join(git_dir_path, 'info', 'sparse-checkout')
|
||||||
|
branch_name = "16.0"
|
||||||
|
|
||||||
|
if not os.path.isdir(git_dir_path):
|
||||||
|
subprocess.run(["git", "init"], cwd=addons_path)
|
||||||
|
subprocess.run(["git", "remote", "add", "origin", repo_url], cwd=addons_path)
|
||||||
|
subprocess.run(["git", "config", "core.sparseCheckout", "true"], cwd=addons_path, check=True)
|
||||||
|
|
||||||
|
with open(sparse_checkout_file_path, "w") as sparse_checkout_file:
|
||||||
|
sparse_checkout_file.writelines(sparse_checkout_lines)
|
||||||
|
|
||||||
|
subprocess.run(["git", "pull", "origin", branch_name], cwd=addons_path, check=True)
|
||||||
|
shutil.rmtree(git_dir_path)
|
||||||
|
|
||||||
|
print(f"Modules {', '.join(app['name'] for app in group['apps'])} has been downloaded")
|
||||||
|
|
||||||
|
def update_module_list(odoo):
|
||||||
|
ModuleUpdate = odoo.env['base.module.update']
|
||||||
|
module_update_id = ModuleUpdate.create({})
|
||||||
|
module_update = ModuleUpdate.browse(module_update_id)
|
||||||
|
module_update.update_module()
|
||||||
|
updated_modules = module_update.updated
|
||||||
|
added_modules = module_update.added
|
||||||
|
print(f"Updated modules: {updated_modules}, Added modules: {added_modules}")
|
||||||
|
|
||||||
|
|
||||||
|
def install_modules(odoo):
|
||||||
|
for group in MODULES_TO_INSTALL:
|
||||||
|
dl_modules(group)
|
||||||
|
update_module_list(odoo)
|
||||||
|
for group in MODULES_TO_INSTALL:
|
||||||
|
for app in group['apps']:
|
||||||
|
install_app(odoo, app['name'])
|
||||||
|
|
||||||
|
def main():
|
||||||
|
odoo = connect_odoo()
|
||||||
|
install_apps(odoo)
|
||||||
|
install_modules(odoo)
|
||||||
|
print("Script execution finished!")
|
||||||
|
|
||||||
|
main()
|
||||||
```
|
```
|
||||||
@ -142,6 +142,7 @@ nav:
|
|||||||
- "Odoo":
|
- "Odoo":
|
||||||
- divers/devops/odoo/index.md
|
- divers/devops/odoo/index.md
|
||||||
- divers/devops/odoo/devenv.md
|
- divers/devops/odoo/devenv.md
|
||||||
|
- divers/devops/odoo/devmodule.md
|
||||||
- "Interne":
|
- "Interne":
|
||||||
- "Imprimantes": divers/internal/install-printers.md
|
- "Imprimantes": divers/internal/install-printers.md
|
||||||
- "Workadventure map": divers/internal/wa.md
|
- "Workadventure map": divers/internal/wa.md
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user