Depuis maintenant quelques jours, c'est officiel : Podman est en version 2 ! Et avec cette version, arrive également la nouvelle version de l'API REST ! Fini donc l'utilisation de varlink présent dans la première version. Il va être maintenant possible d'appeler cette nouvelle interface avec des outils comme cURL ou Postman en autres.
Mais tout d'abord - et avant de démarrer le service nécessaire à son utilisation - il va falloir installer podman v2 !
Installation de Podman v2
J'ai déjà écrit quelques articles sur le sujet mais au besoin voici un petit récapitulatif.
Pour installer cette version sur Fedora par exemple, rien de plus simple :
De mon côté, j'utilise la version 2.1 sur Ubuntu que je compile à l'aide du tutoriel suivant :
Vérifiez juste que votre version de Podman
est bien en version 2 :
Démarrons maintenant le service nécessaire à l'utilisation de l'API !
REST API
Pour cela rien de plus simple, il suffit de lancer la commande suivante :
[email protected]:~$ podman system service -t 3600 &
Quelques explications tout de même sur cette commande.
Avec celle-ci le service va être actif, et donc accepter les demandes, pour les prochaines 3600 secondes. Par contre ce délai est actualisé après la réception de chaque requête !
Il est bien évidemment possible de lancer le processus et de le garder actif, sans délai de fin et jusqu'à ce que le processus soit tué :
[email protected]:~$ podman system service -t 0 &
Tout comme pour Docker
, cette API sera accessible au travers d'une socket. Vous pouvez également rendre celle-ci accessible directement depuis le réseau :
[email protected]:~$ podman system service --timeout 0 tcp:127.0.0.1:8080
Dans cet exemple, elle sera accessible sur mon interface local et sur le port 8080.
Enfin très utile, il est possible d'ajouter des informations de debug :
--log-level=debug
Votre API est accessible mais comment effectuer une requête sur celle-ci ?
Quelques exemples
Nous allons dans un premier temps, utiliser la commande curl
pour effectuer quelques requêtes et nous familiariser avec son utilisation.
Commençons par récupérer les informations équivalentes à la commande podman info
:
[email protected]:~$ curl -s --unix-socket $XDG_RUNTIME_DIR/podman/podman.sock http:/libpod/info
Vous devriez avoir un retour qui est formaté en JSON
. Pour rendre tout ceci plus lisible vous pouvez utiliser la commande jq
:
[email protected]:~$ curl -s --unix-socket $XDG_RUNTIME_DIR/podman/podman.sock http:/libpod/info | jq
cURL va de lui même utiliser la socket passée en argument car je ne précise aucun domaine de connexion.
jq est un utilitaire à connaître ! Il vous permet de manipuler du JSON en ligne de commande :
- https://www.mon-code.net/article/95/Manipuler-des-JSON-en-ligne-de-commande-grace-a-JQ-exemple-avec-cURL
Si vous avez lancé votre service directement en TCP, pas besoin de passer par la socket :
[email protected]:~$ curl http://localhost:8080/libpod/info
Vous pouvez également utiliser la commande podman-remote
pour une utilisation au travers de l'API :
[email protected]:~$ MYSOCK=unix:$XDG_RUNTIME_DIR/podman/podman.sock
[email protected]:~$ podman-remote --url $MYSOCK create nginx
Dans tous les cas, vous trouverez plus d'informations sur les possibilités offertes par cette nouveauté dans la documentation :
- https://docs.podman.io/en/latest/_static/api.html
Enfin vous trouverez des exemples supplémentaires dans l'article qui m'a notamment servi de référence à l'écriture de cet article :
- https://www.redhat.com/sysadmin/podmans-new-rest-api
Utiliser une API en cURL c'est bien pour quelques essais mais comment allez plus loin ?
Bonus
Il existe déjà un package Python pour faciliter les appels, vous trouverez le nécessaire ici :
Il devient alors très simple de réaliser un script pour réaliser le même retour que la commande podman info
.
Par exemple :
import podman
from podman import ApiConnection, system, images
# Provide a URI path for the libpod service. In libpod, the URI can be a unix
# domain socket(UDS) or TCP. The TCP connection has not been implemented in this
# package yet.
uri = "unix:/run/user/1000/podman/podman.sock"
with ApiConnection(uri) as api:
# results are written to the screen as python dictionaries
print(system.get_info(api))
Vous avez maintenant quelques notions afin d'utiliser l'API de Podman dans sa version 2. À noter que cette interface reste en cours de développement et qu'il existe encore quelques bugs :
- https://github.com/containers/podman/issues?q=is%3Aissue+is%3Aopen+label%3Akind%2Fbug+label%3AAPIv2
N'hésitez pas à permettre au blog de continuer à exister et à fournir un contenu de qualité - enfin je l'espère - au travers de vos dons sur : buymeacoff.ee/lfache
Et n'hésitez pas à m'apporter des remarques ou des commentaires sur Twitter, ou ici 👇