我只是想知道是否可以在 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 个项目后会变慢。
或者也许考虑一下我不知道的不同机制。
谢谢!
在 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