90 lines
2.4 KiB
Python
90 lines
2.4 KiB
Python
|
from aiohttp import web
|
||
|
import docker
|
||
|
import aiodocker
|
||
|
import base64
|
||
|
import auth
|
||
|
|
||
|
client = docker.from_env()
|
||
|
docker = aiodocker.Docker()
|
||
|
|
||
|
async def start(request):
|
||
|
if(not auth.authorise(request)):
|
||
|
print("Not authorised")
|
||
|
return web.Response(status=401)
|
||
|
try:
|
||
|
container = await getContainer(request)
|
||
|
await container.start()
|
||
|
status=200
|
||
|
except:
|
||
|
status = 500
|
||
|
return web.Response(status=status)
|
||
|
|
||
|
async def stop(request):
|
||
|
if(not auth.authorise(request)):
|
||
|
print("Not authorised")
|
||
|
return web.Response(status=401)
|
||
|
try:
|
||
|
container = await getContainer(request)
|
||
|
await container.stop()
|
||
|
status=200
|
||
|
except:
|
||
|
status=500
|
||
|
return web.Response(status=status)
|
||
|
|
||
|
async def status(request):
|
||
|
# if(not auth.authorise(request)):
|
||
|
# print("Not authorised")
|
||
|
# return web.Response(status=401)
|
||
|
try:
|
||
|
running="error"
|
||
|
running = getContainer(request).status
|
||
|
s=200
|
||
|
except:
|
||
|
s=500
|
||
|
running = ""
|
||
|
finally:
|
||
|
return web.Response(status=s, body=running)
|
||
|
|
||
|
async def command(request):
|
||
|
if(not auth.authorise(request)):
|
||
|
print("Not authorised")
|
||
|
return web.Response(status=401)
|
||
|
server = request.match_info['server']
|
||
|
try:
|
||
|
container = client.containers.get(server)
|
||
|
b64cmd = request.match_info['command']
|
||
|
print(b64cmd)
|
||
|
cmd = base64.urlsafe_b64decode(b64cmd).decode('utf_8')
|
||
|
print(cmd)
|
||
|
container.exec_run(cmd="/usr/local/bin/cmd " + str(cmd))
|
||
|
s= 200
|
||
|
running="Success"
|
||
|
except:
|
||
|
s=500
|
||
|
print("Failed Command")
|
||
|
finally:
|
||
|
|
||
|
return web.Response(status=s)
|
||
|
|
||
|
async def logs(request):
|
||
|
if(not auth.authorise(request)):
|
||
|
print("Not authorised")
|
||
|
return web.Response(status=401)
|
||
|
ws = web.WebSocketResponse()
|
||
|
await ws.prepare(request)
|
||
|
server = request.match_info['server']
|
||
|
docker = aiodocker.Docker()
|
||
|
container = await docker.containers.get(server)
|
||
|
async for line in container.log(stdout=True, follow=True, tail=5000):
|
||
|
if ws.closed:
|
||
|
break
|
||
|
#print(line)
|
||
|
await ws.send_str(line)
|
||
|
await docker.close()
|
||
|
print("Closed")
|
||
|
return ws
|
||
|
|
||
|
async def getContainer(request):
|
||
|
server = request.match_info['server']
|
||
|
return await docker.containers.get(server)
|
||
|
|