如何在AnsiblePlaybook中创建和使用模板
模板允许您使用基于 Jinja2 模板 系统的预定义模型在节点上创建新文件。 Ansible 模板通常保存为 .tpl
文件,并支持使用变量、循环和条件表达式。
模板通常用于基于变量值配置服务,这些变量值可以在剧本本身、包含的变量文件中设置,或通过 facts 获得。 这使您能够创建更通用的设置,以根据动态信息调整行为。
要通过实际示例尝试此功能,请在 ansible-practice
目录中创建一个新目录来保存非剧本文件:
mkdir ~/ansible-practice/files
接下来,为 HTML 登录页面创建一个新模板文件。 稍后,我们将设置一个剧本,它将配置您的远程节点以使用 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>
完成后保存并关闭文件。
此模板使用两个变量,只要在 playbook 中应用模板,就必须提供这些变量:page_title
和 page_description
。
以下 playbook 设置所需的变量,安装 Nginx,然后应用指定的模板来替换位于 /var/www/html/index.nginx-debian.html
的现有默认 Nginx 登录页面。 最后一个任务使用 ufw
模块在端口 80
上启用 tcp 访问,以防您按照我们初始服务器设置指南中的建议启用防火墙。
在 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
播放结束后,您可以从浏览器访问 Web 服务器的公共 IP 地址。 你会看到这样的页面:
这意味着您的剧本按预期工作,并且默认的 Nginx 页面已被您创建的模板替换。