update
This commit is contained in:
parent
b249bc7149
commit
dbd5a8325c
62
cli.py
62
cli.py
@ -1,35 +1,73 @@
|
|||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
|
import tqdm
|
||||||
from services.odoo.service import OdooServiceManager
|
from services.odoo.service import OdooServiceManager
|
||||||
|
from services.odoo.module import OdooModuleManager
|
||||||
|
|
||||||
|
|
||||||
def service(args):
|
def service(args):
|
||||||
service = OdooServiceManager(config_path="utility/config/settings.yaml")
|
service = OdooServiceManager(config_path="utility/config/settings.yaml")
|
||||||
match args.action:
|
match args.action:
|
||||||
case "start":
|
case "start":
|
||||||
service.start_service(args.service)
|
service.start_service(args.instance)
|
||||||
case "stop":
|
case "stop":
|
||||||
service.stop_service(args.service)
|
service.stop_service(args.instance)
|
||||||
case "restart":
|
case "restart":
|
||||||
service.restart_service(args.service)
|
service.restart_service(args.instance)
|
||||||
case _:
|
case _:
|
||||||
print("Invalid action")
|
print("Invalid action")
|
||||||
|
|
||||||
|
|
||||||
|
def module(args):
|
||||||
|
module_manager = OdooModuleManager(config_path="utility/config/settings.yaml")
|
||||||
|
|
||||||
|
# If modules are provided in the command line
|
||||||
|
if args.modules:
|
||||||
|
print(f"Processing modules: {', '.join(args.modules)} for {args.instance}")
|
||||||
|
else:
|
||||||
|
# Fallback if no modules are provided (can use default from instance settings)
|
||||||
|
print(f"No modules specified. Using default modules for {args.instance}")
|
||||||
|
args.modules = module_manager.get_modules(args.instance)
|
||||||
|
|
||||||
|
# Create a progress bar using tqdm
|
||||||
|
for module_name in tqdm.tqdm(
|
||||||
|
args.modules, desc="Processing modules", unit="module"
|
||||||
|
):
|
||||||
|
match args.action:
|
||||||
|
case "install":
|
||||||
|
module_manager.install(args.instance, [module_name])
|
||||||
|
case "uninstall":
|
||||||
|
module_manager.uninstall(args.instance, [module_name])
|
||||||
|
case "upgrade":
|
||||||
|
module_manager.upgrade(args.instance, [module_name])
|
||||||
|
case _:
|
||||||
|
print("Invalid action")
|
||||||
|
|
||||||
|
|
||||||
def setup_cli():
|
def setup_cli():
|
||||||
parser = argparse.ArgumentParser(description="Service Manager CLI")
|
parser = argparse.ArgumentParser(description="Service Manager CLI")
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"-v", "--verbose", action="store_true", help="Enable verbose mode"
|
"-v", "--verbose", action="store_true", help="Enable verbose mode"
|
||||||
)
|
)
|
||||||
|
|
||||||
subparsers = parser.add_subparsers(
|
subparsers = parser.add_subparsers(dest="command", required=True)
|
||||||
dest="command", required=True, help="Available commands"
|
|
||||||
)
|
|
||||||
|
|
||||||
service_parser = subparsers.add_parser("service", help="Manage instance service")
|
service_parser = subparsers.add_parser("service", help="Manage instance service")
|
||||||
service_parser.add_argument("action", type=str, help="start/stop/restart")
|
service_parser.add_argument(
|
||||||
service_parser.add_argument("service", type=str, help="Name of the service")
|
"action", choices=["start", "stop", "restart"], help="Service action"
|
||||||
service_parser.set_defaults(func=service)
|
)
|
||||||
|
service_parser.add_argument("instance", type=str, help="Instance Name")
|
||||||
|
service_parser.set_defaults(func=service) # Fixed: Correct function assignment
|
||||||
|
|
||||||
|
module_parser = subparsers.add_parser("module", help="Manage instance module")
|
||||||
|
module_parser.add_argument(
|
||||||
|
"action", choices=["install", "uninstall", "upgrade"], help="Module action"
|
||||||
|
)
|
||||||
|
module_parser.add_argument("instance", type=str, help="Instance Name")
|
||||||
|
module_parser.add_argument(
|
||||||
|
"--modules", "-m", nargs="+", help="List of modules to process"
|
||||||
|
)
|
||||||
|
module_parser.set_defaults(func=module) # Fixed: Correct function assignment
|
||||||
|
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
@ -37,7 +75,11 @@ def setup_cli():
|
|||||||
def main():
|
def main():
|
||||||
parser = setup_cli()
|
parser = setup_cli()
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
args.func(args)
|
|
||||||
|
if hasattr(args, "func"): # Ensuring `func` is set
|
||||||
|
args.func(args)
|
||||||
|
else:
|
||||||
|
print("Invalid command. Use --help for more details.")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
@ -1,12 +1,27 @@
|
|||||||
odoo_instances:
|
odoo_instances:
|
||||||
- name: "server"
|
- name: "ftacpa"
|
||||||
host: "10.1.1.34"
|
host: "10.1.1.31"
|
||||||
|
port: 8069
|
||||||
|
database: "ftacpa"
|
||||||
|
username: "nextzen"
|
||||||
|
password: "smartyourlife"
|
||||||
|
type: "systemctl"
|
||||||
|
service_name: "odoo18"
|
||||||
|
git:
|
||||||
|
repo_url: "https://hoangvv:smartyourlife@git.nextzenos.com/NextERP/Odoo18-FTACPA.git"
|
||||||
|
branch: "community/demo/ftacpa"
|
||||||
|
local_path: "/opt/odoo18/addons"
|
||||||
|
ssh:
|
||||||
|
user: root
|
||||||
|
password: Smartyourlife123@*
|
||||||
|
key_path: "/root/.ssh/privatessh.key"
|
||||||
|
odoo_instances:
|
||||||
|
- name: "ftacpa"
|
||||||
|
host: "10.1.1.31"
|
||||||
port: 8069
|
port: 8069
|
||||||
database: "server"
|
database: "server"
|
||||||
username: "nextzen"
|
username: "nextzen"
|
||||||
password: "smartyourlife"
|
password: "smartyourlife"
|
||||||
module_names:
|
|
||||||
- "base"
|
|
||||||
type: "systemctl"
|
type: "systemctl"
|
||||||
service_name: "odoo18"
|
service_name: "odoo18"
|
||||||
git:
|
git:
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
odoorpc==0.9.0
|
odoorpc==0.9.0
|
||||||
GitPython==3.1.43
|
GitPython==3.1.43
|
||||||
PyYAML==6.0.1
|
PyYAML==6.0.1
|
||||||
|
tqdm
|
@ -7,9 +7,11 @@ class OdooModuleManager:
|
|||||||
def __init__(self, config_path: str = "config/settings.yaml"):
|
def __init__(self, config_path: str = "config/settings.yaml"):
|
||||||
self.config = OdooConnection(config_path)
|
self.config = OdooConnection(config_path)
|
||||||
|
|
||||||
def _manage_module(self, action: str, instance_name: str = None) -> None:
|
def _manage_module(
|
||||||
|
self, action: str, instance_name: str = None, module_names: list = None
|
||||||
|
) -> None:
|
||||||
"""Generic method to install, uninstall, or upgrade modules."""
|
"""Generic method to install, uninstall, or upgrade modules."""
|
||||||
if action not in ["install", "uninstall", "upgrade"]:
|
if action not in {"install", "uninstall", "upgrade"}:
|
||||||
raise ValueError(f"Invalid action: {action}")
|
raise ValueError(f"Invalid action: {action}")
|
||||||
|
|
||||||
self.config.connect(instance_name)
|
self.config.connect(instance_name)
|
||||||
@ -19,53 +21,49 @@ class OdooModuleManager:
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
print(f"Processing instance: {instance['name']}")
|
print(f"Processing instance: {instance['name']}")
|
||||||
module_names = instance.get("module_names", [])
|
|
||||||
|
|
||||||
if not module_names:
|
|
||||||
print(
|
|
||||||
f"No modules specified for {instance['name']}, skipping {action}."
|
|
||||||
)
|
|
||||||
continue
|
|
||||||
|
|
||||||
for module_name in module_names:
|
for module_name in module_names:
|
||||||
print(
|
|
||||||
f"{action.capitalize()}ing module: {module_name} in {instance['name']}"
|
|
||||||
)
|
|
||||||
try:
|
try:
|
||||||
|
print(
|
||||||
|
f"{action.capitalize()}ing module: {module_name} in {instance['name']}"
|
||||||
|
)
|
||||||
|
|
||||||
module_ids = self.config.execute(
|
module_ids = self.config.execute(
|
||||||
instance["name"],
|
instance["name"],
|
||||||
"ir.module.module",
|
"ir.module.module",
|
||||||
"search",
|
"search",
|
||||||
[("name", "=", module_name), ("state", "=", "installed")],
|
[("name", "=", module_name)],
|
||||||
)
|
)
|
||||||
if module_ids:
|
|
||||||
button_action = f"button_immediate_{action}"
|
if not module_ids:
|
||||||
self.config.execute(
|
|
||||||
instance["name"],
|
|
||||||
"ir.module.module",
|
|
||||||
button_action,
|
|
||||||
[module_ids],
|
|
||||||
)
|
|
||||||
print(
|
print(
|
||||||
f"Module {module_name} {action}ed successfully in {instance['name']}"
|
f"Module {module_name} not found in {instance['name']}, skipping."
|
||||||
)
|
|
||||||
else:
|
|
||||||
print(
|
|
||||||
f"Module {module_name} not found or not installed in {instance['name']}"
|
|
||||||
)
|
)
|
||||||
|
continue
|
||||||
|
|
||||||
|
button_action = f"button_immediate_{action}"
|
||||||
|
self.config.execute(
|
||||||
|
instance["name"],
|
||||||
|
"ir.module.module",
|
||||||
|
button_action,
|
||||||
|
module_ids, # Pass list directly instead of wrapping in another list
|
||||||
|
)
|
||||||
|
|
||||||
|
print(
|
||||||
|
f"Module {module_name} {action}ed successfully in {instance['name']}"
|
||||||
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(
|
print(
|
||||||
f"Failed to {action} {module_name} in {instance['name']}: {e}"
|
f"Error while {action}ing {module_name} in {instance['name']}: {e}"
|
||||||
)
|
)
|
||||||
|
|
||||||
def install(self, instance_name: str = None) -> None:
|
def install(self, instance_name: str = None,module_names: list = None) -> None:
|
||||||
"""Install multiple modules for the specified instance(s)."""
|
"""Install multiple modules for the specified instance(s)."""
|
||||||
self._manage_module("install", instance_name)
|
self._manage_module("install", instance_name,module_names)
|
||||||
|
|
||||||
def uninstall(self, instance_name: str = None) -> None:
|
def uninstall(self, instance_name: str = None,module_names: list = None) -> None:
|
||||||
"""Uninstall multiple modules for the specified instance(s)."""
|
"""Uninstall multiple modules for the specified instance(s)."""
|
||||||
self._manage_module("uninstall", instance_name)
|
self._manage_module("uninstall", instance_name,module_names)
|
||||||
|
|
||||||
def upgrade(self, instance_name: str = None) -> None:
|
def upgrade(self, instance_name: str = None,module_names: list = None) -> None:
|
||||||
"""Upgrade multiple modules for the specified instance(s)."""
|
"""Upgrade multiple modules for the specified instance(s)."""
|
||||||
self._manage_module("upgrade", instance_name)
|
self._manage_module("upgrade", instance_name,module_names)
|
||||||
|
Loading…
Reference in New Issue
Block a user