On en parlait avec @Merwyn pendant la PyConFR, mais une démo vaut mieux que démo^Wdes mots :
D’abord ça nécessite un peu de config :
(org-babel-do-load-languages
'org-babel-load-languages
'((python . t)))
puis dans un fichier org :
On définit d'abord une table (optionnel mais bon pour la démo)
et on la nomme :
#+tblname: tbl-hostnames
| Host |
|----------|
| mdk.fr |
| afpy.org |
Ensuite un peu de Python, qui prend (ou pas) la table en variable
d'entrée :
#+begin_src python :var hostnames=tbl-hostnames
import subprocess
pings = []
for hostname, in hostnames:
pings.append((hostname, subprocess.run(["ping", "-c1", hostname], stdout=subprocess.PIPE).stdout.decode().splitlines()[-1]))
return pings
#+end_src
#+RESULTS:
| mdk.fr | rtt min/avg/max/mdev = 4.698/4.698/4.698/0.000 ms |
| afpy.org | rtt min/avg/max/mdev = 2.951/2.951/2.951/0.000 ms |
Pour exécuter le code (et avoir le `#+RESULTS` qui apparaît tout seul)
c'est comme toujours dans org-mode: `C-c C-c`.
J’entends d’ici les gens râler sur ma virgule après for hostname
, haha.
Bon pas besoin de sortir Python pour juste un ping :
| mdk.fr | 36.251/36.251/36.251/0.000 ms |
| afpy.org | 20.700/20.700/20.700/0.000 ms |
| deb2.afpy.org | 19.779/19.779/19.779/0.000 ms |
| bbb.afpy.org | 20.608/20.608/20.608/0.000 ms |
#+TBLFM: $2='(shell-command-to-string (concat "ping -c 1 " $1 " | tail -n 1 | cut -d= -f2 | tr -d '\n'"))
D’ici à lancer mes playbooks Ansible depuis org-mode y’a qu’un pas…