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

  • 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:

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.

主站蜘蛛池模板: 芜湖市| 天峨县| 竹山县| 玉溪市| 襄汾县| 邵阳市| 那坡县| 广东省| 日喀则市| 沙河市| 阳泉市| 乌鲁木齐县| 武强县| 西乌| 南郑县| 图木舒克市| 白沙| 新巴尔虎左旗| 益阳市| 宿迁市| 崇礼县| 崇州市| 余姚市| 岳普湖县| 永德县| 兰考县| 通化县| 册亨县| 白城市| 自贡市| 鄯善县| 雅江县| 合肥市| 田阳县| 威远县| 辽源市| 永城市| 始兴县| 洞口县| 诸城市| 绥江县|