Felix Kling

Felix Kling

1633053812

Using Ansible to Automate Cisco IOS Network Devices

Ansible Network Automation

Learn how to use Ansible to automate Cisco IOS network devices. This is the future: Network Automation using Ansible and Python. If you want to be a network engineer in future, you need to learn Cisco DevNet and automation technologies.

Menu:
Welcome: 0:00
Who is Donald? 0:12
Books that Donald wrote: 1:00
What is Ansible and why is it recommended? 1:22
Idempotency: 2:27
Create a project: 3:50
Create a hosts.ini file: 4:20
Agent vs agentless / puppet vs ansible: 5:00
What does Ansible use to connect to devices: 7:40
New / Better way of doing things (hosts.yml): 17:40
Which is better? 23:20
Global ansible.cfg file: 24:01
Never use tab: 27:30
Create a repository: 27:55
Do you need to use Git: 30:20
Is Linux recommended? Or is Windows ok? 30:35
Can you use a Mac? 31:24
Redo the process using public github: 31:52
Files on github: 35:34
Copy files to the Ansible server: 36:02
Create a virtual environment: 37:55
Install Ansible: 38:38
Check the ansible docs: 41:40
Run Ansible adhoc commands: 43:55
What did ping do? 46:20
What is an Ansible playbook: 47:50
Create Ansbile playbook: 48:20
Run Ansible Playbooks: 53:09
Add an IP address: 56:06

Code: https://github.com/the-packet-thrower/davids-ansible-public 

Amazon books: https://amzn.to/2Wm639i

#ansible #devnet #ccna

What is GEEK

Buddha Community

Using Ansible to Automate Cisco IOS Network Devices
Chloe  Butler

Chloe Butler

1667425440

Pdf2gerb: Perl Script Converts PDF Files to Gerber format

pdf2gerb

Perl script converts PDF files to Gerber format

Pdf2Gerb generates Gerber 274X photoplotting and Excellon drill files from PDFs of a PCB. Up to three PDFs are used: the top copper layer, the bottom copper layer (for 2-sided PCBs), and an optional silk screen layer. The PDFs can be created directly from any PDF drawing software, or a PDF print driver can be used to capture the Print output if the drawing software does not directly support output to PDF.

The general workflow is as follows:

  1. Design the PCB using your favorite CAD or drawing software.
  2. Print the top and bottom copper and top silk screen layers to a PDF file.
  3. Run Pdf2Gerb on the PDFs to create Gerber and Excellon files.
  4. Use a Gerber viewer to double-check the output against the original PCB design.
  5. Make adjustments as needed.
  6. Submit the files to a PCB manufacturer.

Please note that Pdf2Gerb does NOT perform DRC (Design Rule Checks), as these will vary according to individual PCB manufacturer conventions and capabilities. Also note that Pdf2Gerb is not perfect, so the output files must always be checked before submitting them. As of version 1.6, Pdf2Gerb supports most PCB elements, such as round and square pads, round holes, traces, SMD pads, ground planes, no-fill areas, and panelization. However, because it interprets the graphical output of a Print function, there are limitations in what it can recognize (or there may be bugs).

See docs/Pdf2Gerb.pdf for install/setup, config, usage, and other info.


pdf2gerb_cfg.pm

#Pdf2Gerb config settings:
#Put this file in same folder/directory as pdf2gerb.pl itself (global settings),
#or copy to another folder/directory with PDFs if you want PCB-specific settings.
#There is only one user of this file, so we don't need a custom package or namespace.
#NOTE: all constants defined in here will be added to main namespace.
#package pdf2gerb_cfg;

use strict; #trap undef vars (easier debug)
use warnings; #other useful info (easier debug)


##############################################################################################
#configurable settings:
#change values here instead of in main pfg2gerb.pl file

use constant WANT_COLORS => ($^O !~ m/Win/); #ANSI colors no worky on Windows? this must be set < first DebugPrint() call

#just a little warning; set realistic expectations:
#DebugPrint("${\(CYAN)}Pdf2Gerb.pl ${\(VERSION)}, $^O O/S\n${\(YELLOW)}${\(BOLD)}${\(ITALIC)}This is EXPERIMENTAL software.  \nGerber files MAY CONTAIN ERRORS.  Please CHECK them before fabrication!${\(RESET)}", 0); #if WANT_DEBUG

use constant METRIC => FALSE; #set to TRUE for metric units (only affect final numbers in output files, not internal arithmetic)
use constant APERTURE_LIMIT => 0; #34; #max #apertures to use; generate warnings if too many apertures are used (0 to not check)
use constant DRILL_FMT => '2.4'; #'2.3'; #'2.4' is the default for PCB fab; change to '2.3' for CNC

use constant WANT_DEBUG => 0; #10; #level of debug wanted; higher == more, lower == less, 0 == none
use constant GERBER_DEBUG => 0; #level of debug to include in Gerber file; DON'T USE FOR FABRICATION
use constant WANT_STREAMS => FALSE; #TRUE; #save decompressed streams to files (for debug)
use constant WANT_ALLINPUT => FALSE; #TRUE; #save entire input stream (for debug ONLY)

#DebugPrint(sprintf("${\(CYAN)}DEBUG: stdout %d, gerber %d, want streams? %d, all input? %d, O/S: $^O, Perl: $]${\(RESET)}\n", WANT_DEBUG, GERBER_DEBUG, WANT_STREAMS, WANT_ALLINPUT), 1);
#DebugPrint(sprintf("max int = %d, min int = %d\n", MAXINT, MININT), 1); 

#define standard trace and pad sizes to reduce scaling or PDF rendering errors:
#This avoids weird aperture settings and replaces them with more standardized values.
#(I'm not sure how photoplotters handle strange sizes).
#Fewer choices here gives more accurate mapping in the final Gerber files.
#units are in inches
use constant TOOL_SIZES => #add more as desired
(
#round or square pads (> 0) and drills (< 0):
    .010, -.001,  #tiny pads for SMD; dummy drill size (too small for practical use, but needed so StandardTool will use this entry)
    .031, -.014,  #used for vias
    .041, -.020,  #smallest non-filled plated hole
    .051, -.025,
    .056, -.029,  #useful for IC pins
    .070, -.033,
    .075, -.040,  #heavier leads
#    .090, -.043,  #NOTE: 600 dpi is not high enough resolution to reliably distinguish between .043" and .046", so choose 1 of the 2 here
    .100, -.046,
    .115, -.052,
    .130, -.061,
    .140, -.067,
    .150, -.079,
    .175, -.088,
    .190, -.093,
    .200, -.100,
    .220, -.110,
    .160, -.125,  #useful for mounting holes
#some additional pad sizes without holes (repeat a previous hole size if you just want the pad size):
    .090, -.040,  #want a .090 pad option, but use dummy hole size
    .065, -.040, #.065 x .065 rect pad
    .035, -.040, #.035 x .065 rect pad
#traces:
    .001,  #too thin for real traces; use only for board outlines
    .006,  #minimum real trace width; mainly used for text
    .008,  #mainly used for mid-sized text, not traces
    .010,  #minimum recommended trace width for low-current signals
    .012,
    .015,  #moderate low-voltage current
    .020,  #heavier trace for power, ground (even if a lighter one is adequate)
    .025,
    .030,  #heavy-current traces; be careful with these ones!
    .040,
    .050,
    .060,
    .080,
    .100,
    .120,
);
#Areas larger than the values below will be filled with parallel lines:
#This cuts down on the number of aperture sizes used.
#Set to 0 to always use an aperture or drill, regardless of size.
use constant { MAX_APERTURE => max((TOOL_SIZES)) + .004, MAX_DRILL => -min((TOOL_SIZES)) + .004 }; #max aperture and drill sizes (plus a little tolerance)
#DebugPrint(sprintf("using %d standard tool sizes: %s, max aper %.3f, max drill %.3f\n", scalar((TOOL_SIZES)), join(", ", (TOOL_SIZES)), MAX_APERTURE, MAX_DRILL), 1);

#NOTE: Compare the PDF to the original CAD file to check the accuracy of the PDF rendering and parsing!
#for example, the CAD software I used generated the following circles for holes:
#CAD hole size:   parsed PDF diameter:      error:
#  .014                .016                +.002
#  .020                .02267              +.00267
#  .025                .026                +.001
#  .029                .03167              +.00267
#  .033                .036                +.003
#  .040                .04267              +.00267
#This was usually ~ .002" - .003" too big compared to the hole as displayed in the CAD software.
#To compensate for PDF rendering errors (either during CAD Print function or PDF parsing logic), adjust the values below as needed.
#units are pixels; for example, a value of 2.4 at 600 dpi = .0004 inch, 2 at 600 dpi = .0033"
use constant
{
    HOLE_ADJUST => -0.004 * 600, #-2.6, #holes seemed to be slightly oversized (by .002" - .004"), so shrink them a little
    RNDPAD_ADJUST => -0.003 * 600, #-2, #-2.4, #round pads seemed to be slightly oversized, so shrink them a little
    SQRPAD_ADJUST => +0.001 * 600, #+.5, #square pads are sometimes too small by .00067, so bump them up a little
    RECTPAD_ADJUST => 0, #(pixels) rectangular pads seem to be okay? (not tested much)
    TRACE_ADJUST => 0, #(pixels) traces seemed to be okay?
    REDUCE_TOLERANCE => .001, #(inches) allow this much variation when reducing circles and rects
};

#Also, my CAD's Print function or the PDF print driver I used was a little off for circles, so define some additional adjustment values here:
#Values are added to X/Y coordinates; units are pixels; for example, a value of 1 at 600 dpi would be ~= .002 inch
use constant
{
    CIRCLE_ADJUST_MINX => 0,
    CIRCLE_ADJUST_MINY => -0.001 * 600, #-1, #circles were a little too high, so nudge them a little lower
    CIRCLE_ADJUST_MAXX => +0.001 * 600, #+1, #circles were a little too far to the left, so nudge them a little to the right
    CIRCLE_ADJUST_MAXY => 0,
    SUBST_CIRCLE_CLIPRECT => FALSE, #generate circle and substitute for clip rects (to compensate for the way some CAD software draws circles)
    WANT_CLIPRECT => TRUE, #FALSE, #AI doesn't need clip rect at all? should be on normally?
    RECT_COMPLETION => FALSE, #TRUE, #fill in 4th side of rect when 3 sides found
};

#allow .012 clearance around pads for solder mask:
#This value effectively adjusts pad sizes in the TOOL_SIZES list above (only for solder mask layers).
use constant SOLDER_MARGIN => +.012; #units are inches

#line join/cap styles:
use constant
{
    CAP_NONE => 0, #butt (none); line is exact length
    CAP_ROUND => 1, #round cap/join; line overhangs by a semi-circle at either end
    CAP_SQUARE => 2, #square cap/join; line overhangs by a half square on either end
    CAP_OVERRIDE => FALSE, #cap style overrides drawing logic
};
    
#number of elements in each shape type:
use constant
{
    RECT_SHAPELEN => 6, #x0, y0, x1, y1, count, "rect" (start, end corners)
    LINE_SHAPELEN => 6, #x0, y0, x1, y1, count, "line" (line seg)
    CURVE_SHAPELEN => 10, #xstart, ystart, x0, y0, x1, y1, xend, yend, count, "curve" (bezier 2 points)
    CIRCLE_SHAPELEN => 5, #x, y, 5, count, "circle" (center + radius)
};
#const my %SHAPELEN =
#Readonly my %SHAPELEN =>
our %SHAPELEN =
(
    rect => RECT_SHAPELEN,
    line => LINE_SHAPELEN,
    curve => CURVE_SHAPELEN,
    circle => CIRCLE_SHAPELEN,
);

#panelization:
#This will repeat the entire body the number of times indicated along the X or Y axes (files grow accordingly).
#Display elements that overhang PCB boundary can be squashed or left as-is (typically text or other silk screen markings).
#Set "overhangs" TRUE to allow overhangs, FALSE to truncate them.
#xpad and ypad allow margins to be added around outer edge of panelized PCB.
use constant PANELIZE => {'x' => 1, 'y' => 1, 'xpad' => 0, 'ypad' => 0, 'overhangs' => TRUE}; #number of times to repeat in X and Y directions

# Set this to 1 if you need TurboCAD support.
#$turboCAD = FALSE; #is this still needed as an option?

#CIRCAD pad generation uses an appropriate aperture, then moves it (stroke) "a little" - we use this to find pads and distinguish them from PCB holes. 
use constant PAD_STROKE => 0.3; #0.0005 * 600; #units are pixels
#convert very short traces to pads or holes:
use constant TRACE_MINLEN => .001; #units are inches
#use constant ALWAYS_XY => TRUE; #FALSE; #force XY even if X or Y doesn't change; NOTE: needs to be TRUE for all pads to show in FlatCAM and ViewPlot
use constant REMOVE_POLARITY => FALSE; #TRUE; #set to remove subtractive (negative) polarity; NOTE: must be FALSE for ground planes

#PDF uses "points", each point = 1/72 inch
#combined with a PDF scale factor of .12, this gives 600 dpi resolution (1/72 * .12 = 600 dpi)
use constant INCHES_PER_POINT => 1/72; #0.0138888889; #multiply point-size by this to get inches

# The precision used when computing a bezier curve. Higher numbers are more precise but slower (and generate larger files).
#$bezierPrecision = 100;
use constant BEZIER_PRECISION => 36; #100; #use const; reduced for faster rendering (mainly used for silk screen and thermal pads)

# Ground planes and silk screen or larger copper rectangles or circles are filled line-by-line using this resolution.
use constant FILL_WIDTH => .01; #fill at most 0.01 inch at a time

# The max number of characters to read into memory
use constant MAX_BYTES => 10 * M; #bumped up to 10 MB, use const

use constant DUP_DRILL1 => TRUE; #FALSE; #kludge: ViewPlot doesn't load drill files that are too small so duplicate first tool

my $runtime = time(); #Time::HiRes::gettimeofday(); #measure my execution time

print STDERR "Loaded config settings from '${\(__FILE__)}'.\n";
1; #last value must be truthful to indicate successful load


#############################################################################################
#junk/experiment:

#use Package::Constants;
#use Exporter qw(import); #https://perldoc.perl.org/Exporter.html

#my $caller = "pdf2gerb::";

#sub cfg
#{
#    my $proto = shift;
#    my $class = ref($proto) || $proto;
#    my $settings =
#    {
#        $WANT_DEBUG => 990, #10; #level of debug wanted; higher == more, lower == less, 0 == none
#    };
#    bless($settings, $class);
#    return $settings;
#}

#use constant HELLO => "hi there2"; #"main::HELLO" => "hi there";
#use constant GOODBYE => 14; #"main::GOODBYE" => 12;

#print STDERR "read cfg file\n";

#our @EXPORT_OK = Package::Constants->list(__PACKAGE__); #https://www.perlmonks.org/?node_id=1072691; NOTE: "_OK" skips short/common names

#print STDERR scalar(@EXPORT_OK) . " consts exported:\n";
#foreach(@EXPORT_OK) { print STDERR "$_\n"; }
#my $val = main::thing("xyz");
#print STDERR "caller gave me $val\n";
#foreach my $arg (@ARGV) { print STDERR "arg $arg\n"; }

Download Details:

Author: swannman
Source Code: https://github.com/swannman/pdf2gerb

License: GPL-3.0 license

#perl 

Rahul Raathi

1607512027

Reasons why Network Automation is Important to learn for Network Engineers

Companies today are constantly pursuing greater agility and speed in their IT operations. By innovating with new technologies and adapting rapidly to changing consumer dynamics, they are seeking to seize market advantage.

In the quest for productivity, a big roadblock many companies face is that their business network is much more difficult to navigate than ever before. Distributed workloads and distributed IT resources have resulted in highly complex configurations and low environment-wide visibility.
What is network automation?

The process of automating the configuration, management, testing, implementation and operation of physical and virtual devices within a network is network automation. Network service availability increases with regular network operations and functions that are automatically monitored and handled by automated and repetitive processes.

Any type of network such as data centers, service providers, and enterprises can use network automation to increase efficiency, reduce man made errors, and lower operating expenses.

Why network automation is important?

The rise in IT costs for network operations is one of the main problems for network engineers. Data and system growth is beginning to outpace IT capacities, rendering manual approaches almost impossible.
However, up to 95% of network adjustments are made manually, resulting in maintenance costs that are 2 to 3 times higher than network costs. For companies to keep pace in the modern world, increased IT automation, centrally and remotely controlled, is important.

#1 Manual Tasks Removal: Automating the network substitutes predictable, repeatable network adjustments for manual tasks. That improves the competitiveness of IT, so you can concentrate on strategic opportunities that drive business growth.

#2 Accelerate delivery of service: A crucial advantage: delivering faster key data services, improving network performance, and speeding up the implementation of new services and applications.

#3 Templates standardize procedures: Use structured templates to drive performance and streamline network changes among network stakeholders.

#4 Enable fast improvements: Network modifications that you previously rarely performed because they were manual, time consuming, and resource intensive are more regularly implemented.

#5 Build a network that is secure: Using an infrastructure-as-code method to preserve the network’s state and configuration, from data centre to edge, in much the same way that source code is handled by developers.

#6 Gain visibility on the network: To detect performance problems, spiking resource consumption levels, and network failures, access wide-ranging performance monitoring capabilities.

#7 Analyze and fix problems: For insight into efficiency, usage, protection, and resource allocation, depend on network analytics that help solve problems much faster than through manual techniques.

Conclusion:
The number and type of devices, users and objects that are connected to the network has grown exponentially. And to satisfy this growing demand, networks are becoming more complicated and implementations are becoming huge. In addition to simplifying the Day one implementation process, Network Automation plays a very crucial role in simplifying day-to-day operations & maintenance.

These are the major reasons why enterprises are looking to hire IT professionals with network automation skills. That’s why; there is big demand of automation course for network engineers these days. You can quickly and easily plan, supply, and enforce policies across your network with network automation for your organization.

#network automation #why network automation #what is network automation

Rahul Raathi

1607512027

Reasons why Network Automation is Important to learn for Network Engineers

Companies today are constantly pursuing greater agility and speed in their IT operations. By innovating with new technologies and adapting rapidly to changing consumer dynamics, they are seeking to seize market advantage.

In the quest for productivity, a big roadblock many companies face is that their business network is much more difficult to navigate than ever before. Distributed workloads and distributed IT resources have resulted in highly complex configurations and low environment-wide visibility.
What is network automation?

The process of automating the configuration, management, testing, implementation and operation of physical and virtual devices within a network is network automation. Network service availability increases with regular network operations and functions that are automatically monitored and handled by automated and repetitive processes.

Any type of network such as data centers, service providers, and enterprises can use network automation to increase efficiency, reduce man made errors, and lower operating expenses.

Why network automation is important?

The rise in IT costs for network operations is one of the main problems for network engineers. Data and system growth is beginning to outpace IT capacities, rendering manual approaches almost impossible.
However, up to 95% of network adjustments are made manually, resulting in maintenance costs that are 2 to 3 times higher than network costs. For companies to keep pace in the modern world, increased IT automation, centrally and remotely controlled, is important.

#1 Manual Tasks Removal: Automating the network substitutes predictable, repeatable network adjustments for manual tasks. That improves the competitiveness of IT, so you can concentrate on strategic opportunities that drive business growth.

#2 Accelerate delivery of service: A crucial advantage: delivering faster key data services, improving network performance, and speeding up the implementation of new services and applications.

#3 Templates standardize procedures: Use structured templates to drive performance and streamline network changes among network stakeholders.

#4 Enable fast improvements: Network modifications that you previously rarely performed because they were manual, time consuming, and resource intensive are more regularly implemented.

#5 Build a network that is secure: Using an infrastructure-as-code method to preserve the network’s state and configuration, from data centre to edge, in much the same way that source code is handled by developers.

#6 Gain visibility on the network: To detect performance problems, spiking resource consumption levels, and network failures, access wide-ranging performance monitoring capabilities.

#7 Analyze and fix problems: For insight into efficiency, usage, protection, and resource allocation, depend on network analytics that help solve problems much faster than through manual techniques.

Conclusion:
The number and type of devices, users and objects that are connected to the network has grown exponentially. And to satisfy this growing demand, networks are becoming more complicated and implementations are becoming huge. In addition to simplifying the Day one implementation process, Network Automation plays a very crucial role in simplifying day-to-day operations & maintenance.

These are the major reasons why enterprises are looking to hire IT professionals with network automation skills. That’s why; there is big demand of automation course for network engineers these days. You can quickly and easily plan, supply, and enforce policies across your network with network automation for your organization.

#network automation #why network automation #what is network automation

Rahul Raathi

1607512027

Python Automation & Programming for Network Engineers - Learn Python

Companies today are constantly pursuing greater agility and speed in their IT operations. By innovating with new technologies and adapting rapidly to changing consumer dynamics, they are seeking to seize market advantage.

In the quest for productivity, a big roadblock many companies face is that their business network is much more difficult to navigate than ever before. Distributed workloads and distributed IT resources have resulted in highly complex configurations and low environment-wide visibility.
What is network automation?

The process of automating the configuration, management, testing, implementation and operation of physical and virtual devices within a network is network automation. Network service availability increases with regular network operations and functions that are automatically monitored and handled by automated and repetitive processes.

Any type of network such as data centers, service providers, and enterprises can use network automation to increase efficiency, reduce man made errors, and lower operating expenses.

Why network automation is important?

The rise in IT costs for network operations is one of the main problems for network engineers. Data and system growth is beginning to outpace IT capacities, rendering manual approaches almost impossible.
However, up to 95% of network adjustments are made manually, resulting in maintenance costs that are 2 to 3 times higher than network costs. For companies to keep pace in the modern world, increased IT automation, centrally and remotely controlled, is important.

#1 Manual Tasks Removal: Automating the network substitutes predictable, repeatable network adjustments for manual tasks. That improves the competitiveness of IT, so you can concentrate on strategic opportunities that drive business growth.

#2 Accelerate delivery of service: A crucial advantage: delivering faster key data services, improving network performance, and speeding up the implementation of new services and applications.

#3 Templates standardize procedures: Use structured templates to drive performance and streamline network changes among network stakeholders.

#4 Enable fast improvements: Network modifications that you previously rarely performed because they were manual, time consuming, and resource intensive are more regularly implemented.

#5 Build a network that is secure: Using an infrastructure-as-code method to preserve the network’s state and configuration, from data centre to edge, in much the same way that source code is handled by developers.

#6 Gain visibility on the network: To detect performance problems, spiking resource consumption levels, and network failures, access wide-ranging performance monitoring capabilities.

#7 Analyze and fix problems: For insight into efficiency, usage, protection, and resource allocation, depend on network analytics that help solve problems much faster than through manual techniques.

Conclusion:
The number and type of devices, users and objects that are connected to the network has grown exponentially. And to satisfy this growing demand, networks are becoming more complicated and implementations are becoming huge. In addition to simplifying the Day one implementation process, Network Automation plays a very crucial role in simplifying day-to-day operations & maintenance.

These are the major reasons why enterprises are looking to hire IT professionals with network automation skills. That’s why; there is big demand of automation course for network engineers these days. You can quickly and easily plan, supply, and enforce policies across your network with network automation for your organization.

#network automation #why network automation #what is network automation

What is Ansible? A Tool to Automate Parts of Your Job

Hello everyone, today we will talk about Ansible, a fantastic software tool that allows you to automate cross-platform computer support in a simple but effective way.

Table of Contents

  • What is Ansible?
  • How Does Ansible Work?
  • Ansible's Architecture
    • Plugins
    • Modules
    • Inventories
    • Playbook
  • Benefits of Using Ansible
  • Why is Ansible so important?
  • How to Install and Configure Ansible on Ubuntu
  • Conclusion
  • References

What is Ansible?

Ansible is a tool that generates written instructions for automating IT professionals' work throughout the entire system infrastructure.

It's designed particularly for IT professionals who use it for application deployment, configuration management, intra-service orchestration, and practically anything else a systems administrator does on a weekly or daily basis.

Ansible is simple to install because it doesn't require any agent software or other security infrastructure.

While Ansible is at the cutting edge of automation, systems administration, and DevOps, it's also valuable as a tool for devs to use in their daily work.

Ansible allows you to set up not just one machine but a complete network of them all at once, and it doesn't require any programming knowledge.

How Does Ansible Work?

Ansible connects to nodes on a network (clients, servers, etc.) and then send a little program called an Ansible module to each node.

It then runs these modules through SSH and deletes them once they're done.

Your Ansible control node must have login access to the managed nodes for this interaction to work.

The most frequent method of authentication is SSH keys, but alternative methods are also allowed.

If you want to see how to install and start using Ansible, we'll cover that below.

Ansible's Architecture

Now let's take a look at Ansible's architecture and how it manages operations.

Ansible Plugins

Plugins are supplementary pieces of code that enhance functionality, and you've probably used them in many other tools and platforms. You can use Ansible's built-in plugins or create your own.

Examples are:

  • Action Plugins
  • Become Plugins
  • Cache Plugins
  • Callback Plugins
  • Cliconf Plugins
  • Connection Plugins
  • HTTP API Plugins
  • Inventory Plugins
  • Lookup Plugins
  • Netconf Plugins
  • Tests

Ansible Modules

Modules are short programs that Ansible distributes to all nodes or remote hosts from a central control workstation. Modules control things like services and packages and can be executed via playbooks.

Ansible runs all of the modules needed to install updates or complete whatever operation is required and then removes them after they're done.

Ansible Inventories

Ansible uses an inventory file to track which hosts are part of your infrastructure and then accesses them to perform commands and playbooks.

Ansible works in parallel with various systems in your infrastructure. It accomplishes this by picking methods mentioned in Ansible's inventory file, which is saved in the host location by default.

Once the inventory is registered, you can use a simple text file to assign variables to any of the hosts, and you may retrieve inventory from a variety of sources.

Ansible Playbook

IT professionals can use Ansible playbooks to program applications, services, server nodes, and other devices without starting from scratch. Ansible playbooks, along with the conditions, variables, and tasks included within them, can be stored, shared, and reused forever.

Ansible playbooks function similarly to task manuals. They're simple YAML files, a human-readable data serialization language.

Playbooks are at the heart of what makes Ansible so popular. They specify activities that can be completed quickly without requiring the user to know or remember any specific syntax.

Benefits of Using Ansible

  • Ansible is quick and easy to use, as it runs all of its operations over SSH and doesn't require the installation of any agents.
  • Ansible is a free, open-source tool, and it's straightforward to set up and use: Ansible's playbooks don't require any special coding knowledge.
  • Ansible can be used to perform simple tasks such as ensuring that a service is operating or rebooting from the command line without the need for configuration files.

In a more extensive or more uniform system, Ansible may be a better fit. It also provides a set of modules for managing various methods and cloud infrastructure.

Why is Ansible so important?

Modernization and digital transformation require automation that's both necessary and purposeful. We need a new management solution in today's dynamic contexts to increase speed, scale, and stability throughout IT infrastructure.

Technology is our most potent instrument for product improvement. Previously, accomplishing this required a significant amount of manual labor and intricate coordination. But today, Ansible - a simple yet powerful IT automation engine used by thousands of enterprises to simplify their setups and speed DevOps operations - is available.

How to Install Ansible on Ubuntu

Run the following commands to configure the PPA on your machine and install Ansible:

Update the repository:

sudo apt-get update

Install the software properties:

sudo apt-get install software-properties-common

And then install Ansible like this:

sudo apt-add-repository --yes --update ppa:ansible/ansible

Then run this:

sudo apt-get install ansible

You should have something similar to what is shown below:

ansible_installation

Now that you have successfully installed Ansible, let's test if it's working by using the command below:

ansible --version

ansible_check

We'll use the command below to instruct Ansible to target all systems for the inventory host localhost, and we'll run the module ping from your local console (rather than ssh).

ansible all -i localhost, --connection=local -m ping

You should get a response similar to what you can see below:

ansible_ping

How to modify the hosts that Ansible targets

We'll make changes to the host's file in /etc/ansible/hosts. This is the default file where Ansible searches for any defined hosts (and groups) where the given commands should be executed remotely.

sudo nano /etc/ansible/hosts

Add the lines below to the file and save the modifications:

[local]
localhost

Execute this command with your adjusted inventory file:

ansible all --connection=local -m ping

The response should look similar to what we have below:

ansible_pong

How to configure a remote server

We deploy our Ansible test program to our remote server using a Digital Ocean droplet.

Use the command below to ssh into the server:

ssh username@IP_Address

Note: we have already configured an ssh key in our profile, which was selected when creating the droplet.

ansible_server

How to configure Ansible for a remote server

We will edit our hosts file in /etc/ansible/hosts using the command below:

sudo nano /etc/ansible/hosts

Add the lines below to the file and save the modifications:

[remote]
remote_test

[remote:vars]
ansible_host=IP_ADDRESS_OF_VIRTUAL_MACHINE
ansible_user=USERNAME

To see if Ansible can connect to your remote compute instance over SSH, let's type the following command:

ansible remote -m ping

asnible_result

We'll make an Ansible playbook using the command below, which is the typical way of telling Ansible which commands to run on the remote server and in what order. The playbook is written in .yml and follows a strict format.

In the official Ansible documentation, you can learn more about playbooks.

nano my-playbook.yml

Add the following code, which tells Ansible to install Docker in several steps:

---
- name: install docker
hosts: remote
become_method: sudo
become_user: root
vars: #local variables
docker_packages:
- apt-transport-https
- ca-certificates
- curl
- software-properties-common

tasks:
- name: Update apt packages
become: true #make sure you execute the task with sudo privileges
apt: #use apt module
update_cache: yes #equivalent of apt-get update

- name: Install packages needed for Docker
become: true
apt:
name: "{{ docker_packages }}" #uses our declared variable docker_packages
state: present #indicates the desired package state
force_apt_get: yes #forces to use apt-get

- name: Add official GPG key of Docker
shell: curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

- name: Save the current Ubuntu release version into a variable
shell: lsb_release -cs
register: ubuntu_version #Output gets stored in this variable

- name: Set right Docker directory
become: true
shell: add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu {{ ubuntu_version.stdout }} stable"

- name: Update apt packages
become: true
apt:
update_cache: yes

- name: Install Docker
become: true
apt:
name: docker-ce
state: present
force_apt_get: yes

- name: Test Docker with hello world example
become: true
shell: docker run hello-world
register: hello_world_output

- name: Show output of hello word example
debug: #use debug module
msg: "Container Output: {{hello_world_output.stdout}}"

We can now execute it with the command below:

ansible-playbook my-playbook.yml -l remote

After that, we'll see some magic happen (it might take a while), and somewhere in the last debug message in our terminal, we should see "Hello from Docker!"

Conclusion

In this article, we had a detailed look into Ansible, its benefits, how it works and what it can do, its architecture, plugins, playbook, inventory, and how to configure and deploy Docker with Ansible on a remote server.

Thank you for reading!

Link: https://www.freecodecamp.org/news/what-is-ansible/

#ansible