Here’s a sample Ansible playbook that installs and configures Nginx on a remote server:
---
- name: Install and configure Apache web server
hosts: webserver
become: true
tasks:
- name: Update apt cache
apt:
update_cache: yes
when: ansible_os_family == 'Debian'
- name: Install Apache package
package:
name: apache2
state: present
when: ansible_os_family == 'Debian'
- name: Start Apache service
service:
name: apache2
state: started
enabled: true
when: ansible_os_family == 'Debian'
- name: Enable Apache service
service:
name: httpd
state: started
enabled: true
when: ansible_os_family == 'RedHat'
- name: Configure Apache virtual host
template:
src: templates/apache_vhost.conf.j2
dest: /etc/apache2/sites-available/mywebsite.conf
notify:
- Reload Apache
handlers:
- name: Reload Apache
service:
name: apache2
state: reloaded
In this playbook:
- The playbook targets the hosts defined under the webserver group in the Ansible inventory.
- The become: true statement enables privilege escalation to execute tasks with administrative privileges.
- The playbook first updates the apt cache (for Debian-based systems) to ensure the package lists are up to date.
- Then, it installs the Apache package using the apt module for Debian-based systems or the yum module for Red Hat-based systems.
- After that, it starts and enables the Apache service using the service module.
- Next, it uses the template module to copy a custom Apache virtual host configuration file to the target machine.
- Finally, it defines a handler that triggers the Apache service reload whenever the virtual host configuration changes.
Note: Make sure to replace templates/apache_vhost.conf.j2 with the actual path to your Apache virtual host configuration template file.
You can save this playbook to a file, such as install_apache.yaml, and run it using the ansible-playbook command:
ansible-playbook -i inventory.ini install_apache.yaml
Make sure to replace inventory.ini with the path to your Ansible inventory file containing the target hosts.