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

217 阅读2分钟

模板允许你使用基于Jinja2模板系统的预定义模型在节点上创建新文件。Ansible模板通常被保存为.tpl ,支持使用变量、循环和条件表达式。

模板通常用于根据变量值来配置服务,这些变量值可以在playbook本身上设置,也可以在包含的变量文件中设置,或者通过事实获得。这使你能够创建更多的设置,根据动态信息来调整行为。

为了用一个实际的例子来尝试这个功能,在你的ansible-practice 目录中创建一个新的目录来存放非游戏手册文件。

mkdir ~/ansible-practice/files

接下来,为一个HTML登陆页面创建一个新的模板文件。稍后,我们将设置一个playbook,它将配置你的远程节点,用Nginx提供登陆页面。

nano ~/ansible-practice/files/landing-page.html.j2

在模板文件中添加以下内容。

~/ansible-practice/files/landing-page.html.j2

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>{{ page_title }}</title>
  <meta name="description" content="Created with Ansible">
</head>
<body>
    <h1>{{ page_title }}</h1>
    <p>{{ page_description }}</p>
</body>
</html>

完成后保存并关闭该文件。

这个模板使用了两个变量,只要在游戏手册中应用这个模板,就必须提供这两个变量:page_titlepage_description

下面的游戏手册设置了所需的变量,安装了Nginx,然后应用指定的模板来替换现有的、默认的Nginx登陆页,地址是/var/www/html/index.nginx-debian.html 。最后一项任务是使用ufw 模块来启用tcp访问端口80 ,如果你按照我们的初始服务器设置指南中的建议启用了防火墙的话。

在你的ansible-practice 目录中创建一个名为playbook-11.yml 的新文件。

nano ~/ansible-practice/playbook-11.yml

在新的playbook文件中添加以下内容。

~/ansible-practice/playbook-11.yml

---
- hosts: all
  become: yes
  vars:
    page_title: My Landing Page
    page_description: This is my landing page description.
  tasks:
    - name: Install Nginx
      apt:
        name: nginx
        state: latest

    - name: Apply Page Template
      template:
        src: files/landing-page.html.j2
        dest: /var/www/html/index.nginx-debian.html

    - name: Allow all access to tcp port 80
      ufw:
        rule: allow
        port: '80'
        proto: tcp    

如果你运行这个playbook,记得提供-K 选项,因为它需要sudo 的权限。

ansible-playbook -i inventory playbook-11.yml -u sammy -K
OutputBECOME password: 

PLAY [all] **********************************************************************************************

TASK [Gathering Facts] **********************************************************************************
ok: [203.0.113.10]

TASK [Install Nginx] ************************************************************************************
changed: [203.0.113.10]

TASK [Apply Page Template] ******************************************************************************
changed: [203.0.113.10]

TASK [Allow all access to tcp port 80] ******************************************************************
changed: [203.0.113.10]

PLAY RECAP **********************************************************************************************
203.0.113.10                : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

当播放完成后,你可以从浏览器访问网络服务器的公共 IP 地址。你会看到一个类似这样的页面。

Screenshot showing custom landing page

这意味着你的游戏手册按预期工作,默认的Nginx页面被你创建的模板所取代。