From 5e36820f8894812d7f38296b797435ab8a27aa46 Mon Sep 17 00:00:00 2001 From: jaydee Date: Sat, 21 Mar 2026 19:09:41 +0100 Subject: [PATCH] build --- main.py | 61 +++++++++++++--------- portainer/__pycache__/api.cpython-313.pyc | Bin 59163 -> 59390 bytes portainer/api.py | 8 ++- 3 files changed, 43 insertions(+), 26 deletions(-) diff --git a/main.py b/main.py index 9d88b31..30cb718 100755 --- a/main.py +++ b/main.py @@ -140,7 +140,7 @@ parser.add_argument( default=None, help="Service ID to limit service operations", ) -parser.add_argument("--stack", "-s", type=str, default=None, nargs="+", help="Stack ID for operations") +parser.add_argument("--stack", "-s", type=str, default=None, help="Stack ID for operations") parser.add_argument("--action", "-a", type=str, default=None, help="Action to perform") parser.add_argument( "--autostart", "-Z", action="store_true", help="Auto-start created stacks" @@ -152,6 +152,8 @@ parser.add_argument("--gpu", "-g", action="store_true") parser.add_argument("--timeout", type=int, default=10, help="Request timeout seconds") parser.add_argument("--deploy-mode", "-m", type=str, default="git", help="Deploy mode") parser.add_argument("--stack-mode", "-w", default=None, help="Stack mode") +parser.add_argument("--print-command", "-P", action="store_true", help="Print quick command from action") + parser.add_argument( "-E", "--excluded", nargs="+", @@ -320,9 +322,9 @@ def prompt_missing_args(args_in, defaults_in, fields, action=None,stacks=None): value_in = ['pihole', 'nginx', 'authentik', 'hashicorp', 'mosquitto','homepage', 'mailu3', 'home-assistant', 'mediacenter' ] # all real commands value_in.sort() - + if "pihole" in value_in: - if args.action == "delete_stack": + if args.action in ["delete_stack","stop_stack"]: value_in.remove("pihole") value_in.append("pihole") else: @@ -469,7 +471,6 @@ if __name__ == "__main__": for key, value in secrets.items(): res = por.create_secret(key, value, args.endpoint_id, args.timeout) print(res) - sys.exit() if args.action == "delete_stack": args = prompt_missing_args( @@ -490,7 +491,6 @@ if __name__ == "__main__": args.endpoint_id, args.stack, ) - sys.exit() if args.action == "create_stack": por.action = "create_stack" @@ -515,7 +515,7 @@ if __name__ == "__main__": args.autostart, args.stack_mode, ) - sys.exit() + if args.action == "stop_stack": args = prompt_missing_args( @@ -529,7 +529,6 @@ if __name__ == "__main__": ) por.stop_stack(args.stack, args.endpoint_id) - sys.exit() if args.action == "start_stack": args = prompt_missing_args( @@ -542,7 +541,7 @@ if __name__ == "__main__": ], ) por.start_stack(args.stack, args.endpoint_id) - sys.exit() + if args.action == "restart_service": args = prompt_missing_args( @@ -554,7 +553,7 @@ if __name__ == "__main__": ], ) por.restart_service(args.endpoint_id, "lala") - sys.exit() + if args.action == "update_service": args = prompt_missing_args( @@ -568,7 +567,7 @@ if __name__ == "__main__": por.update_service() if args.launcher: input("\nPress ENTER to continue...") - sys.exit() + if args.action == "update_containers": @@ -583,7 +582,6 @@ if __name__ == "__main__": ], ) por.update_containers() - sys.exit() if args.action == "list_stacks": args = prompt_missing_args( @@ -598,21 +596,19 @@ if __name__ == "__main__": if args.launcher: input("Press ENTER to continue...") # print(json.dumps(por.all_data, indent=2)) - sys.exit() if args.action == "list_all_stacks": por.get_stacks_failed() if args.launcher: input("Press ENTER to continue...") # print(json.dumps(por.all_data, indent=2)) - sys.exit() + if args.action == "delete_ophaned_stacks": por.delete_failed_stack() if args.launcher: input("Press ENTER to continue...") # print(json.dumps(por.all_data, indent=2)) - sys.exit() if args.action == "list_containers": @@ -628,7 +624,6 @@ if __name__ == "__main__": print("\n".join(por.get_containers())) if args.launcher: input("\nPress ENTER to continue...") - sys.exit() if args.action == "update_stack": args = prompt_missing_args( @@ -643,17 +638,16 @@ if __name__ == "__main__": por.update_stack(args) if args.launcher: input("\nPress ENTER to continue...") - sys.exit() + if args.action == "print_all_data": print(json.dumps(por.all_data, indent=2)) if args.launcher: input("\nPress ENTER to continue...") - sys.exit() + if args.action == "update_status": por.update_status(args.endpoint_id, args.stack) - sys.exit() if args.action == "list_endpoints": eps = por.get_endpoints(args) @@ -664,7 +658,7 @@ if __name__ == "__main__": print(tabulate(export_data, headers=headers, tablefmt="github")) if args.launcher: input("\nPress ENTER to continue...") - sys.exit() + if args.action == "stop_containers": # TODO: does not work @@ -678,14 +672,14 @@ if __name__ == "__main__": ) if por.all_data["endpoints_status"][args.endpoint_id] != 1: print(f"Endpoint {por.get_endpoint_name(args.endpoint_id)} is offline") - sys.exit() + print(f"Stopping containers on {por.get_endpoint_name(args.endpoint_id)}") cont = [] for c in por.all_data["containers"][args.endpoint_id]: if args.stack in (c, "all"): cont += por.all_data["containers"][args.endpoint_id][c] por.stop_containers(args.endpoint_id, cont) - sys.exit() + if args.action == "start_containers": print("Starting containers") @@ -695,7 +689,7 @@ if __name__ == "__main__": if args.stack in (c, "all"): cont += por.all_data["containers"][args.endpoint_id][c] por.start_containers(args.endpoint_id, cont) - sys.exit() + if args.action == "start_containers": print("Starting containers") cont = [] @@ -704,10 +698,27 @@ if __name__ == "__main__": if args.stack in (c, "all"): cont += por.all_data["containers"][args.endpoint_id][c] por.start_containers(args.endpoint_id, cont) - sys.exit() + if args.action == "refresh_environment": cont = por.refresh() - sys.exit() + if args.action == "refresh_status": - por.refresh_status(args) \ No newline at end of file + por.refresh_status(args) + + if args.print_command: + one_time_command = "portainer" + if args.action: + one_time_command += f" --action={args.action}" + if por.endpoint_name: + one_time_command += f" --endpoint-id={por.endpoint_name}" + if por.site: + one_time_command += f" --site={por.site}" + if args.stack: + if type(args.stack) == list: + args.stack = ",".join(args.stack) + one_time_command += f" --stack={args.stack}" + width = shutil.get_terminal_size().columns + print("#"*width) + print(f"COMMAND : {one_time_command}") + print("#"*width) \ No newline at end of file diff --git a/portainer/__pycache__/api.cpython-313.pyc b/portainer/__pycache__/api.cpython-313.pyc index a15dfa957568b862703f314be178e83ded9afd47..4fabaa211fe2d05f019fdbca350ecf67a0923771 100644 GIT binary patch delta 9216 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 YLxHRHGK#;yBB!oMU3Ja^C@<*$1D`9*qyPW_ delta 8902 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 diff --git a/portainer/api.py b/portainer/api.py index 5b9c788..81dd21c 100644 --- a/portainer/api.py +++ b/portainer/api.py @@ -37,6 +37,7 @@ class PortainerApi: self.timeout = timeout self.git_url = "git@gitlab.sectorq.eu:home/docker-compose.git" self.stack_name = None + self.stack_names = [] self.stacks_all = {} self.stack_id = None self.stack_ids = [] @@ -122,6 +123,7 @@ class PortainerApi: self.cur_config = config def get_site(self, site): + self.site = site if site == "portainer": self.base_url = os.getenv( "PORTAINER_URL", "https://portainer.sectorq.eu/api" @@ -1221,6 +1223,8 @@ class PortainerApi: self.get_endpoint(endpoint_id) size = 0 if stack is not None: + if type(stack) == str: + stack = stack.split(",") for s in stack: if len(s) > size: size = len(s) @@ -1261,6 +1265,8 @@ class PortainerApi: self.get_endpoint(endpoint_id) size = 0 if stack is not None: + if type(stack) == str: + stack = stack.split(",") for s in stack: if size < len(s): size = len(s) @@ -1269,7 +1275,7 @@ class PortainerApi: self.stack_ids = list(dict.fromkeys(self.stack_ids)) for stck in self.stack_ids: print( - f"Stopping stack {self.stacks_all[self.endpoint_id]['by_id'][stck][:size].ljust(size)}", + f"Stopping stack {self.stacks_all[self.endpoint_id]['by_id'][stck]}", end="", flush=True )