Compare commits
6 Commits
c938b81172
...
07de2401d7
Author | SHA1 | Date | |
---|---|---|---|
07de2401d7 | |||
d86948aee2 | |||
6b2e6bf392 | |||
913da290f1 | |||
5c1d291fac | |||
76f732adb6 |
@ -37,6 +37,7 @@ package() {
|
||||
sed -i "s/join(dirname(__file__), 'cert\//join('\/var\/lib\/$pkgname', 'cert\//g" "$srcdir/$pkgname/app/main.py"
|
||||
install -Dm755 "$srcdir/$pkgname/app/main.py" "$pkgdir/opt/$pkgname/main.py"
|
||||
install -Dm755 "$srcdir/$pkgname/app/orm.py" "$pkgdir/opt/$pkgname/orm.py"
|
||||
install -Dm755 "$srcdir/$pkgname/app/util.py" "$pkgdir/opt/$pkgname/util.py"
|
||||
install -Dm644 "$srcdir/$pkgname.default" "$pkgdir/etc/default/$pkgname"
|
||||
install -Dm644 "$srcdir/$pkgname.service" "$pkgdir/usr/lib/systemd/system/$pkgname.service"
|
||||
}
|
||||
|
@ -94,6 +94,10 @@ test:
|
||||
|
||||
.test:linux:
|
||||
stage: test
|
||||
rules:
|
||||
- changes:
|
||||
- .DEBIAN/**/*
|
||||
- app/**/*
|
||||
needs:
|
||||
- job: build:apt
|
||||
artifacts: true
|
||||
@ -104,14 +108,16 @@ test:
|
||||
script:
|
||||
# test installation
|
||||
- apt-get install -q -y ./build/build.deb --fix-missing
|
||||
- openssl req -x509 -newkey rsa:2048 -nodes -out /etc/fastapi-dls/webserver.crt -keyout /etc/fastapi-dls/webserver.key -days 7 -subj "/C=DE/O=GitLab-CI/OU=Test/CN=localhost"
|
||||
# copy example config from GitLab-CI-Variables
|
||||
#- cat ${EXAMPLE_CONFIG} > /etc/fastapi-dls/env
|
||||
# start service in background
|
||||
- cd /usr/share/fastapi-dls/app
|
||||
- uvicorn --host 127.0.0.1 --port 443
|
||||
- uvicorn main:app
|
||||
--host 127.0.0.1 --port 443
|
||||
--app-dir /usr/share/fastapi-dls/app
|
||||
--ssl-keyfile /etc/fastapi-dls/webserver.key
|
||||
--ssl-certfile /opt/fastapi-dls/webserver.crt
|
||||
--ssl-certfile /etc/fastapi-dls/webserver.crt
|
||||
--proxy-headers &
|
||||
- FASTAPI_DLS_PID=$!
|
||||
- echo "Started service with pid $FASTAPI_DLS_PID"
|
||||
@ -132,6 +138,10 @@ test:ubuntu:
|
||||
|
||||
test:archlinux:
|
||||
image: archlinux:base
|
||||
rules:
|
||||
- changes:
|
||||
- .PKGBUILD/**/*
|
||||
- app/**/*
|
||||
needs:
|
||||
- job: build:pacman
|
||||
artifacts: true
|
||||
@ -171,9 +181,6 @@ deploy:apt:
|
||||
stage: deploy
|
||||
rules:
|
||||
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
||||
- changes:
|
||||
- .DEBIAN/**/*
|
||||
- app/**/*
|
||||
needs:
|
||||
- job: build:apt
|
||||
artifacts: true
|
||||
@ -212,14 +219,11 @@ deploy:apt:
|
||||
deploy:pacman:
|
||||
image: archlinux:base-devel
|
||||
stage: deploy
|
||||
rules:
|
||||
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
||||
# - changes:
|
||||
# - .PKGBUILD/**/*
|
||||
# - app/**/*
|
||||
needs:
|
||||
- job: build:pacman
|
||||
artifacts: true
|
||||
rules:
|
||||
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
||||
script:
|
||||
- source .PKGBUILD/PKGBUILD
|
||||
# fastapi-dls-1.0-1-any.pkg.tar.zst
|
||||
|
2
CODEOWNERS
Executable file
2
CODEOWNERS
Executable file
@ -0,0 +1,2 @@
|
||||
* @oscar.krause
|
||||
.PKGBUILD/ @samicrusader
|
14
README.md
14
README.md
@ -25,14 +25,22 @@ Status endpoint, used for *healthcheck*. Shows also current version and commit h
|
||||
|
||||
OpenAPI specifications rendered from `GET /openapi.json`.
|
||||
|
||||
### `GET /-/origins`
|
||||
### `GET /-/origins?leases=false`
|
||||
|
||||
List registered origins.
|
||||
|
||||
### `GET /-/leases`
|
||||
| Query Parameter | Default | Usage |
|
||||
|-----------------|---------|--------------------------------------|
|
||||
| `leases` | `false` | Include referenced leases per origin |
|
||||
|
||||
### `GET /-/leases?origin=false`
|
||||
|
||||
List current leases.
|
||||
|
||||
| Query Parameter | Default | Usage |
|
||||
|-----------------|---------|-------------------------------------|
|
||||
| `origin` | `false` | Include referenced origin per lease |
|
||||
|
||||
### `GET /client-token`
|
||||
|
||||
Generate client token, (see [installation](#installation)).
|
||||
@ -219,6 +227,8 @@ Start with `systemctl start fastapi-dls.service` and enable autostart with `syst
|
||||
|
||||
## ArchLinux (using `pacman`)
|
||||
|
||||
**Shout out to `samicrusader` who created build file for ArchLinux!**
|
||||
|
||||
Packages are available here:
|
||||
|
||||
- [GitLab-Registry](https://git.collinwebdesigns.de/oscar.krause/fastapi-dls/-/packages)
|
||||
|
21
app/main.py
21
app/main.py
@ -77,17 +77,28 @@ async def status(request: Request):
|
||||
|
||||
|
||||
@app.get('/-/origins')
|
||||
async def _origins(request: Request):
|
||||
async def _origins(request: Request, leases: bool = False):
|
||||
session = sessionmaker(bind=db)()
|
||||
response = list(map(lambda x: jsonable_encoder(x), session.query(Origin).all()))
|
||||
response = []
|
||||
for origin in session.query(Origin).all():
|
||||
x = origin.serialize()
|
||||
if leases:
|
||||
x['leases'] = list(map(lambda _: _.serialize(), Lease.find_by_origin_ref(db, origin.origin_ref)))
|
||||
response.append(x)
|
||||
session.close()
|
||||
return JSONResponse(response)
|
||||
|
||||
|
||||
@app.get('/-/leases')
|
||||
async def _leases(request: Request):
|
||||
async def _leases(request: Request, origin: bool = False):
|
||||
session = sessionmaker(bind=db)()
|
||||
response = list(map(lambda x: jsonable_encoder(x), session.query(Lease).all()))
|
||||
response = []
|
||||
for lease in session.query(Lease).all():
|
||||
x = lease.serialize()
|
||||
if origin:
|
||||
# assume that each lease has a valid origin record
|
||||
x['origin'] = session.query(Origin).filter(Origin.origin_ref == lease.origin_ref).first().serialize()
|
||||
response.append(x)
|
||||
session.close()
|
||||
return JSONResponse(response)
|
||||
|
||||
@ -106,7 +117,7 @@ async def client_token():
|
||||
"nbf": timegm(cur_time.timetuple()),
|
||||
"exp": timegm(exp_time.timetuple()),
|
||||
"update_mode": "ABSOLUTE",
|
||||
"scope_ref_list": [str(uuid4())],
|
||||
"scope_ref_list": [str(uuid4())], # this is our LEASE_REF
|
||||
"fulfillment_class_ref_list": [],
|
||||
"service_instance_configuration": {
|
||||
"nls_service_instance_ref": INSTANCE_REF,
|
||||
|
18
app/orm.py
18
app/orm.py
@ -21,6 +21,15 @@ class Origin(Base):
|
||||
def __repr__(self):
|
||||
return f'Origin(origin_ref={self.origin_ref}, hostname={self.hostname})'
|
||||
|
||||
def serialize(self) -> dict:
|
||||
return {
|
||||
'origin_ref': self.origin_ref,
|
||||
'hostname': self.hostname,
|
||||
'guest_driver_version': self.guest_driver_version,
|
||||
'os_platform': self.os_platform,
|
||||
'os_version': self.os_version,
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
def create_statement(engine: Engine):
|
||||
from sqlalchemy.schema import CreateTable
|
||||
@ -59,6 +68,15 @@ class Lease(Base):
|
||||
def __repr__(self):
|
||||
return f'Lease(origin_ref={self.origin_ref}, lease_ref={self.lease_ref}, expires={self.lease_expires})'
|
||||
|
||||
def serialize(self) -> dict:
|
||||
return {
|
||||
'lease_ref': self.lease_ref,
|
||||
'origin_ref': self.origin_ref,
|
||||
'lease_created': self.lease_created.isoformat(),
|
||||
'lease_expires': self.lease_expires.isoformat(),
|
||||
'lease_updated': self.lease_updated.isoformat(),
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
def create_statement(engine: Engine):
|
||||
from sqlalchemy.schema import CreateTable
|
||||
|
Loading…
Reference in New Issue
Block a user