URI 模块的 Ansible jinja2 模板?

问题描述 投票:0回答:1

我只是想知道是否可以在 URI 模块中使用 jinja2 模板。

我尝试过这样的事情:

          - name: update checkpoint members asset field
            uri: |
                [{% for item in device_result_set if item.Name in checkpointPairs %}
                {{  url: api_host""api_target""item.ID
                    method: PUT
                    validate_certs: 'no'
                    status_code: 200
                    headers:
                      Content-Type: 'application/json'
                      Authorization: 'Custom' api_key
                    body_format: 'json'
                    body: item}},
                {% endfor %}]
            register: put_result
            no_log: False
            tags: put

我尝试使用 jinja2 模板的原因是优化循环过程,这需要大量时间 - 我预计有 2000 个项目,并且任务在 50 - 60 个项目后会变慢。

或者也许考虑一下我不知道的不同机制。

谢谢!

for-loop ansible jinja2 ansible-awx
1个回答
0
投票

在 Ansible 中的某个时间点,通过模块的

args
参数,模板化参数是可能的,但是,出于安全考虑,这在很久以前就被删除了。

但我认为不需要实际对参数进行模板化,在这种特定情况下,您可以使用使用

selectattr
:

进行过滤的普通循环
- name: update checkpoint members asset field
  uri: 
    url: "{{ api_host }}{{ api_target }}{{ item.ID }}"
    method: PUT
    validate_certs: 'no'
    status_code: 200
    headers:
      Content-Type: application/json
      Authorization: "Custom {{ api_key }}"
    body_format: json
    body: "{{ item }}"
  register: put_result
  loop: "{{ device_result_set | selectattr('Name', 'in', checkpointPairs) }}"
  no_log: False
  tags: put
  
© www.soinside.com 2019 - 2024. All rights reserved.