From 8c517e66b01b576fa261b5aace4dec648d1bb11b Mon Sep 17 00:00:00 2001 From: jaydee Date: Sun, 30 Nov 2025 23:01:08 +0100 Subject: [PATCH] build --- port.py | 30 +++++++++++++++++++++--------- portainer.py | 8 +++++--- 2 files changed, 26 insertions(+), 12 deletions(-) mode change 100644 => 100755 portainer.py diff --git a/port.py b/port.py index 4c917ab..9fbc8dc 100644 --- a/port.py +++ b/port.py @@ -349,8 +349,14 @@ class Portainer: return s raise ValueError(f"Stack not found: {stack}") - def create_stack(self, endpoint, stack=None, mode="git", autostart=False, ep_mode='swarm', timeout=None): - swarm_id = self.get_swarm_id(endpoint) + def create_stack(self, endpoint, stack=None, mode="git", autostart=False, swarm=False, timeout=None): + if swarm: + swarm_id = self.get_swarm_id(endpoint) + p = "swarm" + env_path = f"{self.repo_dir}/__swarm/{stack}/.env" + else: + p = "standalone" + env_path = f"{self.repo_dir}/{stack}/.env" #input(swarm_id) self.endpoint_id = self.get_endpoint_id(endpoint) if os.path.exists(self.repo_dir): @@ -361,8 +367,7 @@ class Portainer: Repo.clone_from(self.git_url, self.repo_dir) if mode == "git": print("Creating new stack from git repo...") - enviro="swarm" - path = f"/stacks/create/{enviro}/repository" + path = f"/stacks/create/{p}/repository" if self.endpoint_id is not None: path += f"?endpointId={self.endpoint_id}" @@ -388,10 +393,13 @@ class Portainer: print(f"Stack {stack} already exist") continue print(f"Working on {stack}") - if os.path.exists(f"{self.repo_dir}/__swarm/{stack}/.env"): - f = open(f"{self.repo_dir}/__swarm/{stack}/.env","r") + + + envs = [] + if os.path.exists(f"{env_path}"): + f = open(f"{env_path}","r") env_vars = f.read().splitlines() - envs = [] + for ev in env_vars: if ev.startswith("#") or ev.strip() == "": continue @@ -417,6 +425,9 @@ class Portainer: e['value'] = "journald" else: e['value'] = "syslog" + + + uid = uuid.uuid4() #print(uid) @@ -449,9 +460,10 @@ class Portainer: "filesystemPath": "/share/docker_data/portainer/portainer-data/", "RegistryID": 4, "isDetachedFromGit": True, - "method":"repository" + "method":"repository", + "swarmID": None } - if ep_mode == "swarm": + if swarm: req["type"] = "swarm" req["swarmID"] = swarm_id req["composeFile"] = f"__swarm/{stack}/{stack}-swarm.yml" diff --git a/portainer.py b/portainer.py old mode 100644 new mode 100755 index 7f5a742..25d6c5a --- a/portainer.py +++ b/portainer.py @@ -1,3 +1,4 @@ +#!/home/jd/projects/venvs/portainer/bin/python3 import os import sys import requests @@ -39,6 +40,7 @@ parser.add_argument("--stack", "-s", type=str, help="Stack ID for operations") parser.add_argument("--token-only", action="store_true", help="Print auth token and exit") 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("--swarm","-w", action="store_true", help="Swarm mode") args = parser.parse_args() _LOG_LEVEL = "INFO" LOG_FILE = "/tmp/portainer.log" @@ -106,9 +108,9 @@ if __name__ == "__main__": if args.delete_stack: por.delete_stack(args.endpoint_id,args.stack,) sys.exit() - - if args.create_stack: - por.create_stack(args.endpoint_id,args.stack, args.deploy_mode, args.autostart) + + if args.create_stack: + por.create_stack(args.endpoint_id,args.stack, args.deploy_mode, args.autostart, args.swarm) sys.exit() if args.stop_stack: