In the world of infrastructure as code, Ansible is a popular choice due to its simplicity and human-readable language. However, as with any other coding or scripting language, Ansible playbooks can get messy without proper organization and structure. In this article, we’ll share three top tips for writing more organized Ansible playbooks.
1. Use Descriptive Naming Conventions
When naming your playbooks, tasks, variables, and other components, it’s essential to choose names that are descriptive and reflect the purpose of the component.
For example, a task that installs NGINX on a server could be named “Install NGINX”. This makes it easier for others (or even you, when revisiting your playbook after some time) to understand what each part of your playbook does.
Likewise, for variable names, prefer descriptive names like “database_username” instead of non-descriptive names like “db_user”.
2. Leverage Ansible Roles
Ansible roles allow you to bundle automation content and share it across playbooks, which can greatly improve organization. Each role represents a specific aspect of a system, like a service or application, and includes all the necessary tasks, variables, handlers, and other components to manage it.
By using roles, you can split a large playbook into several smaller, more manageable pieces. Each role can be developed, tested, and reused independently, improving maintainability and reusability.
3. Use Comments and Documentation
As with any code, comments are crucial in Ansible playbooks. They allow you to describe the purpose of tasks, the meaning of variables, and the logic behind decisions.
In addition to comments within the playbook, consider using Ansible’s built-in documentation feature. The
ansible-doc command allows you to access documentation for Ansible modules, plugins, and roles, providing valuable context and usage examples.
Bonus: The Transition from Roles to Collections
Ansible roles have served us well, but as we continue to scale and share our automation content, we’ve hit some limits. That’s where Ansible collections come in.
Collections are a new distribution format for Ansible content that can include playbooks, roles, modules, and plugins. They allow you to package and distribute playbooks and roles in a single, versionable artifact. You can also include custom modules and plugins in a collection, something not possible with roles.
The ability to include custom modules and plugins with your content, versioning, and distribution capabilities make collections a powerful tool for organizing and sharing your Ansible content.
Please note, as of Ansible 2.9, roles are not being deprecated per se. They will continue to exist and be useful. However, the use of collections is encouraged for more complex cases where roles might not be enough.
In conclusion, writing organized Ansible playbooks can significantly improve the maintainability and usability of your automation content. Leveraging the power of descriptive naming, roles, thorough documentation, and the emerging collections will bring your Ansible practices to the next level.