Compare commits
5 Commits
8a84a70c59
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| e885d5dc27 | |||
| 10a4c05912 | |||
| 02f73bcf27 | |||
| 7dedfdb5d7 | |||
| f234ef2015 |
49
main.py
49
main.py
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
|
from time import sleep
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
@@ -27,21 +28,30 @@ class PortainerClient:
|
|||||||
"X-API-Key": self.access_token
|
"X-API-Key": self.access_token
|
||||||
}
|
}
|
||||||
|
|
||||||
def list_endpoints(self):
|
def _get(self, uri):
|
||||||
response = requests.get(f"{self.api_url}/endpoints", headers=self._get_headers())
|
response = requests.get(f"{self.api_url}/{uri}", headers=self._get_headers())
|
||||||
return response.json()
|
return response.json()
|
||||||
|
|
||||||
|
def list_endpoints(self):
|
||||||
|
return self._get("endpoints")
|
||||||
|
|
||||||
def list_stacks(self, endpoint_id=None):
|
def list_stacks(self, endpoint_id=None):
|
||||||
filters = f'?filters={{"EndpointID":{endpoint_id}}}' if endpoint_id else ""
|
filters = f'?filters={{"EndpointID":{endpoint_id}}}' if endpoint_id else ""
|
||||||
response = requests.get(f"{self.api_url}/stacks{filters}", headers=self._get_headers())
|
return self._get(f'stacks{filters}')
|
||||||
return response.json()
|
|
||||||
|
|
||||||
def get_stack(self, stack_id):
|
def get_stack(self, stack_id):
|
||||||
response = requests.get(f"{self.api_url}/stacks/{stack_id}", headers=self._get_headers())
|
return self._get(f'stacks/{stack_id}')
|
||||||
return response.json()
|
|
||||||
|
|
||||||
def get_stack_file(self, stack_id):
|
def get_stack_file(self, stack_id):
|
||||||
response = requests.get(f"{self.api_url}/stacks/{stack_id}/file", headers=self._get_headers())
|
return self._get(f'stacks/{stack_id}/file')
|
||||||
|
|
||||||
|
def _put(self, uri, payload):
|
||||||
|
response = requests.put(
|
||||||
|
f"{self.api_url}/{uri}",
|
||||||
|
headers=self._get_headers(),
|
||||||
|
json=payload
|
||||||
|
)
|
||||||
|
|
||||||
return response.json()
|
return response.json()
|
||||||
|
|
||||||
def upgrade_stack(self, stack):
|
def upgrade_stack(self, stack):
|
||||||
@@ -52,22 +62,12 @@ class PortainerClient:
|
|||||||
"StackFileContent": file_response["StackFileContent"],
|
"StackFileContent": file_response["StackFileContent"],
|
||||||
"Env": stack["Env"]
|
"Env": stack["Env"]
|
||||||
}
|
}
|
||||||
response = requests.put(
|
|
||||||
f"{self.api_url}/stacks/{stack['Id']}?endpointId={stack['EndpointId']}",
|
|
||||||
headers=self._get_headers(),
|
|
||||||
json=payload
|
|
||||||
)
|
|
||||||
|
|
||||||
return response.json()
|
return self._put(f"stacks/{stack['Id']}?endpointId={stack['EndpointId']}", payload)
|
||||||
|
|
||||||
def list_stack_containers(self, endpoint, stack_name):
|
def list_stack_containers(self, endpoint, stack_name):
|
||||||
filters = '{"label":["com.docker.compose.project=' + stack_name + '"]}'
|
filters = '{"label":["com.docker.compose.project=' + stack_name + '"]}'
|
||||||
response = requests.get(
|
return self._get(f'endpoints/{endpoint}/docker/containers/json?all=1&filters={filters}')
|
||||||
f"{self.api_url}/endpoints/{endpoint}/docker/containers/json?all=1&filters={filters}",
|
|
||||||
headers=self._get_headers()
|
|
||||||
)
|
|
||||||
|
|
||||||
return response.json()
|
|
||||||
|
|
||||||
def update_image(self, endpoint, image):
|
def update_image(self, endpoint, image):
|
||||||
response = requests.post(
|
response = requests.post(
|
||||||
@@ -88,6 +88,14 @@ class PortainerClient:
|
|||||||
headers=self._get_headers()
|
headers=self._get_headers()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def ping_server(self):
|
||||||
|
try:
|
||||||
|
r = requests.get(f"{self.portainer_url}/", headers=self._get_headers())
|
||||||
|
except requests.exceptions.ConnectionError:
|
||||||
|
return False
|
||||||
|
|
||||||
|
return r.status_code == 200
|
||||||
|
|
||||||
|
|
||||||
def update_repositories():
|
def update_repositories():
|
||||||
for repo_path in config.git_repositories:
|
for repo_path in config.git_repositories:
|
||||||
@@ -136,6 +144,9 @@ def upgrade_endpoint_stack(client, endpoint):
|
|||||||
print(f"{stack_name} was updated. Restarting...")
|
print(f"{stack_name} was updated. Restarting...")
|
||||||
if endpoint_id == 2 and stack_name in ('portainer', 'traefik'):
|
if endpoint_id == 2 and stack_name in ('portainer', 'traefik'):
|
||||||
upgrade_local_stack(stack)
|
upgrade_local_stack(stack)
|
||||||
|
while not client.ping_server():
|
||||||
|
print("Waiting for server to be back online...")
|
||||||
|
sleep(1)
|
||||||
else:
|
else:
|
||||||
client.upgrade_stack(stack)
|
client.upgrade_stack(stack)
|
||||||
print(f"{stack_name} restarted.")
|
print(f"{stack_name} restarted.")
|
||||||
|
|||||||
Reference in New Issue
Block a user