- Ansible Playbook Essentials
- Gourav Shah
- 431字
- 2021-07-16 20:47:49
Creating a site-wide playbook, nesting, and using include statements
As a best practice, we will create a top-level file, which will contain the blueprint of our complete infrastructure. Technically, we can include everything that we need to configure inside just one file. However, that would have two problems:
- It would quickly get out of control as we start adding tasks, variables, and handlers to this single file. It would be a nightmare to maintain such code.
- It would also be difficult to reuse and share such code. One of the advantages of using a tool such as Ansible is its ability to separate data from code. Data is organization-specific, and code is generic. This generic code can then be shared with others. However, if you write everything in a single file, it would be impossible to do so.
To avoid this problem, we will start organizing our code in a modular fashion, as follows:
- We will create roles for each of the applications that we need to configure. In this case, it is Nginx
- Our web server may need to install more than one application in addition to Nginx, for example, PHP and OpenSSL. To encapsulate all of these, we will create a playbook named
www.yml
. - The preceding playbook that we created will map hosts with the Nginx role. We may add more roles to it later.
- We will add this playbook to the top-level playbook, that is,
site.yml
The following diagram depicts the preceding steps in a very simple manner:

Here is our site.yml
file:
--- # site.yml : This is a sitewide playbook - include: www.yml
The preceding include
directive assists us with modularizing the code. Instead of writing it all in one file, we split the logic and import what is required. In this case, we will include another playbook, which is called a nested playbook.
The following are some guidelines on what can be included and how:
- The
include
directive can be used to include tasks, handlers, and even other playbooks - If you include a playbook inside another like we did in the
site.yml
file, you cannot substitute the variables - The
include
keyword can be used in combination with regular task/handler specifications - It's possible to pass parameters with include statements. This is called as parameterized include
Tip
Roles and auto-includes
Roles have implicit rules to auto include files. So long as you follow the directory layout conventions, you are assured that all your tasks, handlers, and the rest of the files are included automatically. Hence, it's important to create the subdirectories with the exact names as specified by Ansible.
- Learning C++ Functional Programming
- JMeter 性能測試實戰(第2版)
- Banana Pi Cookbook
- Python忍者秘籍
- 大話Java:程序設計從入門到精通
- Arduino機器人系統設計及開發
- C語言程序設計教程
- SQL Server 2014 Development Essentials
- Python 3.6從入門到精通(視頻教學版)
- Daniel Arbuckle's Mastering Python
- Developing RESTful Web Services with Jersey 2.0
- 計算機信息技術實踐教程
- C++ Game Development Cookbook
- Java編程動手學
- WordPress 3.7 Complete(Third Edition)