mirror of
https://gitlab.sectorq.eu/jaydee/portainer.git
synced 2026-05-04 19:39:50 +02:00
Compare commits
2 Commits
4a3609ef27
...
5e36820f88
| Author | SHA1 | Date | |
|---|---|---|---|
| 5e36820f88 | |||
| 546f695a0d |
@@ -140,7 +140,7 @@ parser.add_argument(
|
|||||||
default=None,
|
default=None,
|
||||||
help="Service ID to limit service operations",
|
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("--action", "-a", type=str, default=None, help="Action to perform")
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--autostart", "-Z", action="store_true", help="Auto-start created stacks"
|
"--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("--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("--deploy-mode", "-m", type=str, default="git", help="Deploy mode")
|
||||||
parser.add_argument("--stack-mode", "-w", default=None, help="Stack 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(
|
parser.add_argument(
|
||||||
"-E", "--excluded",
|
"-E", "--excluded",
|
||||||
nargs="+",
|
nargs="+",
|
||||||
@@ -322,7 +324,7 @@ def prompt_missing_args(args_in, defaults_in, fields, action=None,stacks=None):
|
|||||||
value_in.sort()
|
value_in.sort()
|
||||||
|
|
||||||
if "pihole" in value_in:
|
if "pihole" in value_in:
|
||||||
if args.action == "delete_stack":
|
if args.action in ["delete_stack","stop_stack"]:
|
||||||
value_in.remove("pihole")
|
value_in.remove("pihole")
|
||||||
value_in.append("pihole")
|
value_in.append("pihole")
|
||||||
else:
|
else:
|
||||||
@@ -469,7 +471,6 @@ if __name__ == "__main__":
|
|||||||
for key, value in secrets.items():
|
for key, value in secrets.items():
|
||||||
res = por.create_secret(key, value, args.endpoint_id, args.timeout)
|
res = por.create_secret(key, value, args.endpoint_id, args.timeout)
|
||||||
print(res)
|
print(res)
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
if args.action == "delete_stack":
|
if args.action == "delete_stack":
|
||||||
args = prompt_missing_args(
|
args = prompt_missing_args(
|
||||||
@@ -490,7 +491,6 @@ if __name__ == "__main__":
|
|||||||
args.endpoint_id,
|
args.endpoint_id,
|
||||||
args.stack,
|
args.stack,
|
||||||
)
|
)
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
if args.action == "create_stack":
|
if args.action == "create_stack":
|
||||||
por.action = "create_stack"
|
por.action = "create_stack"
|
||||||
@@ -515,7 +515,7 @@ if __name__ == "__main__":
|
|||||||
args.autostart,
|
args.autostart,
|
||||||
args.stack_mode,
|
args.stack_mode,
|
||||||
)
|
)
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
if args.action == "stop_stack":
|
if args.action == "stop_stack":
|
||||||
args = prompt_missing_args(
|
args = prompt_missing_args(
|
||||||
@@ -529,7 +529,6 @@ if __name__ == "__main__":
|
|||||||
)
|
)
|
||||||
|
|
||||||
por.stop_stack(args.stack, args.endpoint_id)
|
por.stop_stack(args.stack, args.endpoint_id)
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
if args.action == "start_stack":
|
if args.action == "start_stack":
|
||||||
args = prompt_missing_args(
|
args = prompt_missing_args(
|
||||||
@@ -542,7 +541,7 @@ if __name__ == "__main__":
|
|||||||
],
|
],
|
||||||
)
|
)
|
||||||
por.start_stack(args.stack, args.endpoint_id)
|
por.start_stack(args.stack, args.endpoint_id)
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
if args.action == "restart_service":
|
if args.action == "restart_service":
|
||||||
args = prompt_missing_args(
|
args = prompt_missing_args(
|
||||||
@@ -554,7 +553,7 @@ if __name__ == "__main__":
|
|||||||
],
|
],
|
||||||
)
|
)
|
||||||
por.restart_service(args.endpoint_id, "lala")
|
por.restart_service(args.endpoint_id, "lala")
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
if args.action == "update_service":
|
if args.action == "update_service":
|
||||||
args = prompt_missing_args(
|
args = prompt_missing_args(
|
||||||
@@ -568,7 +567,7 @@ if __name__ == "__main__":
|
|||||||
por.update_service()
|
por.update_service()
|
||||||
if args.launcher:
|
if args.launcher:
|
||||||
input("\nPress ENTER to continue...")
|
input("\nPress ENTER to continue...")
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
if args.action == "update_containers":
|
if args.action == "update_containers":
|
||||||
|
|
||||||
@@ -583,7 +582,6 @@ if __name__ == "__main__":
|
|||||||
],
|
],
|
||||||
)
|
)
|
||||||
por.update_containers()
|
por.update_containers()
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
if args.action == "list_stacks":
|
if args.action == "list_stacks":
|
||||||
args = prompt_missing_args(
|
args = prompt_missing_args(
|
||||||
@@ -598,21 +596,19 @@ if __name__ == "__main__":
|
|||||||
if args.launcher:
|
if args.launcher:
|
||||||
input("Press ENTER to continue...")
|
input("Press ENTER to continue...")
|
||||||
# print(json.dumps(por.all_data, indent=2))
|
# print(json.dumps(por.all_data, indent=2))
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
if args.action == "list_all_stacks":
|
if args.action == "list_all_stacks":
|
||||||
por.get_stacks_failed()
|
por.get_stacks_failed()
|
||||||
if args.launcher:
|
if args.launcher:
|
||||||
input("Press ENTER to continue...")
|
input("Press ENTER to continue...")
|
||||||
# print(json.dumps(por.all_data, indent=2))
|
# print(json.dumps(por.all_data, indent=2))
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
if args.action == "delete_ophaned_stacks":
|
if args.action == "delete_ophaned_stacks":
|
||||||
por.delete_failed_stack()
|
por.delete_failed_stack()
|
||||||
if args.launcher:
|
if args.launcher:
|
||||||
input("Press ENTER to continue...")
|
input("Press ENTER to continue...")
|
||||||
# print(json.dumps(por.all_data, indent=2))
|
# print(json.dumps(por.all_data, indent=2))
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
|
|
||||||
if args.action == "list_containers":
|
if args.action == "list_containers":
|
||||||
@@ -628,7 +624,6 @@ if __name__ == "__main__":
|
|||||||
print("\n".join(por.get_containers()))
|
print("\n".join(por.get_containers()))
|
||||||
if args.launcher:
|
if args.launcher:
|
||||||
input("\nPress ENTER to continue...")
|
input("\nPress ENTER to continue...")
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
if args.action == "update_stack":
|
if args.action == "update_stack":
|
||||||
args = prompt_missing_args(
|
args = prompt_missing_args(
|
||||||
@@ -643,17 +638,16 @@ if __name__ == "__main__":
|
|||||||
por.update_stack(args)
|
por.update_stack(args)
|
||||||
if args.launcher:
|
if args.launcher:
|
||||||
input("\nPress ENTER to continue...")
|
input("\nPress ENTER to continue...")
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
if args.action == "print_all_data":
|
if args.action == "print_all_data":
|
||||||
print(json.dumps(por.all_data, indent=2))
|
print(json.dumps(por.all_data, indent=2))
|
||||||
if args.launcher:
|
if args.launcher:
|
||||||
input("\nPress ENTER to continue...")
|
input("\nPress ENTER to continue...")
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
if args.action == "update_status":
|
if args.action == "update_status":
|
||||||
por.update_status(args.endpoint_id, args.stack)
|
por.update_status(args.endpoint_id, args.stack)
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
if args.action == "list_endpoints":
|
if args.action == "list_endpoints":
|
||||||
eps = por.get_endpoints(args)
|
eps = por.get_endpoints(args)
|
||||||
@@ -664,7 +658,7 @@ if __name__ == "__main__":
|
|||||||
print(tabulate(export_data, headers=headers, tablefmt="github"))
|
print(tabulate(export_data, headers=headers, tablefmt="github"))
|
||||||
if args.launcher:
|
if args.launcher:
|
||||||
input("\nPress ENTER to continue...")
|
input("\nPress ENTER to continue...")
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
if args.action == "stop_containers":
|
if args.action == "stop_containers":
|
||||||
# TODO: does not work
|
# TODO: does not work
|
||||||
@@ -678,14 +672,14 @@ if __name__ == "__main__":
|
|||||||
)
|
)
|
||||||
if por.all_data["endpoints_status"][args.endpoint_id] != 1:
|
if por.all_data["endpoints_status"][args.endpoint_id] != 1:
|
||||||
print(f"Endpoint {por.get_endpoint_name(args.endpoint_id)} is offline")
|
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)}")
|
print(f"Stopping containers on {por.get_endpoint_name(args.endpoint_id)}")
|
||||||
cont = []
|
cont = []
|
||||||
for c in por.all_data["containers"][args.endpoint_id]:
|
for c in por.all_data["containers"][args.endpoint_id]:
|
||||||
if args.stack in (c, "all"):
|
if args.stack in (c, "all"):
|
||||||
cont += por.all_data["containers"][args.endpoint_id][c]
|
cont += por.all_data["containers"][args.endpoint_id][c]
|
||||||
por.stop_containers(args.endpoint_id, cont)
|
por.stop_containers(args.endpoint_id, cont)
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
if args.action == "start_containers":
|
if args.action == "start_containers":
|
||||||
print("Starting containers")
|
print("Starting containers")
|
||||||
@@ -695,7 +689,7 @@ if __name__ == "__main__":
|
|||||||
if args.stack in (c, "all"):
|
if args.stack in (c, "all"):
|
||||||
cont += por.all_data["containers"][args.endpoint_id][c]
|
cont += por.all_data["containers"][args.endpoint_id][c]
|
||||||
por.start_containers(args.endpoint_id, cont)
|
por.start_containers(args.endpoint_id, cont)
|
||||||
sys.exit()
|
|
||||||
if args.action == "start_containers":
|
if args.action == "start_containers":
|
||||||
print("Starting containers")
|
print("Starting containers")
|
||||||
cont = []
|
cont = []
|
||||||
@@ -704,10 +698,27 @@ if __name__ == "__main__":
|
|||||||
if args.stack in (c, "all"):
|
if args.stack in (c, "all"):
|
||||||
cont += por.all_data["containers"][args.endpoint_id][c]
|
cont += por.all_data["containers"][args.endpoint_id][c]
|
||||||
por.start_containers(args.endpoint_id, cont)
|
por.start_containers(args.endpoint_id, cont)
|
||||||
sys.exit()
|
|
||||||
if args.action == "refresh_environment":
|
if args.action == "refresh_environment":
|
||||||
cont = por.refresh()
|
cont = por.refresh()
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
if args.action == "refresh_status":
|
if args.action == "refresh_status":
|
||||||
por.refresh_status(args)
|
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)
|
||||||
Binary file not shown.
Binary file not shown.
+7
-1
@@ -37,6 +37,7 @@ class PortainerApi:
|
|||||||
self.timeout = timeout
|
self.timeout = timeout
|
||||||
self.git_url = "git@gitlab.sectorq.eu:home/docker-compose.git"
|
self.git_url = "git@gitlab.sectorq.eu:home/docker-compose.git"
|
||||||
self.stack_name = None
|
self.stack_name = None
|
||||||
|
self.stack_names = []
|
||||||
self.stacks_all = {}
|
self.stacks_all = {}
|
||||||
self.stack_id = None
|
self.stack_id = None
|
||||||
self.stack_ids = []
|
self.stack_ids = []
|
||||||
@@ -122,6 +123,7 @@ class PortainerApi:
|
|||||||
self.cur_config = config
|
self.cur_config = config
|
||||||
|
|
||||||
def get_site(self, site):
|
def get_site(self, site):
|
||||||
|
self.site = site
|
||||||
if site == "portainer":
|
if site == "portainer":
|
||||||
self.base_url = os.getenv(
|
self.base_url = os.getenv(
|
||||||
"PORTAINER_URL", "https://portainer.sectorq.eu/api"
|
"PORTAINER_URL", "https://portainer.sectorq.eu/api"
|
||||||
@@ -1221,6 +1223,8 @@ class PortainerApi:
|
|||||||
self.get_endpoint(endpoint_id)
|
self.get_endpoint(endpoint_id)
|
||||||
size = 0
|
size = 0
|
||||||
if stack is not None:
|
if stack is not None:
|
||||||
|
if type(stack) == str:
|
||||||
|
stack = stack.split(",")
|
||||||
for s in stack:
|
for s in stack:
|
||||||
if len(s) > size:
|
if len(s) > size:
|
||||||
size = len(s)
|
size = len(s)
|
||||||
@@ -1261,6 +1265,8 @@ class PortainerApi:
|
|||||||
self.get_endpoint(endpoint_id)
|
self.get_endpoint(endpoint_id)
|
||||||
size = 0
|
size = 0
|
||||||
if stack is not None:
|
if stack is not None:
|
||||||
|
if type(stack) == str:
|
||||||
|
stack = stack.split(",")
|
||||||
for s in stack:
|
for s in stack:
|
||||||
if size < len(s):
|
if size < len(s):
|
||||||
size = len(s)
|
size = len(s)
|
||||||
@@ -1269,7 +1275,7 @@ class PortainerApi:
|
|||||||
self.stack_ids = list(dict.fromkeys(self.stack_ids))
|
self.stack_ids = list(dict.fromkeys(self.stack_ids))
|
||||||
for stck in self.stack_ids:
|
for stck in self.stack_ids:
|
||||||
print(
|
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="",
|
end="",
|
||||||
flush=True
|
flush=True
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user