This commit is contained in:
2025-11-30 23:01:08 +01:00
parent 3595f832f2
commit 8c517e66b0
2 changed files with 26 additions and 12 deletions

30
port.py
View File

@@ -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
@@ -418,6 +426,9 @@ class Portainer:
else:
e['value'] = "syslog"
uid = uuid.uuid4()
#print(uid)
req = {
@@ -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"

4
portainer.py Normal file → Executable file
View File

@@ -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"
@@ -108,7 +110,7 @@ if __name__ == "__main__":
sys.exit()
if args.create_stack:
por.create_stack(args.endpoint_id,args.stack, args.deploy_mode, args.autostart)
por.create_stack(args.endpoint_id,args.stack, args.deploy_mode, args.autostart, args.swarm)
sys.exit()
if args.stop_stack: