Difference between revisions of "Ansible Basics"

From Nick's Personal Wiki
Jump to navigation Jump to search
(Added Inventory File)
(Added Ansible Playbook)
Line 58: Line 58:
 
ansible_become_user=[true/false] (whether or not Ansible will become the current user)
 
ansible_become_user=[true/false] (whether or not Ansible will become the current user)
 
ansible_ssh_private_key=/PATH/TO/IDENTITY/FILE  </nowiki>
 
ansible_ssh_private_key=/PATH/TO/IDENTITY/FILE  </nowiki>
 +
 +
 +
== Creating an Ansible Playbook (Basics) ==
 +
An Ansible playbook is the instruction set that Ansible will follow to enforce the changes/configurations/etc across the specified hosts in the playbook file.
 +
 +
An example playbook may look like this:
 +
<nowiki>
 +
- name: Basic Setup
 +
  hosts: all
 +
  become: true
 +
  tasks:
 +
    - name: Set Hostname
 +
      hostname:
 +
        name: DESIRED_CUSTOM_HOSTNAME_OF_TARGET_NODE or "{{ inventory_hostname }}" (can use this option if the target's IP is included in the inventory file, Ansible will have the target set its hostname to the target's corresponding IP address)
 +
    - name: Ensure epel-release repository is installed
 +
      dnf: (calls the Ansible module for dnf)
 +
        name: epel-release (specifies the package to pass to dnf)
 +
        state: present ('present' checks that the package is installed, and installs it if not)
 +
    -name: Reboot if hostname changes
 +
      reboot:
 +
        msg: "Rebooting after hostname change"
 +
        connect_timeout: 5
 +
        reboot_timeout: 300
 +
      when: ansible_hostname != inventory_hostname (this task will only be run when this condition is met, when the device's hostname does NOT match the hostname specified in the inventory file passed to Ansible) </nowiki>
  
  

Revision as of 08:11, 20 March 2025

Installing Ansible

Enable Required Repositories

Ansible is available via the EPEL (Extra Packages for Enterprise Linux) or the official Red Hat repositories.

Enable EPEL Repository

For RHEL systems, install the EPEL repository:

sudo dnf install epel-release 


Install Ansible

Once the repository is enabled, install Ansible using the package manager:

sudo dnf install ansible 


Verify the Installation

After installation, verify Ansible is installed correctly:

ansible --version 

You should see output similar to:

ansible [core 2.x.x]
  config file = /etc/ansible/ansible.cfg
  python version = 3.x.x 


Troubleshooting

  • If epel-release is not found, try enabling the codeready-builder repo or check for typos.


Creating an Ansible Inventory File

An inventory file for Ansible is a file that has a list of the hosts Ansible will interact with, their hostnames, IP addresses, and other relevant information.

An example inventory file might look like:

[web-server] (this is the host group)
web-server-01 ansible_host=1.2.3.4 (each entry is a single host, with arguments/options beside)
web-server-02 ansible_host=WEBSERVER_HOSTNAME 

You can also format the inventory file, to manage entire host groups collectively, like this:

[file-server]
file01 ansible_host=1.2.3.4
file02 ansible_host=5.6.7.8
file03 ansible_host=9.10.11.12

[file-server:vars]
ansible_user=USER
ansible_port=PORT#
ansible_become=[true/false] (whether or not Ansible will become 'root' user)
ansible_become_user=[true/false] (whether or not Ansible will become the current user)
ansible_ssh_private_key=/PATH/TO/IDENTITY/FILE  


Creating an Ansible Playbook (Basics)

An Ansible playbook is the instruction set that Ansible will follow to enforce the changes/configurations/etc across the specified hosts in the playbook file.

An example playbook may look like this:

 - name: Basic Setup
   hosts: all
   become: true 
   tasks:
     - name: Set Hostname
       hostname:
         name: DESIRED_CUSTOM_HOSTNAME_OF_TARGET_NODE or "{{ inventory_hostname }}" (can use this option if the target's IP is included in the inventory file, Ansible will have the target set its hostname to the target's corresponding IP address) 
     - name: Ensure epel-release repository is installed
       dnf: (calls the Ansible module for dnf)
         name: epel-release (specifies the package to pass to dnf)
         state: present ('present' checks that the package is installed, and installs it if not)
     -name: Reboot if hostname changes
      reboot: 
        msg: "Rebooting after hostname change"
        connect_timeout: 5
        reboot_timeout: 300
      when: ansible_hostname != inventory_hostname (this task will only be run when this condition is met, when the device's hostname does NOT match the hostname specified in the inventory file passed to Ansible) 


Additional Resources