Ansible Tags: Run Specific Tasks Selectively (Complete Guide)
By Luca Berton · Published 2024-01-01 · Category: installation
Complete guide to Ansible tags. Run specific tasks with --tags, skip tasks, tag roles and includes, and organize playbooks with tagging strategies.
Ansible tags are a feature that allows users to selectively control which tasks in a playbook are executed. They are an essential tool for optimizing automation workflows, especially in complex playbooks. This article explains what Ansible tags are, their usage, and best practices for implementing them.
What Are Ansible Tags?
Tags in Ansible are labels assigned to tasks or plays within a playbook. They enable users to execute specific parts of a playbook, skipping others based on the tags provided during execution.
Key Features: • Selective Execution: Run only tasks with specified tags. • Improved Efficiency: Save time by skipping unnecessary tasks. • Flexibility: Apply multiple tags to a single task or play.
How Do Ansible Tags Work?
Tags are added to tasks, roles, or entire plays using the tags keyword. During playbook execution, you can specify which tags to include or skip using command-line options.
Example: Using Tags in a Playbook
In this example: • The install tag applies to the Nginx installation task. • The start tag applies to the task starting the Nginx service. • Both tasks share the web tag.
Running Tagged Tasks
To execute only tasks with a specific tag, use the --tags option:
Skipping Tags
To skip tasks with specific tags, use the --skip-tags option:
Tagging Roles and Plays
Tags can also be applied to roles and entire plays for broader control.
Example: Tagging Roles
Example: Tagging Plays
Use Cases for Ansible Tags Selective Testing: Run specific tasks during testing without executing the entire playbook. Environment-Specific Tasks: Use tags to differentiate tasks for production, staging, or development environments. Debugging: Isolate tasks with issues for quicker debugging. Partial Updates: Apply updates to only certain parts of your infrastructure.
Best Practices for Using Tags Use Descriptive Tags: Name tags based on their purpose (e.g., install, deploy, restart). Organize Tags: Group related tasks under shared tags for better management. Avoid Overuse: Limit the number of tags to maintain clarity and simplicity. Document Tags: Include a list of available tags in your playbook’s documentation or comments. Test Tagged Tasks: Regularly test tasks under each tag to ensure reliability.
Limitations of Tags • Dependency Issues: Tasks that depend on others may fail if skipped. • Complexity: Overusing tags can complicate playbooks and execution workflows.
Conclusion
Ansible tags provide a powerful way to control playbook execution, enabling selective task runs and improving efficiency. By implementing tags strategically and following best practices, you can streamline your automation workflows and save valuable time.
Basic Tags
Run or Skip Tags
Multiple Tags Per Task
Tag Roles
Tag Entire Plays
Special Tags
| Tag | Description | |-----|-------------| | always | Always runs (unless --skip-tags always) | | never | Never runs (unless --tags never or explicit) | | tagged | All tagged tasks | | untagged | All untagged tasks | | all | Everything (default) |
Tag Inheritance
Tags on blocks, roles, and plays are inherited by child tasks:
Common Tag Patterns
FAQ
Do handlers respect tags?
Handlers run when notified, regardless of tags. A tagged task that changes will trigger its handler even if the handler isn't tagged.
Can I use tags in roles?
Yes — tag the role in the playbook, or tag individual tasks within the role. Role-level tags apply to all tasks in that role.
Should I tag every task?
No — tag logical groups. Over-tagging makes playbooks harder to maintain. Use tags for phases (install, configure, deploy) or components (web, db, monitoring).
Basic Tags
Run Specific Tags
Tag Roles
Tag Includes
Multiple Tags Per Task
Special Tags
Tag Inheritance
Tagging Strategy
Play-Level Tags
FAQ
Do tags affect handlers?
Handlers run if notified, regardless of tags. However, if the task that notifies is skipped by tags, the handler won't be triggered.
import_tasks vs include_tasks with tags?
import_tasks: tags apply to individual tasks inside. include_tasks: tags apply to the include statement itself, but you can also pass tags to included tasks.
Can I combine --tags and --skip-tags?
Yes: --tags deploy --skip-tags dangerous runs all 'deploy' tasks except those also tagged 'dangerous'.
Should I tag every task?
No — tag strategically. Common patterns: tag by component (nginx, postgres), by phase (install, configure, deploy), or by action (restart, backup).
Related Articles • Ansible Nginx Guide • Ansible Roles Guide
Category: installation