官术网_书友最值得收藏!

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:

Creating a site-wide playbook, nesting, and using include statements

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.

主站蜘蛛池模板: 威信县| 崇明县| 石渠县| 黎川县| 兴海县| 砀山县| 清镇市| 甘孜| 长治市| 鄱阳县| 郧西县| 志丹县| 尉犁县| 静海县| 洛浦县| 农安县| 高唐县| 潮州市| 德阳市| 恩平市| 宜宾县| 高唐县| 齐河县| 新沂市| 宁晋县| 青海省| 工布江达县| 枣强县| 延川县| 乐山市| 临武县| 民县| 阿瓦提县| 三门县| 当雄县| 句容市| 赫章县| 阿荣旗| 鄂州市| 阳曲县| 东山县|