{"id":794,"date":"2021-04-13T22:10:13","date_gmt":"2021-04-13T21:10:13","guid":{"rendered":"https:\/\/www.netexpertise.eu\/fr\/?p=794"},"modified":"2021-08-24T18:29:15","modified_gmt":"2021-08-24T17:29:15","slug":"rendez-ansible-6x-plus-rapide-avec-ces-3-astuces","status":"publish","type":"post","link":"http:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/rendez-ansible-6x-plus-rapide-avec-ces-3-astuces.html","title":{"rendered":"Rendez Ansible 6X Plus Rapide avec ces 3 Astuces"},"content":{"rendered":"\n<p><a href=\"\/fr\/category\/devops\/ansible\">Ansible<\/a> est g\u00e9n\u00e9ralement lent car il se connecte \u00e0 l&rsquo;h\u00f4te distant pour chaque t\u00e2che qu&rsquo;il ex\u00e9cute. Faisons quelques tests sur un petit r\u00f4le qui r\u00e9cup\u00e8re la derni\u00e8re version de kubectl (client Kubernetes) depuis une URL, et installe le binaire.<br>Voyons 3 fa\u00e7ons simples d&rsquo;acc\u00e9l\u00e9rer Ansible et d&rsquo;obtenir des meilleurs temps d&rsquo;ex\u00e9cution.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"yaml\" class=\"language-yaml\">- name: R\u00e9cup\u00e9ration de la derni\u00e8re version\n &nbsp; uri:\n &nbsp; &nbsp; url: \"{{kubectl_url}}\/stable.txt\"\n &nbsp; &nbsp; return_content: yes\n &nbsp; &nbsp; status_code: 200\n &nbsp; register: kubectl_latest_version\n \n\n - name: T\u00e9l\u00e9chargement du binaire kubectl\n &nbsp; get_url:\n &nbsp; &nbsp; url: \"{{kubectl_url}}\/v{{ kubectl_version |\n       default(kubectl_latest_version.content | \n       regex_replace('^v', '')) }}\/bin\/{{kubectl_os}}\/{{kubectl_arch}}\/kubectl\"\n &nbsp; &nbsp; dest: \"\/usr\/local\/bin\"\n &nbsp; &nbsp; mode: '755'\n &nbsp; &nbsp; owner: \"{{ kubectl_owner }}\"\n &nbsp; &nbsp; group: \"{{ kubectl_group }}\"<\/code><\/pre>\n\n\n\n<p><br>Temps d&rsquo;ex\u00e9cution avec les param\u00e8tres par d\u00e9faut: <strong><span class=\"has-inline-color has-vivid-red-color\">32,2s<\/span><\/strong><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" src=\"\/images\/Speedup_Ansible.png\" alt=\"Acc\u00e9l\u00e9rer Ansible\" width=\"579\" height=\"347\"\/><\/figure><\/div>\n\n\n\n<h2><br>Cache des Facts Ansible<\/h2>\n\n\n\n<p>R\u00e9cup\u00e9rer les facts est la premi\u00e8re t\u00e2che qu&rsquo;Ansible ex\u00e9cute lorsqu&rsquo;il se connecte \u00e0 un h\u00f4te et le moins que l&rsquo;on puisse dire est que c&rsquo;est lent. Tr\u00e8s lent. La performance est aussi un probl\u00e8me lorsqu&rsquo;on \u00e9crit un playbook que l&rsquo;on teste maintes fois.<\/p>\n\n\n\n<p>Heureusement, il est possible de faire des ajustements pour \u00e9conomiser du temps en ajoutant ces quelques lignes dans ansible.cfg:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\"># impl\u00e9mentation du cache et param\u00e9trage des facts \n# pour une performance am\u00e9lior\u00e9e\n\ngathering = smart\ngather_subset = !hardware,!facter,!ohai\n\nfact_caching_connection = \/tmp\/ansible_fact_cache\nfact_caching = jsonfile\n\n# expire le cache apr\u00e8s 2 heures\nfact_caching_timeout = 7200<\/code><\/pre>\n\n\n\n<p>Selon le fichier exemple <a href=\"https:\/\/github.com\/ansible\/ansible\/blob\/devel\/examples\/ansible.cfg\" target=\"_blank\" rel=\"noreferrer noopener\">ansible.cfg<\/a> disponible en ligne, smart gathering \u00ab\u00a0r\u00e9cup\u00e8re par d\u00e9faut, mais seulement si ce n&rsquo;est pas d\u00e9j\u00e0 fait\u00a0\u00bb.<\/p>\n\n\n\n<p>Les facts hardware sont les plus longs \u00e0 collecter, mais vous pourriez en avoir besoin surtout si vos r\u00f4les reposent sur les interfaces r\u00e9seau. Vous pourriez recevoir une erreur \u00ab\u00a0ansible_eth0 is undefined\u00a0\u00bb par exemple.<br>Facter et ohai sont li\u00e9s aux clients Puppet et Chef.<\/p>\n\n\n\n<p>Et le plus efficace est le cache bien s\u00fbr qui stocke les informations dans un fichier JSON. Mais ca pourrait aussi l&rsquo;\u00eatre en m\u00e9moire, ou m\u00eame dans une base partag\u00e9e Redis.<\/p>\n\n\n\n<p>On peut aussi d\u00e9sactiver les facts dans un playbook si on n&rsquo;en a pas besoin. C&rsquo;est un gain potentiellement significatif mais qui ne peut pas \u00eatre utilis\u00e9 souvent, la plupart des playbooks ont besoin des facts.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"yaml\" class=\"language-yaml\">- name: mon_playbook\n    hosts: *\n    gather_facts: no\n    tasks:<\/code><\/pre>\n\n\n\n<p><br>Temps d&rsquo;ex\u00e9cution: <strong><span class=\"has-inline-color has-vivid-red-color\">19,2s<\/span><\/strong><\/p>\n\n\n\n<h2><br>Acc\u00e9l\u00e9rer SSH avec le Pipelining<\/h2>\n\n\n\n<p>Activer le pipelining r\u00e9duit le nombre d&rsquo;op\u00e9rations SSH requises pour ex\u00e9cuter un module sur le serveur distant. Ceci am\u00e9liore la performance mais il faut d&rsquo;abord d\u00e9sactiver &lsquo;requiretty&rsquo; dans \/etc\/sudoers sur tous les h\u00f4tes g\u00e9r\u00e9s. Raison pour laquelle le pipelining est d\u00e9sactiv\u00e9 par d\u00e9faut. Ajoutez dans ansible.cfg:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"vim\" class=\"language-vim\">[ssh_connection]\npipelining = True<\/code><\/pre>\n\n\n\n<p>Si requiretty&nbsp;est param\u00e9tr\u00e9, sudo ne fonctionnera que si l&rsquo;utilisateur est loggu\u00e9 sur un tty r\u00e9el.&nbsp; Dans ce cas, sudo ne se lancera que dans une session de login et non dans un script cron ou cgi-bin.&nbsp;En revanche, ce param\u00e8tre est d\u00e9sactiv\u00e9 par d\u00e9faut d&rsquo;apr\u00e8s la page de man, sur Debian et Ubuntu en tout cas.<br>On peut donc envisager d&rsquo;utiliser le pipelining dans ce cas. V\u00e9rifiez la page de man de votre distribution Linux.<\/p>\n\n\n\n<p><br>Temps d&rsquo;ex\u00e9cution: <strong><span class=\"has-inline-color has-vivid-red-color\">11,6s<\/span><\/strong><br><br><\/p>\n\n\n\n<h2>Delegate_to localhost<\/h2>\n\n\n\n<p>La plupart des am\u00e9liorations d\u00e9pendent de la fa\u00e7on dont vous \u00e9crivez vos t\u00e2ches Ansible. Dans ce r\u00f4le, vous pourriez vous connecter \u00e0 l&rsquo;URL depuis n&rsquo;importe quel h\u00f4te &#8211; localhost? &#8211; et \u00e9conomiser une connexion SSH.<br>C&rsquo;est le but de <em>delegate_to<\/em> qui est souvent point\u00e9 sur localhost. La premi\u00e8re t\u00e2che devient:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"yaml\" class=\"language-yaml\">- name: get kubectl last version\n &nbsp; delegate_to: localhost\n &nbsp; become: false\n &nbsp; uri:\n &nbsp; &nbsp; url: \"{{kubectl_url}}\/stable.txt\"\n &nbsp; &nbsp; return_content: yes\n &nbsp; &nbsp; status_code: 200\n &nbsp; register: kubectl_latest_version<\/code><\/pre>\n\n\n\n<p><br>C&rsquo;est une optimisation non n\u00e9gligeable que vous pouvez utiliser d\u00e8s que la t\u00e2che peut s&rsquo;ex\u00e9cuter n&rsquo;importe o\u00f9.<\/p>\n\n\n\n<p>Il est pr\u00e9f\u00e9rable d&rsquo;ajouter <em>become: false<\/em> ou vous pourriez avoir ce message d&rsquo;erreur si Ansible essaye de faire un sudo root sur votre machine locale:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">fatal: [backup]: FAILED! =&gt; {\"changed\": false, \"module_stderr\": \"sudo: a password is required\\n\", \"module_stdout\": \"\", \"msg\": \"MODULE FAILURE\\nSee stdout\/stderr for the exact error\", \"rc\": 1}<\/code><\/pre>\n\n\n\n<p><br>Temps d&rsquo;ex\u00e9cution: <strong><span class=\"has-inline-color has-vivid-red-color\">4,7s<\/span><\/strong><\/p>\n\n\n\n<p><br>Le temps d&rsquo;ex\u00e9cution est le temps moyen de 10 ex\u00e9cutions \u00e0 la suite, et les tests ont \u00e9t\u00e9 r\u00e9alis\u00e9s sur un lien VPN loin d&rsquo;\u00eatre optimum.<\/p>\n\n\n\n<p>Bien s\u00fbr les r\u00e9sultats ne sont pas lin\u00e9aires, tous les playbooks ne s&rsquo;ex\u00e9cuteront pas 6 fois plus rapidement mais cela donne une id\u00e9e. Le cache permet d&rsquo;\u00e9conomiser quelques secondes au lancement du playbook alors que la d\u00e9l\u00e9gation \u00e0 localhost est seulement applicable \u00e0 quelques cas. Mais n&#8217;emp\u00eache.<\/p>\n\n\n\n<p>Il existe d&rsquo;autres am\u00e9liorations possibles pour acc\u00e9l\u00e9rer Ansible comme les t\u00e2ches <a href=\"https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/playbooks_async.html\" target=\"_blank\" rel=\"noreferrer noopener\">async<\/a> pour lancer une t\u00e2che et passer imm\u00e9diatement \u00e0 la suite. Mais votre meilleur atout est d&rsquo;ex\u00e9cuter Ansible sur une machine aussi proche que  possible des h\u00f4tes cibl\u00e9es.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ansible est g\u00e9n\u00e9ralement lent car il se connecte \u00e0 l&rsquo;h\u00f4te distant pour chaque t\u00e2che qu&rsquo;il ex\u00e9cute. Faisons quelques tests sur un petit r\u00f4le qui r\u00e9cup\u00e8re la derni\u00e8re version de kubectl (client Kubernetes) depuis une URL, et installe le binaire.Voyons 3 fa\u00e7ons simples d&rsquo;acc\u00e9l\u00e9rer Ansible et d&rsquo;obtenir des meilleurs temps d&rsquo;ex\u00e9cution. Temps d&rsquo;ex\u00e9cution avec les param\u00e8tres [&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":[441],"tags":[444],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.13 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Netexpertise - Rendez Ansible 6X Plus Rapide avec ces 3 Astuces<\/title>\n<meta name=\"description\" content=\"Ansible est trop lent? Acc\u00e9l\u00e9rer Ansible gr\u00e2ce \u00e0 3 astuces ainsi que d&#039;autres optimisations de performance pour le rendre plus rapide\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/rendez-ansible-6x-plus-rapide-avec-ces-3-astuces.html\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Netexpertise - Rendez Ansible 6X Plus Rapide avec ces 3 Astuces\" \/>\n<meta property=\"og:description\" content=\"Ansible est trop lent? Acc\u00e9l\u00e9rer Ansible gr\u00e2ce \u00e0 3 astuces ainsi que d&#039;autres optimisations de performance pour le rendre plus rapide\" \/>\n<meta property=\"og:url\" content=\"http:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/rendez-ansible-6x-plus-rapide-avec-ces-3-astuces.html\" \/>\n<meta property=\"og:site_name\" content=\"Netexpertise\" \/>\n<meta property=\"article:published_time\" content=\"2021-04-13T21:10:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-08-24T17:29:15+00:00\" \/>\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\":\"http:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/rendez-ansible-6x-plus-rapide-avec-ces-3-astuces.html\",\"url\":\"http:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/rendez-ansible-6x-plus-rapide-avec-ces-3-astuces.html\",\"name\":\"Netexpertise - Rendez Ansible 6X Plus Rapide avec ces 3 Astuces\",\"isPartOf\":{\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/#website\"},\"datePublished\":\"2021-04-13T21:10:13+00:00\",\"dateModified\":\"2021-08-24T17:29:15+00:00\",\"author\":{\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/e398f0307e2b167f6b884c4953be2632\"},\"description\":\"Ansible est trop lent? Acc\u00e9l\u00e9rer Ansible gr\u00e2ce \u00e0 3 astuces ainsi que d'autres optimisations de performance pour le rendre plus rapide\",\"breadcrumb\":{\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/rendez-ansible-6x-plus-rapide-avec-ces-3-astuces.html#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/rendez-ansible-6x-plus-rapide-avec-ces-3-astuces.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/rendez-ansible-6x-plus-rapide-avec-ces-3-astuces.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"http:\/\/www.netexpertise.eu\/fr\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Rendez Ansible 6X Plus Rapide avec ces 3 Astuces\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/#website\",\"url\":\"http:\/\/www.netexpertise.eu\/fr\/\",\"name\":\"Netexpertise\",\"description\":\"Syst\u00e8mes \/ R\u00e9seaux \/ DevOps\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/www.netexpertise.eu\/fr\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/e398f0307e2b167f6b884c4953be2632\",\"name\":\"dave\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"http:\/\/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 - Rendez Ansible 6X Plus Rapide avec ces 3 Astuces","description":"Ansible est trop lent? Acc\u00e9l\u00e9rer Ansible gr\u00e2ce \u00e0 3 astuces ainsi que d'autres optimisations de performance pour le rendre plus rapide","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":"http:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/rendez-ansible-6x-plus-rapide-avec-ces-3-astuces.html","og_locale":"fr_FR","og_type":"article","og_title":"Netexpertise - Rendez Ansible 6X Plus Rapide avec ces 3 Astuces","og_description":"Ansible est trop lent? Acc\u00e9l\u00e9rer Ansible gr\u00e2ce \u00e0 3 astuces ainsi que d'autres optimisations de performance pour le rendre plus rapide","og_url":"http:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/rendez-ansible-6x-plus-rapide-avec-ces-3-astuces.html","og_site_name":"Netexpertise","article_published_time":"2021-04-13T21:10:13+00:00","article_modified_time":"2021-08-24T17:29:15+00:00","author":"dave","twitter_card":"summary_large_image","twitter_creator":"@netexpertise","twitter_site":"@netexpertise","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"http:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/rendez-ansible-6x-plus-rapide-avec-ces-3-astuces.html","url":"http:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/rendez-ansible-6x-plus-rapide-avec-ces-3-astuces.html","name":"Netexpertise - Rendez Ansible 6X Plus Rapide avec ces 3 Astuces","isPartOf":{"@id":"http:\/\/www.netexpertise.eu\/fr\/#website"},"datePublished":"2021-04-13T21:10:13+00:00","dateModified":"2021-08-24T17:29:15+00:00","author":{"@id":"http:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/e398f0307e2b167f6b884c4953be2632"},"description":"Ansible est trop lent? Acc\u00e9l\u00e9rer Ansible gr\u00e2ce \u00e0 3 astuces ainsi que d'autres optimisations de performance pour le rendre plus rapide","breadcrumb":{"@id":"http:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/rendez-ansible-6x-plus-rapide-avec-ces-3-astuces.html#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["http:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/rendez-ansible-6x-plus-rapide-avec-ces-3-astuces.html"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/rendez-ansible-6x-plus-rapide-avec-ces-3-astuces.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"http:\/\/www.netexpertise.eu\/fr"},{"@type":"ListItem","position":2,"name":"Rendez Ansible 6X Plus Rapide avec ces 3 Astuces"}]},{"@type":"WebSite","@id":"http:\/\/www.netexpertise.eu\/fr\/#website","url":"http:\/\/www.netexpertise.eu\/fr\/","name":"Netexpertise","description":"Syst\u00e8mes \/ R\u00e9seaux \/ DevOps","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/www.netexpertise.eu\/fr\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"http:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/e398f0307e2b167f6b884c4953be2632","name":"dave","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"http:\/\/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\/794"}],"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=794"}],"version-history":[{"count":0,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/posts\/794\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/media?parent=794"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/categories?post=794"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/tags?post=794"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}