Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Amélioration de la création des review apps #4523

Merged
merged 2 commits into from
Aug 21, 2024
Merged

Conversation

francoisfreitag
Copy link
Contributor

@francoisfreitag francoisfreitag commented Aug 6, 2024

  • Générer l’accès direct aux DB de review-apps existantes.

@francoisfreitag francoisfreitag added the no-changelog Ne doit pas figurer dans le journal des changements. label Aug 6, 2024
@francoisfreitag francoisfreitag self-assigned this Aug 6, 2024
@francoisfreitag francoisfreitag added the 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC label Aug 6, 2024
@francoisfreitag francoisfreitag added 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC and removed 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC labels Aug 7, 2024
@francoisfreitag francoisfreitag added 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC and removed 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC labels Aug 7, 2024
@francoisfreitag francoisfreitag added 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC and removed 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC labels Aug 7, 2024
@francoisfreitag francoisfreitag added 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC and removed 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC labels Aug 7, 2024
@francoisfreitag francoisfreitag added 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC and removed 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC labels Aug 7, 2024
@francoisfreitag francoisfreitag added 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC and removed 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC labels Aug 7, 2024
@francoisfreitag francoisfreitag added 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC and removed 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC labels Aug 7, 2024
@francoisfreitag francoisfreitag added 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC and removed 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC labels Aug 7, 2024
Copy link

🥁 La recette jetable est prête ! 👉 Je veux tester cette PR !

@francoisfreitag francoisfreitag added 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC and removed 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC labels Aug 20, 2024
@francoisfreitag
Copy link
Contributor Author

Bien, tout à l’air de fonctionner. Je n’ai pas eu besoin d’attendre pour que la DB soit UP, je retente une création. Si ça continue de marcher, je mergerai après votre approbation :)

Copy link

🥁 La recette jetable est prête ! 👉 Je veux tester cette PR !

Copy link
Contributor

@rsebille rsebille left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

PGPORT=$POSTGRESQL_ADDON_PORT \
PGUSER="$POSTGRESQL_ADDON_USER" \
make --directory "$APP_HOME" populate_db
PGDATABASE="$POSTGRESQL_ADDON_DIRECT_URI" make --directory "$APP_HOME" populate_db
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@francoisfreitag francoisfreitag added 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC and removed 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC labels Aug 20, 2024
github-merge-queue bot pushed a commit that referenced this pull request Aug 20, 2024
Prefer `until` over `while !`. It’s clearer, and in line with changes
from #4523.
Copy link

🥁 La recette jetable est prête ! 👉 Je veux tester cette PR !

Comment on lines 14 to 17
until pg_isready --dbname="$POSTGRESQL_ADDON_DIRECT_URI"; do
>&2 echo "Postgres is unavailable - sleeping"
sleep 1
done
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Donc... on restore wait_for_db et on le renomme clever_wait_for_db, pour bien indiquer pourquoi on fait ça ?

L’autre solution, maintenant qu’on utilise la connexion directe, la DB semble immédiatement disponible... Donc on ne change rien d’autre que l’option direct-host-only=true et on voit si ça tient ?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Humpf. Il lance les managements commands avant de lancer le pre_run 😢

https://github.com/gip-inclusion/les-emplois/actions/runs/10474908629/job/29010299746?pr=4523#step:10:569

Oo, mais donc ça veux dire que ces managements commands n'ont pas accès à ce qu'on définis dans itou-secrets 😨.

The tasks are launched after the dependencies from requirements.txt have been installed, and before the web server starts.
https://developers.clever-cloud.com/guides/python-django-sample/#managepy-tasks

Ce qui doit correspondre à après POST_BUILD et avant PRE_RUN : https://developers.clever-cloud.com/doc/develop/build-hooks/#post-build

L’autre solution, maintenant qu’on utilise la connexion directe, la DB semble immédiatement disponible... Donc on ne change rien d’autre que l’option direct-host-only=true et on voit si ça tient ?

Ça se tente ! Et si ça passe pas bah on saura qu'il faut le wait_for_db.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oo, mais donc ça veux dire que ces managements commands n'ont pas accès à ce qu'on définis dans itou-secrets 😨.

Je crois que si : https://github.com/gip-inclusion/les-emplois/blob/master/clevercloud/pre_build.sh

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Donc l’expérimentation a parlé avec https://github.com/gip-inclusion/les-emplois/actions/runs/10487260490/job/29047235371?pr=4523, clever lance bien les CC_PYTHON_MANAGE_TASKS avant d’appeler le hook POST_BUILD 😢

@francoisfreitag francoisfreitag removed the 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC label Aug 20, 2024
francoisfreitag added a commit that referenced this pull request Aug 21, 2024
The database is always accessed through the POSTGRESQL_ADDON_DIRECT_*
variables.

The production database has a custom firewall rule that blocks access
from the internet, but also prevents connecting through the proxy.

For review apps, when the database is starting up, the link over the
proxy is unstable and CleverCloud recommends direct access [1]. See
#4523 (comment)

Let’s make it clear that all environment use direct access, instead of
having an unused fallback give a false impression of security.

[1] https://developers.clever-cloud.com/doc/addons/postgresql/#direct-access
@francoisfreitag francoisfreitag added the 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC label Aug 21, 2024
Copy link

🥁 La recette jetable est prête ! 👉 Je veux tester cette PR !

Discussing the review app creation issue with the CleverCloud support,
they indicated:

> L'app essaye de se connecter trop tôt à la DB. Il peut y avoir
  plusieurs minutes avant la diffusion de l'host de la DB, c'est
  pourquoi nous recommandons de se connecter en direct host quand c'est
  pour une app éphémère.

CleverCloud documentation also recommends [1] a direct access to bypass the
proxy (pgpool), because of the latency for database connections to be
registered on the proxy:

> A proxy serves all dedicated PostgreSQL databases. In some cases, this
  can add some latency between applications and their database. If this is
  an issue, you can generate a direct hostname and port for the add-on to
  bypass the proxy, using the “Generate direct hostname and port” button
  in the add-on dashboard.

  Generating direct access adds new variables to the add-on’s
  environment, allowing connections without going through the proxy.

[1] https://developers.clever-cloud.com/doc/addons/postgresql/#direct-access
The database is always accessed through the POSTGRESQL_ADDON_DIRECT_*
variables.

The production database has a custom firewall rule that blocks access
from the internet, but also prevents connecting through the proxy.

For review apps, when the database is starting up, the link over the
proxy is unstable and CleverCloud recommends direct access [1]. See
#4523 (comment)

Let’s make it clear that all environment use direct access, instead of
having an unused fallback give a false impression of security.

[1] https://developers.clever-cloud.com/doc/addons/postgresql/#direct-access
@francoisfreitag francoisfreitag added 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC and removed 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC labels Aug 21, 2024
Copy link

🥁 La recette jetable est prête ! 👉 Je veux tester cette PR !

@francoisfreitag francoisfreitag removed the 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC label Aug 21, 2024
@francoisfreitag
Copy link
Contributor Author

Petit résumé pour la postérité :

  1. Clever indique que les problèmes de connexion à la DB immédiatement après le démarrage de l’addon sont connus. La DB apparaît UP, puis n’est plus disponible pendant quelques instants. Le contournement recommandé est l’utilisation d’un accès direct.

  2. Les hooks clever s’exécutent dans l’ordre suivant :

    1. PRE_BUILD
    2. CC_PYTHON_MANAGE_TASKS
    3. POST_BUILD
    4. PRE_RUN

    Ainsi, si on souhaite attendre que la DB soit up, il faut une management command (proposée en tant que wait_for_db) qui s’exécute avant toutes les autres management commands. Cette commande étant spécifique à CleverCloud, il est dommage de ne pas pouvoir se brancher aux hooks spécifiques à Clever (POST_BUILD). Il serait possible d’ajouter en PRE_BUILD, mais le build n’a pas de dépendance directe sur la base de données, ce qui induirait une attente artificielle.

  3. Au final, la connexion directe semble bien fonctionner sans attendre, et c’est également ce qu’utilise la prod. Pour le moment, aucune attente de la base de données n’a donc été ajoutée.

@francoisfreitag francoisfreitag added this pull request to the merge queue Aug 21, 2024
Merged via the queue into master with commit 4adf567 Aug 21, 2024
17 of 18 checks passed
@francoisfreitag francoisfreitag deleted the ff/review-app branch August 21, 2024 12:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
no-changelog Ne doit pas figurer dans le journal des changements.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants