<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[GrowAIth: ⚙️Network Automation]]></title><description><![CDATA[Deep-dives on tools, strategies, and frameworks used to automate and monitor networks.
Topics like: Netmiko, Nornir, Ansible, Python, Git, APIs, and CI/CD workflows including Our Network Concepts !!]]></description><link>https://blog.growaith.com/s/home</link><image><url>https://substackcdn.com/image/fetch/$s_!3Yu8!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2978784c-71a4-48e0-ad3b-fec440d2d2ee_94x94.png</url><title>GrowAIth: ⚙️Network Automation</title><link>https://blog.growaith.com/s/home</link></image><generator>Substack</generator><lastBuildDate>Sat, 16 May 2026 04:20:25 GMT</lastBuildDate><atom:link href="https://blog.growaith.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Anurudh]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[beyondnoisehq@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[beyondnoisehq@substack.com]]></itunes:email><itunes:name><![CDATA[Dubey]]></itunes:name></itunes:owner><itunes:author><![CDATA[Dubey]]></itunes:author><googleplay:owner><![CDATA[beyondnoisehq@substack.com]]></googleplay:owner><googleplay:email><![CDATA[beyondnoisehq@substack.com]]></googleplay:email><googleplay:author><![CDATA[Dubey]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Notes on Network Automation !!!]]></title><description><![CDATA[A simple misconfiguration can took down hundreds of devices, and it changed how we think about CLI, automation, and scaling networks.]]></description><link>https://blog.growaith.com/p/notes-on-network-automation</link><guid isPermaLink="false">https://blog.growaith.com/p/notes-on-network-automation</guid><dc:creator><![CDATA[Dubey]]></dc:creator><pubDate>Mon, 20 Apr 2026 18:39:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!txxK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83699d11-1dd1-4740-82ad-d9349b59d313_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!txxK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83699d11-1dd1-4740-82ad-d9349b59d313_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!txxK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83699d11-1dd1-4740-82ad-d9349b59d313_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!txxK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83699d11-1dd1-4740-82ad-d9349b59d313_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!txxK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83699d11-1dd1-4740-82ad-d9349b59d313_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!txxK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83699d11-1dd1-4740-82ad-d9349b59d313_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!txxK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83699d11-1dd1-4740-82ad-d9349b59d313_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/83699d11-1dd1-4740-82ad-d9349b59d313_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2313009,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.growaith.com/i/194828129?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83699d11-1dd1-4740-82ad-d9349b59d313_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!txxK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83699d11-1dd1-4740-82ad-d9349b59d313_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!txxK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83699d11-1dd1-4740-82ad-d9349b59d313_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!txxK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83699d11-1dd1-4740-82ad-d9349b59d313_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!txxK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83699d11-1dd1-4740-82ad-d9349b59d313_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>This week I spent some time going through network automation basics. Not deeply, just trying to understand what problem we are actually solving. I was not focusing on tools yet. More on the &#8220;why&#8221; behind all of this.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading GrowAIth! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>I would like to start with one of the scenerio where a retail network with around 500 stores had a full outage during what was supposed to be a routine change.</p><p>Everything was managed through CLI. During a security update, an ACL was pushed manually across devices. The configuration itself was not complex, but the order was wrong. A deny all rule was placed before the permit rules.</p><p>That was enough to stop traffic everywhere.</p><p>At first, it looks like a simple mistake. Someone configured it wrong. But after thinking about it for a while, it did not feel like just a human error. It felt more like a system problem.</p><p>Because one small mistake should not be able to take down an entire network like that.</p><p>That only happens when the same action is repeated manually across a large number of devices without any real validation in between. The mistake itself was small, but the way it was applied made it big</p><h3>Where CLI Starts Feeling Uncomfortable</h3><p>Most networks still run on CLI. Login via SSH , run commands, check output , move to enxt devcie .That is how things are done</p><p>But when the number of devices increases, something starts to feel off. Not immediately, but gradually. You spend more time repeating steps than actually thinking about what you are doing. It becomes mechanical.</p><p>And the more repetitive it gets, the more it depends on you not making a mistake.</p><p>That is the part that does not scale.</p><p>It is not about effort. It is about consistency. Doing the same thing correctly, every single time, across hundreds of devices. That is harder than it sounds.</p><h3><strong>First Thought Was, Just Automate It with Python</strong></h3><p>Naturally, the next thought was scripting.</p><p>Connect to devices, send commands, capture output. It feels like a direct upgrade from CLI. Same workflow, just automated.</p><p>This is probably why most people start here. It feels familiar and you can get something working quickly.</p><p>But after looking into it a bit more, there is something slightly uncomfortable about it.</p><p>You are still dealing with text.</p><div><hr></div><p>The commands are text. The output is text. Everything depends on how that text looks.</p><p>And that is not stable.</p><p>A small change in output format can break everything. The information is still there, just displayed differently. That is enough for parsing logic to fail.</p><p>I had not really thought about this before. From a human perspective, the output still makes sense. From a script&#8217;s perspective, it can completely break.</p><p>So now instead of manually checking output, you are writing logic to interpret it. Which adds another layer that can go wrong.</p><p>It works, but it does not feel reliable when you think about scaling it.</p><div><hr></div><h3><strong>APIs Felt Cleaner, But Took Time to Click</strong></h3><p>Then I looked at NETCONF and RESTCONF.</p><p>At first, it was not immediately clear why this was better. It just looked like another way of doing the same thing.</p><p>But after spending some time with it, the difference started to make sense.</p><p>Instead of sending commands, you are sending structured data. Instead of parsing output, you are receiving structured responses.</p><p>JSON or XML.</p><div><hr></div><p>This changes things in a better way.</p><p>You are no longer guessing where the data is. You are accessing it directly.</p><p>Error handling also becomes clearer. You are not searching for keywords in output, you are reading defined responses.</p><p>It feels more predictable.</p><p>Still, not everything is available via API. So CLI does not disappear. It just becomes one option among others.</p><div><hr></div><h3><strong>Ansible and Terraform Were Not Obvious at First</strong></h3><p>This part honestly took me some time. Because it is not just a tool difference. It is a thinking difference.</p><p>Earlier the approach was always step by step. Run this command. Then this. Then check. Now it becomes something else. You define what should exist.</p><div><hr></div><p>For example, instead of writing steps to create a VLAN, you just say VLAN 10 should be there.</p><p>The system figures out whether it needs to create it or not.</p><p>This felt strange initially. I kept thinking in steps, so this did not click immediately.</p><p>But after a while, it started to make sense.</p><p>You are not managing execution anymore. You are defining intent.</p><div><hr></div><p>There is also this concept of idempotency, which sounds complex but is actually simple.</p><p>Running the same thing again should not change anything unnecessarily.</p><p>That turns out to be very important when you are dealing with repeated operations.</p><div><hr></div><p>Terraform goes a bit further.</p><p>It keeps track of what already exists and compares it with what you want. Then it calculates what needs to change.</p><p>That makes things more predictable. You can see changes before applying them.</p><p>It feels closer to managing a system rather than running commands on devices.</p><div><hr></div><h3><strong>Controllers Felt Powerful, But Also Slightly Distant</strong></h3><p>Then I looked at controller-based platforms.This is where you stop thinking about devices directly.</p><p>You define something like creating a network across multiple locations, and the system handles the rest.</p><div><hr></div><p>This looks powerful, especially at scale.But it also feels a bit distant from what is actually happening underneath.</p><p>You are relying on the platform to do the right thing.</p><p>And while that works for standard use cases, I am not sure how it behaves in edge scenarios.</p><p>There is also dependency on the vendor, which changes how flexible your setup is.</p><p>So it feels useful, but not something that replaces everything else.</p><div><hr></div><h3><strong>What I Thought Initially vs What I Think Now</strong></h3><p>Initially, I was trying to figure out which tool is best. That question does not really make sense anymore.</p><p>Each approach solves a different part of the problem. </p><p>&#8594; CLI is simple but fragile at scale<br>&#8594; Python scripting gives control but depends on parsing<br>&#8594; APIs make things structured<br>&#8594; Ansible and Terraform improve consistency<br>&#8594; Controllers simplify large environments</p><div><hr></div><p>It is not about picking one.</p><p>It is about understanding where each one fits.</p><div><hr></div><h3><strong>What Actually Stayed With Me</strong></h3><p>Automation, at least from what I understand now, is not about doing things faster.</p><p>It is about making sure the same thing happens correctly every time.</p><p>Especially when the system grows.</p><div><hr></div><h3><strong>What I Am Doing Next</strong></h3><p>Right now I am not jumping into complex automation setups.</p><p>Still trying to get basics right. Python network fundamentals<br>simple scripts</p><p>Trying to understand things properly before layering more complexity.</p><div><hr></div><h3><strong>Closing Thought</strong></h3><p>I am still figuring things out. But one thing feels clear.</p><p>Manual processes do not fail immediately. They fail when they scale.</p><h3></h3><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading GrowAIth! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Designing AI Infrastructure in a Multi-Cloud World]]></title><description><![CDATA[A practical guide for network engineers to build scalable, compliant, and cost-effective AI systems&#8212;beyond a single vendor.]]></description><link>https://blog.growaith.com/p/designing-ai-infrastructure-in-a</link><guid isPermaLink="false">https://blog.growaith.com/p/designing-ai-infrastructure-in-a</guid><dc:creator><![CDATA[Dubey]]></dc:creator><pubDate>Sun, 06 Jul 2025 14:52:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!cKch!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc94b6bc2-d5a8-483d-8d7b-ad7cd393e4b3_580x397.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cKch!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc94b6bc2-d5a8-483d-8d7b-ad7cd393e4b3_580x397.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cKch!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc94b6bc2-d5a8-483d-8d7b-ad7cd393e4b3_580x397.png 424w, https://substackcdn.com/image/fetch/$s_!cKch!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc94b6bc2-d5a8-483d-8d7b-ad7cd393e4b3_580x397.png 848w, https://substackcdn.com/image/fetch/$s_!cKch!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc94b6bc2-d5a8-483d-8d7b-ad7cd393e4b3_580x397.png 1272w, https://substackcdn.com/image/fetch/$s_!cKch!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc94b6bc2-d5a8-483d-8d7b-ad7cd393e4b3_580x397.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cKch!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc94b6bc2-d5a8-483d-8d7b-ad7cd393e4b3_580x397.png" width="580" height="397" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c94b6bc2-d5a8-483d-8d7b-ad7cd393e4b3_580x397.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:397,&quot;width&quot;:580,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:38382,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://netomate.substack.com/i/167649578?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc94b6bc2-d5a8-483d-8d7b-ad7cd393e4b3_580x397.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cKch!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc94b6bc2-d5a8-483d-8d7b-ad7cd393e4b3_580x397.png 424w, https://substackcdn.com/image/fetch/$s_!cKch!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc94b6bc2-d5a8-483d-8d7b-ad7cd393e4b3_580x397.png 848w, https://substackcdn.com/image/fetch/$s_!cKch!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc94b6bc2-d5a8-483d-8d7b-ad7cd393e4b3_580x397.png 1272w, https://substackcdn.com/image/fetch/$s_!cKch!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc94b6bc2-d5a8-483d-8d7b-ad7cd393e4b3_580x397.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h4><strong>Multicloud is now new normal for Network engineer.  </strong></h4><p>When it comes of AI workload , Companies are no way interested to bet on single cloud provider ,they prefer multi cloud option and for good reason .Reason is simple no one cloud is best on everything</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Automation! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h4>&#128161; Why Go Multi-Cloud for AI? </h4><p>Each cloud provider has its own strength </p><ul><li><p>One might be excellent in providing top tier AI/ML service</p></li><li><p>Another might be good in serverless compute</p></li><li><p>Third may be providing good pricing as compared to others</p></li></ul><p>So its now the cloud architect task to pick the best provider considering all below points.</p><ul><li><p>Better uptime and distory recovery</p></li><li><p> Dependability on one vendor </p></li><li><p> Flexibility and more power while renewing the contract</p></li><li><p> Most importantly meeting data residency &amp; sovereignty laws</p></li></ul><h4>&#10067; Is It Common for AI Workloads?</h4><p>While multicloud is now standard in many IT companies but still less common for AI training  Why ? </p><ul><li><p>Training models is very resource-intensive </p></li><li><p>Highly Optimized on a single cloud or even on premises</p></li><li><p>Often involves massive datasets which is more expensive to move across clouds.</p></li></ul><p>But once the model is trained...</p><ul><li><p> Inference (making predication) is less resource intensive</p></li><li><p> Can be deployed closer to user </p></li><li><p>Reducing latency and providing better user experience.</p></li></ul><p>That&#8217;s why <em><strong>inference workloads (predications) </strong></em> are more likely to be spread across clouds.</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6XZW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F858caf2d-e79c-4c3e-8467-f1aea29e2f3b_694x444.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6XZW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F858caf2d-e79c-4c3e-8467-f1aea29e2f3b_694x444.png 424w, https://substackcdn.com/image/fetch/$s_!6XZW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F858caf2d-e79c-4c3e-8467-f1aea29e2f3b_694x444.png 848w, https://substackcdn.com/image/fetch/$s_!6XZW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F858caf2d-e79c-4c3e-8467-f1aea29e2f3b_694x444.png 1272w, https://substackcdn.com/image/fetch/$s_!6XZW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F858caf2d-e79c-4c3e-8467-f1aea29e2f3b_694x444.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6XZW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F858caf2d-e79c-4c3e-8467-f1aea29e2f3b_694x444.png" width="694" height="444" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/858caf2d-e79c-4c3e-8467-f1aea29e2f3b_694x444.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:444,&quot;width&quot;:694,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:51231,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://netomate.substack.com/i/167649578?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F858caf2d-e79c-4c3e-8467-f1aea29e2f3b_694x444.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6XZW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F858caf2d-e79c-4c3e-8467-f1aea29e2f3b_694x444.png 424w, https://substackcdn.com/image/fetch/$s_!6XZW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F858caf2d-e79c-4c3e-8467-f1aea29e2f3b_694x444.png 848w, https://substackcdn.com/image/fetch/$s_!6XZW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F858caf2d-e79c-4c3e-8467-f1aea29e2f3b_694x444.png 1272w, https://substackcdn.com/image/fetch/$s_!6XZW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F858caf2d-e79c-4c3e-8467-f1aea29e2f3b_694x444.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h4>&#128190; Managing Data in a Multi-Cloud World</h4><p>AI workloads run on data&#8212;and lots of it.</p><p>Managing that across clouds? Needs solid strategy. Here&#8217;s a breakdown:</p><ul><li><p><strong>Portability &amp; Interoperability</strong> </p><p>Keep data in sync across clouds using available tools like AWS DataSync. </p></li><li><p><strong>Smart Storage Strategies</strong></p><p>Localize storage near compute to reduce data transfer latency</p><p>Hybrid storage(on prem+cloud) offers flexibility and compliance benefits</p></li><li><p><strong>Data Consistency</strong></p><p>Use distributed database and leverage available synchronization  tools to keep data up to date and accurate across cloud </p></li><li><p><strong>Security &amp; Compliance</strong></p><p>Encrypt data in transit and at rest.</p><p>Use governance tools for compliance and auditing</p></li><li><p><strong>Cost Optimization</strong></p><p>Use compression </p><p>Avoid unnecessary cross-cloud movement</p><p>Use fast storage for active data wheras cheap storage for archived data.</p></li></ul><h4>&#128269; Final Thought</h4><p> Multi-cloud AI isn&#8217;t just a trend&#8212;it&#8217;s a smart, strategic move if done right. But it requires planning, the right tools, and a mindset focused on portability, security, and efficiency.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Automation! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Introduction to Container-Based Architectures]]></title><description><![CDATA[A Simple Guide to How Containers Are Changing the Way We Deploy Applications]]></description><link>https://blog.growaith.com/p/introduction-to-container-based-architectures</link><guid isPermaLink="false">https://blog.growaith.com/p/introduction-to-container-based-architectures</guid><dc:creator><![CDATA[Dubey]]></dc:creator><pubDate>Sun, 29 Jun 2025 15:58:05 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jFzQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b96b9cf-fdf3-4a25-9052-b742aff7ac82_922x427.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jFzQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b96b9cf-fdf3-4a25-9052-b742aff7ac82_922x427.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jFzQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b96b9cf-fdf3-4a25-9052-b742aff7ac82_922x427.png 424w, https://substackcdn.com/image/fetch/$s_!jFzQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b96b9cf-fdf3-4a25-9052-b742aff7ac82_922x427.png 848w, https://substackcdn.com/image/fetch/$s_!jFzQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b96b9cf-fdf3-4a25-9052-b742aff7ac82_922x427.png 1272w, https://substackcdn.com/image/fetch/$s_!jFzQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b96b9cf-fdf3-4a25-9052-b742aff7ac82_922x427.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jFzQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b96b9cf-fdf3-4a25-9052-b742aff7ac82_922x427.png" width="922" height="427" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4b96b9cf-fdf3-4a25-9052-b742aff7ac82_922x427.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:427,&quot;width&quot;:922,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:110941,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://netomate.substack.com/i/167101220?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b96b9cf-fdf3-4a25-9052-b742aff7ac82_922x427.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jFzQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b96b9cf-fdf3-4a25-9052-b742aff7ac82_922x427.png 424w, https://substackcdn.com/image/fetch/$s_!jFzQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b96b9cf-fdf3-4a25-9052-b742aff7ac82_922x427.png 848w, https://substackcdn.com/image/fetch/$s_!jFzQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b96b9cf-fdf3-4a25-9052-b742aff7ac82_922x427.png 1272w, https://substackcdn.com/image/fetch/$s_!jFzQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b96b9cf-fdf3-4a25-9052-b742aff7ac82_922x427.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Container - It&#8217;s word that pops up everywhere right ? May be you have gone through   few youtube videos  .Many of them  decent and good jobs explaining concept but here, I want to explain containers in a way that&#8217;s <strong>super simple</strong>, natural, and easy to relate and most importantly, these are <strong>my own notes</strong> as I&#8217;m learning this myself, and as I do, I want to make sure I <strong>learn and share</strong> along the way.</p><p></p><h3>&#128678; The Real-World Problem</h3><p>Why we even need to know or care  about container ? </p><p>If you have worked in deveolpment or IT operations, you might be aware of struggle </p><ul><li><p>The code works perfectly in ppe enviornemnt or on deveoplers own machine </p></li><li><p>As soon as code is pushed on production  ? Error , crash , mismatch some or other issue </p><p></p><p>This disconnet between Dev and Ops  is frustrating &#8212; it&#8217;s sometime costly for companies .And even it today&#8217;s exponentially growing tech , its not expected move slow or break things in production. . So what&#8217;s the fix ?</p><p></p><h3>&#128230; Enter Container-Based Architectures</h3><p></p><p>We can say Container is solution of the problem . It packages everything application needed - the code , the runtime, libaries and dependencies &#8212;- into a single unit .Thus making apps:</p></li><li><p>Easily to deploy</p></li><li><p>Easier to Update</p></li><li><p>Easier to run on any machine</p></li></ul><p></p><h3>&#129521; From Monolith to Microservices</h3><p>Let&#8217;s look at architecure now &#8594;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FkaX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02742d24-bdd4-4a63-8dc0-4943f4b2ee2f_1069x508.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FkaX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02742d24-bdd4-4a63-8dc0-4943f4b2ee2f_1069x508.png 424w, https://substackcdn.com/image/fetch/$s_!FkaX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02742d24-bdd4-4a63-8dc0-4943f4b2ee2f_1069x508.png 848w, https://substackcdn.com/image/fetch/$s_!FkaX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02742d24-bdd4-4a63-8dc0-4943f4b2ee2f_1069x508.png 1272w, https://substackcdn.com/image/fetch/$s_!FkaX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02742d24-bdd4-4a63-8dc0-4943f4b2ee2f_1069x508.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FkaX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02742d24-bdd4-4a63-8dc0-4943f4b2ee2f_1069x508.png" width="1069" height="508" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/02742d24-bdd4-4a63-8dc0-4943f4b2ee2f_1069x508.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:508,&quot;width&quot;:1069,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:69695,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://netomate.substack.com/i/167101220?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02742d24-bdd4-4a63-8dc0-4943f4b2ee2f_1069x508.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FkaX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02742d24-bdd4-4a63-8dc0-4943f4b2ee2f_1069x508.png 424w, https://substackcdn.com/image/fetch/$s_!FkaX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02742d24-bdd4-4a63-8dc0-4943f4b2ee2f_1069x508.png 848w, https://substackcdn.com/image/fetch/$s_!FkaX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02742d24-bdd4-4a63-8dc0-4943f4b2ee2f_1069x508.png 1272w, https://substackcdn.com/image/fetch/$s_!FkaX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02742d24-bdd4-4a63-8dc0-4943f4b2ee2f_1069x508.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p>On the <strong>left</strong>, you have a <strong>traditional  way (Monolithic) </strong> &#8212; all parts of the application bundled together (&#8230;all one big block).</p></li><li><p>On the <strong>right</strong>, you split that into <strong>smaller services ( Microservcies )</strong>&#8212; each one running independently in its own container .</p></li></ul><p>Why this is awesome:</p><ul><li><p>You can <strong>scale</strong> each part separately.</p></li><li><p>You can <strong>update</strong> one service without touching the others.</p></li><li><p>You can <strong>deploy</strong> services faster and with fewer errors.</p></li></ul><h3></h3><h3>Deployment Models: Bare Metal &#8594; VMs &#8594; Containers</h3><p>We had bare Metal , VMs then whey there was need of Container .Lets see difference of all three in simplastic way :</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1i0E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fc03ebc-1e27-46d1-b277-f9aa7270e31e_1072x541.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1i0E!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fc03ebc-1e27-46d1-b277-f9aa7270e31e_1072x541.png 424w, https://substackcdn.com/image/fetch/$s_!1i0E!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fc03ebc-1e27-46d1-b277-f9aa7270e31e_1072x541.png 848w, https://substackcdn.com/image/fetch/$s_!1i0E!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fc03ebc-1e27-46d1-b277-f9aa7270e31e_1072x541.png 1272w, https://substackcdn.com/image/fetch/$s_!1i0E!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fc03ebc-1e27-46d1-b277-f9aa7270e31e_1072x541.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1i0E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fc03ebc-1e27-46d1-b277-f9aa7270e31e_1072x541.png" width="1072" height="541" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4fc03ebc-1e27-46d1-b277-f9aa7270e31e_1072x541.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:541,&quot;width&quot;:1072,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:111166,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://netomate.substack.com/i/167101220?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fc03ebc-1e27-46d1-b277-f9aa7270e31e_1072x541.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1i0E!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fc03ebc-1e27-46d1-b277-f9aa7270e31e_1072x541.png 424w, https://substackcdn.com/image/fetch/$s_!1i0E!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fc03ebc-1e27-46d1-b277-f9aa7270e31e_1072x541.png 848w, https://substackcdn.com/image/fetch/$s_!1i0E!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fc03ebc-1e27-46d1-b277-f9aa7270e31e_1072x541.png 1272w, https://substackcdn.com/image/fetch/$s_!1i0E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fc03ebc-1e27-46d1-b277-f9aa7270e31e_1072x541.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4>Bare Metal </h4><p> Apps runs directly on the OS . One change or update has potentail to break everything .Its headache for Dev /OPS  to troubleshoot or update </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.growaith.com/subscribe?"><span>Subscribe now</span></a></p><h4>Virtual Machines</h4><p> Apps now run inside a full virtaul OS .Its more stable but use lot of resourse and is bit slow to start .Each VM can be servaral GBs in size .</p><h4> Containers</h4><p>APps shre the Host OS but are completed isolated to each other .Container starts in second and use less resourse .Its portable ,easy to move scale and replicate. </p><p>USP &#8212; &gt; One container = One service = Super clean and efficient</p><h2>&#129504; How Containers Work </h2><p>Imagine a <strong>container</strong> like a lightweight box that holds your application code , all dependencies it need to run and contains seetinga nd config file.</p><p>Now, imagine these containers running on your system, <strong>isolated but lightweight</strong> &#8212; just like  you ahve multiple apps  installed on your phone.</p><p>Technically speaking:</p><ul><li><p>Containers run in a <strong>namespace</strong> &#8212; a sandboxed space on the host OS.</p></li><li><p>They behave like mini virtual machines, but they&#8217;re just regular processes.</p></li><li><p>They share the host&#8217;s kernel but are managed separately.</p></li></ul><div><hr></div><h2>&#9881;&#65039; Why Developers and Engineers Love Containers</h2><ul><li><p> <strong>Fast to Start:</strong> Seconds, not minutes</p></li><li><p><strong>Clean Deployments:</strong> No leftover  or conflicts</p></li><li><p><strong>Repeatable:</strong> &#8220;It works on my machine&#8221; becomes &#8220;It works everywhere&#8221;</p></li><li><p><strong>Composable:</strong> Build systems from plug-and-play components</p></li><li><p> <strong>Scalable:</strong> Quickly spin up more containers during high demand</p><p></p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Automation! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>&#129520; Example Tools and Features in the Container Ecosystem</h2><ul><li><p><strong>Docker</strong> &#8211; The most popular tool to create and manage containers</p></li><li><p><strong>Docker Compose</strong> &#8211; To define multi-container setups</p></li><li><p><strong>Kubernetes</strong> &#8211; For large-scale orchestration</p></li><li><p><strong>Monitoring &amp; Telemetry</strong> &#8211; Containers can be monitored app-wise, not just machine-wise</p></li></ul><div><hr></div><h2>&#129514; For Network Engineers: Why It Matters</h2><p>Containers aren&#8217;t just for app developers &#8212; they&#8217;re <strong>changing network automation</strong> too:</p><ul><li><p>Run various tools like  <strong>NetBox</strong>, or <strong>custom scripts</strong> in containers</p></li><li><p>No OS dependency: works on Linux, Mac, or Windows</p></li><li><p>Spin up test labs, tools, or dashboards in seconds</p></li><li><p>Extend network devices with containerized apps &#8212; safely and easily</p></li></ul><div><hr></div><h2>&#128282; Wrapping It Up</h2><p>Containers are transforming how we build, deploy, and scale applications. They&#8217;re:</p><ul><li><p>Lightweight</p></li><li><p>Fast</p></li><li><p>Isolated</p></li><li><p>Portable</p></li></ul><p>Whether you're a <strong>developer</strong>, a <strong>DevOps engineer</strong>, or even a <strong>network engineer</strong>, learning Docker and containers will level up your game.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/p/introduction-to-container-based-architectures?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Automation! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/p/introduction-to-container-based-architectures?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.growaith.com/p/introduction-to-container-based-architectures?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Why Network Automation Alone Isn’t Enough Anymore]]></title><description><![CDATA[Scripts follow instructions. AI understands intent]]></description><link>https://blog.growaith.com/p/why-network-automation-alone-isnt</link><guid isPermaLink="false">https://blog.growaith.com/p/why-network-automation-alone-isnt</guid><dc:creator><![CDATA[Dubey]]></dc:creator><pubDate>Sun, 22 Jun 2025 18:19:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4-AV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1523f8-2054-4da9-b0e4-2897de022e20_828x461.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4-AV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1523f8-2054-4da9-b0e4-2897de022e20_828x461.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4-AV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1523f8-2054-4da9-b0e4-2897de022e20_828x461.png 424w, https://substackcdn.com/image/fetch/$s_!4-AV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1523f8-2054-4da9-b0e4-2897de022e20_828x461.png 848w, https://substackcdn.com/image/fetch/$s_!4-AV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1523f8-2054-4da9-b0e4-2897de022e20_828x461.png 1272w, https://substackcdn.com/image/fetch/$s_!4-AV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1523f8-2054-4da9-b0e4-2897de022e20_828x461.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4-AV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1523f8-2054-4da9-b0e4-2897de022e20_828x461.png" width="828" height="461" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fd1523f8-2054-4da9-b0e4-2897de022e20_828x461.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:461,&quot;width&quot;:828,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:84761,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://netomate.substack.com/i/166540269?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1523f8-2054-4da9-b0e4-2897de022e20_828x461.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4-AV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1523f8-2054-4da9-b0e4-2897de022e20_828x461.png 424w, https://substackcdn.com/image/fetch/$s_!4-AV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1523f8-2054-4da9-b0e4-2897de022e20_828x461.png 848w, https://substackcdn.com/image/fetch/$s_!4-AV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1523f8-2054-4da9-b0e4-2897de022e20_828x461.png 1272w, https://substackcdn.com/image/fetch/$s_!4-AV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1523f8-2054-4da9-b0e4-2897de022e20_828x461.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Last week, I was watching a random AI video on YouTube when a thought struck me:</p><p>What if AI actually had a important role in networking industry?</p><p>This post is the outcome of that thought and bit reserach .</p><p>I&#8217;ve written a lot of Ansible playbooks recently.</p><p>Honestly, it felt magical at first. Push changes across routers with a single play &#8212; amazing.<br>But over time, something about it didn&#8217;t sit right.</p><p>I kept asking myself: <em>Is this really automation?</em> Or just scripted execution?</p><h3><strong>The Realization</strong></h3><p>The more I automated &#8212; using Ansible, Python, and even some in-house tools &#8212; the more I saw the issue.</p><p>Yes, configs got pushed faster. But if something went wrong ?<br>Manual digging. Logs. Debugs.<br>No real &#8220;Brain&#8221; in the system.</p><p>It was like teaching a robot to follow steps, but not think.</p><p>And then AI started buzzing everywhere. ChatGPT, co-pilots, LLMs...</p><p>And the question hit me hard:</p><p><em>What if the system could understand what I want &#8212; not just what I tell it?</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.growaith.com/subscribe?"><span>Subscribe now</span></a></p><p></p><h3><strong>What If I Could Say&#8230;</strong></h3><p>&#8220;Add a static route for 10.1.1.0/24 via 192.168.1.1 on router R1.&#8221;</p><p>That&#8217;s it.</p><p>No YAML. No template variables. Just the intent.</p><p>And the system should know:</p><ul><li><p>Which router R1 is</p></li><li><p>What the current config looks like</p></li><li><p>Whether that next hop is reachable</p></li><li><p>And apply the change safely</p></li></ul><p>Right now, its not a dream. But AI is making it possible.</p><h3><strong>Where Automation Falls Short</strong></h3><p>Let&#8217;s be honest.</p><p>Automation is great. But it:</p><ul><li><p>Doesn&#8217;t understand intent</p></li><li><p>Can&#8217;t read the network&#8217;s topology or policy dependencies</p></li><li><p>Doesn&#8217;t explain logs</p></li><li><p>Doesn&#8217;t help you write documentation (which we all love to skip)</p></li><li><p>And grows harder to maintain the more scripts you have</p></li></ul><p>We&#8217;re building bigger toolboxes &#8212; but not necessarily smarter ones.</p><h3><strong>How AI Can Help</strong></h3><p>I don&#8217;t think AI will replace us. But it&#8217;s already <em>helping</em>.</p><p>Tools like GPT can:</p><ul><li><p>Turn natural language into starting configs</p></li><li><p>Draft validation logic for pre/post checks</p></li><li><p>Generate parts of LLDs</p></li><li><p>Parse log outputs and summarize them</p></li></ul><p>And yes &#8212; even generate diagrams or mind maps based on device configs.</p><h3><strong>The One Thing We Always Skip</strong></h3><p>Documentation.</p><p>We all hate it. Most of us leave it to the last minute (or never).<br>But when something breaks &#8212; it&#8217;s the <em>first</em> thing we wish we had.</p><p>AI can:</p><ul><li><p>Summarize LLDs</p></li><li><p>Highlight change impacts</p></li><li><p>Auto-generate diagrams</p></li><li><p>Keep things up to date when the network changes</p></li></ul><p>It saves hours of writing and backtracking.</p><h3><strong>So What&#8217;s the Future Look Like?</strong></h3><p>A hybrid world.</p><ul><li><p>CLI + YAML + Prompts + AI + Human judgment.</p></li><li><p>Systems that suggest. Engineers that decide.</p></li><li><p>AI that writes the first draft, and we finalize it.</p></li></ul><p>The goal isn&#8217;t to remove engineers.<br>It&#8217;s to remove the repetition &#8212; and free us to focus on what matters.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/p/why-network-automation-alone-isnt?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Automation! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/p/why-network-automation-alone-isnt?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.growaith.com/p/why-network-automation-alone-isnt?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><p>I believe the best network engineers of the in future won&#8217;t just configure routers &#8212; they&#8217;ll Join Hands with AI to design, test, and troubleshoot smarter than ever before.</p><p>Smiles :)</p><p>Anurudh</p>]]></content:encoded></item><item><title><![CDATA[Ansible Mastery Part 6: Encrypting Secrets with Ansible Vault]]></title><description><![CDATA[Protect passwords, API keys, and licenses in your playbooks. A practical guide to using Ansible Vault without breaking your automation flow.]]></description><link>https://blog.growaith.com/p/ansible-mastery-part-6-encrypting</link><guid isPermaLink="false">https://blog.growaith.com/p/ansible-mastery-part-6-encrypting</guid><dc:creator><![CDATA[Dubey]]></dc:creator><pubDate>Sat, 24 May 2025 02:30:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3Yu8!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2978784c-71a4-48e0-ad3b-fec440d2d2ee_94x94.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6nbn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6dc868-1b19-4976-a7cd-9b86369c42cd_618x267.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6nbn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6dc868-1b19-4976-a7cd-9b86369c42cd_618x267.png 424w, https://substackcdn.com/image/fetch/$s_!6nbn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6dc868-1b19-4976-a7cd-9b86369c42cd_618x267.png 848w, https://substackcdn.com/image/fetch/$s_!6nbn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6dc868-1b19-4976-a7cd-9b86369c42cd_618x267.png 1272w, https://substackcdn.com/image/fetch/$s_!6nbn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6dc868-1b19-4976-a7cd-9b86369c42cd_618x267.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6nbn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6dc868-1b19-4976-a7cd-9b86369c42cd_618x267.png" width="618" height="267" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fe6dc868-1b19-4976-a7cd-9b86369c42cd_618x267.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:267,&quot;width&quot;:618,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:55244,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://netomate.substack.com/i/162759026?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6dc868-1b19-4976-a7cd-9b86369c42cd_618x267.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6nbn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6dc868-1b19-4976-a7cd-9b86369c42cd_618x267.png 424w, https://substackcdn.com/image/fetch/$s_!6nbn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6dc868-1b19-4976-a7cd-9b86369c42cd_618x267.png 848w, https://substackcdn.com/image/fetch/$s_!6nbn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6dc868-1b19-4976-a7cd-9b86369c42cd_618x267.png 1272w, https://substackcdn.com/image/fetch/$s_!6nbn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6dc868-1b19-4976-a7cd-9b86369c42cd_618x267.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Welcome back to our Ansible Mastery Journey. If you are new to here , don&#8217;t miss to check previous posts before diving into this post.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;555a8cec-4ef1-452f-b5c0-3c963c6d772a&quot;,&quot;caption&quot;:&quot;Welcome back to our Ansible Mastery Journey. If you are new to here , don&#8217;t miss to check previous posts before diving into this post.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Ansible Mastery Part 5 :Dynamic Hostname Configuration with Ansible&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:332955290,&quot;name&quot;:&quot;Anurudh&quot;,&quot;bio&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/65e70e32-c367-4039-a741-d221ecb97850_144x144.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-05-18T02:30:22.285Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b1bfb11-758b-492f-a9a5-1f4cf469c95a_913x367.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://netomate.substack.com/p/ansible-mastery-part-5-dynamic-hostname&quot;,&quot;section_name&quot;:&quot;&#9881;&#65039;Network Automation&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:163791770,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Automation&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2978784c-71a4-48e0-ad3b-fec440d2d2ee_94x94.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p><p>We have already discussed how ansible is used to automate infrastructre .right ?</p><p> We right playbooks to handle config  and much more .But sometimes these playbooks need senstive information &#8212;password API tokens, Licence key ,SSH Keys &#8212;Stuff that you dont want to be in plain text.</p><p>Now imagine  pushing those playbook to Github or Gitlab , may be due to need of collabaration with others. If you just drop your secrets into the YAML as plain text , bascially you are taking risk and sharing your secrets with the world.</p><p></p><h4>&#128274; What is Ansible Vault?</h4><p>Think of <strong>Ansible Vault</strong>  as a  <strong>password protected envelope</strong> for your YAML content . You can encrypyt either:</p><ul><li><p>Entire files </p></li><li><p>Or just  individual variables.</p></li></ul><p>This way we can safely version control playbooks with senstive data in locked condition.</p><h4>&#129514; Step-by-Step: Encrypting a File</h4><p>Let&#8217;s say we have critical_data.yml file which has api and licence key</p><pre><code>((venv) ) anurudh@localhost:~/Ansible_Network_Engineer$ cat inventory/critical_data.yml 
---
 api_key: Cisco@123
 licence_key: abcdef
((venv) ) anurudh@localhost:~/Ansible_Network_Engineer$ </code></pre><p>Let&#8217;s Encrypt it :</p><pre><code>ansible-vault encrypt ./inventory/critical_data.yml </code></pre><p>It will ask for vault password- choose one  and remember. You will need it to  decrypt file later</p><pre><code>((venv) ) anurudh@localhost:~/Ansible_Network_Engineer$ ansible-vault encrypt ./inventory/critical_data.yml 
<strong>New Vault password: 
Confirm New Vault password: 
Encryption successful</strong>
((venv) ) anurudh@localhost:~/Ansible_Network_Engineer$ </code></pre><p>The contents are now encrypted. &#9989;</p><pre><code>((venv) ) anurudh@localhost:~/Ansible_Network_Engineer$ cat inventory/critical_data.yml 
$ANSIBLE_VAULT;1.1;AES256
3764346265303562323837363163663030636231373665343763366339343064346331323066638
3035336434306331366230306361396465333635363739300a33373533313238633666666330611
3735616534633434373262343930336136303938303332303136373030313833383739643133361
3032613261666333330a33393431633662623436656538306537336662393838613433383661363
3937653837316337313532353734343432393762346333333636373036353637363032353236306
6438323364373136316432616163396164383564616366653439
((venv) ) anurudh@localhost:~/Ansible_Network_Engineer$ </code></pre><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/p/ansible-mastery-part-6-encrypting?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.growaith.com/p/ansible-mastery-part-6-encrypting?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p></p><h4>&#128275; Decrypting the File</h4><p>To decrypt it when needed:</p><pre><code>ansible-vault decrypt ./inventory/critical_data.yml </code></pre><p></p><h4>&#128230; Using Encrypted Files in Playbooks</h4><p>Lets look back at our playbook</p><pre><code>((venv) ) anurudh@localhost:~/Ansible_Network_Engineer$ cat ansible_playbook/03_ssh_key.yml 
---
 - hosts: routers
   #gather_facts: false
   vars_files:    
           /<strong>home/anurudh/Ansible_Network_Engineer/inventory/critical_data.yml</strong>
   tasks:
     - name: Print Ansible Config location 
       ansible.builtin.debug:
        msg: 
        - "{{ ansible_config_file }}"
        - "{{ ansible_user }}"
        - "{{ api_key }}"
        - "{{ license_key }}"((venv) ) anurudh@localhost:~/Ansible_Network_Engineer$  </code></pre><p>Let&#8217;s run the playbook:</p><pre><code>((venv) ) anurudh@localhost:~/Ansible_Network_Engineer$ ansible-playbook ansible_playbook/03_ssh_key.yml 
ERROR! Attempting to decrypt but no vault secrets found
((venv) ) anurudh@localhost:~/Ansible_Network_Engineer$ 
</code></pre><p>Expected. We will get <code>ERROR! Attempting to decrypt but no vault secrets found</code></p><p>we need to tell Ansible to <strong>ask for the vault password</strong>:</p><pre><code>ansible-playbook ansible_playbook/03_ssh_key.yml <strong>--ask-vault-pas</strong></code></pre><p>Then provide the vault password, and boom &#8212; it works:</p><pre><code>((venv) ) anurudh@localhost:~/Ansible_Network_Engineer$ ansible-playbook ansible_playbook/03_ssh_key.yml --ask-vault-pass
Vault password: 

PLAY [routers] ******************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************
ok: [r2]
ok: [r1]

TASK [Print Ansible Config location] ********************************************************************************************
ok: [r1] =&gt; {
    "msg": [
        "/home/anurudh/Ansible_Network_Engineer/ansible.cfg",
        "ansible_admin",
        "Cisco@123",
        "abcdef"
    ]
}
ok: [r2] =&gt; {
    "msg": [
        "/home/anurudh/Ansible_Network_Engineer/ansible.cfg",
        "cisco",
        "Cisco@123",
        "abcdef"
    ]
}

PLAY RECAP **********************************************************************************************************************
r1                         : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
r2                         : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

((venv) ) anurudh@localhost:~/Ansible_Network_Engineer$ </code></pre><p>&#129300; Tired of Typing the Password Every Time?</p><p>You might have noticed that we have to provide Vault password everytime while running playbook</p><pre><code>((venv) ) anurudh@localhost:~/Ansible_Network_Engineer$ ansible-playbook ansible_playbook/03_ssh_key.yml --ask-vault-pass
<strong>Vault password:</strong> 
</code></pre><p>Shouldn&#8217;t be great if we dont have to provide Vault password everytime? </p><p>Lets see how it can be done.</p><p>Lets create a vault password file to store the vault password .</p><p>In my case i have take vault password as 1234 </p><pre><code>((venv) ) anurudh@localhost:~/Ansible_Network_Engineer$ cat inventory/vid_pass 
1234
((venv) ) anurudh@localhost:~/Ansible_Network_Engineer$ 
((venv) ) anurudh@localhost:~/Ansible_Network_Engineer$ </code></pre><p>Then update your <code>ansible.cfg</code>:</p><pre><code>vault_password_file=/home/anurudh/Ansible_Network_Engineer/inventory/vid_pass</code></pre><p> ansible.cfg file for reference </p><pre><code>((venv) ) anurudh@localhost:~/Ansible_Network_Engineer$ cat ansible.cfg 

[defaults]
inventory = /home/anurudh/ansible/inventory/cisco_devices
transport = network_cli
#host_key_checking =False  # Disables SSH host key checking
vault_password_file=/home/anurudh/Ansible_Network_Engineer/inventory/vid_pass
 </code></pre><p>Now you can run your playbook <strong>without --ask-vault-pass</strong>:</p><pre><code>ansible-playbook ansible_playbook/03_ssh_key.yml </code></pre><p>It picks up the password automatically. Nice.</p><pre><code>((venv) ) anurudh@localhost:~/Ansible_Network_Engineer$ ansible-playbook ansible_playbook/03_ssh_key.yml 

PLAY [routers] ******************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************
ok: [r2]
ok: [r1]

TASK [Print Ansible Config location] ********************************************************************************************
ok: [r1] =&gt; {
    "msg": [
        "/home/anurudh/Ansible_Network_Engineer/ansible.cfg",
        "ansible_admin",
        "Cisco@123",
        "abcdef"
    ]
}
ok: [r2] =&gt; {
    "msg": [
        "/home/anurudh/Ansible_Network_Engineer/ansible.cfg",
        "cisco",
        "Cisco@123",
        "abcdef"
    ]
}

PLAY RECAP **********************************************************************************************************************
r1                         : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
r2                         : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

((venv) ) anurudh@localhost:~/Ansible_Network_Engineer$ </code></pre><p></p><p>Yes, you have got it !!! We have used now Ansible-Vault feature to encrypt our critcial data.  You know, we can go ahead and encrypt even out vault password file ? </p><p>I hope you can try even to encrypt vault password file .Its all same as above.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share Automation&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.growaith.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share Automation</span></a></p><h4>&#9989; <strong>Recap</strong></h4><ul><li><p>Ansible Vault is your <strong>built-in secret protector</strong>.</p></li><li><p>It plays nice with Git and automation pipelines.</p></li><li><p>Use it to keep your playbooks clean and your credentials safe.</p></li></ul><h4>&#9989; <strong>Action Step for You Today</strong></h4><p>Try it, break it, automate it.<br>If you&#8217;re doing infra-as-code, this is a must-have tool in your Ansible workflow.</p><p>I&#8217;ll guide you, one simple post at a time.</p><p>We will deep dive more into Ansible in upcoming posts. Don&#8217;t miss to DM or ping me with your queries and comments.</p><p>Smiles :)</p><p>Anurudh</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Automation! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Ansible Mastery Part 5 :Dynamic Hostname Configuration with Ansible]]></title><description><![CDATA[Giving Your Routers Real Names (the Easy Way)]]></description><link>https://blog.growaith.com/p/ansible-mastery-part-5-dynamic-hostname</link><guid isPermaLink="false">https://blog.growaith.com/p/ansible-mastery-part-5-dynamic-hostname</guid><dc:creator><![CDATA[Dubey]]></dc:creator><pubDate>Sun, 18 May 2025 02:30:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!u_Pn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b1bfb11-758b-492f-a9a5-1f4cf469c95a_913x367.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!u_Pn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b1bfb11-758b-492f-a9a5-1f4cf469c95a_913x367.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u_Pn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b1bfb11-758b-492f-a9a5-1f4cf469c95a_913x367.png 424w, https://substackcdn.com/image/fetch/$s_!u_Pn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b1bfb11-758b-492f-a9a5-1f4cf469c95a_913x367.png 848w, https://substackcdn.com/image/fetch/$s_!u_Pn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b1bfb11-758b-492f-a9a5-1f4cf469c95a_913x367.png 1272w, https://substackcdn.com/image/fetch/$s_!u_Pn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b1bfb11-758b-492f-a9a5-1f4cf469c95a_913x367.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!u_Pn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b1bfb11-758b-492f-a9a5-1f4cf469c95a_913x367.png" width="913" height="367" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6b1bfb11-758b-492f-a9a5-1f4cf469c95a_913x367.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:367,&quot;width&quot;:913,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:85635,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://netomate.substack.com/i/163791770?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b1bfb11-758b-492f-a9a5-1f4cf469c95a_913x367.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!u_Pn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b1bfb11-758b-492f-a9a5-1f4cf469c95a_913x367.png 424w, https://substackcdn.com/image/fetch/$s_!u_Pn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b1bfb11-758b-492f-a9a5-1f4cf469c95a_913x367.png 848w, https://substackcdn.com/image/fetch/$s_!u_Pn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b1bfb11-758b-492f-a9a5-1f4cf469c95a_913x367.png 1272w, https://substackcdn.com/image/fetch/$s_!u_Pn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b1bfb11-758b-492f-a9a5-1f4cf469c95a_913x367.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Welcome back to our Ansible Mastery Journey. If you are new to here , don&#8217;t miss to check previous posts before diving into this post.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;0c4784ef-e13a-46fd-8af2-56b87adfa0bd&quot;,&quot;caption&quot;:&quot;Welcome back to our Ansible Mastery Journey. If you are new to here , don&#8217;t miss to check previous posts before diving into this post.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Ansible Mastery Part 4 :Let&#8217;s Talk SSH &quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:332955290,&quot;name&quot;:&quot;Anurudh&quot;,&quot;bio&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/65e70e32-c367-4039-a741-d221ecb97850_144x144.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-05-05T02:30:23.176Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c55c28-f53d-4d7a-9dd5-f43212d4596d_826x354.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://netomate.substack.com/p/ansible-mastery-part-3-lets-talk&quot;,&quot;section_name&quot;:&quot;&#9881;&#65039;Network Automation&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:162743796,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Automation&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2978784c-71a4-48e0-ad3b-fec440d2d2ee_94x94.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>Ever stare at a bunch of IPs and think, <em>"This would be so much easier if these routers had names?"</em> Same. Instead of setting hostnames manually on each Cisco box, here&#8217;s a simple way to get Ansible to do it for you. No copy-pasting the same command again and again. Just clean automation.</p><p>Let&#8217;s get straight into it.</p><div><hr></div><h3>Start With Your Inventory</h3><p>Open up your <code>hosts.ini</code> file. Here's how I set mine up:</p><pre><code>[anurudh@localhost ansible_start]$ cat hosts.ini 

[routers]
1.1.1.1
2.2.2.2

[ios_devices:children]
routers

[ios_devices:vars]
ansible_user=cisco
ansible_password=cisco
ansible_connection=network_cli
ansible_network_os=ios[anurudh@localhost ansible_start]$ </code></pre><p>This tells Ansible: &#8220;Hey, we&#8217;re working with Cisco IOS gear, here are the devices, and here&#8217;s how to log in.&#8221;</p><div><hr></div><h3>Make Sure Ansible Knows What&#8217;s Up</h3><p>Next, check your <code>ansible.cfg</code>. You don&#8217;t need anything fancy &#8212; just make sure it points to your inventory file and uses the right connection method:</p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.growaith.com/subscribe?"><span>Subscribe now</span></a></p><p></p><pre><code>[anurudh@localhost ansible_start]$ cat ansible.cfg 

[defaults]
gathering = explicit
inventory = hosts.ini
transport = network_cli
#host_key_checking = False  # Disables SSH host key checking
[anurudh@localhost ansible_start]$ 
</code></pre><p>That commented-out line disables SSH key checking &#8212; helpful during testing, but use it wisely.</p><div><hr></div><h3>Now the Fun Part: Auto-Generate Hostnames</h3><p>You don&#8217;t want to manually set hostnames like <code>R1111</code> and <code>R2222</code>, right? Let Ansible do that. Here's a tiny playbook that makes it happen:</p><pre><code>[anurudh@localhost ansible_start]$ cat 04_config_hostname.yml 

---
 - name: Configure Hostane on Cisco routers
   hosts: ios_devices
   gather_facts: no 
   
   tasks:
    - name: set hostname based on IP
      cisco.ios.ios_config :
         lines:
            - hostname R{{ inventory_hostname | regex_replace('\\.', '') }}
            
[anurudh@localhost ansible_start]$ </code></pre><p>What&#8217;s happening here?</p><ul><li><p><code>inventory_hostname</code> is the IP of each device.</p></li><li><p>The <code>regex_replace('\\.', '')</code> bit strips out the dots.</p></li><li><p>So <code>1.1.1.1</code> becomes <code>R1111</code>. Neat, right?</p></li></ul><div><hr></div><h3>Let&#8217;s See It in Action</h3><p>Run the playbook like this:</p><pre><code>
[anurudh@localhost ansible_start]$ ansible-playbook  03_ping_router 

PLAY [check connectivity to cisco routers] *************************************************

TASK [ping the router] *********************************************************************
ok: [1.1.1.1]
ok: [2.2.2.2]

PLAY RECAP *********************************************************************************
1.1.1.1                    : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
2.2.2.2                    : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[anurudh@localhost ansible_start]$ 


</code></pre><p>Once it runs, SSH into your devices to confirm the hostname stuck:</p><pre><code>[anurudh@localhost ansible_start]$ ssh cisco@1.1.1.1
(cisco@1.1.1.1) Password: 

R1.1.1.1#exit
Connection to 1.1.1.1 closed.
[anurudh@localhost ansible_start]$ ssh cisco@2.2.2.2
(cisco@2.2.2.2) Password: 

R2.2.2.2#</code></pre><p>If you see that hostanme  R111 for router 1 and R2222 for router 2, congrats &#8212; it worked.</p><div><hr></div><h3>Recap </h3><ul><li><p>You learned how to build hostnames from router IPs</p></li><li><p>You used Jinja2 to clean them up</p></li><li><p>You pushed config with Ansible</p></li><li><p>You did it without repeating yourself 50 times</p></li></ul><p>If you&#8217;ve got more routers to name, this setup will save you hours. Add this to your playbook toolbox &#8212; you&#8217;ll use it again.</p><h3><strong>Action Step for You Today</strong></h3><p><strong>Just one thing:</strong> make sure to go through the concepts and follow along with the tasks. </p><p>I&#8217;ll guide you, one simple post at a time.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://buymeacoffee.com/anurudh&quot;,&quot;text&quot;:&quot;Buy Me A Coffee&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://buymeacoffee.com/anurudh"><span>Buy Me A Coffee</span></a></p><p>We will deep dive more into Ansible in upcoming posts. Don&#8217;t miss to DM or ping me with your queries and comments.</p><p>Smiles :)</p><p>Anurudh</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/p/ansible-mastery-part-5-dynamic-hostname?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Automation! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/p/ansible-mastery-part-5-dynamic-hostname?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.growaith.com/p/ansible-mastery-part-5-dynamic-hostname?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p>]]></content:encoded></item><item><title><![CDATA[Ansible Mastery Part 4 :Let’s Talk SSH ]]></title><description><![CDATA[SSH Key Authentication Setup for Ansible-Controlled Cisco Devices]]></description><link>https://blog.growaith.com/p/ansible-mastery-part-3-lets-talk</link><guid isPermaLink="false">https://blog.growaith.com/p/ansible-mastery-part-3-lets-talk</guid><dc:creator><![CDATA[Dubey]]></dc:creator><pubDate>Mon, 05 May 2025 02:30:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3oZ1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c55c28-f53d-4d7a-9dd5-f43212d4596d_826x354.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3oZ1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c55c28-f53d-4d7a-9dd5-f43212d4596d_826x354.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3oZ1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c55c28-f53d-4d7a-9dd5-f43212d4596d_826x354.png 424w, https://substackcdn.com/image/fetch/$s_!3oZ1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c55c28-f53d-4d7a-9dd5-f43212d4596d_826x354.png 848w, https://substackcdn.com/image/fetch/$s_!3oZ1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c55c28-f53d-4d7a-9dd5-f43212d4596d_826x354.png 1272w, https://substackcdn.com/image/fetch/$s_!3oZ1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c55c28-f53d-4d7a-9dd5-f43212d4596d_826x354.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3oZ1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c55c28-f53d-4d7a-9dd5-f43212d4596d_826x354.png" width="826" height="354" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c8c55c28-f53d-4d7a-9dd5-f43212d4596d_826x354.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:354,&quot;width&quot;:826,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:42332,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://netomate.substack.com/i/162743796?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c55c28-f53d-4d7a-9dd5-f43212d4596d_826x354.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3oZ1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c55c28-f53d-4d7a-9dd5-f43212d4596d_826x354.png 424w, https://substackcdn.com/image/fetch/$s_!3oZ1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c55c28-f53d-4d7a-9dd5-f43212d4596d_826x354.png 848w, https://substackcdn.com/image/fetch/$s_!3oZ1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c55c28-f53d-4d7a-9dd5-f43212d4596d_826x354.png 1272w, https://substackcdn.com/image/fetch/$s_!3oZ1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c55c28-f53d-4d7a-9dd5-f43212d4596d_826x354.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Welcome back to our Ansible Mastery Journey. If you are new to here , don&#8217;t miss to check  previous posts before diving into this post. </p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;3fd3cdc3-06b8-491f-9494-2e752d38c1b4&quot;,&quot;caption&quot;:&quot;Just many of you , I also started my networking journey with manual config troubleshooting the various issue . Thanks for reading Network Automation! Subscribe for free to receive new posts and support my work.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Why Every Network Engineer Should Learn Ansible (Even If You&#8217;re Just Starting Out)&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:332955290,&quot;name&quot;:&quot;Anurudh&quot;,&quot;bio&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/65e70e32-c367-4039-a741-d221ecb97850_144x144.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-04-18T06:19:54.526Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://netomate.substack.com/p/why-every-network-engineer-should&quot;,&quot;section_name&quot;:&quot;&#9881;&#65039;Network Automation&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:161589071,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Automation&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2978784c-71a4-48e0-ad3b-fec440d2d2ee_94x94.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;31496192-c514-4a4c-847d-c9cbe82b08a9&quot;,&quot;caption&quot;:&quot;Let&#8217; s continue with our Ansible journey. Don&#8217;t miss to go through Ansible Post 1 .Thanks for reading Network Automation! Subscribe for free to receive new posts and support my work.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Ansible Mastery Part 2:Install Ansible &amp; Run Your First Ping&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:332955290,&quot;name&quot;:&quot;Anurudh&quot;,&quot;bio&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/65e70e32-c367-4039-a741-d221ecb97850_144x144.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-04-20T12:54:52.064Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://netomate.substack.com/p/install-ansible-and-run-your-first&quot;,&quot;section_name&quot;:&quot;&#9881;&#65039;Network Automation&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:161728358,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Automation&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2978784c-71a4-48e0-ad3b-fec440d2d2ee_94x94.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;917f33d6-81c0-43d2-af74-64b2102f9130&quot;,&quot;caption&quot;:&quot;Ansible Mastery: Part 3 &#8211; Your First Real Playbook to Ping Routers&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Ansible Mastery Part 3: Your First Network Automation Playbook to Ping Cisco Routers&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:332955290,&quot;name&quot;:&quot;Anurudh&quot;,&quot;bio&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/65e70e32-c367-4039-a741-d221ecb97850_144x144.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-04-25T02:30:20.789Z&quot;,&quot;cover_image&quot;:null,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://netomate.substack.com/p/ansible-mastery-part-3-your-first&quot;,&quot;section_name&quot;:&quot;&#9881;&#65039;Network Automation&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:161822622,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Automation&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2978784c-71a4-48e0-ad3b-fec440d2d2ee_94x94.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>In this post, we will have a deep dive  into:</p><ul><li><p>Why SSH matters for Ansible</p></li><li><p>How to set up key-based ssh access(no password required)</p></li><li><p>Real setup providing steps to push your public key to Cisco routers</p></li><li><p>Testing your setup and tshoot with playbooks.</p></li></ul><h3><strong>&#128640; Why SSH Matters for Ansible</strong></h3><p>Lets talk about SSH , honestly its one thing which we expect to work while working with ansible. </p><p>At its core ,SSH is basically secure tunnel into remote machines. Its how we get in device without physically  being there. It used port 22 by default but you can t change it without any issue.</p><p>Ansible is agentless, which means it doesn&#8217;t need to install anything on the remote machine to work its magic. It just depend upon  on SSH to get in, do its job.</p><p>So if your SSH setup is broken or misconfigured? Good luck running playbooks. That&#8217;s why getting SSH right is half the battle when setting up Ansible.</p><h3><strong>&#9881;&#65039; Setting Up SSH for Ansible </strong></h3><p>Here&#8217;s how I usually go about it:</p><h4>1. Install OpenSSH</h4><p> Make sure OpenSSH is installed&#8212;both on your control machine (where you run    Ansible) and the target machines (the ones you want to manage).</p><p>To check if it's installed:</p><pre><code>[anurudh@localhost ~]$ ssh -V
OpenSSH_8.7p1, OpenSSL 3.2.2 4 Jun 2024
[anurudh@localhost ~]$ 
[anurudh@localhost ~]$ 
[anurudh@localhost ~]$ </code></pre><p>if not , it can be installed like this:</p><pre><code>[anurudh@localhost ~]$ <strong>sudo yum install openssh-server</strong>
Last metadata expiration check: 1:02:08 ago on Sat 03 May 2025 12:33:40 PM IST.
Package openssh-server-8.7p1-45.el9.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[anurudh@localhost ~]$ </code></pre><h4>2. Set Up Key-Based Auth</h4><p>This is important. You don&#8217;t want to be typing passwords every time Ansible connects, right?<br>So generate a key pair on your control node:</p><pre><code>[anurudh@localhost ~]$ ssh-keygen</code></pre><p>Now if you check your <code>.ssh</code> directory:</p><pre><code>anurudh@localhost ~]$ ls ~/.ssh/
id_rsa  id_rsa.pub  known_hosts
[anurudh@localhost ~]$ </code></pre><p>That <code>id_rsa</code> is your private key. Keep it safe. Never share it.</p><p>And <code>id_rsa.pub</code>? That&#8217;s the one you give to devices so they let you in.</p><p>This way, Ansible can log in without needing a password every time.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.growaith.com/subscribe?"><span>Subscribe now</span></a></p><h4>3. Test the Connection</h4><p>Before going all-in with Ansible, test the SSH connection manually:</p><pre><code>[anurudh@localhost ~]$ ssh ansible_admin@1.1.1.1</code></pre><p>If it logs in without asking for a password&#8212;you&#8217;re done</p><p>Lets walk through  each step  discussed above with real example </p><h3>&#128295; Real-World Example: Pushing Public Key to a Cisco Device</h3><p>Let&#8217;s go step-by-step on setting up key-based SSH access with a Cisco router.</p><p>Lets first check ssh directory in master node </p><pre><code>[anurudh@localhost ~]$ ls ~/.ssh/
known_hosts
[anurudh@localhost ~]$ </code></pre><p>Okay, no key yet&#8212;let&#8217;s generate one:</p><pre><code>[anurudh@localhost ~]$ ssh-keygen
</code></pre><p>After that directory should look like this</p><pre><code>[anurudh@localhost ~]$ ls ~/.ssh/ 
id_rsa  id_rsa.pub  known_hosts</code></pre><p>Here we have got bot  private ( <code>id_rsa ) </code>and public key (<code>id_rsa.pub )</code> generated. Private key should not leave this machine . We will copy  public key to network devices to enable SSH key based authentication.</p><p>and now we'll take a look into the public key.</p><pre><code>[anurudh@localhost ~]$ cat ~/.ssh/id_rsa.pub </code></pre><pre><code>ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDiHucZaT0Q6dYc5LD5tYZBfiioPY6WrsryPLV4K7ypw+bS92fWnPorNi5EUvJY4xJ46uCFvIj14JNGBHiUfDDbmX2ZHqsIGe536fh1V7TmkQl/5n1Aq6tikzjui3tBgh5r7O5A3EF6HoU/FsFPGEWPDMLJP0uv2KIVcD5VJDr9SdR62x2b/+6ZhKV6R6v8seEk31El4oFyGIRh8G9e21avqhl9ikoXor9SEaQx5WEVvO3vjHH+JWgyq2QfR3bqC4tXM+BRgpHiJ9PirL/unneZMAQD/+relOVWymY2uMrtSZFvSoWWxE10CabAn2Lc2Fs7MQM6gRFWo4BaPJCCUMwvcv3g7nmIAVY86BDYnzcSCCkR6xzrY4WB1OPfY9bDunDC3ZUWwMHzl/yB8pagl84g83/r/FfGxABntnM7UMBC2rNHUYJYGSOp0GDTO5iJ2YabBoIy99tFEqzoXrqwHsuFxS/oLtNC26eFFuEZ9eAYX1WbV2x9xWipnz6khJo6hw8= anurudh@localhost.localdomain
[anurudh@localhost ~]$ </code></pre><p></p><p>So we need to copy and paste this content into Cisco device.</p><p>But hold up&#8212;Cisco CLI only accepts 256 characters per line. So we need to <em>fold</em> that key before pasting:</p><pre><code>[anurudh@localhost ~]$ fold -b -w 64 ~/.ssh/id_rsa.pub</code></pre><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/p/ansible-mastery-part-3-lets-talk?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.growaith.com/p/ansible-mastery-part-3-lets-talk?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h4><strong>Now let&#8217;s jump into the Cisco device:</strong></h4><pre><code>[anurudh@localhost network_automation_ansible]$ ssh cisco@1.1.1.1(cisco@1.1.1.1) Password: 
R1#</code></pre><p>Inside the router</p><pre><code>anurudh@localhost network_automation_ansible]$ ssh cisco@1.1.1.1 (cisco@1.1.1.1) 
Password:  
R1#config t Enter configuration commands, one per line.  End with CNTL/Z. R1(config)#username ansible_admin
R1(config)#ip ssh pu 
R1(config)#ip ssh pubkey-chain  
R1(conf-ssh-pubkey)#username ansible_admin 
R1(conf-ssh-pubkey-user)#key-? key-hash  key-string   
R1(conf-ssh-pubkey-user)#key-str 
R1(conf-ssh-pubkey-user)#key-string  
R1(conf-ssh-pubkey-data)#</code></pre><p>we will paste public key copied  into cisco terminal </p><pre><code>R1(conf-ssh-pubkey-user)#key-string
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDiHucZaT0Q6dYc5LD5tYZBfiio
PY6WrsryPLV4K7ypw+bS92fWnPorNi5EUvJY4xJ46uCFvIj14JNGBHiUfDDbmX2Z
HqsIGe536fh1V7TmkQl/5n1Aq6tikzjui3tBgh5r7O5A3EF6HoU/FsFPGEWPDMLJ
P0uv2KIVcD5VJDr9SdR62x2b/+6ZhKV6R6v8seEk31El4oFyGIRh8G9e21avqhl9
ikoXor9SEaQx5WEVvO3vjHH+JWgyq2QfR3bqC4tXM+BRgpHiJ9PirL/unneZMAQD
/+relOVWymY2uMrtSZFvSoWWxE10CabAn2Lc2Fs7MQM6gRFWo4BaPJCCUMwvcv3g
7nmIAVY86BDYnzcSCCkR6xzrY4WB1OPfY9bDunDC3ZUWwMHzl/yB8pagl84g83/r
/FfGxABntnM7UMBC2rNHUYJYGSOp0GDTO5iJ2YabBoIy99tFEqzoXrqwHsuFxS/o
LtNC26eFFuEZ9eAYX1WbV2x9xWipnz6khJo6hw8= anurudh@localhost.local
domain                                                                                          </code></pre><p>Press enter and exit </p><pre><code>R1(conf-ssh-pubkey-data)#exit
R1(conf-ssh-pubkey-user)#
R1(conf-ssh-pubkey-user)#exit
R1(conf-ssh-pubkey)#</code></pre><h4><strong>Now test it again from your control node:</strong></h4><pre><code>[anurudh@localhost ~]$ ssh ansible_admin@1.1.1.1
R1#</code></pre><p>if you&#8217;re in without a password prompt&#8212;Great we have done it .</p><p>If not, and you're being asked for a password, try updating your SSH config:</p><pre><code>[anurudh@localhost ~]$ sudo vi /etc/ssh/ssh_config
</code></pre><p>add:</p><pre><code><code>PubkeyacceptedKeyTypes +ssh-rsa</code></code></pre><h5><strong>Lets run below playbook now</strong></h5><p>Here&#8217;s a simple Ansible playbook to check inventory details:</p><pre><code>[anurudh@localhost network_automation_ansible]$ cat 03_cisco_inventory_check 
---
 - name: Cisco inventory check
   hosts: ios_devices
   #
   gather_facts: false

   tasks: 
    - name: print Ansible config location
      ansible.builtin.debug:
        msg:
         - "{{ ansible_config_file }}"
         - "{{ inventory_file }}"
         - "{{ ansible_facts }}"
         - "{{ ansible_user }}"

[anurudh@localhost network_automation_ansible]$ </code></pre><p>run it </p><pre><code>[anurudh@localhost network_automation_ansible]$ ansible-playbook 03_cisco_inventory_check </code></pre><p>You should see output like:</p><pre><code>[anurudh@localhost network_automation_ansible]$ ansible-playbook 03_cisco_inventory_check 

PLAY [Cisco inventory check] *************************************************************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************************************************************
ok: [R2]
ok: [R1]

TASK [print Ansible config location] *****************************************************************************************************************************************************
ok: [R1] =&gt; {
    "msg": [
        "/home/anurudh/network_automation_ansible/ansible.cfg",
        "/home/anurudh/network_automation_ansible/hosts.ini",
        {
            "net_api": "cliconf",
            "net_gather_network_resources": [],
            "net_gather_subset": [
                "default"
            ],
            "net_hostname": "R1", .....},
        "ansible_admin"
    ]
}
ok: [R2] =&gt; {
    "msg": [
        "/home/anurudh/network_automation_ansible/ansible.cfg",
        "/home/anurudh/network_automation_ansible/hosts.ini",
        {
            "net_api": "cliconf",
            "net_gather_network_resources": [],
            "net_gather_subset": [
                "default"
            ],
            "net_hostname": "R2", ....},            
        "cisco"
    ]
}

PLAY RECAP *******************************************************************************************************************************************************************************
R1                         : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
R2                         : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[anurudh@localhost network_automation_ansible]$ </code></pre><p>So  R1 is using the <code>ansible_admin</code> user we set up for key-based access. R2 is still using the default <code>cisco</code> user from the group vars.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/p/ansible-mastery-part-3-lets-talk?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Automation! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/p/ansible-mastery-part-3-lets-talk?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.growaith.com/p/ansible-mastery-part-3-lets-talk?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><h5>Lets check our inventory file</h5><pre><code>[anurudh@localhost network_automation_ansible]$ cat hosts.ini 

[routers]
R1 ansible_host=1.1.1.1 ansible_user=ansible_admin
R2 ansible_host=2.2.2.2

[ios_devices:children]
routers

[ios_devices:vars]
ansible_user=cisco
ansible_password=cisco
ansible_connection=network_cli
ansible_network_os=ios
[anurudh@localhost network_automation_ansible]$ </code></pre><p>R1 has its own user and SSH key setup. R2 falls back to the default group settings. Simple, flexible, and super clean.</p><p>let change private key file location to something different , if we get error after playbook , it means that ssh key  is working perfectecly </p><pre><code>[anurudh@localhost network_automation_ansible]$ cat hosts.ini 

[routers]
R1 ansible_host=1.1.1.1 ansible_user=ansible_admin ansible_ssh_private_key_file=<strong>/home/anurudh/.ssh/id_rsa_2</strong>
R2 ansible_host=2.2.2.2

[ios_devices:children]
routers

[ios_devices:vars]
ansible_user=cisco
ansible_password=cisco
ansible_connection=network_cli
ansible_network_os=ios
[anurudh@localhost network_automation_ansible]$ </code></pre><p>configured wrong file name &#8212;&gt; <code>/home/anurudh/.ssh/id_rsa_2</code></p><h5>lets run same playbook again</h5><pre><code><code>[anurudh@localhost network_automation_ansible]$ ansible-playbook 03_cisco_inventory_check </code></code></pre><p>You should see output like:</p><pre><code>[anurudh@localhost network_automation_ansible]$ ansible-playbook 03_cisco_inventory_check 

PLAY [Cisco inventory check] *************************************************************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************************************************************
<strong>fatal: [R1]: FAILED! =&gt; {"ansible_facts": {}, "changed": false, "failed_modules": {"ansible.legacy.ios_facts": {"failed": true, "invocation": {"module_args": {"available_network_resources": false, "gather_network_resources": null, "gather_subset": ["min"]}}, "msg": "[Errno 2] No such file or directory: '/home/anurudh/.ssh/id_rsa_2'"}}, "msg": "The following modules failed to execute: ansible.legacy.ios_facts\n"}
ok: [R2]</strong>

TASK [print Ansible config location] *****************************************************************************************************************************************************
ok: [R2] =&gt; {
    "msg": [
        "/home/anurudh/network_automation_ansible/ansible.cfg",
        "/home/anurudh/network_automation_ansible/hosts.ini",
        {
            "net_api": "cliconf",
            "net_gather_network_resources": [],
            "net_gather_subset": [
                "default"
            ],
            "net_hostname": "R2" ....},
        "cisco"
    ]
}

PLAY RECAP *******************************************************************************************************************************************************************************
R1                         : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   
R2                         : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[anurudh@localhost network_automation_ansible]$ </code></pre><p>R1 is failing as it not having correct ssh key path.  so we are good and  It means R1 is taking SSH authentication .</p><p>Lets modify inventory file and correct it </p><pre><code>[anurudh@localhost network_automation_ansible]$ cat hosts.ini 

[routers]
R1 ansible_host=1.1.1.1 ansible_user=ansible_admin ansible_ssh_private_key_file=/home/anurudh/.ssh/id_rsa
R2 ansible_host=2.2.2.2

[ios_devices:children]
routers

[ios_devices:vars]
ansible_user=cisco
ansible_password=cisco
ansible_connection=network_cli
ansible_network_os=ios
[anurudh@localhost network_automation_ansible]$ </code></pre><h5>lets run same playbook again</h5><pre><code><code>[anurudh@localhost network_automation_ansible]$ ansible-playbook 03_cisco_inventory_check </code></code></pre><p>You should see output like:</p><pre><code>[anurudh@localhost network_automation_ansible]$ ansible-playbook 03_cisco_inventory_check 

PLAY [Cisco inventory check] *************************************************************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************************************************************
ok: [R1]
ok: [R2]

TASK [print Ansible config location] *****************************************************************************************************************************************************
ok: [R2] =&gt; {
    "msg": [
        "/home/anurudh/network_automation_ansible/ansible.cfg",
        "/home/anurudh/network_automation_ansible/hosts.ini",
        {
            "net_api": "cliconf",
            "net_gather_network_resources": [],
            "net_gather_subset": [
                "default"
            ],
            "net_hostname": "R2".....},
        },
        <strong>"cisco"</strong>
    ]
}
ok: [R1] =&gt; {
    "msg": [
        "/home/anurudh/network_automation_ansible/ansible.cfg",
        "/home/anurudh/network_automation_ansible/hosts.ini",
        {
            "net_api": "cliconf",
            "net_gather_network_resources": [],
            "net_gather_subset": [
                "default"
            ],
            "net_hostname": "R1"......},
        <strong>"ansible_admin"</strong>
    ]
}

PLAY RECAP *******************************************************************************************************************************************************************************
R1                         : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
R2                         : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
</code></pre><p>We have done it !!!!</p><h3><strong>Action Step for You Today</strong></h3><p><strong>Just one thing:</strong> make sure to go through the concepts and follow along with the tasks. Try to complete them within two days after the post is published.</p><p>I&#8217;ll guide you, one simple post at a time.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://buymeacoffee.com/anurudh&quot;,&quot;text&quot;:&quot;Buy Me A Coffee&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://buymeacoffee.com/anurudh"><span>Buy Me A Coffee</span></a></p><p>We will deep dive more into Ansible in upcoming posts. Don&#8217;t miss to DM or ping me with your queries and comments.</p><p>Smiles :)</p><p>Anurudh</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Automation! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Understanding Key Differences in Infrastructure and Network Automation Tools]]></title><description><![CDATA[A Simple Guide to How These Tools Work and What Makes Them Unique]]></description><link>https://blog.growaith.com/p/understanding-key-differences-in</link><guid isPermaLink="false">https://blog.growaith.com/p/understanding-key-differences-in</guid><dc:creator><![CDATA[Dubey]]></dc:creator><pubDate>Mon, 28 Apr 2025 02:30:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_HAF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16fdce68-8d13-47ec-9e63-851cd4fac38f_673x502.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>As a network Engineer, we need to know some of the Major Architectural and Conceptual Differences Between Tools.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_HAF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16fdce68-8d13-47ec-9e63-851cd4fac38f_673x502.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_HAF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16fdce68-8d13-47ec-9e63-851cd4fac38f_673x502.png 424w, https://substackcdn.com/image/fetch/$s_!_HAF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16fdce68-8d13-47ec-9e63-851cd4fac38f_673x502.png 848w, https://substackcdn.com/image/fetch/$s_!_HAF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16fdce68-8d13-47ec-9e63-851cd4fac38f_673x502.png 1272w, https://substackcdn.com/image/fetch/$s_!_HAF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16fdce68-8d13-47ec-9e63-851cd4fac38f_673x502.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_HAF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16fdce68-8d13-47ec-9e63-851cd4fac38f_673x502.png" width="673" height="502" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/16fdce68-8d13-47ec-9e63-851cd4fac38f_673x502.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:502,&quot;width&quot;:673,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:99154,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://netomate.substack.com/i/162261665?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16fdce68-8d13-47ec-9e63-851cd4fac38f_673x502.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_HAF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16fdce68-8d13-47ec-9e63-851cd4fac38f_673x502.png 424w, https://substackcdn.com/image/fetch/$s_!_HAF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16fdce68-8d13-47ec-9e63-851cd4fac38f_673x502.png 848w, https://substackcdn.com/image/fetch/$s_!_HAF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16fdce68-8d13-47ec-9e63-851cd4fac38f_673x502.png 1272w, https://substackcdn.com/image/fetch/$s_!_HAF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16fdce68-8d13-47ec-9e63-851cd4fac38f_673x502.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>When it comes to automation tools for networks and infrastructure, they aren't all built the same way. <br>Here are some important differences you should know &#8212; explained in a way that&#8217;s easy to understand:</p><div><hr></div><p><strong>1. Building vs. Setting Up Infrastructure</strong></p><ul><li><p><strong>Infrastructure provisioning</strong> is like <strong>building the house</strong> &#8212; setting up walls, roofs, windows, and doors (things like servers, network connections, and databases).</p></li><li><p><strong>Configuration management</strong> is like <strong>setting up the inside of the house</strong> &#8212; adding beds, lights, and furniture (installing and configuring the right software).</p></li></ul><p>Provisioning happens on <strong>Day 0</strong> (building), and configuration happens on <strong>Day 1</strong> (setting things up properly).</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/p/understanding-key-differences-in?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Automation! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/p/understanding-key-differences-in?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.growaith.com/p/understanding-key-differences-in?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><div><hr></div><p><strong>2. Agent-Based vs. Agentless Tools</strong></p><ul><li><p><strong>Agent-based tools</strong> need a little helper (software) installed on each device to manage it.</p></li><li><p><strong>Agentless tools</strong> don&#8217;t need any helper installed; they connect directly.</p></li></ul><p>In networking, agentless tools are often better because many devices don&#8217;t allow installing extra software.</p><div><hr></div><p><strong>3. Centralized vs. Decentralized Control</strong></p><ul><li><p><strong>Centralized</strong> = one big "boss" server tells all devices what to do.</p></li><li><p><strong>Decentralized</strong> = devices manage themselves or work with each other without a central boss.</p></li></ul><div><hr></div><p><strong>4. Special Language vs. Common Language</strong></p><ul><li><p>Some tools use their <strong>own special language</strong> (DSL), and you have to learn it to use the tool.</p></li><li><p>Other tools use common formats like <strong>YAML</strong>, making it easier because many people already know it.</p></li></ul><div><hr></div><p><strong>5. Declarative vs. Imperative Approaches</strong></p><ul><li><p><strong>Declarative</strong> = you say what you want ("I want a red living room") and the system figures out how to do it.</p></li><li><p><strong>Imperative</strong> = you tell it step-by-step ("First paint the wall red, then bring in a big sofa").</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.growaith.com/subscribe?"><span>Subscribe now</span></a></p></li></ul><div><hr></div><p><strong>6. Extending Tools with Programming</strong></p><ul><li><p>Many tools let you <strong>add extra features</strong> using common languages like <strong>Python</strong> or <strong>Go</strong> &#8212; kind of like upgrading your house with smart gadgets.</p></li></ul><div><hr></div><p><strong>7. Push, Pull, and Event-Driven Actions</strong></p><ul><li><p><strong>Push model</strong> = you send instructions to the devices.</p></li><li><p><strong>Pull model</strong> = devices ask for new instructions themselves.</p></li><li><p><strong>Event-driven</strong> = devices act when something specific happens (like turning on lights when someone rings the doorbell).</p></li></ul><div><hr></div><p><strong>8. Mutable vs. Immutable Infrastructure</strong></p><ul><li><p><strong>Mutable</strong> = you change things in the house while living in it (like repainting while living there).</p></li><li><p><strong>Immutable</strong> = if you want changes, you build a <strong>brand-new house</strong> and move in.</p></li></ul><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share Automation&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.growaith.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share Automation</span></a></p><p><strong>9. Managing the "State" of Infrastructure</strong></p><ul><li><p>Some tools <strong>don&#8217;t remember</strong> what was changed &#8212; you have to check manually.</p></li><li><p>Other tools <strong>keep track</strong> of everything they built and know when something needs to be rebuilt or fixed.</p></li></ul><p>Smiles:)</p><p>Anurudh</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://buymeacoffee.com/anurudh&quot;,&quot;text&quot;:&quot;Buy Me A Coffee&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://buymeacoffee.com/anurudh"><span>Buy Me A Coffee</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Ansible Mastery Part 3: Your First Network Automation Playbook to Ping Cisco Routers]]></title><description><![CDATA[Learn how to structure a real Ansible playbook and automate basic reachability checks on Cisco routers in minutes.]]></description><link>https://blog.growaith.com/p/ansible-mastery-part-3-your-first</link><guid isPermaLink="false">https://blog.growaith.com/p/ansible-mastery-part-3-your-first</guid><dc:creator><![CDATA[Dubey]]></dc:creator><pubDate>Fri, 25 Apr 2025 02:30:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3Yu8!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2978784c-71a4-48e0-ad3b-fec440d2d2ee_94x94.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rIJR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf925c1d-24e6-4a31-9392-fb4996042cc8_524x251.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rIJR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf925c1d-24e6-4a31-9392-fb4996042cc8_524x251.png 424w, https://substackcdn.com/image/fetch/$s_!rIJR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf925c1d-24e6-4a31-9392-fb4996042cc8_524x251.png 848w, https://substackcdn.com/image/fetch/$s_!rIJR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf925c1d-24e6-4a31-9392-fb4996042cc8_524x251.png 1272w, https://substackcdn.com/image/fetch/$s_!rIJR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf925c1d-24e6-4a31-9392-fb4996042cc8_524x251.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rIJR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf925c1d-24e6-4a31-9392-fb4996042cc8_524x251.png" width="524" height="251" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/af925c1d-24e6-4a31-9392-fb4996042cc8_524x251.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:251,&quot;width&quot;:524,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:27746,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://netomate.substack.com/i/161822622?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf925c1d-24e6-4a31-9392-fb4996042cc8_524x251.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rIJR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf925c1d-24e6-4a31-9392-fb4996042cc8_524x251.png 424w, https://substackcdn.com/image/fetch/$s_!rIJR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf925c1d-24e6-4a31-9392-fb4996042cc8_524x251.png 848w, https://substackcdn.com/image/fetch/$s_!rIJR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf925c1d-24e6-4a31-9392-fb4996042cc8_524x251.png 1272w, https://substackcdn.com/image/fetch/$s_!rIJR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf925c1d-24e6-4a31-9392-fb4996042cc8_524x251.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Ansible Mastery: Part 3 &#8211; Your First Real Playbook to Ping Routers</p><p>Welcome back to our Ansible Mastery Journey. If you are new to here , don&#8217;t miss to check out part 1  &amp; part 2  before diving into this post. .We have already gone through  Ansible basics and different files structure used in Ansible in previous post. </p><ul><li><p><a href="http://Why Every Network Engineer Should Learn Ansible (Even If You&#8217;re Just Starting Out)">Part 1:Why Every Network Engineer Should Learn Ansible (Even If You&#8217;re Just Starting Out) </a></p></li><li><p><a href="https://netomate.substack.com/p/why-every-network-engineer-should">Part 2: https://netomate.substack.com/p/why-every-network-engineer-should</a></p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.growaith.com/subscribe?"><span>Subscribe now</span></a></p><p></p><p>In this post, we will cover :</p><ul><li><p>Understanding the structure and components of an Ansible Playbook</p></li><li><p>Writing  a first playbook to ping routers </p></li><li><p> How tasks are executed on remote Cisco devices.</p></li></ul><p>Lets dive in.</p><h3><strong>Create a New Playbook File</strong></h3><p>I always prefer to start with creating playbook then go ahead with other files around it. </p><p>Lets create a new file - <strong>02_ping_router.yml</strong></p><pre><code>anurudh@localhost network_automation_ansible]$ cat 02_ping_router.yml
---
 - name: check connectivity to cisco router using ping module
   hosts: ios_devices
   gather_facts: no
   tasks:
     - name: ping the router
       ping:
        

        </code></pre><p>This is where we&#8217;ll define what to run, on which devices, and how.</p><p>Remember: <strong>Ansible playbooks use YAML</strong>, so <strong>indentation matters </strong>! Stick to spaces, never tabs.</p><h3>Understand Ansible Playbook Structure</h3><p>Ansible Playbook is YAML file which describes what tasks should be executed and on which hosts. Lets understand  each line of playbook </p><pre><code>---
 - name: check connectivity to cisco router using ping module
   hosts: ios_devices
   gather_facts: no
   tasks:
     - name: ping the router
       ping:
        
</code></pre><p><strong>Main Components:-</strong> </p><ul><li><p><strong>name</strong> : Human readable title .It tells about exactly what this playbook is used for.</p></li><li><p><strong>hosts:</strong> which devices to  target from inventory file (hosts.ini). Here ios_devcies is group of hosts on which task will be pushed.</p></li><li><p><strong>gather_facts</strong>: Whether should ansible should collect facts.We will explore about in upcoming posts. currently Lets make it no.</p></li><li><p><strong>tasks</strong>: The task to be performed .</p></li><li><p>Each task uses ansible module .Here we have used <strong>&#8220;ping&#8221;</strong> module in our playbook.</p><p>We will talk about module in details in  coming posts.</p></li></ul><h3><strong>Updated Folder Structure</strong></h3><p>Here&#8217;s your project should look by now.</p><pre><code>anurudh@localhost network_automation_ansible]$ tree
.
&#9500;&#9472;&#9472; 01_ping_router_local.yml
&#9500;&#9472;&#9472; 02_ping_router.yml
&#9500;&#9472;&#9472; ansible.cfg
&#9492;&#9472;&#9472; hosts.ini

0 directories, 4 files
[anurudh@localhost network_automation_ansible]$ </code></pre><p>If you haven&#8217;t set these up yet, I recommend going through <strong><a href="#">Part 2</a></strong> first for further details.</p><h3><strong>Run the Playbook</strong></h3><p>Lets run the below playbook with &#8220;ansible-playbook&#8221; command .This is very basic playbook is used to check reachability of  R1 and R2 from master node.</p><pre><code>[anurudh@localhost network_automation_ansible]$ ansible-playbook 02_ping_router.yml </code></pre><h3><strong>Expected Output:</strong></h3><p>Task 1: <code>Ping the routers</code> :</p><p>If you see &#8220;ok&#8221; for each device. Congrats ! your playbook is working .</p><pre><code>TASK [ping the router] *************************************************************************************************
ok: [R1]
ok: [R2]
</code></pre><pre><code>anurudh@localhost network_automation_ansible]$ ansible-playbook 02_ping_router.yml 

PLAY [check connectivity to cisco router using ping module] ************************************************************

TASK [ping the router] *************************************************************************************************
ok: [R1]
ok: [R2]

PLAY RECAP *************************************************************************************************************
R1                         : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
R2                         : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[anurudh@localhost network_automation_ansible]$ </code></pre><p>If you see &#8220;ok&#8221; for each device. Congrats ! your playbook is working .</p><p>We have just automated our first network verification tasks.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/p/ansible-mastery-part-3-your-first?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Automation! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/p/ansible-mastery-part-3-your-first?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.growaith.com/p/ansible-mastery-part-3-your-first?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><h3><strong>Action Step for You Today</strong></h3><p><strong>Just one thing:</strong> make sure to go through the concepts and follow along with the tasks. Try to complete them within two days after the post is published.</p><p>I&#8217;ll guide you, one simple post at a time.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://buymeacoffee.com/anurudh&quot;,&quot;text&quot;:&quot;Buy Me A Coffee&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://buymeacoffee.com/anurudh"><span>Buy Me A Coffee</span></a></p><p>We will deep dive more into Ansible in upcoming posts. Don&#8217;t miss to DM or ping me with your queries and comments.</p><p>Smiles :)</p><p>Anurudh</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Automation! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Ansible Mastery Part 2:Install Ansible & Run Your First Ping]]></title><description><![CDATA[Ansible Mastery Journey]]></description><link>https://blog.growaith.com/p/install-ansible-and-run-your-first</link><guid isPermaLink="false">https://blog.growaith.com/p/install-ansible-and-run-your-first</guid><dc:creator><![CDATA[Dubey]]></dc:creator><pubDate>Sun, 20 Apr 2025 12:54:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!2PV3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Let&#8217; s continue with  our Ansible journey. Don&#8217;t miss to go through Ansible Post 1 .</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;875cf10a-82a2-48cc-bf97-5558d31a9584&quot;,&quot;caption&quot;:&quot;Just many of you , I also started my networking journey with manual config troubleshooting the various issue . Thanks for reading Network Automation! Subscribe for free to receive new posts and support my work.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Why Every Network Engineer Should Learn Ansible (Even If You&#8217;re Just Starting Out)&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:332955290,&quot;name&quot;:&quot;Anurudh&quot;,&quot;bio&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/65e70e32-c367-4039-a741-d221ecb97850_144x144.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-04-18T06:19:54.526Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://netomate.substack.com/p/why-every-network-engineer-should&quot;,&quot;section_name&quot;:&quot;&#9881;&#65039;Network Automation&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:161589071,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Network Automation&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2978784c-71a4-48e0-ad3b-fec440d2d2ee_94x94.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Network Automation! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>In this post, i will go through how to :</p><ul><li><p>Set up ansible in system</p></li><li><p>Set up lab in GNS/EVE/CML</p></li><li><p>Create a basic inventory</p></li><li><p>Run first ping command using ansible to test connectivity to network devices</p></li></ul><p>Lets dive in.</p><h3>Install Ansible</h3><p>To get start, we will get ansible install in our system</p><pre><code><code>sudo apt update
sudo apt install ansible</code></code></pre><p>Once installed, confirm it by running:</p><pre><code>[anurudh@localhost ~]$ ansible --version
ansible [core 2.15.13]
  config file = None
  configured module search path = ['/home/anurudh/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.9/site-packages/ansible
  ansible collection location = /home/anurudh/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible
  python version = 3.9.21 (main, Feb 10 2025, 00:00:00) [GCC 11.5.0 20240719 (Red Hat 11.5.0-5)] (/usr/bin/python3)
  jinja version = 3.1.6
  libyaml = True
[anurudh@localhost ~]$ </code></pre><p>You should see Ansible's version and installation path.</p><p>It may be different command for you to install Ansible if you are using any other operating system apart from Linux(Ubuntu) </p><p>Refer below link for details</p><p>https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html</p><p>lets now create and go through different files to be used in  ansible. Its very crucial to understand each file before actually going through ansible tasks. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2PV3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2PV3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png 424w, https://substackcdn.com/image/fetch/$s_!2PV3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png 848w, https://substackcdn.com/image/fetch/$s_!2PV3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png 1272w, https://substackcdn.com/image/fetch/$s_!2PV3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2PV3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png" width="590" height="475" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:475,&quot;width&quot;:590,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2PV3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png 424w, https://substackcdn.com/image/fetch/$s_!2PV3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png 848w, https://substackcdn.com/image/fetch/$s_!2PV3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png 1272w, https://substackcdn.com/image/fetch/$s_!2PV3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Ansible Configuration (ansible.cfg)</h3><p>Hope you remember the above structure from Ansible post 1.Below is the tree view of my directory .</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Edfo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F035d21e6-b34f-462a-9153-9896188fd6b7_530x135.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Edfo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F035d21e6-b34f-462a-9153-9896188fd6b7_530x135.png 424w, https://substackcdn.com/image/fetch/$s_!Edfo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F035d21e6-b34f-462a-9153-9896188fd6b7_530x135.png 848w, https://substackcdn.com/image/fetch/$s_!Edfo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F035d21e6-b34f-462a-9153-9896188fd6b7_530x135.png 1272w, https://substackcdn.com/image/fetch/$s_!Edfo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F035d21e6-b34f-462a-9153-9896188fd6b7_530x135.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Edfo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F035d21e6-b34f-462a-9153-9896188fd6b7_530x135.png" width="530" height="135" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/035d21e6-b34f-462a-9153-9896188fd6b7_530x135.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:135,&quot;width&quot;:530,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:16188,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://netomate.substack.com/i/161728358?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F035d21e6-b34f-462a-9153-9896188fd6b7_530x135.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Edfo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F035d21e6-b34f-462a-9153-9896188fd6b7_530x135.png 424w, https://substackcdn.com/image/fetch/$s_!Edfo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F035d21e6-b34f-462a-9153-9896188fd6b7_530x135.png 848w, https://substackcdn.com/image/fetch/$s_!Edfo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F035d21e6-b34f-462a-9153-9896188fd6b7_530x135.png 1272w, https://substackcdn.com/image/fetch/$s_!Edfo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F035d21e6-b34f-462a-9153-9896188fd6b7_530x135.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>ansible.cfg &#8594; Its ansible config file It will be applicable to current directory .It includes various settings including which inventory to use and the transport method for connecting to devices. Our ansible file content is as below:-</p><pre><code>[anurudh@localhost network_automation_ansible]$ cat ansible.cfg 

[defaults]
inventory = hosts.ini
transport = network_cli
#host_key_checking = False  # Disables SSH host key checking
[anurudh@localhost network_automation_ansible]$ </code></pre><ul><li><p><strong>Explanation:</strong></p><ul><li><p><strong>inventory</strong>: Points to your <code>hosts.ini</code> file.</p></li><li><p><strong>transport</strong>: Specifies that Ansible will use <code>network_cli</code> to connect to network devices (like Cisco).</p></li><li><p><strong>host_key_checking = False</strong>: Disables SSH key verification, which is useful if you're not using trusted SSH keys for the devices.</p></li></ul></li></ul><h3><strong>Inventory File (hosts.ini)</strong></h3><p>In Ansible, the inventory file lists the devices you want to manage. Here&#8217;s an example of an <strong>inventory file</strong> (<code>hosts.ini</code>) that connects to <strong>Cisco routers</strong> using <strong>network_cli</strong>.</p><pre><code>[anurudh@localhost network_automation_ansible]$ cat hosts.ini 

[routers]
#1.1.1.1
#2.2.2.2
R1 ansible_host=1.1.1.1
R2 ansible_host=2.2.2.2

[ios_devices:children]
routers

[ios_devices:vars]
ansible_user=cisco
ansible_password=cisco
ansible_connection=network_cli
ansible_network_os=ios
[anurudh@localhost network_automation_ansible]$ </code></pre><ul><li><p><strong>Explanation:</strong></p><ul><li><p><strong>[routers]</strong>: Defines the group of routers.</p></li><li><p><strong>[ios_devices:children]</strong>: Groups devices under <code>ios_devices</code> which are listed as children of <code>routers</code>.</p></li><li><p><strong>[ios_devices:vars]</strong>: Specifies global variables for all devices in the <code>ios_devices</code> group.</p></li></ul></li></ul><h3><strong>Test Connectivity Using the Ping Module</strong></h3><p>The first test you should run is the <code>ping</code> module to check if your Ansible is correctly communicating with the network devices.</p><p> We  have got our Master node where  we have install ansible and  running our ping tasks  using ping module for  Node R1 and R2. </p><p>Make sure SSH reachability is enabled from master node to various router switches and all respective nodes. As discussed in post 1 that ansible is agent less and there is no need to install any agent(software ) on nodes. Ansible uses SSH to access nodes and perform various playbook tasks.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!u24p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91eb0fe5-e75a-478c-9c09-1c2059c0c7c1_483x267.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u24p!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91eb0fe5-e75a-478c-9c09-1c2059c0c7c1_483x267.png 424w, https://substackcdn.com/image/fetch/$s_!u24p!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91eb0fe5-e75a-478c-9c09-1c2059c0c7c1_483x267.png 848w, https://substackcdn.com/image/fetch/$s_!u24p!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91eb0fe5-e75a-478c-9c09-1c2059c0c7c1_483x267.png 1272w, https://substackcdn.com/image/fetch/$s_!u24p!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91eb0fe5-e75a-478c-9c09-1c2059c0c7c1_483x267.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!u24p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91eb0fe5-e75a-478c-9c09-1c2059c0c7c1_483x267.png" width="483" height="267" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/91eb0fe5-e75a-478c-9c09-1c2059c0c7c1_483x267.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:267,&quot;width&quot;:483,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:20795,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://netomate.substack.com/i/161728358?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91eb0fe5-e75a-478c-9c09-1c2059c0c7c1_483x267.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!u24p!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91eb0fe5-e75a-478c-9c09-1c2059c0c7c1_483x267.png 424w, https://substackcdn.com/image/fetch/$s_!u24p!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91eb0fe5-e75a-478c-9c09-1c2059c0c7c1_483x267.png 848w, https://substackcdn.com/image/fetch/$s_!u24p!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91eb0fe5-e75a-478c-9c09-1c2059c0c7c1_483x267.png 1272w, https://substackcdn.com/image/fetch/$s_!u24p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91eb0fe5-e75a-478c-9c09-1c2059c0c7c1_483x267.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><pre><code>[anurudh@localhost network_automation_ansible]$ cat 01_ping_router_local.yml 
---
- name: Simple Ping Test
  hosts: localhost
  gather_facts: no

  tasks:
    - name: Ping localhost
      ansible.builtin.ping:
[anurudh@localhost network_automation_ansible]$ </code></pre><p>The first test you should run is the ping module to check if your Ansible is correctly communicating with the network devices.</p><p>Run the Ping Command:</p><pre><code>[anurudh@localhost network_automation_ansible]$ ansible ios_devices -i hosts.ini -m ping</code></pre><ul><li><p><strong>Explanation:</strong></p><ul><li><p><code>ios_devices</code>: The group you defined in your <code>hosts.ini</code> file.</p></li><li><p><code>i hosts.ini</code><strong>:</strong> Specifies the inventory file.</p></li><li><p><code>m ping</code>: Uses Ansible&#8217;s <code>ping</code> module to test connectivity.</p></li></ul></li></ul><ul><li><p><strong>Output</strong></p><p>If  successful, you should see a pong response from each device:</p></li></ul><pre><code>[anurudh@localhost network_automation_ansible]$ ansible ios_devices -i hosts.ini -m ping
R1 | SUCCESS =&gt; {
    "changed": false,
    "ping": "pong"
}
R2 | SUCCESS =&gt; {
    "changed": false,
    "ping": "pong"
}
[anurudh@localhost network_automation_ansible]$ </code></pre><p>We have not yet created our first playbook .We will perform same task using playbook in next post.</p><h3><strong>Troubleshooting Tips</strong></h3><ul><li><p>If the <code>ping</code> command doesn't work:</p><ul><li><p>Check if SSH is accessible from your local machine to the routers.</p></li><li><p>Ensure the <code>ansible_user</code> and <code>ansible_password</code> are correct for your devices.</p></li></ul></li><li><p>Make sure that the <code>network_cli</code> connection method is supported by your device and its OS.</p><p></p><h3><strong>&#128204; Action Step for You Today</strong></h3><p>Just one - Try out the steps and share experiences or questions in the comments. </p><p>  </p><p>                                       </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://buymeacoffee.com/anurudh&quot;,&quot;text&quot;:&quot;Buy Me a Coffee&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://buymeacoffee.com/anurudh"><span>Buy Me a Coffee</span></a></p><p>                                                    </p><p>I&#8217;ll guide you, one simple post at a time.</p><p>We will discuss about execution of our first playbook in next post .</p><p></p><p>Smiles:</p><p>Anurudh</p><p></p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Network Automation! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Why Every Network Engineer Should Learn Ansible (Even If You’re Just Starting Out)]]></title><description><![CDATA[Ansible Series- "Automate Like a Pro: Ansible for Network Engineers&#8221; -Part 1]]></description><link>https://blog.growaith.com/p/why-every-network-engineer-should</link><guid isPermaLink="false">https://blog.growaith.com/p/why-every-network-engineer-should</guid><dc:creator><![CDATA[Dubey]]></dc:creator><pubDate>Fri, 18 Apr 2025 06:19:54 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!2PV3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GrwR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5b7f23-61cc-4c11-bb37-9443adb295c3_523x243.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GrwR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5b7f23-61cc-4c11-bb37-9443adb295c3_523x243.png 424w, https://substackcdn.com/image/fetch/$s_!GrwR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5b7f23-61cc-4c11-bb37-9443adb295c3_523x243.png 848w, https://substackcdn.com/image/fetch/$s_!GrwR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5b7f23-61cc-4c11-bb37-9443adb295c3_523x243.png 1272w, https://substackcdn.com/image/fetch/$s_!GrwR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5b7f23-61cc-4c11-bb37-9443adb295c3_523x243.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GrwR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5b7f23-61cc-4c11-bb37-9443adb295c3_523x243.png" width="523" height="243" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fc5b7f23-61cc-4c11-bb37-9443adb295c3_523x243.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:243,&quot;width&quot;:523,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:25722,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://netomate.substack.com/i/161589071?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5b7f23-61cc-4c11-bb37-9443adb295c3_523x243.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GrwR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5b7f23-61cc-4c11-bb37-9443adb295c3_523x243.png 424w, https://substackcdn.com/image/fetch/$s_!GrwR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5b7f23-61cc-4c11-bb37-9443adb295c3_523x243.png 848w, https://substackcdn.com/image/fetch/$s_!GrwR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5b7f23-61cc-4c11-bb37-9443adb295c3_523x243.png 1272w, https://substackcdn.com/image/fetch/$s_!GrwR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5b7f23-61cc-4c11-bb37-9443adb295c3_523x243.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Just many of you , I also started my networking journey with manual config troubleshooting the various issue . </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.growaith.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Network Automation! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>But actually we are spending so much time doing the task which can be done in minutes and worst of all ,when something went wrong , we had no way to audit or fix things .</p><p>&#129302; <strong>Enter Ansible: My Automation Partner</strong></p><p>Here comes the Superhero Ansible . We will be going through ansible from basic to intermediate to advance. You may see multiple post related to Ansible in coming days. It will have both theory as well as practical examples to try .</p><p>Main goal of Ansible series is -:</p><ul><li><p>Make Ansible <strong>simple and actionable</strong></p></li><li><p>Teach through <strong>networking-focused examples</strong></p></li><li><p>Blend <strong>theory</strong> + <strong>"Try This Now" practical&#8217;s</strong></p></li><li><p>Keep posts <strong>bite-sized &amp; consistent</strong></p></li><li><p>Help readers <strong>build confidence</strong> to automate on their own</p><p></p></li></ul><p><strong>&#128736;&#65039; So&#8230; What Exactly is Ansible?</strong></p><p>Lets start with a theory what is ansible and why network engineer should care ?</p><p>Just many of you , i also started my networking journey with manual config troubleshooting the various issue .</p><p>But actually we ere spending so much time doing the task which can be doing in minutes .</p><p>Yes , its possible by Ansible. Its super tool which can help :</p><ul><li><p>Push consistent configs across devices</p></li><li><p>Automate boring, repetitive tasks</p></li><li><p>Reduce human error</p></li><li><p>Save time (LOTS of it)</p></li><li><p>Focus on <em>what really matters</em></p></li></ul><p><em>what really matters is that you need not be python expert.</em></p><p>Ansible is open source automation tool and we can say its task execution engine. What it means that we have to define the task and ansible will perform those tasks. Ansible is project written in python .</p><p>Its uses YAML file to read the task and execute it on the network devices.</p><p>It automated tasks such config management ,application deployment and much more.</p><p>It uses ssh to connect to nodes .It&#8217;s called as agentless as there is no need to install any agent to nodes where you require task to be executed.</p><p>Core component of Ansible :</p><ul><li><p><strong>Playbook</strong> &#8594; File consist of list of plays and respective tasks.</p></li><li><p><strong>Inventory </strong>&#8594;File which identifies the hosts in your environment</p></li><li><p><strong>Variable</strong> &#8594; Are consumed at tasks level used as input to various tasks.</p></li><li><p><strong>Config file</strong> &#8594; Administrative  file to control global setting related to ansible environment</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2PV3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2PV3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png 424w, https://substackcdn.com/image/fetch/$s_!2PV3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png 848w, https://substackcdn.com/image/fetch/$s_!2PV3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png 1272w, https://substackcdn.com/image/fetch/$s_!2PV3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2PV3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png" width="590" height="475" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:475,&quot;width&quot;:590,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:58958,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://netomate.substack.com/i/161589071?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2PV3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png 424w, https://substackcdn.com/image/fetch/$s_!2PV3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png 848w, https://substackcdn.com/image/fetch/$s_!2PV3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png 1272w, https://substackcdn.com/image/fetch/$s_!2PV3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b85b7-f0de-4791-8318-758e56d666b2_590x475.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Play is element of playbook and executed against a set of hosts . It consists a list of tasks .</p><p>Tasks are element of play executed in sequence .Each task calls a module. Modules are written in python and work behind the scene. They are like function already built and we need to call in respective tasks.</p><p>Playbook be something like-: </p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!geyt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1cc4f40-eb71-41a9-ae91-22298c631bff_322x116.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!geyt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1cc4f40-eb71-41a9-ae91-22298c631bff_322x116.png 424w, https://substackcdn.com/image/fetch/$s_!geyt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1cc4f40-eb71-41a9-ae91-22298c631bff_322x116.png 848w, https://substackcdn.com/image/fetch/$s_!geyt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1cc4f40-eb71-41a9-ae91-22298c631bff_322x116.png 1272w, https://substackcdn.com/image/fetch/$s_!geyt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1cc4f40-eb71-41a9-ae91-22298c631bff_322x116.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!geyt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1cc4f40-eb71-41a9-ae91-22298c631bff_322x116.png" width="322" height="116" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c1cc4f40-eb71-41a9-ae91-22298c631bff_322x116.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:116,&quot;width&quot;:322,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6861,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://netomate.substack.com/i/161589071?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1cc4f40-eb71-41a9-ae91-22298c631bff_322x116.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!geyt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1cc4f40-eb71-41a9-ae91-22298c631bff_322x116.png 424w, https://substackcdn.com/image/fetch/$s_!geyt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1cc4f40-eb71-41a9-ae91-22298c631bff_322x116.png 848w, https://substackcdn.com/image/fetch/$s_!geyt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1cc4f40-eb71-41a9-ae91-22298c631bff_322x116.png 1272w, https://substackcdn.com/image/fetch/$s_!geyt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1cc4f40-eb71-41a9-ae91-22298c631bff_322x116.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Just this 5-liner shows "it's not scary." Easy to understand and execute.</p><p><strong>&#128204; Action Step for You Today</strong></p><p>Just one: you will read concepts mentioned in detail and decide that you will try and execute with me  with playbook coming in next post.</p><p>I&#8217;ll guide you, one simple post at a time.</p><p>We will discuss about the ansible environment installation and execution of our first playbook in next post .</p><p>Smiles:</p><p>Anurudh</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://buymeacoffee.com/dubeyanuruw&quot;,&quot;text&quot;:&quot;Buy me a Cofee&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://buymeacoffee.com/dubeyanuruw"><span>Buy me a Cofee</span></a></p><p></p>]]></content:encoded></item></channel></rss>