{"id":724,"date":"2018-06-05T13:19:43","date_gmt":"2018-06-05T13:19:43","guid":{"rendered":"https:\/\/www.nicktailor.com\/?p=724"},"modified":"2020-06-17T07:37:32","modified_gmt":"2020-06-17T07:37:32","slug":"how-to-setup-ansible-on-centos-7","status":"publish","type":"post","link":"https:\/\/nicktailor.com\/tech-blog\/how-to-setup-ansible-on-centos-7\/","title":{"rendered":"How to setup ansible on centos 7"},"content":{"rendered":"<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 8pt; padding-bottom: 0; line-height: 1.28;\"><span style=\"color: #3a3a3a;\">Prerequisites<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">To follow this tutorial, you will need:<\/span><\/p>\n<p style=\"margin-top: 10.5pt; padding-top: 0; margin-bottom: 7.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #3a3a3a;\">Step 1 \u2014 Installing Ansible<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">To <\/span><span style=\"color: #000000;\">begin exploring Ansible as a means of managing our various servers, we need to install the Ansible software on at least one machine.<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">To get Ansible for CentOS 7, first ensure that the CentOS 7 EPEL repository is installed:<\/span><\/p>\n<div class=\"ul\" style=\"margin: 0;\">\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 5pt; padding-top: 0; margin-bottom: 5pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #3a3a3a; font-size: 10pt;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><span style=\"color: #3a3a3a;\">sudo<\/span><span style=\"color: #3a3a3a;\"> yum install <\/span><span style=\"color: #3a3a3a;\">epel<\/span><span style=\"color: #3a3a3a;\">-release<\/span><\/div>\n<\/div>\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 5pt; padding-top: 0; margin-bottom: 5pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #3a3a3a; font-size: 10pt;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">Once the repository is installed, install Ansible with\u00a0<\/span><span style=\"color: #000000;\">yum<\/span><span style=\"color: #000000;\">:<\/span><\/p>\n<div class=\"ul\" style=\"margin: 0;\">\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 5pt; padding-top: 0; margin-bottom: 5pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #3a3a3a; font-size: 10pt;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><span style=\"color: #3a3a3a;\">sudo<\/span><span style=\"color: #3a3a3a;\"> yum install ansible<\/span><\/div>\n<\/div>\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 5pt; padding-top: 0; margin-bottom: 5pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #3a3a3a; font-size: 10pt;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">We now have <\/span><span style=\"color: #000000;\">all of<\/span><span style=\"color: #000000;\"> the software required to administer our servers through Ansible.<\/span><\/p>\n<p style=\"margin-top: 10.5pt; padding-top: 0; margin-bottom: 7.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #3a3a3a;\">Step 2 \u2014 Configuring Ansible Hosts<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">Ansible keeps track of <\/span><span style=\"color: #000000;\">all of<\/span><span style=\"color: #000000;\"> the ser<\/span><span style=\"color: #000000;\">vers that it knows about through a &#8220;hosts&#8221; file. We need to set up this file first before we can begin to communicate with our other computers.<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">Open the file with root privileges like this:<\/span><\/p>\n<div class=\"ul\" style=\"margin: 0;\">\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 5pt; padding-top: 0; margin-bottom: 5pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #3a3a3a; font-size: 10pt;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><span style=\"color: #3a3a3a;\">sudo<\/span><span style=\"color: #3a3a3a;\"> vi \/etc\/ansible\/hosts<\/span><\/div>\n<\/div>\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 5pt; padding-top: 0; margin-bottom: 5pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #3a3a3a; font-size: 10pt;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">You will see a file that has a lot <\/span><span style=\"color: #000000;\">of example configurations commented out. Keep these examples in the file to help you learn Ansible&#8217;s configuration if you want to implement more complex scenarios in the future.<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">The hosts file is <\/span><span style=\"color: #000000;\">fairly flexible<\/span><span style=\"color: #000000;\"> and can be configured in a few different way<\/span><span style=\"color: #000000;\">s. The syntax we are going to use though looks something like this:<\/span><\/p>\n<p style=\"text-align: center; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #3a3a3a;\">Example hosts file<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\">[<\/span><span style=\"color: #e94849;\">group_name<\/span><span style=\"color: #3a3a3a;\">]<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\">alias <\/span><span style=\"color: #3a3a3a;\">ansible_ssh_host<\/span><span style=\"color: #3a3a3a;\">=<\/span><span style=\"color: #e94849;\">your_server_ip<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">The\u00a0<\/span><span style=\"color: #000000;\">group_name<\/span><span style=\"color: #000000;\">\u00a0is an organizational tag that lets you refer to any servers listed under it with one word. The <\/span><span style=\"color: #000000;\">alias is just a name to refer to that server.<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">Imagine you have three servers you want to control with Ansible. Ansible communicates with client computers through SSH, so each server you want to manage should be accessible from the Ansible server by typing:<\/span><\/p>\n<div class=\"ul\" style=\"margin: 0;\">\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 5pt; padding-top: 0; margin-bottom: 5pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"display: inline-block; position: relative; text-indent: -18pt; font-size: 10pt;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><span style=\"color: #3a3a3a;\">ssh<\/span> <span style=\"color: #3a3a3a;\">root@<\/span><span style=\"color: #e94849;\">your_server_ip<\/span><\/div>\n<\/div>\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 5pt; padding-top: 0; margin-bottom: 5pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #3a3a3a; font-size: 10pt;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">You should not be prompted for a password. While Ansible certainly has the ability to handle <\/span><span style=\"color: #000000;\">password-based<\/span><span style=\"color: #000000;\"> SSH authentication, SSH keys help keep things simple.\u00a0<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">We will assume that our servers&#8217; IP addresses are\u00a0<\/span><span style=\"color: #000000;\">192.168.0.1<\/span><span style=\"color: #000000;\">,\u00a0<\/span><span style=\"color: #000000;\">192.168.0.2<\/span><span style=\"color: #000000;\">, and\u00a0<\/span><span style=\"color: #000000;\">192.168.0.3<\/span><span style=\"color: #000000;\">. <\/span><span style=\"color: #000000;\">Let&#8217;s<\/span><span style=\"color: #000000;\"> set this up so that we can refer to these individually as\u00a0<\/span><span style=\"color: #000000;\">host1<\/span><span style=\"color: #000000;\">,\u00a0<\/span><span style=\"color: #000000;\">host2<\/span><span style=\"color: #000000;\">, and\u00a0<\/span><span style=\"color: #000000;\">host3<\/span><span style=\"color: #000000;\">, or as a group as\u00a0<\/span><span style=\"color: #000000;\">servers<\/span><span style=\"color: #000000;\">. To configure this, you would add this block to your hosts file:<\/span><\/p>\n<p style=\"text-align: center; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #3a3a3a;\">\/etc\/ansible\/hosts<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\">[servers]<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\">host1 <\/span><span style=\"color: #3a3a3a;\">ansible_ssh_host<\/span><span style=\"color: #3a3a3a;\">=<\/span><span style=\"color: #e94849;\">192.168.0.1<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\">host2 <\/span><span style=\"color: #3a3a3a;\">ansible_ssh_host<\/span><span style=\"color: #3a3a3a;\">=<\/span><span style=\"color: #e94849;\">192.168.0.2<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\">host3 <\/span><span style=\"color: #3a3a3a;\">ansible_ssh_host<\/span><span style=\"color: #3a3a3a;\">=<\/span><span style=\"color: #e94849;\">192.168.0.3<\/span><\/p>\n<p>&nbsp;<\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">Hosts can be in multiple groups and groups can configure parameters for <\/span><span style=\"color: #000000;\">all of<\/span><span style=\"color: #000000;\"> their members. <\/span><span style=\"color: #000000;\">Let&#8217;s<\/span><span style=\"color: #000000;\"> try this out now.<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">Ansible will, by default, try to connect to remote hosts using your curr<\/span><span style=\"color: #000000;\">ent username. If that user <\/span><span style=\"color: #000000;\">doesn&#8217;t<\/span><span style=\"color: #000000;\"> exist on the remote system, a connection attempt will result in this error:<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 3pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\">Ansible connection error<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\">host1 | UNREACHABLE! =&gt; {<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\"> &#8220;changed&#8221;: false,<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\"> &#8220;<\/span><span style=\"color: #3a3a3a;\">msg<\/span><span style=\"color: #3a3a3a;\">&#8220;: &#8220;Failed to connect to the host via <\/span><span style=\"color: #3a3a3a;\">ssh<\/span><span style=\"color: #3a3a3a;\">.&#8221;,<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\"> &#8220;unreachable&#8221;: <\/span><span style=\"color: #3a3a3a;\">true<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\">}<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">Let&#8217;s<\/span><span style=\"color: #000000;\"> specifically tell Ansible that it should connect to servers in the &#8220;servers&#8221; group with the nick<\/span><span style=\"color: #000000;\">\u00a0user. Create a directory in the Ansible configuration structure called\u00a0<\/span><span style=\"color: #000000;\">group_vars<\/span><span style=\"color: #000000;\">.<\/span><\/p>\n<div class=\"ul\" style=\"margin: 0;\">\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 5pt; padding-top: 0; margin-bottom: 5pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #3a3a3a; font-size: 10pt;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><span style=\"color: #3a3a3a;\">sudo<\/span> <span style=\"color: #3a3a3a;\">mkdir<\/span><span style=\"color: #3a3a3a;\"> \/etc\/ansible\/<\/span><span style=\"color: #3a3a3a;\">group_vars<\/span><\/div>\n<\/div>\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 5pt; padding-top: 0; margin-bottom: 5pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #3a3a3a; font-size: 10pt;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">Within this folder, we <\/span><span style=\"color: #000000;\">can create YAML-formatted files for each group we want to configure:<\/span><\/p>\n<div class=\"ul\" style=\"margin: 0;\">\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 5pt; padding-top: 0; margin-bottom: 5pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #3a3a3a; font-size: 10pt;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><span style=\"color: #3a3a3a;\">sudo<\/span><span style=\"color: #3a3a3a;\"> nano \/etc\/ansible\/<\/span><span style=\"color: #3a3a3a;\">group_vars<\/span><span style=\"color: #3a3a3a;\">\/servers<\/span><\/div>\n<\/div>\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 5pt; padding-top: 0; margin-bottom: 5pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #3a3a3a; font-size: 10pt;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">Add this code to the file:<\/span><\/p>\n<p style=\"text-align: center; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #3a3a3a;\">\/etc\/ansible\/<\/span><span style=\"color: #3a3a3a;\">group_vars<\/span><span style=\"color: #3a3a3a;\">\/servers<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\">&#8212;<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\">ansible_ssh_user<\/span><span style=\"color: #3a3a3a;\">: <strong>ansible<\/strong><strong>nick<\/strong><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">YAML files start with &#8220;&#8212;&#8220;, so make sure you <\/span><span style=\"color: #000000;\">don&#8217;t<\/span> <span style=\"color: #000000;\">forget that part.<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">Save and close this file when you are finished. Now Ansible will always use the <strong>ansiblenick<\/strong><\/span><span style=\"color: #000000;\">\u00a0user for the\u00a0<\/span><span style=\"color: #000000;\">servers<\/span><span style=\"color: #000000;\">\u00a0group, regardless of the current user.<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">If you want to specify configuration details for every server, regardless of group <\/span><span style=\"color: #000000;\">association, you can put those details in a file at\u00a0<\/span><span style=\"color: #000000;\">\/etc\/ansible\/<\/span><span style=\"color: #000000;\">group_vars<\/span><span style=\"color: #000000;\">\/all<\/span><span style=\"color: #000000;\">. Individual hosts can be configured by creating files under a directory at\u00a0<\/span><span style=\"color: #000000;\">\/etc\/ansible\/<\/span><span style=\"color: #000000;\">host_vars<\/span><span style=\"color: #000000;\">.<\/span><\/p>\n<p style=\"margin-top: 10.5pt; padding-top: 0; margin-bottom: 7.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #3a3a3a;\">Step 3 \u2014 Using Simple Ansible Commands<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">Now that we have our hosts set up and <\/span><span style=\"color: #000000;\">enough configuration details to allow us to successfully connect to our hosts, we can try out our very first command.<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">Ping <\/span><span style=\"color: #000000;\">all of<\/span><span style=\"color: #000000;\"> the servers you configured by typing:<\/span><\/p>\n<div class=\"ul\" style=\"margin: 0;\">\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 5pt; padding-top: 0; margin-bottom: 5pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #3a3a3a; font-size: 10pt;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><span style=\"color: #3a3a3a;\">ansible -m ping all<\/span><\/div>\n<\/div>\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 5pt; padding-top: 0; margin-bottom: 5pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #3a3a3a; font-size: 10pt;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">Ansible will return output like this:<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 3pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\">Output<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\">host1 | SUCCESS =&gt; {<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\"> &#8220;changed&#8221;: false,<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\"> &#8220;ping&#8221;: &#8220;pong&#8221;<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\">}<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\">host3 | SUCCESS =&gt; {<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\"> &#8220;changed&#8221;: false,<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\"> &#8220;ping&#8221;: &#8220;pong&#8221;<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\">}<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\">host2 | SUCCESS =&gt; {<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\"> &#8220;changed&#8221;: false,<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\"> &#8220;ping&#8221;: &#8220;pong&#8221;<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\">}<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">This is a basic test to make sure that Ansible has a connection to <\/span><span style=\"color: #000000;\">all of<\/span><span style=\"color: #000000;\"> its <\/span><span style=\"color: #000000;\">hosts.<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">The\u00a0<\/span><span style=\"color: #000000;\">-m ping<\/span><span style=\"color: #000000;\">\u00a0portion of the command is an instruction to Ansible to use the &#8220;ping&#8221; module. These are basically <\/span><span style=\"color: #000000;\">commands<\/span><span style=\"color: #000000;\"> that you can run on your remote hosts. The ping module operates in many ways like the normal ping utility in Linux, but instead it<\/span><span style=\"color: #000000;\"> checks for Ansible connectivity.<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">The\u00a0<\/span><span style=\"color: #000000;\">all<\/span><span style=\"color: #000000;\">\u00a0portion means &#8220;all hosts.&#8221; You could just as easily specify a group:<\/span><\/p>\n<div class=\"ul\" style=\"margin: 0;\">\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 5pt; padding-top: 0; margin-bottom: 5pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #3a3a3a; font-size: 10pt;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><span style=\"color: #3a3a3a;\">ansible -m ping servers<\/span><\/div>\n<\/div>\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 5pt; padding-top: 0; margin-bottom: 5pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #3a3a3a; font-size: 10pt;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">You can also specify an individual host:<\/span><\/p>\n<div class=\"ul\" style=\"margin: 0;\">\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 5pt; padding-top: 0; margin-bottom: 5pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #3a3a3a; font-size: 10pt;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><span style=\"color: #3a3a3a;\">ansible -m ping host1<\/span><\/div>\n<\/div>\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 5pt; padding-top: 0; margin-bottom: 5pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #3a3a3a; font-size: 10pt;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">You can specify multiple hosts by separating them <\/span><span style=\"color: #000000;\">with colons:<\/span><\/p>\n<div class=\"ul\" style=\"margin: 0;\">\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 5pt; padding-top: 0; margin-bottom: 5pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #3a3a3a; font-size: 10pt;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><span style=\"color: #3a3a3a;\">ansible -m ping host<\/span><span style=\"color: #3a3a3a;\">1:host<\/span><span style=\"color: #3a3a3a;\">2<\/span><\/div>\n<\/div>\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 5pt; padding-top: 0; margin-bottom: 5pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #3a3a3a; font-size: 10pt;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">The\u00a0<\/span><span style=\"color: #000000;\">shell<\/span><span style=\"color: #000000;\">\u00a0module lets us send a terminal command to the remote host and retrieve the results. For instance, to find out the memory usage on our host1 machine, we could use:<\/span><\/p>\n<div class=\"ul\" style=\"margin: 0;\">\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 5pt; padding-top: 0; margin-bottom: 5pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #3a3a3a; font-size: 10pt;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><span style=\"color: #3a3a3a;\">ansible -m shell -a &#8216;free -m&#8217; host1<\/span><\/div>\n<\/div>\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 5pt; padding-top: 0; margin-bottom: 5pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #3a3a3a; font-size: 10pt;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 16.5pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #000000;\">As <\/span><span style=\"color: #000000;\">you can see, you pass arguments into a script by using the\u00a0<\/span><span style=\"color: #000000;\">-a<\/span><span style=\"color: #000000;\">\u00a0switch. <\/span><span style=\"color: #000000;\">Here&#8217;s<\/span><span style=\"color: #000000;\"> what the output might look like:<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 3pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\">Output<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\">host1 | SUCCESS | <\/span><span style=\"color: #3a3a3a;\">rc<\/span><span style=\"color: #3a3a3a;\">=0 &gt;&gt;<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\"> total used free shared buffers cached<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\">Mem: 3954 227 <\/span><span style=\"color: #3a3a3a;\"> 3726 0 14 93<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.65;\"><span style=\"color: #3a3a3a;\">-\/+ buffers\/cache: 119 3834<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"color: #3a3a3a;\">Swap: 0 0 0<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 8pt; padding-bottom: 0; line-height: 1.28;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Prerequisites To follow this tutorial, you will need: Step 1 \u2014 Installing Ansible To begin exploring Ansible as a means of managing our various servers, we need to install the Ansible software on at least one machine. To get Ansible for CentOS 7, first ensure that the CentOS 7 EPEL repository is installed: \u2022\u00a0sudo yum install epel-release \u2022\u00a0 Once the<a href=\"https:\/\/nicktailor.com\/tech-blog\/how-to-setup-ansible-on-centos-7\/\" class=\"read-more\">Read More &#8230;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[51,58],"tags":[],"class_list":["post-724","post","type-post","status-publish","format-standard","hentry","category-ansible","category-centos"],"_links":{"self":[{"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/posts\/724","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/comments?post=724"}],"version-history":[{"count":7,"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/posts\/724\/revisions"}],"predecessor-version":[{"id":1057,"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/posts\/724\/revisions\/1057"}],"wp:attachment":[{"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/media?parent=724"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/categories?post=724"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/tags?post=724"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}