First Ansible Playbook!

Setting Up a Web Server with Ansible

Ansible, the simple, yet powerful IT automation tool, allows users to set up and manage infrastructure seamlessly. In today's post, we will explore a simple Ansible playbook that sets up a web server on RedHat-based systems and presents the system's hostname on a web page.

The Playbook in Focus: run_httpd.yml

---
- name: Run a web server
  hosts: redhat
  become: yes
  tasks:
  - name: Check if apache is installed
    yum:
      name: httpd
      state: present

  - name: Start HTTPD and enable it
    service:
      name: httpd
      state: started
      enabled: yes

  - name: Set content of index.html with hostname
    copy:
      content: |
          <html>
          <head><title>Welcome to {{ ansible_hostname }}</title></head>
          <body>
          <h1>This server's hostname is: {{ ansible_hostname }}, Using ANSIBLE PLAYBOOK!</h1>
          </body>
          </html>
      dest: /var/www/html/index.html
    notify: Restart HTTPD
  
  handlers:
    - name: Restart HTTPD
      service:
        name: httpd
        state: restarted

Breaking Down the Playbook

1. Overview: The playbook is named "Run a web server". It targets hosts under the group redhat and escalates privileges using become: yes, ensuring that it has the necessary permissions for the operations.

2. Checking and Installing Apache: The first task uses the yum module to ensure the Apache HTTP Server (httpd) package is installed. If it's not, Ansible will install it.

- name: Check if apache is installed
  yum:
    name: httpd
    state: present

3. Starting and Enabling HTTPD: Next, the playbook ensures that the httpd service is started and enabled to boot up at system startup.

- name: Start HTTPD and enable it
  service:
    name: httpd
    state: started
    enabled: yes

4. Setting Up the Web Page: The playbook then creates an index.html file inside the /var/www/html directory, which is the default document root for Apache in RedHat-based systems. The web page will display the hostname of the server.

- name: Set content of index.html with hostname
  ...
  <h1>This server's hostname is: {{ ansible_hostname }}, Using ANSIBLE PLAYBOOK!</h1>

5. Handlers and Restarting HTTPD: Lastly, if the content of index.html changes, the playbook will restart the httpd service to reflect the changes. This is done using Ansible's handlers, which are tasks that only run when notified.

handlers:
  - name: Restart HTTPD
    service:
      name: httpd
      state: restarted

Conclusion

This Ansible playbook provides an illustrative example of how to set up a basic web server and display dynamic content. By leveraging Ansible's idempotent nature, this playbook ensures that your web server is consistently set up across multiple runs.

Whether you're new to Ansible or an experienced user, this playbook serves as a reminder of the simplicity and efficiency that Ansible brings to infrastructure management.

Last updated