70 lines
2.7 KiB
Python
Executable File
70 lines
2.7 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import argparse
|
|
import json
|
|
import os
|
|
from src.manager import ServiceFactory, ServiceRepository, Manager
|
|
from src.services import DockerServiceStrategy, SystemServiceStrategy
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description="=====> Web Services Manager <=====")
|
|
subparsers = parser.add_subparsers(dest="command", required=True)
|
|
|
|
# 注册服务命令
|
|
register_parser = subparsers.add_parser("register", help="Register a new service")
|
|
register_parser.add_argument("tag", choices=["sys", "docker"], help="Tag of the service")
|
|
register_parser.add_argument("name", help="Name of the service")
|
|
register_parser.add_argument("--path", help="Config/Data path of the service where the 'docker-compose.yml' located (docker-based services only)")
|
|
|
|
# 列出服务命令
|
|
subparsers.add_parser("list", help="List all services")
|
|
|
|
# 执行操作命令
|
|
operate_parser = subparsers.add_parser("operate", help="Service operations to carry out")
|
|
operate_parser.add_argument("index", type=int, help="Index of the service, which is a integer")
|
|
|
|
# 移除服务命令
|
|
remove_parser = subparsers.add_parser("remove", help="Remove a service")
|
|
remove_parser.add_argument("index", type=int, help="Index of the service to remove")
|
|
|
|
args = parser.parse_args()
|
|
|
|
# 初始化仓库和管理器
|
|
# 确保 data 目录存在
|
|
os.makedirs("data", exist_ok=True)
|
|
repo = ServiceRepository("data/services.json")
|
|
manager = Manager(repo)
|
|
|
|
if args.command == "register":
|
|
# 创建服务
|
|
service = manager.register_service(args.tag, args.name, args.path)
|
|
print(f"Register a new service successfully: {service.name}")
|
|
|
|
elif args.command == "list":
|
|
# 列出所有服务
|
|
services = manager.list_services()
|
|
for i, service in enumerate(services):
|
|
print(f"{i}: [{service.tag}] {service.name} {f'(path: {service.path})' if service.path else ''}")
|
|
|
|
elif args.command == "operate":
|
|
# 执行服务操作
|
|
try:
|
|
manager.execute_service_operation(args.index)
|
|
print("Operation success!")
|
|
except IndexError:
|
|
print("Error: invalid index")
|
|
except Exception as e:
|
|
print(f"Operation failed: {str(e)}")
|
|
|
|
elif args.command == "remove":
|
|
try:
|
|
manager.remove_service(args.index)
|
|
print(f"Service at index {args.index} removed successfully")
|
|
except IndexError:
|
|
print("Error: invalid index")
|
|
except Exception as e:
|
|
print(f"Remove failed: {str(e)}")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|