๏ธ Ansible
If you like this project, consider supporting me on Buy Me a Coffee โ๏ธ
tags:
- dev-tools
- devops
-
sysadmin
Ansible Cheatsheet
Description: Ansible is an open-source agentless automation tool for software provisioning, configuration management, and application deployment. It uses SSH and YAML-based playbooks โ no agent installation required on target hosts. Created by Michael DeHaan (2012), now maintained by Red Hat. Ansible โ ััะพ open-source ะฑะตะทะฐะณะตะฝัะฝัะน ะธะฝััััะผะตะฝั ะฐะฒัะพะผะฐัะธะทะฐัะธะธ ะดะปั ะฟัะพะฒะธะถะธะฝะธะฝะณะฐ ะะ, ัะฟัะฐะฒะปะตะฝะธั ะบะพะฝัะธะณััะฐัะธะตะน ะธ ะดะตะฟะปะพั. ะัะฟะพะปัะทัะตั SSH ะธ YAML-ะฟะปะตะนะฑัะบะธ โ ะฝะต ััะตะฑัะตั ัััะฐะฝะพะฒะบะธ ะฐะณะตะฝัะพะฒ ะฝะฐ ัะตะปะตะฒัั ั ะพััะฐั .
Status: Actively maintained by Red Hat. Alternatives: SaltStack (agent-based, faster at scale), Puppet (agent-based, declarative), Chef (Ruby-based). Ansible Semaphore provides a modern web UI. Role: DevOps / Sysadmin Version: 2.9+
๐ Table of Contents
- 1. Ad-Hoc Commands
- 2. Playbooks
- 3. Ansible Galaxy
- 4. Ansible Vault
- 5. Configuration
- Sysadmin Basics
- Logrotate Configuration
- Official Documentation
1. Ad-Hoc Commands
Basic Connectivity
# Ping all hosts
ansible all -m ping -i <INVENTORY_FILE>
Module Execution
# Shell command
ansible all -m shell -a "uptime" -i hosts
# Copy file
ansible web -m copy -a "src=/etc/hosts dest=/tmp/hosts"
# Install package (yum)
ansible db -m yum -a "name=nc state=present" --become
2. Playbooks
Running Playbooks
# Run
ansible-playbook -i inventory site.yml
# Check mode (Dry Run)
ansible-playbook -i inventory site.yml --check
# Limit to specific hosts
ansible-playbook -i inventory site.yml --limit web01
# Debug (Verbose)
ansible-playbook site.yml -vvv
Example Playbook
---
- name: Install Nginx
hosts: webservers
become: yes
tasks:
- name: Ensure nginx is installed
yum:
name: nginx
state: present
- name: Start nginx service
service:
name: nginx
state: started
enabled: yes
3. Ansible Galaxy
# Install Role
ansible-galaxy install geerlingguy.nginx
# Init new role structure
ansible-galaxy init <ROLE_NAME>
4. Ansible Vault
# Encrypt file
ansible-vault encrypt secrets.yml
# Edit encrypted file
ansible-vault edit secrets.yml
# Decrypt file
ansible-vault decrypt secrets.yml
# Run playbook with vault
ansible-playbook site.yml --ask-vault-pass
# Use vault password file
ansible-playbook site.yml --vault-password-file ~/.vault_pass
[!WARNING] Never commit vault passwords to version control. Use
--vault-password-filepointing to a file excluded in.gitignore. ะะธะบะพะณะดะฐ ะฝะต ะบะพะผะผะธัััะต ะฟะฐัะพะปะธ vault ะฒ ัะธััะตะผั ะบะพะฝััะพะปั ะฒะตััะธะน.
5. Configuration
/etc/ansible/ansible.cfg or ./ansible.cfg
[defaults]
inventory = ./hosts
remote_user = <USER>
host_key_checking = False
private_key_file = ~/.ssh/id_rsa
Sysadmin Basics
Default Paths
| Path | Description (EN / RU) |
|---|---|
/etc/ansible/ansible.cfg |
System-wide config / ะะปะพะฑะฐะปัะฝะฐั ะบะพะฝัะธะณััะฐัะธั |
~/.ansible.cfg |
User config / ะะพะปัะทะพะฒะฐัะตะปััะบะฐั ะบะพะฝัะธะณััะฐัะธั |
./ansible.cfg |
Project config (highest priority) / ะัะพะตะบัะฝะฐั ะบะพะฝัะธะณััะฐัะธั (ะฝะฐะธะฒัััะธะน ะฟัะธะพัะธัะตั) |
/etc/ansible/hosts |
Default inventory / ะะฝะฒะตะฝัะฐัั ะฟะพ ัะผะพะปัะฐะฝะธั |
~/.ansible/ |
Cache, plugins, roles / ะัั, ะฟะปะฐะณะธะฝั, ัะพะปะธ |
Default Ports
| Port | Protocol | Description (EN / RU) |
|---|---|---|
| 22 | SSH | Default connection method / ะะตัะพะด ะฟะพะดะบะปััะตะฝะธั ะฟะพ ัะผะพะปัะฐะฝะธั |
| 5986 | WinRM (HTTPS) | Windows hosts / ะฅะพััั Windows |
Useful Diagnostic Commands
ansible --version # Show version / ะะพะบะฐะทะฐัั ะฒะตััะธั
ansible all -m setup -i hosts # Gather facts / ะกะพะฑัะฐัั ัะฐะบัั
ansible all -m ping -i hosts # Connectivity check / ะัะพะฒะตัะบะฐ ัะฒัะทะธ
ansible-config dump --only-changed # Show changed config / ะะพะบะฐะทะฐัั ะธะทะผะตะฝัะฝะฝัั ะบะพะฝัะธะณััะฐัะธั
Logrotate Configuration
/etc/logrotate.d/ansible
/var/log/ansible/*.log {
weekly
rotate 4
compress
delaycompress
missingok
notifempty
create 640 root root
}
[!NOTE] Ansible does not log by default. Enable logging by setting
log_pathinansible.cfg:log_path = /var/log/ansible/ansible.logAnsible ะฝะต ะปะพะณะธััะตั ะฟะพ ัะผะพะปัะฐะฝะธั. ะะบะปััะธัะต ะปะพะณะธัะพะฒะฐะฝะธะต ัะตัะตะทlog_pathะฒansible.cfg.
Official Documentation
- Ansible: https://docs.ansible.com/
- Ansible Galaxy (Roles): https://galaxy.ansible.com/
- Ansible Vault: https://docs.ansible.com/ansible/latest/vault_guide/
- Ansible Semaphore (Web UI): https://semaphoreui.com/