首页/系统与基础设施/自动化运维速查/Jinja2 过滤器与查找插件用法
Ansible 核心70 条

Jinja2 过滤器与查找插件用法

过滤器对已取到的值做纯计算(提取、筛选、拼接、序列化),查找插件负责取数据且默认在控制端执行并有 IO;多值场景用返回列表的查询形式,敏感查找结果要避免进入日志。

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​​​​‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌‌​‌‌​‌​‌​​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​‌​‌​​‌‌​​​​‌​​‌‌​​‌​​​‌​‌‌​‌​‌‌​​‌‌​​‌‌​‌​​‌​‌‌​‌‌​​​‌‌‌​‌​​​‌‌​​‌​‌​‌‌‌​​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​‌‌​‌‌​​​‌‌​‌‌‌‌​‌‌​‌‌‌‌​‌‌​‌​‌‌​‌‌‌​‌​‌​‌‌‌​​​​​​‌​‌‌​‌​‌‌‌​​​​​‌‌​‌‌​​​‌‌‌​‌​‌​‌‌​​‌‌‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

过滤器与查找的分工

过滤器处理已经拿到的值:列表、字符串、字典经过一串管道运算得到新值,纯计算、没有副作用。查找插件处理取数据这件事:它会去读文件、取环境变量、执行命令或查询密码库,通常默认在控制端执行且真的有 IO。两者的关键差别就是求值位置与副作用,混用会带来意料之外的结果与性能开销。

基本信息

过滤器写法值后接管道再接过滤器名与参数
查找写法调用查找函数传名称与参数,查询形式返回列表
求值位置查找默认在控制端,可按需指定在目标端执行
常用过滤器default、map、select、join、combine、regex_replace、结构化输出

典型使用场景

  • 处理列表:提取字段、按条件筛选、拼接成一行内容
  • 生成结构化配置:把字典序列化成 JSON 或格式化 JSON 再落盘
  • 读取控制端本地文件内容进变量:文本文件查找
  • 取环境变量或证书内容:对应的专用查找插件
  • 需要多个值时用返回列表的查询形式,避免只拿到第一项

过滤器与查找

过滤器与查找
- name: 过滤器链  # 纯计算,按顺序作用在值上
  ansible.builtin.debug:
    msg: "{{ users | map(attribute='name') | list | join(',') }}"

- name: 条件筛选后再拼  # 测试函数筛选元素
  ansible.builtin.debug:
    msg: "{{ ports | select('greaterthan', 1024) | list }}"

- name: 查找插件读取内容  # 默认在控制端执行,存在 IO
  ansible.builtin.debug:
    msg: "{{ lookup('file', '/etc/hostname') }}"

类别对照

类别写法特征求值位置与副作用
过滤器值后接管道与参数控制端纯计算,无 IO
查找插件函数式调用并给名称默认控制端,有 IO
查询形式返回列表的调用多值场景更合适
模板渲染由模板模块在目标端落文件IO 发生在目标机
查找默认读的是控制端的文件与变量,不是目标机的。需要目标机上的内容时改用读取远端文件的模块,或把执行位置显式指向目标主机。
涉及凭据的查找结果可能被写进执行输出与日志。敏感值先取到变量里,再在任务上关闭日志输出,避免口令出现在回显中。

组合顺序的经验

过滤器链的书写顺序就是求值顺序:先筛选再拼接,与先拼接再筛选得到的类型完全不同。稳妥的做法是把长链条拆成中间变量,每一步单独调试;涉及 IO 的查找尽量放在循环之外,先取一次到变量里复用,避免每次迭代都触发一次文件读取或命令执行。

易错点

  • 用文件查找读目标机上的文件,实际读的是控制端同名文件,内容静默错误
  • 过滤器链顺序写反(先拼接再取字段),结果类型不对且报错不易理解
  • 期望多值时用了只取第一项的查找形式,配置只渲染出一个成员
  • 把查找写进循环体,每次迭代都做一次 IO,执行时间明显变长
  • 敏感查找结果直接进入任务回显,口令进入日志与审计记录

数据来源与参考

  • Ansible 官方文档 Filters 与 Lookup plugins
  • Jinja2 官方文档内置过滤器与测试函数
  • Ansible 官方文档 Playbook 变量与查找插件章节

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/automation/jinja2-filters-lookup-plugins.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​​​​‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌‌​‌‌​‌​‌​​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​‌​‌​​‌‌​​​​‌​​‌‌​​‌​​​‌​‌‌​‌​‌‌​​‌‌​​‌‌​‌​​‌​‌‌​‌‌​​​‌‌‌​‌​​​‌‌​​‌​‌​‌‌‌​​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​‌‌​‌‌​​​‌‌​‌‌‌‌​‌‌​‌‌‌‌​‌‌​‌​‌‌​‌‌‌​‌​‌​‌‌‌​​​​​​‌​‌‌​‌​‌‌‌​​​​​‌‌​‌‌​​​‌‌‌​‌​‌​‌‌​​‌‌‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​