fix(credentials): persist postgres/pgadmin access entries with group_id - #164
Open
Dilmand wants to merge 1 commit into
Open
fix(credentials): persist postgres/pgadmin access entries with group_id#164Dilmand wants to merge 1 commit into
Dilmand wants to merge 1 commit into
Conversation
PostgreSQL- und pgAdmin-Credentials waren auf staging zwar generiert, landeten
aber nie in der DeploymentInstanceAccess-Tabelle. Im Frontend zeigte die
Credentials-Sektion daher nur den Teacher-SSH-Eintrag — kein DB-Connect, keine
pgAdmin-URL, keine Gruppen-DB-Zugaenge.
Ursache: `deploy_tasks.py` baute das `user_json` an `persist_credentials_for_stack`
nur mit dem `instance`-Feld (Linux-SSH der Gruppen + Teacher), aber ohne
`applications[]`. Der Persistenz-Service unterstuetzt `applications[]` schon —
nur niemand fuettert es.
Fixes:
* `deploy_tasks.py`: collect alle non-linux Credential-Types die der
CredentialGeneratorService produziert hat (postgres, pgadmin, ...) und baue
pro Type einen Eintrag in `applications[]` mit den Gruppen-Credentials und
den Teacher-Admin-Credentials. `group_id` wird wie beim instance-Pfad aus
`GroupInfo.course_group_id` durchgereicht.
* `deployment_credential_service._extract_access_entries`:
- kopiert jetzt `group_id` aus jeder application-credential (vorher fehlte
es → alle Postgres/pgAdmin-Eintraege landeten als Lecturer-Row mit
group_id=NULL und damit im "Dozent"-Tab statt im "Gruppen"-Tab).
- mappt pgAdmin auf `AccessType.WEB_URL` (frontend rendert die URL klickbar);
postgres bleibt `AccessType.DATABASE` und bekommt jetzt eine richtige
postgresql://-Connection-URL inkl. database_name.
* `tests/unit/test_deployment_credential_service.py`: erwartet jetzt das
WEB_URL-Mapping fuer pgAdmin (statt blanket "alles DATABASE").
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Was war kaputt
Auf staging zeigte die Credentials-Sektion fuer
ansible_postgres_group_db-Deploys nur einen Eintrag: SSHlecturer@…. Keine Postgres-Connect-URL, keine pgAdmin-URL, keine Gruppen-DB-Logins.Ursache: Der CredentialGeneratorService erzeugt zwar
{postgres: {...}, pgadmin: {...}}pro Gruppe und fuer den Teacher, aberdeploy_tasks.pypackte beim Aufbau desuser_json-Payloads nur dasinstance-Feld zusammen (Linux-SSH). Dasapplications[]-Feld blieb leer, der Persistenz-Service_extract_access_entrieshatte nichts zu extrahieren.Fix
src/tasks/deploy_tasks.pyBeim Aufbau von
credentials_for_db:generatedproduziert hat (durch eine Iteration ueberdeployment_groups[*].<type>undteacher.<type>, mit Skip auf Metakeys wieusername,students,group_nameetc.).application-Entry bauen mit:credentials[]— pro Gruppe ein Eintrag mitemail/db_user/password/database_name/group_id(course_group_id-Stamp wie schon beiinstance.credentials)admin_credentials— Teacher-Variante (group_id=NULL, landet in "Dozent"-Tab)src/services/deployment_credential_service.py_extract_access_entrieshatte zwei kleinere Bugs die durch die staging-Logik nie zum Tragen kamen (weilapplications[]nie befuellt wurde):group_idwurde fuerapplication.credentialsnicht weitergereicht — selbst wenn jemand das Feld gesetzt haette, waeren alle DB/Web-Eintraege als Lecturer-Row gespeichert worden (im "Dozent"-Tab statt im "Gruppen"-Tab).AccessType.DATABASEgemappt stattWEB_URL. Der Frontend-Code rendert die beiden unterschiedlich (DB → Connection-String code-Block, Web-URL → klickbarer Link). Per database-name wird ausserdem jetzt einepostgresql://user@ip/dbname-URL gebaut.tests/unit/test_deployment_credential_service.pytest_extracts_postgres_credentialserwartete pauschalAccessType.DATABASEfuer alle vier Eintraege. Geupdated auf das gemischte Mapping (postgres → DATABASE, pgadmin → WEB_URL).Wie testen
PostgreSQL Group DB-Template + 1-2 Gruppen anlegen.SSH lecturer@<ip>,DATABASE postgresql://teacher@<ip>/...,WEB_URL http://<ip>/pgadmin4/SELECT access_type, username, group_id FROM deployment_instance_access WHERE deployment_instance_id IN (SELECT id FROM deployment_instances WHERE deployment_id='<id>')sollte ~5+ Rows liefern statt 1.Tests
Die zwei
test_github_app_service-Fails kommen aus der Env-Konfig — sie existieren auf staging genauso (nicht durch diesen PR verursacht).