该系列的一部分:
如何编写 Ansible Playbooks
Ansible 是一种现代配置管理工具,不需要在远程节点上使用代理软件,仅使用 SSH 和 Python 在托管服务器上进行通信和执行命令。本系列将带您了解可用于编写服务器自动化剧本的主要 Ansible 功能。最后,我们将看到一个实际示例,说明如何创建剧本以自动设置远程 Nginx Web 服务器并向其部署静态 HTML 网站。
模板允许您使用基于Jinja2 模板系统的预定义模型在节点上创建新文件。Ansible 模板通常保存为.tpl
文件,并支持使用变量、循环和条件表达式。
模板通常用于基于变量值配置服务,这些变量值可以在 playbook 本身、包含的变量文件中设置或通过fact 获取。这使您能够创建更通用的设置,根据动态信息调整行为。
要通过实际示例试用此功能,请创建一个新目录以在您的ansible-practice
目录中保存非剧本文件:
- mkdir ~/ansible-practice/files
接下来,为 HTML 登录页面创建一个新模板文件。稍后,我们将设置一个剧本,它将配置您的远程节点以使用 Nginx 提供登陆页面:
- nano ~/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_title
和page_description
.
以下 playbook 设置所需的变量,安装 Nginx,然后应用指定的模板来替换位于 的现有默认 Nginx 登录页面/var/www/html/index.nginx-debian.html
。最后一个任务使用该ufw
模块在端口上启用 tcp 访问80
,以防您按照我们的初始服务器设置指南中的建议启用防火墙。
playbook-11.yml
在您的ansible-practice
目录中创建一个名为的新文件:
- nano ~/ansible-practice/playbook-11.yml
将以下内容添加到新的 playbook 文件中:
---
- 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
-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
播放完成后,您可以从浏览器访问 Web 服务器的公共 IP 地址。你会看到一个这样的页面:
这意味着您的剧本按预期工作,并且默认的 Nginx 页面已被您创建的模板替换。