mirror of
https://gitlab.sectorq.eu/jaydee/portainer.git
synced 2026-05-04 18:09:50 +02:00
Compare commits
9 Commits
db7005b304
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 5adb2c7c2e | |||
| 8067ac8561 | |||
| 79e9e708b4 | |||
| 64c3615705 | |||
| f5c883964a | |||
| bc984f05d2 | |||
| a9a4de2038 | |||
| 9205e0c8f7 | |||
| 062176a875 |
Binary file not shown.
@@ -16,6 +16,8 @@ import time
|
||||
import base64
|
||||
import shutil
|
||||
import requests
|
||||
import tempfile
|
||||
import subprocess
|
||||
from portainer.api import PortainerApi
|
||||
from git import Repo
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
@@ -46,7 +48,7 @@ def setup_vault():
|
||||
# Specify the mount point of your KV engine
|
||||
return vclient
|
||||
|
||||
VERSION = "0.1.76"
|
||||
VERSION = "0.1.77"
|
||||
|
||||
|
||||
defaults = {
|
||||
@@ -224,6 +226,41 @@ def wl(msg):
|
||||
if args.debug:
|
||||
print(msg)
|
||||
|
||||
def run(cmd, cwd=None):
|
||||
result = subprocess.run(cmd, cwd=cwd, capture_output=True, text=True)
|
||||
if result.returncode != 0:
|
||||
raise RuntimeError(result.stderr)
|
||||
return result.stdout.strip()
|
||||
|
||||
def get_compose_files():
|
||||
#git clone --depth=1 --filter=blob:none --no-checkout https://github.com/user/repo.git
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
repo_path = os.path.join(tmpdir, "repo")
|
||||
|
||||
# Clone with minimal data (no checkout, no blobs)
|
||||
run([
|
||||
"git", "clone",
|
||||
"--depth=1",
|
||||
"--filter=blob:none",
|
||||
"--no-checkout",
|
||||
"git@gitlab.sectorq.eu:/home/docker-compose.git",
|
||||
repo_path
|
||||
])
|
||||
|
||||
# List files in HEAD
|
||||
output = run([
|
||||
"git", "ls-tree",
|
||||
"-r",
|
||||
"HEAD",
|
||||
"--name-only"
|
||||
], cwd=repo_path)
|
||||
folders = []
|
||||
for line in output.splitlines():
|
||||
if "/" in line and line.split("/")[0] != "__swarm":
|
||||
folders.append(line.split("/")[0])
|
||||
|
||||
return list(dict.fromkeys(folders))
|
||||
|
||||
|
||||
def prompt_missing_args(args_in, defaults_in, fields, action=None,stacks=None):
|
||||
"""
|
||||
@@ -259,13 +296,14 @@ def prompt_missing_args(args_in, defaults_in, fields, action=None,stacks=None):
|
||||
elif field == "stack":
|
||||
if args.action == "create_stack":
|
||||
# input(json.dumps(stacks, indent=2))
|
||||
commands = [
|
||||
'api_server', 'authentik', 'bitwarden', 'bookstack', 'databasus', 'dockermon', 'duplicati', 'fail2ban', 'filebrowser', 'gitea', 'gitlab', 'grafana', 'grocy',
|
||||
'hashicorp', 'home-assistant', 'homebox','homepage', 'immich', 'influxdb', 'jupyter', 'kestra', 'kopia', 'linkding', 'linkwarden', 'mailu3',
|
||||
'mealie', 'mediacenter', 'mosquitto', 'motioneye', 'n8n', 'nebula', 'nextcloud', 'nginx',
|
||||
'node-red', 'octoprint', 'ollama', 'onlyoffice', 'paperless-ngx', 'pihole', 'portainer-ce','portainerce', 'rancher', 'registry',
|
||||
'regsync', 'repo_mirror', 'searxng','semaphore', 'unifibrowser', 'uptime-kuma', 'watchtower', 'wazuh', 'webhub', 'wordpress',
|
||||
'wud', 'zabbix-server']
|
||||
commands = get_compose_files()
|
||||
# commands = [
|
||||
# 'api_server', 'authentik', 'bitwarden', 'bookstack', 'databasus', 'dockermon', 'duplicati', 'fail2ban', 'filebrowser', 'gitea', 'gitlab', 'grafana', 'grocy',
|
||||
# 'hashicorp', 'home-assistant', 'homebox','homepage', 'immich', 'influxdb', 'jupyter', 'kestra', 'kopia', 'linkding', 'linkwarden', 'mailu3',
|
||||
# 'mealie', 'mediacenter', 'mosquitto', 'motioneye', 'n8n', 'nebula', 'nextcloud', 'nginx',
|
||||
# 'node-red', 'octoprint', 'ollama', 'onlyoffice', 'paperless-ngx', 'pihole', 'portainer-ce','portainerce', 'puppet', 'puppet-agent', 'rancher', 'registry',
|
||||
# 'regsync', 'repo_mirror', 'searxng','semaphore', 'unifibrowser', 'uptime-kuma', 'watchtower', 'wazuh', 'webhub', 'wordpress',
|
||||
# 'wud', 'zabbix-server']
|
||||
try:
|
||||
print(por.all_data['stacks'][defaults_in[f"PORTAINER_ENDPOINT_ID".upper()]]['by_name'].keys())
|
||||
for s in por.all_data['stacks'][defaults_in[f"PORTAINER_ENDPOINT_ID".upper()]]['by_name'].keys():
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+10
-4
@@ -13,6 +13,8 @@ import tabulate
|
||||
from git import Repo
|
||||
import requests
|
||||
import hvac
|
||||
import subprocess
|
||||
import tempfile
|
||||
from prompt_toolkit import prompt
|
||||
from prompt_toolkit.completion import WordCompleter
|
||||
from prompt_toolkit.shortcuts import checkboxlist_dialog
|
||||
@@ -178,7 +180,7 @@ class PortainerApi:
|
||||
def _api_get(self, path, timeout=120):
|
||||
url = f"{self.base_url.rstrip('/')}{path}"
|
||||
headers = {"X-API-Key": f"{self.token}"}
|
||||
resp = requests.get(url, headers=headers, timeout=timeout)
|
||||
resp = requests.get(url, headers=headers, timeout=120)
|
||||
if resp.status_code != 200:
|
||||
return resp.status_code
|
||||
print(f"Error: {resp.status_code} - {resp.text}")
|
||||
@@ -275,7 +277,7 @@ class PortainerApi:
|
||||
stcks = []
|
||||
stacks = self._api_get(path, timeout=timeout)
|
||||
self.stacks_all = {}
|
||||
fail_endponts = [20, 39, 41, 32, 43]
|
||||
fail_endponts = [20, 39, 41, 32, 43, 44]
|
||||
# print(json.dumps(stacks,indent=2))
|
||||
webhooks = {}
|
||||
for s in stacks:
|
||||
@@ -661,11 +663,15 @@ class PortainerApi:
|
||||
diff_stacks = ['mediacenter']
|
||||
for stack in stacks:
|
||||
server = ""
|
||||
print("Stack:", stack)
|
||||
print("Endpoint:", endpoint)
|
||||
if stack in diff_stacks:
|
||||
if self.endpoint_name == "nas":
|
||||
if endpoint == "nas":
|
||||
server = "_nas"
|
||||
elif self.endpoint_name == "m-server":
|
||||
elif endpoint == "m-s":
|
||||
server = "_m-server"
|
||||
|
||||
|
||||
if stack_mode == "swarm":
|
||||
swarm_id = self.get_swarm_id(endpoint)
|
||||
p = "swarm"
|
||||
|
||||
Reference in New Issue
Block a user