如何在 Ansible Playbook 中创建和使用模板

模板允许您在节点上使用基于 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_titlepage_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地址,您将看到这样的页面:

Screenshot showing custom landing page

这意味着您的播放簿按照预期工作,默认的 Nginx 页面被您创建的模板取代了。

Published At
Categories with 技术
comments powered by Disqus