[gbm-web] Add redirector image
- From: Bartłomiej Piotrowski <bpiotrowski src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gbm-web] Add redirector image
- Date: Wed, 28 Oct 2020 19:46:53 +0000 (UTC)
commit 7a4ab651e82cb2d2b74bf5e77c7ed0b9c33f72f1
Author: Bartłomiej Piotrowski <bpiotrowski gnome org>
Date: Wed Oct 28 20:46:35 2020 +0100
Add redirector image
.gitignore | 1 +
.gitlab-ci.yml | 13 +++++++++
redirector/Dockerfile | 11 ++++++++
redirector/main.py | 64 +++++++++++++++++++++++++++++++++++++++++++++
redirector/requirements.txt | 13 +++++++++
5 files changed, 102 insertions(+)
---
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..bee8a64
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+__pycache__
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 0446a62..9a4ecbb 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -10,3 +10,16 @@ flat-manager:
- buildah bud -t flat-manager .
- buildah tag flat-manager $CI_REGISTRY_IMAGE/flat-manager:$CI_COMMIT_SHORT_SHA
$CI_REGISTRY_IMAGE/flat-manager:latest
- buildah push $CI_REGISTRY_IMAGE/flat-manager:$CI_COMMIT_SHORT_SHA
$CI_REGISTRY_IMAGE/flat-manager:latest
+
+redirector:
+ image: 'registry.gitlab.gnome.org/infrastructure/oci-images/buildah:latest'
+ stage: test
+ only:
+ changes:
+ - "redirector/*"
+ script:
+ - cd redirector
+ - buildah login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
+ - buildah bud -t redirector .
+ - buildah tag redirector $CI_REGISTRY_IMAGE/redirector:$CI_COMMIT_SHORT_SHA
$CI_REGISTRY_IMAGE/redirector:latest
+ - buildah push $CI_REGISTRY_IMAGE/redirector:$CI_COMMIT_SHORT_SHA $CI_REGISTRY_IMAGE/redirector:latest
diff --git a/redirector/Dockerfile b/redirector/Dockerfile
new file mode 100644
index 0000000..ec6e596
--- /dev/null
+++ b/redirector/Dockerfile
@@ -0,0 +1,11 @@
+FROM python:3.8-slim
+
+EXPOSE 8000
+ENV PYTHONPATH=/app
+
+COPY requirements.txt /requirements.txt
+RUN pip install -r /requirements.txt && rm -f /requirements.txt
+
+COPY ./ /app
+
+CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
diff --git a/redirector/main.py b/redirector/main.py
new file mode 100644
index 0000000..30544a4
--- /dev/null
+++ b/redirector/main.py
@@ -0,0 +1,64 @@
+import os.path
+
+import boto3
+from fastapi import FastAPI, Response, status
+from fastapi.responses import RedirectResponse
+from pydantic import BaseSettings
+
+
+class Settings(BaseSettings):
+ aws_access_key_id: str
+ aws_secret_access_key: str
+ bucket_url: str = "https://gnome-build-meta.s3.amazonaws.com"
+ bucket_name: str = "gnome-build-meta"
+ mirror_url: str = "https://download.gnome.org/gnomeos"
+ volume_path: str = "/ftp/pub/GNOME/gnomeos"
+
+
+cfg = Settings()
+app = FastAPI()
+
+
+@app.get("/status")
+def healthcheck():
+ return {"status": "OK"}
+
+
+@app.get("/latest/{filename}")
+def get_nightly(filename: str):
+ if filename.endswith(".iso"):
+ latest_filename = "latest-iso"
+ elif filename.endswith(".img.xz"):
+ latest_filename = "latest-disk"
+ else:
+ return Response(status_code=status.HTTP_404_NOT_FOUND)
+
+ s3 = boto3.resource('s3')
+ latest_file_key = f"nightly/{latest_filename}"
+ obj = s3.Object(cfg.bucket_name, latest_file_key)
+ latest = obj.get()['Body'].read().decode('utf-8')
+
+ response = RedirectResponse(f"{cfg.bucket_url}/{latest}")
+ response.status_code = status.HTTP_301_MOVED_PERMANENTLY
+ return response
+
+
+@app.get("/{version}/{filename}")
+def get_versioned(version: str, filename: str):
+ filepath = f"{cfg.volume_path}/{version}/{filename}"
+
+ # Redirect to mirror if file is available in the FTP volume
+ if os.path.isfile(filepath):
+ response = RedirectResponse(f"{cfg.mirror_url}/{version}/{filename}")
+ response.status_code = status.HTTP_302_FOUND
+ return response
+
+ # Otherwise, redirect to S3
+ if "." in version:
+ folder = "tag"
+ else:
+ folder = "nightly"
+
+ response = RedirectResponse(f"{cfg.bucket_url}/{folder}/{version}/{filename}")
+ response.status_code = status.HTTP_301_MOVED_PERMANENTLY
+ return response
diff --git a/redirector/requirements.txt b/redirector/requirements.txt
new file mode 100644
index 0000000..b3c9f3c
--- /dev/null
+++ b/redirector/requirements.txt
@@ -0,0 +1,13 @@
+boto3==1.16.6
+botocore==1.19.6
+click==7.1.2
+fastapi==0.61.1
+h11==0.11.0
+jmespath==0.10.0
+pydantic==1.7
+python-dateutil==2.8.1
+s3transfer==0.3.3
+six==1.15.0
+starlette==0.13.6
+urllib3==1.25.11
+uvicorn==0.12.2
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]