Ansible-Playbook
For this exercise, we will need:
- For this exercise, we will need:
- Oracle VM VirtualBox installed
- Any version of a Linux server (for example, AlmaLinux 9.5)
- A terminal capable of establishing an SSH connection (for example, PowerShell)
VM Preparation:
- Open the VM’s Settings.
- Go to Network.
- Under Attached to, select Bridged Adapter.

- Clone the original VM in which you installed the Linux OS and name it “Ansible Host.”
- Be sure to select the option to generate new MAC addresses.
- Repeat this process for Host01, Host02, and Host03.

- You can group all four VMs and take snapshots. If something goes wrong, it will be easy to roll back your actions.
- The installation process will be skipped.
SSH connection and editing some configuration:
- Run the VM.
- To be able to connect to the VMs, we need to check their IP addresses. Open each VM window one by one, log in, and type
ip a
. Write down their IP addresses, and note which VM each one belongs to.

- Open four PowerShell windows and type the following command
ssh username@ip_that_you_write

To change the hostname, type:
sudo hostnamectl set-hostname ansible
To apply the settings, type:
exit
Then log back in.
- To add hostnames, type:
sudo vi /etc/hosts
It should look like this:

You can copy this section, as it will be the same for every host. We can check if everything is working by executing:
ping host01
For example:

- Now we need to repeat the steps for changing the hostname and adding IP addresses to the
/etc/hosts
file.
Preparation for work with ansible:
- We need to create a user on Host01-03. This user will allow Ansible to connect to these hosts and perform the required playbook actions. Cretate user:
sudo adduser ansible
Set the user password: bash sudo passwd ansible
Add the user to the wheel group (this will allow it to perform required system actions): bash sudo usermod -aG wheel ansible
- Repeat these steps on all hosts.
- On the ansible system, generate ssh keys so that you can have passwordless communications with each host:
ssh-keygen
- Press Enter to use the default settings.
- Copy the public key to all hosts:
for i in 1 2 3; do ssh-copy-id hostname@host0$i; done
Ansible instalation and configuration:
- Install epel-release repository:
sudo dnf install epel-release y
- Install ansible:
sudo dnf install -y ansible
- Make a dir for storing playbooks:
mkdir Ansible_Playbooks
- Go to the created directory:
cd Ansible_Playbooks/
- Create nginx yaml file (playbook itself):
touch Nginx_Playbook.yaml
- Create a playbook, paste the folowing text:
---
- name: Install and Start Nginx on AlmaLinux 9.5
hosts: webservers
become: yes
tasks:
- name: Ensure DNF is up to date
dnf:
name: "*"
state: latest
- name: Install Nginx
dnf:
name: nginx
state: present
- name: Enable and Start Nginx
systemd:
name: nginx
enabled: yes
state: started
- name: Open HTTP and HTTPS Ports in Firewalld
firewalld:
service: "{{ item }}"
permanent: yes
state: enabled
with_items:
- http
- https
- name: Reload Firewalld
command: firewall-cmd --reload
- name: Verify Nginx is Running
command: systemctl is-active nginx
register: nginx_status
- name: Print Nginx Status
debug:
msg: "Nginx is {{ nginx_status.stdout }}"
- Open the file /etc/ansible/hosts and append the folowing:
[webservers]
host01 ansible_host=IP_of_host01
host02 ansible_host=IP_of_host02
host03 ansible_host=IP_of_host03
[webservers:vars]
ansible_user=ansible
ansible_ssh_private_key_file=~/.ssh/id_rsa
- To run you task type the folowing:
ansible-playbook path_to_your_playbook_yaml_file -K
- Voilà! We have automated the web server installation. We can download preconfigured Ansible collections from the official Ansible website.