Skip to content

Latest commit

 

History

History
142 lines (108 loc) · 2.92 KB

File metadata and controls

142 lines (108 loc) · 2.92 KB

Ansible Guide

This directory contains configuration management and automation using Ansible.

Structure

ansible/
├── ansible.cfg         # Ansible configuration
├── inventory/          # Inventory files
│   └── dev            # Development inventory
├── playbooks/         # Ansible playbooks
│   └── setup.yml      # Main setup playbook
└── roles/             # Ansible roles
    └── common/        # Common server setup

Getting Started

  1. Install Ansible:

    pip install ansible ansible-lint
  2. Configure inventory: Edit inventory/dev with your server details:

    [webservers]
    web1 ansible_host=10.0.1.10 ansible_user=ubuntu
  3. Test connectivity:

    cd ansible
    ansible all -i inventory/dev -m ping
  4. Run playbooks:

    ansible-playbook -i inventory/dev playbooks/setup.yml

Inventory Management

Inventory files define your infrastructure:

[webservers]
web1 ansible_host=10.0.1.10
web2 ansible_host=10.0.1.11

[databases]
db1 ansible_host=10.0.2.10

[production:children]
webservers
databases

Playbook Structure

Playbooks define what tasks to run on which hosts:

---
- name: Setup web servers
  hosts: webservers
  become: yes
  roles:
    - common
    - nginx

Role Development

Roles organize tasks into reusable components:

roles/
└── common/
    ├── tasks/main.yml      # Main tasks
    ├── handlers/main.yml   # Event handlers
    ├── vars/main.yml       # Variables
    ├── defaults/main.yml   # Default variables
    ├── meta/main.yml       # Role metadata
    └── templates/          # Jinja2 templates

Best Practices

  • Use roles for reusable components
  • Encrypt sensitive data with ansible-vault
  • Use handlers for service restarts
  • Test playbooks with --check mode
  • Use meaningful task names
  • Group related tasks
  • Use templates for configuration files

Common Commands

# Check syntax
ansible-playbook playbooks/setup.yml --syntax-check

# Dry run (check mode)
ansible-playbook -i inventory/dev playbooks/setup.yml --check

# Run with verbose output
ansible-playbook -i inventory/dev playbooks/setup.yml -v

# Run specific tags
ansible-playbook -i inventory/dev playbooks/setup.yml --tags "nginx"

# Limit to specific hosts
ansible-playbook -i inventory/dev playbooks/setup.yml --limit webservers

# Encrypt sensitive files
ansible-vault encrypt group_vars/all/secrets.yml

# Run with vault password
ansible-playbook -i inventory/dev playbooks/setup.yml --ask-vault-pass

Variables and Templating

Use variables to make playbooks flexible:

# In playbook
- name: Install package
  package:
    name: "{{ package_name }}"
    state: present

# In inventory
[webservers:vars]
package_name=nginx

# In template
server_name {{ ansible_hostname }};
listen {{ nginx_port | default(80) }};