Compare commits

10 Commits
Author SHA1 Message Date
marc b3854ccef1 main.py 2022-11-04 01:35:24 +01:00
marc 7cca0799f9 exposed 2022-11-04 01:03:50 +01:00
marc 3a2ce2c96e ps all done 2022-11-04 00:57:22 +01:00
marc 8867d6c117 images 2022-11-03 22:50:02 +01:00
marc bb740916dd blacked 2022-11-03 22:24:43 +01:00
marc 020f9fe24d if main 2022-11-03 22:24:01 +01:00
marc e9e795c9d7 change dev meaning 2022-11-03 22:19:39 +01:00
marc c8ad1bdb09 fast api 2022-11-03 22:11:41 +01:00
marc 316aaff6d1 docker from env 2022-11-03 00:13:47 +01:00
marc 664356cbfe fuckcors 2022-11-02 23:42:26 +01:00
3 changed files with 71 additions and 3 deletions
+3 -1
View File
@@ -2,12 +2,14 @@ shell:
pipenv shell
run:
uvicorn main:app --host 0.0.0.0 --port 8000
dev:
uvicorn main:app --host 127.0.0.1 --port 8000 --reload
update:
pipenv lock --pre --clear
pipenv lock -r > requirements.txt
build: update
docker build . -t marcpartensky/docker-api
dev: update
builddev: update
docker-compose up -d --build docker-api
push: build
docker push marcpartensky/docker-api
+1
View File
@@ -12,6 +12,7 @@ uvicorn = "*"
black = "*"
pylint = "*"
jedi = "*"
ipython = "*"
[requires]
python_version = "3.9.4"
+67 -2
View File
@@ -5,11 +5,44 @@ import docker
from typing import Optional
from fastapi import FastAPI
from fastapi.openapi.utils import get_openapi
from fastapi.middleware.cors import CORSMiddleware
client = docker.DockerClient()
client = docker.from_env()
app = FastAPI()
origins = [
"*",
]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=[""],
allow_headers=[""],
)
def custom_openapi():
if app.openapi_schema:
return app.openapi_schema
openapi_schema = get_openapi(
title="Custom title",
version="2.5.0",
description="This is a very custom OpenAPI schema",
routes=app.routes,
)
openapi_schema["info"]["x-logo"] = {
"url": "https://fastapi.tiangolo.com/img/logo-margin/logo-teal.png"
}
app.openapi_schema = openapi_schema
return app.openapi_schema
app.openapi = custom_openapi
@app.get("/")
async def index():
@@ -30,7 +63,28 @@ async def images():
@app.get("/ps")
async def ps_all():
"""List all containers."""
return [c.attrs for c in client.containers.list()]
containers = []
for raw_container in client.containers.list():
health = None
if "Health" in raw_container.attrs["State"]:
health = raw_container.attrs["State"]["Health"]["Status"]
exposed_ports = None
if "ExposedPorts" in raw_container.attrs["Config"]:
exposed_ports=list(raw_container.attrs["Config"]["ExposedPorts"].keys())
container = dict(
id=raw_container.id,
name=raw_container.name,
image=raw_container.image.tags,
status=raw_container.status,
started_at=raw_container.attrs["State"]["StartedAt"],
finished_at=raw_container.attrs["State"]["FinishedAt"],
health=health,
exposed_ports=exposed_ports,
ports=list(raw_container.attrs["NetworkSettings"]["Ports"].keys()),
networks=list(raw_container.attrs["NetworkSettings"]["Networks"].keys())
)
containers.append(container)
return containers
@app.get("/ps/ids")
@@ -120,3 +174,14 @@ async def unpause(id: str):
container = client.containers.get(id)
container.unpause()
return "unpaused"
if __name__ == "__main__":
import os, uvicorn
uvicorn.run(
"app",
host=os.environ.get("HOST") or "localhost",
port=os.environ.get("PORT") or "8000",
log_level=os.environ.get("LOG_LEVEL") or "info",
)