PyRoger - Documentation#
Description: Package Python générique des agents de publication notamment en charge de l’articulation avec le bus de la Géoplateforme de l’IGN (RabbitMQ).
Author and contributors: Oslandia
Version: 1.8.0
Source code: https://gitlab.gpf-tech.ign.fr/geoplateforme/agents-publication/pyroger/
Last documentation build: 27 January 2025
Spécification initiale#
Voir le ticket JIRA
Contexte#
Gérer le fonctionnement commun des agents de publication.
Description#
Les tâches des agents de publication sont de :
Gérer les publication / dépublication / synchronisation en provenance de l’entrepôt vers son service
Alimenter son service lors du démarrage de celui-ci
Règles de gestion#
Pour gérer la publication / dépublication / synchronisation :#
Lors du démarrage, on indique un topic du BUS sur lequel l’agent doit écouter (il s’appelle publication-# suivi d’un
endpoint_name
) les messages en provenance de l’entrepôt, uniquement lorsque le service est ready (démarrage et alimentation initiale en cours). Celui écoute les messages sur celui-ci en Pub/sub (tous les agents consomment le même message)Les messages, peu importe le service, possèdent la structure suivante :
{
"_id": "4c91dad8-bb16-489e-814e-5818773eafdd",
"type": "",
"configuration_type": "WFS",
"layer_name": "nom de la couche",
"type_infos": {},
"metadata": [{"format": "", "url": "", "type": ""}],
"attribution": {
"title": "",
"url": "",
"logo": {"format": "", "url": "", "width": -1, "height": -1},
},
"storage_static" : {
"_id" : "",
"name" : "",
"type" : "",
"type_infos" : { "pot_name" : ""}
}
}
L’agent effectue toutes les opérations spécifiques nécessaires à la publication et retourne :
OK si la publication à pu être effectuée
ERROR si la publication est en erreur (dans ce cas l’agent doit faire en sorte de laisser le service dans le même état qu’avant le début de L’opération)
WARN dans les cas particulier suivant :
Une publication de donnée à été demandé mais l’offre existait déjà sur le service (dans ce cas on traite la publication comme une synchronisation)
Une synchronisation de donnée à été demandé mais l’offre n’existait pas sur le service (dans ce cas on traite la synchronisation comme une publication)
Une dépublication de donnée à été demandé mais l’offre n’existait pas sur le service (dans ce cas on ne fait rien)
L’agent de publication doit conserver une trace de la publication via l’identifiant unique fourni par l’entrepôt. Lors d’une synchronisation ou d’une dépublication, c’est cet identifiant qui sera stable Une fois les opérations de publication effectuées, un message doit être déposé sur un topic du Bus topic est publication-endpoint-update (pour le coup c’est un topic unique pour tous les agents de publication). Ce message devra contenir les informations suivantes :
{
"_id": "uuid --> celui de l'offre qui provenait de l'entrepôt",
"endpointName": "string --> nom du endpoint (recup de la variable d'environnement)",
"podId": "string --> identifiant du pod dans le K8S, issu d'une variable d'environnement",
"type": "stringEnum: [PUBLICATION|UNPUBLICATION|SYNCHRONIZATION]",
"status" : "enum(OK|ERROR|WARN)",
"message" : "string --> message en français de l'erreur qui à bloqué le processus pour les cas ERROR et WARN"
}
Alimenter son service lors du démarrage de celui-ci#
Cette partie se positionne dans le entrypoint du pod.
L’agent va appeler l’API réalisée en IGNGPF-317 avec son identifiant de service, pour récupérer la liste des offres à ajouter au pod. La liste a la structure suivante :
[{
"_id": "string",
"type": "stringEnum[EndpointType]",
"status": "stringEnum[OfferStatus]",
"layer_name": "string"
}]
Pour chaque offre listée :
un appel à IGNGPF-318 va permettre de récupérer une structure JSON identique à celle récupérée sur le bus dans le cas d’une publication classique
ce JSON doit être traité comme s’il s’agissait d’une publication normale, mais sans les opérations de renvoi de message en fin de processus
Variables d’environnement fournies au démarrage du POD :#
URL de l’api Entrepôt :
GPF_WAREHOUSE_URL
Endpoint name :
GPF_ENDPOINT_NAME
PodId
GEOSERVICE_POD_NAME (action de notre côté pour exposer cette variable dans le conteneur https://github.com/kubernetes/kubernetes/blob/release-1.0/docs/user-guide/downward-api.md)
Workdir
GPF_WORKDIR
Pguser pgpass > credential dans vault
GPF_DB_URL
GPF_DB_USER
GPF_DB_PASSWORD
Geoservice (Rok4/Geoserver) >
GEOSERVICE_URL
Paramètre spécifiques Geoserver
GEOSERVER_USER
GEOSERVER_PASS
Paramètres spécifiques Rok4
ROK4_URL
ROK4_TOKEN
ROK4_BUCKET
Topics MQ
PUBLICATION_TOPIC : l’agent écoute
PUBLICATION_RESULT_TOPIC : l’agent répond dessus
Points d’attention#
RAS
Development
Miscellaneous