2 minutes
Diagram as code avec Diagrams
Dans le monde du Devops, on veut tout automatiser et tout versionner.
Et pour ce faire on utilise le moins possible la souris.
Si vous voulez dessiner des diagrammes d’architecture, autant le coder.
Diagrams est une librairie de diagram as code en Python (il y en a une en Go aussi).
Des outils comme graphviz, ou plantuml par exemple, sont les pionniers, mais la librairie diagrams a un peu modernisé le genre.
https://diagrams.mingrammer.com/
Installation
On peut faire très simple avec apt
(remplacez apt
par dnf
ou tout autre package manager) :
sudo apt install graphviz python3-pip
python3 -m pip install diagrams
La librairie contient 4 objets de base :
- Diagram : Il s’agit du niveau le plus haut qui définit le fichier en lui-même.
- Cluster : Un ensemble de Nodes regroupés.
- Node : Un élément de votre diagramme souvent représenté par un icône.
- Edge : Flèches qui relient les Nodes.
Diagrams
Les diagrammes ont un nom et des options :
from diagrams import Diagram
with Diagram("My diagram as code", outformat=["png", "pdf"]):
...
Options :
- outformat : Le format de sortie parmi (jpg, png, dot ou pdf), par défaut png
- direction :
- show : si définit à
true
, permet d’ouvrir le fichier quand le code Python est exécuté. - filename : définit le nom du fichier (si non indiqué, le fichier prend comme nom le titre du diagramme)
Nodes
Les nodes sont les objets de votre diagramme. Vous devez importer les objets dont vous avez besoin puis les appeler :
from diagrams import Diagram
from diagrams.gcp.storage import Storage
with Diagram("My diagram"):
Storage("My bucket")
Vous devrez mettre votre objet dans une variable si vous voulez le lier par la suite avec un Edge.
my_gcs = Storage("My bucket")
La liste des objets existant est ici mais vous pouvez aussi faire vos propres nodes.
Clusters
Les clusters permettent de regouper les objets :
from diagrams import Diagram, Cluster
from diagrams.onprem.compute import Server
with Diagram("My diagram"):
with Cluster("On premise"):
srv=Server("On premise server")
with Cluster("GCP"):
bucket=Storage("Bucket on GCP")
Edges
Les liens se font de cette manière :
srv1 >> srv2
# ou
srv1 << srv2
On peut annoter le lien :
srv1 >> Edge(label="https") >> srv2
Un exemple complet
Avec tout ça, vous avez tout ce qu’il vous faut pour faire du Diagram as Code :
from diagrams import Diagram, Cluster, Edge
from diagrams.onprem.compute import Server
from diagrams.gcp.storage import Storage
with Diagram("My diagram"):
with Cluster("On-premise"):
srv1=Server("My 1st server")
srv2=Server("My 2nd server")
srv1 >> Edge(label="sftp") >> srv2
with Cluster("GCP"):
bucket1=Storage("Bucket")
srv2 >> bucket1
Ce qui donne :