{"id":718,"date":"2021-03-16T21:07:21","date_gmt":"2021-03-16T20:07:21","guid":{"rendered":"http:\/\/www.netexpertise.eu\/fr\/?p=718"},"modified":"2021-10-17T07:49:08","modified_gmt":"2021-10-17T06:49:08","slug":"faites-de-beaux-diagrammes-avec-le-diagram-as-code","status":"publish","type":"post","link":"http:\/\/www.netexpertise.eu\/fr\/code\/python\/faites-de-beaux-diagrammes-avec-le-diagram-as-code.html","title":{"rendered":"Faites de Beaux Diagrammes avec le Diagram as Code"},"content":{"rendered":"\n<p>Le Diagram as Code est un sujet bien pr\u00e9sent en ce moment qui apporte de nombreux avantages. Parmi lesquels:<br>&#8211; Garder une trace des changements, qui et quoi<br>&#8211; Stocker sur un d\u00e9p\u00f4t de code comme simple texte<br>&#8211; Pas besoin de r\u00e9aligner les fl\u00e8ches ou bouger les ic\u00f4nes quand on ajoute des \u00e9l\u00e9ments<br>&#8211; Plus rapide une fois prise en main<br>&#8211; C&rsquo;est du code, et vous savez combien les devs aiment faire des diagrammes manuels<br>&#8211; le rendu des diagrammes, tout est align\u00e9 proprement<br>&#8211; De <a href=\"\/fr\/divers\/toutes-les-icones-disponibles-du-diagram-as-code.html\">nombreuses ic\u00f4nes<\/a> disponibles<\/p>\n\n\n\n<p><br>Une biblioth\u00e8que de diagrammes open source est disponible sur <a href=\"https:\/\/diagrams.mingrammer.com\/docs\/getting-started\/installation\">diagrams.mingrammer.com<\/a> en Python et Go. Je ne d\u00e9crirai pas les \u00e9tapes d&rsquo;installation, c&rsquo;est tr\u00e8s bien expliqu\u00e9 dans leur documentation. Ils fournissent aussi de tr\u00e8s bons diagrammes d&rsquo;exemples.<br>Je vais tenter de convertir un vieux diagramme fait sur <a href=\"https:\/\/www.microsoft.com\/en-ww\/microsoft-365\/visio\/flowchart-software\">Microsoft Visio<\/a> il y a longtemps en diagram as code. Cette image vient d&rsquo;un <a href=\"\/fr\/database\/mysql\/replication-haute-disponibilite.html\">article de r\u00e9plication Mysql<\/a>.<br><br><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img src=\"\/images\/Replication.png\" alt=\"Visio Diagram\"\/><\/figure><\/div>\n\n\n\n<h2><br>Exemple de Diagram as Code<\/h2>\n\n\n\n<p><br>Voici le code que j&rsquo;ai \u00e9crit pour g\u00e9n\u00e9rer l&rsquo;image:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">from diagrams import Cluster, Diagram, Edge\nfrom diagrams.azure.compute import *\nfrom diagrams.azure.database import *\n \nwith Diagram(\"Replication\", show=\"False\", direction='TB'):\n \n&nbsp; slaves = []\n&nbsp; clients= []\n \n&nbsp; master = SQLServers(\"Master\")\n&nbsp; with Cluster(\"slaves\"):\n&nbsp; &nbsp; for s in range(3):\n&nbsp; &nbsp; &nbsp; slave = SQLDatabases(\"slave\"+str(s+1))\n  &nbsp; &nbsp; slaves.append(slave)\n \n &nbsp;for c in range(3):\n &nbsp;&nbsp; client = VM(\"client\"+str(c+1))\n &nbsp;&nbsp; clients.append(client)\n &nbsp;&nbsp; clients[c] &gt;&gt; Edge(color=\"darkgreen\",label=\"Reads\") &gt;&gt; slaves[c]\n &nbsp; &nbsp;\n &nbsp;clients &gt;&gt; Edge(color=\"red\",label=\"Writes\") &gt;&gt; master\n &nbsp;master &gt;&gt; Edge(color=\"blue\",label=\"Replication\") &gt;&gt; slaves[1]<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-gallery columns-2 is-cropped\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><a href=\"http:\/\/www.netexpertise.eu\/fr\/wp-content\/uploads\/cropped-blockhaus_paint.jpg\"><img src=\"https:\/\/www.netexpertise.eu\/uploads\/Diagram_as_code_ReplicationAllReads.png\" alt=\"\" data-full-url=\"http:\/\/www.netexpertise.eu\/fr\/wp-content\/uploads\/cropped-blockhaus_paint.jpg\" data-link=\"http:\/\/www.netexpertise.eu\/fr\/cropped-blockhaus_paint-jpg\"\/><\/a><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><a href=\"http:\/\/www.netexpertise.eu\/fr\/wp-content\/uploads\/cropped-blockhaus_paint2.jpg\"><img src=\"http:\/\/www.netexpertise.eu\/en\/wp-content\/uploads\/Diagram_as_code_Replication2Reads.png\" alt=\"\" data-full-url=\"http:\/\/www.netexpertise.eu\/fr\/wp-content\/uploads\/cropped-blockhaus_paint2.jpg\" data-link=\"http:\/\/www.netexpertise.eu\/fr\/cropped-blockhaus_paint2-jpg\"\/><\/a><\/figure><\/li><\/ul><\/figure>\n\n\n\n<p>Moins de 20 lignes de code, c&rsquo;est tout. Les ic\u00f4nes sont celles du r\u00e9pertoire Azure mais j&rsquo;aurais pu en prendre d&rsquo;autres. La seconde image est \u00e0 peu pr\u00e8s la m\u00eame mais j&rsquo;ai supprim\u00e9 la direction qui devient gauche vers droite par d\u00e9faut. Les labels sont mieux g\u00e9r\u00e9s dans cette direction comme vous le voyez, m\u00eame si ce n&rsquo;est toujours pas parfait avec des fl\u00e8ches multiples.<br>J&rsquo;ai aussi enlev\u00e9 le label \u00ab\u00a0Read\u00a0\u00bb au milieu pour un meilleur alignement en liant des objets simple plut\u00f4t que des tableaux. J&rsquo;ai aussi remplac\u00e9<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">clients[c] &gt;&gt; Edge(color=\"darkgreen\",label=\"Reads\") &gt;&gt; slaves[c]<\/code><\/pre>\n\n\n\n<p>par (en dehors de la boucle for):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">for i in [0,2]: clients[i] &gt;&gt; Edge(color=\"darkgreen\",label=\"Reads\") &gt;&gt; slaves[i]<\/code><\/pre>\n\n\n\n<h2><br>Difficult\u00e9s rencontr\u00e9es<\/h2>\n\n\n\n<p>Il peut s&rsquo;av\u00e9rer un peu compliqu\u00e9 d&rsquo;obtenir exactement ce que vous voulez surtout avec des niveaux multiples connect\u00e9s les uns aux autres. Vous pouvez experimenter et changer les comportements en jouant avec les groupements par Cluster. Ca peut \u00eatre utile quand vous voulez que les niveaux 2 et 4 soient regroup\u00e9s par exemple mais ca peut aussi devenir brouillon comme sur ce cluster Mysql:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" src=\"\/uploads\/Diagram_as_code_Replication_Mysql_Cluster-601x600.png\" alt=\"Mysql Replication Diagram as code\" width=\"332\" height=\"331\"\/><\/figure><\/div>\n\n\n\n<p><br>En un mot, cette impl\u00e9mentation de Diagram as Code est puissant et efficace m\u00eame si l&rsquo;on perd du contr\u00f4le sur le placement des \u00e9l\u00e9ments. Un petit inconv\u00e9nient pour une tr\u00e8s bonne librairie. Une fois familiaris\u00e9 avec toutes ces petites astuces, vous pouvez cr\u00e9er de magnifiques diagrammes. Voici un exemple d&rsquo;architecture basique Kubernetes:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><a href=\"\/uploads\/Diagram_as_code_Kubernetes.png\"><img src=\"\/uploads\/Diagram_as_code_Kubernetes-742x1024.png\" alt=\"Kubernetes Diagram as Code\"\/><\/a><\/figure><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Le Diagram as Code est un sujet bien pr\u00e9sent en ce moment qui apporte de nombreux avantages. Parmi lesquels:&#8211; Garder une trace des changements, qui et quoi&#8211; Stocker sur un d\u00e9p\u00f4t de code comme simple texte&#8211; Pas besoin de r\u00e9aligner les fl\u00e8ches ou bouger les ic\u00f4nes quand on ajoute des \u00e9l\u00e9ments&#8211; Plus rapide une fois [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false},"categories":[446],"tags":[448,447,451],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.13 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Netexpertise - Faites de Beaux Diagrammes avec le Diagram as Code<\/title>\n<meta name=\"description\" content=\"Diagram as Code est le nouveau sujet qui vous permet de dessiner de magnifiques diagrammes en langage Python.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.netexpertise.eu\/fr\/code\/python\/faites-de-beaux-diagrammes-avec-le-diagram-as-code.html\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Netexpertise - Faites de Beaux Diagrammes avec le Diagram as Code\" \/>\n<meta property=\"og:description\" content=\"Diagram as Code est le nouveau sujet qui vous permet de dessiner de magnifiques diagrammes en langage Python.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.netexpertise.eu\/fr\/code\/python\/faites-de-beaux-diagrammes-avec-le-diagram-as-code.html\" \/>\n<meta property=\"og:site_name\" content=\"Netexpertise\" \/>\n<meta property=\"article:published_time\" content=\"2021-03-16T20:07:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-10-17T06:49:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.netexpertise.eu\/uploads\/Diagram_as_code_ReplicationAllReads.png\" \/>\n<meta name=\"author\" content=\"dave\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@netexpertise\" \/>\n<meta name=\"twitter:site\" content=\"@netexpertise\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.netexpertise.eu\/fr\/code\/python\/faites-de-beaux-diagrammes-avec-le-diagram-as-code.html\",\"url\":\"https:\/\/www.netexpertise.eu\/fr\/code\/python\/faites-de-beaux-diagrammes-avec-le-diagram-as-code.html\",\"name\":\"Netexpertise - Faites de Beaux Diagrammes avec le Diagram as Code\",\"isPartOf\":{\"@id\":\"https:\/\/www.netexpertise.eu\/fr\/#website\"},\"datePublished\":\"2021-03-16T20:07:21+00:00\",\"dateModified\":\"2021-10-17T06:49:08+00:00\",\"author\":{\"@id\":\"https:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/e398f0307e2b167f6b884c4953be2632\"},\"description\":\"Diagram as Code est le nouveau sujet qui vous permet de dessiner de magnifiques diagrammes en langage Python.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.netexpertise.eu\/fr\/code\/python\/faites-de-beaux-diagrammes-avec-le-diagram-as-code.html#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.netexpertise.eu\/fr\/code\/python\/faites-de-beaux-diagrammes-avec-le-diagram-as-code.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.netexpertise.eu\/fr\/code\/python\/faites-de-beaux-diagrammes-avec-le-diagram-as-code.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.netexpertise.eu\/fr\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Faites de Beaux Diagrammes avec le Diagram as Code\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.netexpertise.eu\/fr\/#website\",\"url\":\"https:\/\/www.netexpertise.eu\/fr\/\",\"name\":\"Netexpertise\",\"description\":\"Syst\u00e8mes \/ R\u00e9seaux \/ DevOps\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.netexpertise.eu\/fr\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/e398f0307e2b167f6b884c4953be2632\",\"name\":\"dave\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/image\/\",\"url\":\"http:\/\/1.gravatar.com\/avatar\/1129916e1f4955bd632f27f836f64e55?s=96&d=mm&r=g\",\"contentUrl\":\"http:\/\/1.gravatar.com\/avatar\/1129916e1f4955bd632f27f836f64e55?s=96&d=mm&r=g\",\"caption\":\"dave\"},\"sameAs\":[\"http:\/\/www.netexpertise.eu\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Netexpertise - Faites de Beaux Diagrammes avec le Diagram as Code","description":"Diagram as Code est le nouveau sujet qui vous permet de dessiner de magnifiques diagrammes en langage Python.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.netexpertise.eu\/fr\/code\/python\/faites-de-beaux-diagrammes-avec-le-diagram-as-code.html","og_locale":"fr_FR","og_type":"article","og_title":"Netexpertise - Faites de Beaux Diagrammes avec le Diagram as Code","og_description":"Diagram as Code est le nouveau sujet qui vous permet de dessiner de magnifiques diagrammes en langage Python.","og_url":"https:\/\/www.netexpertise.eu\/fr\/code\/python\/faites-de-beaux-diagrammes-avec-le-diagram-as-code.html","og_site_name":"Netexpertise","article_published_time":"2021-03-16T20:07:21+00:00","article_modified_time":"2021-10-17T06:49:08+00:00","og_image":[{"url":"https:\/\/www.netexpertise.eu\/uploads\/Diagram_as_code_ReplicationAllReads.png"}],"author":"dave","twitter_card":"summary_large_image","twitter_creator":"@netexpertise","twitter_site":"@netexpertise","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.netexpertise.eu\/fr\/code\/python\/faites-de-beaux-diagrammes-avec-le-diagram-as-code.html","url":"https:\/\/www.netexpertise.eu\/fr\/code\/python\/faites-de-beaux-diagrammes-avec-le-diagram-as-code.html","name":"Netexpertise - Faites de Beaux Diagrammes avec le Diagram as Code","isPartOf":{"@id":"https:\/\/www.netexpertise.eu\/fr\/#website"},"datePublished":"2021-03-16T20:07:21+00:00","dateModified":"2021-10-17T06:49:08+00:00","author":{"@id":"https:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/e398f0307e2b167f6b884c4953be2632"},"description":"Diagram as Code est le nouveau sujet qui vous permet de dessiner de magnifiques diagrammes en langage Python.","breadcrumb":{"@id":"https:\/\/www.netexpertise.eu\/fr\/code\/python\/faites-de-beaux-diagrammes-avec-le-diagram-as-code.html#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.netexpertise.eu\/fr\/code\/python\/faites-de-beaux-diagrammes-avec-le-diagram-as-code.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.netexpertise.eu\/fr\/code\/python\/faites-de-beaux-diagrammes-avec-le-diagram-as-code.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.netexpertise.eu\/fr"},{"@type":"ListItem","position":2,"name":"Faites de Beaux Diagrammes avec le Diagram as Code"}]},{"@type":"WebSite","@id":"https:\/\/www.netexpertise.eu\/fr\/#website","url":"https:\/\/www.netexpertise.eu\/fr\/","name":"Netexpertise","description":"Syst\u00e8mes \/ R\u00e9seaux \/ DevOps","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.netexpertise.eu\/fr\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"https:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/e398f0307e2b167f6b884c4953be2632","name":"dave","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/image\/","url":"http:\/\/1.gravatar.com\/avatar\/1129916e1f4955bd632f27f836f64e55?s=96&d=mm&r=g","contentUrl":"http:\/\/1.gravatar.com\/avatar\/1129916e1f4955bd632f27f836f64e55?s=96&d=mm&r=g","caption":"dave"},"sameAs":["http:\/\/www.netexpertise.eu"]}]}},"_links":{"self":[{"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/posts\/718"}],"collection":[{"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/comments?post=718"}],"version-history":[{"count":0,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/posts\/718\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/media?parent=718"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/categories?post=718"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/tags?post=718"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}