模板允许您在节点上使用基于 Jinja2 templating系统的预先定义模型创建新文件。 Ansible 模板通常被保存为 .tpl
文件,并支持使用变量、循环和条件表达式。
模板通常用于配置基于可在播放簿本身设置的变量值的服务,包括变量文件,或通过 事实获取的服务。
要用一个实用的例子来尝试这个功能,创建一个新的目录,以便在你的ansible-practice
目录中存储非播放书文件:
1mkdir ~/ansible-practice/files
接下来,为 HTML 定位页创建一个新的模板文件. 之后,我们将设置一个播放簿,将配置您的远程节点以使用 Nginx 服务定位页面:
1nano ~/ansible-practice/files/landing-page.html.j2
将以下内容添加到 template 文件中:
1[label ~/ansible-practice/files/landing-page.html.j2]
2<!doctype html>
3<html lang="en">
4<head>
5 <meta charset="utf-8">
6 <title>{{ page_title }}</title>
7 <meta name="description" content="Created with Ansible">
8</head>
9<body>
10 <h1>{{ page_title }}</h1>
11 <p>{{ page_description }}</p>
12</body>
13</html>
保存并关闭文件,当你完成。
此模板使用两种变量,每次在播放簿中应用该模板时必须提供: page_title
和 page_description
。
下图设置了所需的变量,安装了 Nginx,然后应用了指定的模板,以取代位于 `/var/www/html/index.nginx-debian.html 的现有默认 Nginx 定位页面。
在您的ansible-practice
目录中创建一个名为playbook-11.yml
的新文件:
1nano ~/ansible-practice/playbook-11.yml
将以下内容添加到新播放簿文件中:
1[label ~/ansible-practice/playbook-11.yml]
2---
3- hosts: all
4 become: yes
5 vars:
6 page_title: My Landing Page
7 page_description: This is my landing page description.
8 tasks:
9 - name: Install Nginx
10 apt:
11 name: nginx
12 state: latest
13
14 - name: Apply Page Template
15 template:
16 src: files/landing-page.html.j2
17 dest: /var/www/html/index.nginx-debian.html
18
19 - name: Allow all access to tcp port 80
20 ufw:
21 rule: allow
22 port: '80'
23 proto: tcp
请记住,如果运行此播放簿,请提供-K
选项,因为它需要sudo
权限:
1ansible-playbook -i inventory playbook-11.yml -u sammy -K
1[secondary_label Output]
2BECOME password:
3
4PLAY [all] **********************************************************************************************
5
6TASK [Gathering Facts] **********************************************************************************
7ok: [203.0.113.10]
8
9TASK [Install Nginx] ************************************************************************************
10changed: [203.0.113.10]
11
12TASK [Apply Page Template] ******************************************************************************
13changed: [203.0.113.10]
14
15TASK [Allow all access to tcp port 80] ******************************************************************
16changed: [203.0.113.10]
17
18PLAY RECAP **********************************************************************************************
19203.0.113.10 : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
当播放结束后,您可以从您的浏览器访问网络服务器的公共IP地址,您将看到这样的页面:
这意味着您的播放簿按照预期工作,默认的 Nginx 页面被您创建的模板取代了。