template 模块与 .j2 文件
将渲染后的文件部署到主机
template 模块与 .j2 文件 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。
静态文件并不够用
copy 模块会原样传送一个文件。但配置文件通常需要使用因服务器而异的端口或主机名,因此静态副本无法满足需求。🤔
使用 template 模块
template 模块会先通过 Jinja2 渲染文件,填入变量,然后将结果复制到主机。
- name: Deploy config
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf.j2 约定
模板源文件以 .j2 结尾,用于标记其为 Jinja2 文件。这是一项约定,并非硬性规则,但大家都会遵循。
src 和 dest
src 指向控制节点上的 .j2 文件,而 dest 是受管主机上的最终路径。
template:
src: app.conf.j2
dest: /etc/app/app.conf模板存放位置
默认情况下,Ansible 会在 Playbook 旁边或角色内部的 templates 目录中查找模板。无需添加路径前缀。
templates/
nginx.conf.j2
site.yml最小模板
在 .j2 文件中,纯文本保持不变,而 {{ }} 标记会被替换。这里,端口变量会变成实际的数字。
listen {{ http_port }};
server_name {{ domain }};设置文件权限
和 copy 一样,template 也接受 owner、group 和 mode,因此渲染后的文件会拥有正确的所有权。
template:
src: app.conf.j2
dest: /etc/app.conf
mode: "0644"写入前进行验证
validate 选项会在安装渲染后的文件之前运行检查命令,因此错误的配置不会被部署。
template:
src: sshd.j2
dest: /etc/ssh/sshd_config
validate: "sshd -t -f %s"模板具有幂等性
如果渲染结果与主机上已有的文件一致,template 会报告 ok,且不会进行任何更改。可以安全地反复运行。
发生更改时通知处理程序
将 template 与 notify 搭配使用,这样只有配置文件确实发生更改时,服务才会重启。这是非常理想的组合。
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: restart nginxtemplate 与 copy 的区别
当文件在所有主机上都相同时,请使用 copy;当文件的任何部分必须因主机而异时,请使用 template。
快速检查
您需要一个端口因服务器而异的配置文件。哪个模块适合?
回顾
您已经了解 template 模块:它使用 Jinja2 渲染 .j2 文件,将其放置到 dest 指定的位置,设置权限,并保持幂等性。✨
常见问题解答
「template 模块与 .j2 文件」课时是免费的吗?
是的 — 「template 模块与 .j2 文件」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。
「template 模块与 .j2 文件」这节课中我会学到什么?
将渲染后的文件部署到主机 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 DevOps Bootcamp 需要有经验吗?
无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「template 模块与 .j2 文件」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 DevOps Bootcamp 课中编写并运行代码吗?
能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- template 模块与 .j2 文件
- Jinja2 中的变量与表达式
- 模板中的循环与 if 块
- 过滤器:default、join 与 upper