.. _getting_started_index:

############################
Getting started with Ansible
############################

Ansible automates the management of remote systems and controls their desired state.
A basic Ansible environment has three main components:


Control node
   A system on which Ansible is installed.
   You run Ansible commands such as ``ansible`` or ``ansible-inventory`` on a control node.

Managed node
   A remote system, or host, that Ansible controls.

Inventory
   A list of managed nodes that are logically organized.
   You create an inventory on the control node to describe host deployments to Ansible.

.. image:: ../images/ansible_basic.svg
   :width: 400px
   :align: center
   :height: 200px
   :alt: Basic components of an Ansible environment include a control node, an inventory of managed nodes, and a module copied to each managed node.

Ready to start using Ansible?
Complete the following steps to get up and running:

#. Install Ansible. Visit the :ref:`installation guide<installation_guide>` for complete details.
   
   .. code-block:: bash 
      
      python3 -m pip install --user ansible

#. Create an inventory by adding the IP address or fully qualified domain name (FQDN) of one or more remote systems to ``/etc/ansible/hosts``.
   The following example adds the IP addresses of three virtual machines in KVM:

   .. code-block:: ini

      [myvirtualmachines]
      192.0.2.50
      192.0.2.51
      192.0.2.52

#. Verify the hosts in your inventory.
   
   .. code-block:: bash 

      ansible all --list-hosts

   .. code-block:: ansible-output

      hosts (1):
        192.0.2.50
        192.0.2.51
        192.0.2.52

#. Set up SSH connections so Ansible can connect to the managed nodes.

   a. Add your public SSH key to the ``authorized_keys`` file on each remote system.
   b. Test the SSH connections, for example:

   .. code-block:: bash

      ssh username@192.0.2.50
    
   If the username on the control node is different on the host, you need to pass the ``-u`` option with the ``ansible`` command.

#. Ping the managed nodes.

   .. code-block:: bash 

      ansible all -m ping

   .. literalinclude:: ansible_output/ping_output.txt
      :language: text

Congratulations! You are now using Ansible.
Continue by :ref:`learning how to build an inventory<get_started_inventory>`.

.. seealso::

   `Ansible Demos <https://github.com/ansible/product-demos>`_
       Demonstrations of different Ansible usecases
   `RHEL Labs <https://katacoda.com/rhel-labs>`_
       Labs to provide further knowledge on different topics
   `Mailing List <https://groups.google.com/group/ansible-project>`_
       Questions? Help? Ideas?  Stop by the list on Google Groups
   :ref:`communication_irc`
       How to join Ansible chat channels

.. toctree::
   :maxdepth: 1

   get_started_inventory
   get_started_playbook