You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jinja2模板的SQL查询中使用Ansible变量实现值替换?

问题描述

我在使用Ansible的community.postgresql.postgresql_copy模块执行Jinja2模板中的SQL查询,现有Playbook如下:

- hosts: "{{ hosts_list }}"
  gather_facts: no

  vars_files:
    - vars/main.yml
    - vars/my_hosts.yml
    - vars/target_date.yml

  tasks:
    - name: generate report
      community.postgresql.postgresql_copy:
        login_host: '{{ db_host }}'
        login_user: '{{ db_username }}'
        login_password: '{{ db_password }}'
        db: '{{ db_database }}'
        port: '{{ db_database_port }}'
        src: "{{ lookup('template', 'my_report_query.sql.j2') }}"
        copy_to: /tmp/my_report.csv
        options:
          format: csv
          delimiter: ';'
          header: yes

当前SQL模板my_report_query.sql.j2内容为固定日期:

select * from mytable where date='2023-02-03';

已在playbooks/my_playbook/vars/target_date.yml中定义变量:

input_date: "2023-05-03"

需要将该变量值传入SQL查询实现动态替换,请问如何修改Playbook和Jinja2模板?

解决方案

1. 修改Jinja2 SQL模板

直接在my_report_query.sql.j2中使用Ansible变量替换固定日期,保留SQL语法要求的单引号即可:

select * from mytable where date='{{ input_date }}';

2. Playbook无需修改

你的Playbook已经通过vars_files加载了target_date.yml,变量input_date会被Ansible自动识别并传递给Jinja2模板,因此现有Playbook不需要做任何调整。

执行效果

当Playbook运行时,lookup('template')会渲染Jinja2模板,将{{ input_date }}替换为定义的2023-05-03,最终执行的SQL语句为:

select * from mytable where date='2023-05-03';

内容的提问来源于stack exchange,提问作者Tms91

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 14:27:32