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

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.

主站蜘蛛池模板: 全州县| 旬邑县| 富顺县| 德安县| 惠来县| 昌邑市| 龙州县| 墨竹工卡县| 万年县| 晋中市| 日土县| 龙山县| 慈利县| 乌拉特中旗| 武安市| 柳河县| 乐亭县| 新竹县| 荥经县| 泌阳县| 江华| 五莲县| 轮台县| 当阳市| 治多县| 灯塔市| 河源市| 额济纳旗| 峨眉山市| 连山| 双牌县| 阳原县| 武平县| 华容县| 丹寨县| 南宫市| 西乌| 乌恰县| 山丹县| 东乌珠穆沁旗| 桐梓县|