首页 > 解决方案 > 如何在ansible模板模块中忽略{{

问题描述

下面是我的ansible剧本:

播放.yml

- name: gk
  hosts: localhost
  vars:
    region_list: ["ap-southeast-1"]
  tasks:
    - name: "Generate region based patching solution  for active regions"
      template:
        #src: "terraform_12/patching/patching.tf.j2"
        src: patching.tf.j2
        dest: "patching_{{ item }}.tf"
      with_items: "{{ region_list }}"

在 patching.tf.j2 下面

{% for region in region_list  %}

provider "aws" {
    alias  = "{{ region }}"
    region = "{{ region }}"
    version = "~> 2.70.0"
    assume_role {
        role_arn     = var.assume_role
        session_name = "terraform"
    }
}




resource "aws_ssm_maintenance_window_task" "lamnbda_execution_after_install_{{ region }}" {
  count            = lower(var.patching_enabled) == "enabled" ? 1 : 0
  name             = "${var.target_infra}-lambda-execute"
  max_concurrency  = 100
  max_errors       = 100
  priority         = 10
  service_role_arn = aws_iam_role.ssm_maintenance_{{ region }}.0.arn
  task_arn         = aws_lambda_function.ssm_patch_export_{{ region }}.0.arn
  task_type        = "LAMBDA"
  window_id        = aws_ssm_maintenance_window.install_window_{{ region }}.0.id

  targets {
    key    = "WindowTargetIds"
    values = aws_ssm_maintenance_window_target.install_target_{{ region }}.*.id
  }

  task_invocation_parameters {
    lambda_parameters {
      payload = "{\"instanceid\":\"{{TARGET_ID}}\"}"
    }
  }
}

现在从模板中,我想保持 payload = "{\"instanceid\":\"{{TARGET_ID}}\"}"原样,不评估{{TARGET_ID}}

尝试过转义字符,例如 payload = "{\"instanceid\":\"'{{'TARGET_ID'}}'\"}"

和许多其他组合,但它以某种方式显示''{{' 围绕该行是否需要任何修改?

标签: ansiblejinja2

解决方案


以下语法可用于“转义” jinja 模板中的大括号:

{{ '{{' }}TARGET_ID{{ '}}' }}

获取您的 j2 模板的一部分并运行它:

j2模板:

  task_invocation_parameters {
    lambda_parameters {
      payload = "{\"instanceid\":\"{{ '{{' }}TARGET_ID{{ '}}' }}\"}"
    }
  }
}

制作文件:

  task_invocation_parameters {
    lambda_parameters {
      payload = "{\"instanceid\":\"{{TARGET_ID}}\"}"
    }
  }
}

推荐阅读