[toc] ### Introduction :::success These problem statements cover a range of scenarios that are commonly encountered in infrastructure automation. They will help you practice various Ansible concepts, such as package management, configuration management, service management, and system administration tasks. Feel free to adapt and expand upon these problem statements to suit your learning goals and requirements. Please note that the provided playbooks are just samples and may need modifications based on your specific requirements, such as variables, file paths, and service names. Adjust them accordingly before running them in your environment. ::: ### Problem Statement 1: Configure a Web Server #### Description :::info Write an Ansible playbook to provision and configure a web server (e.g., Apache or Nginx) on multiple target hosts. Ensure that the web server is installed, the necessary configuration files are set up, and the service is running. ::: #### Sample Playbook ````yaml= --- - name: Provision and configure web server hosts: web_servers become: true tasks: - name: Install Apache/Nginx package: name: "{{ web_server_package }}" state: present - name: Copy web server configuration file template: src: "{{ web_server_config_template }}" dest: "{{ web_server_config_path }}" - name: Start web server service service: name: "{{ web_server_service }}" state: started enabled: true ```` ### Problem Statement 2: Deploy an Application #### Description :::info Develop an Ansible playbook to deploy a sample application (e.g., a simple web application or a backend service) on a set of target hosts. The playbook should handle installing dependencies, copying application code, configuring any required settings, and starting the application. ::: #### Sample Playbook ````yaml= --- - name: Deploy application hosts: app_servers become: true tasks: - name: Install application dependencies package: name: "{{ app_dependencies }}" state: present - name: Copy application code copy: src: "{{ app_code_dir }}" dest: "{{ app_deploy_dir }}" - name: Configure application settings template: src: "{{ app_config_template }}" dest: "{{ app_config_path }}" - name: Start application service service: name: "{{ app_service }}" state: started enabled: true ```` ### Problem Statement 3: Manage User Accounts #### Description :::info Create an Ansible playbook that automates the creation and management of user accounts on multiple servers. The playbook should be able to create new user accounts, set passwords, manage SSH keys, and handle the granting or revocation of user access. ::: #### Sample Playbook ````yaml= --- - name: Manage user accounts hosts: all become: true vars: users: - username: user1 password: "{{ 'pass1' | password_hash('sha512') }}" ssh_key: "{{ lookup('file', '~/.ssh/user1.pub') }}" state: present - username: user2 password: "{{ 'pass2' | password_hash('sha512') }}" ssh_key: "{{ lookup('file', '~/.ssh/user2.pub') }}" state: present tasks: - name: Create or manage user accounts user: name: "{{ item.username }}" password: "{{ item.password }}" ssh_key: "{{ item.ssh_key }}" state: "{{ item.state }}" loop: "{{ users }}" ```` ### Problem Statement 4: Configure Firewall Rules #### Description :::info Write an Ansible playbook to manage firewall rules on target hosts. The playbook should enable or disable specific ports, define custom rules, and ensure that the firewall configurations are consistent across all servers. ::: #### Sample Playbook ````yaml= --- - name: Manage firewall rules hosts: all become: true tasks: - name: Enable required ports firewalld: port: "{{ item }}" state: enabled permanent: true loop: - 80 - 443 - 22 - name: Add custom firewall rule firewalld: rich_rule: "rule family='ipv4' source address='192.168.0.0/24' accept" state: enabled permanent: true ```` ### Problem Statement 5: Install and Configure Monitoring Agent #### Description :::info Develop an Ansible playbook to automate the installation and configuration of a monitoring agent (e.g., Prometheus, Nagios, or Datadog) on multiple servers. The playbook should install the monitoring agent, configure appropriate monitoring targets, and ensure that the agent is running correctly. ::: #### Sample Playbook ````yaml= --- - name: Install and configure monitoring agent hosts: monitoring_servers become: true tasks: - name: Install monitoring agent package: name: "{{ monitoring_agent_package }}" state: present - name: Copy monitoring agent configuration file template: src: "{{ monitoring_agent_config_template }}" dest: "{{ monitoring_agent_config_path }}" - name: Start monitoring agent service service: name: "{{ monitoring_agent_service }}" state: started enabled: true ```` ### Problem Statement 6: Manage Database Servers #### Description :::info Develop an Ansible playbook to automate the provisioning and management of database servers (e.g., MySQL or PostgreSQL) on multiple hosts. The playbook should handle the installation of the database server, configure necessary settings, create databases, and manage user privileges. ::: #### Sample Playbook ````yaml= --- - name: Manage database servers hosts: database_servers become: true tasks: - name: Install Database Server package: name: "{{ database_server_package }}" state: present - name: Copy database configuration file template: src: "{{ database_config_template }}" dest: "{{ database_config_path }}" - name: Start database service service: name: "{{ database_service }}" state: started enabled: true - name: Create databases mysql_db: name: "{{ item }}" state: present loop: - db1 - db2 - name: Manage user privileges mysql_user: name: "{{ item.username }}" password: "{{ item.password }}" priv: "{{ item.privileges }}" state: present loop: - { username: user1, password: pass1, privileges: "*.*:ALL" } - { username: user2, password: pass2, privileges: "db1.*:ALL" } ```` ### Problem Statement 7: Configure Load Balancer #### Description :::info Write an Ansible playbook to provision and configure a load balancer (e.g., Nginx or HAProxy) for distributing incoming traffic across multiple web servers. Ensure that the load balancer software is installed, the necessary configuration files are set up, and the service is running. ::: #### Sample Solution Playbook ````yaml= --- - name: Provision and configure load balancer hosts: load_balancer become: true tasks: - name: Install Load Balancer software package: name: "{{ load_balancer_package }}" state: present - name: Copy load balancer configuration file template: src: "{{ load_balancer_config_template }}" dest: "{{ load_balancer_config_path }}" - name: Start load balancer service service: name: "{{ load_balancer_service }}" state: started enabled: true ````