我只是想知道是否可以在 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 模板的原因是为了优化循环过程,这需要大量时间 - 我预计有两千个项目,任务在 50 - 60 个项目后会变慢。
或者也许考虑一下我不知道的不同机制。
从字典中模板化参数是可能的,但强烈建议不要这样做,因为在处理受损数据时可能会面临安全问题:
您可以从字典类型变量设置任务的所有参数。该技术在某些动态执行场景中非常有用。然而,它带来了安全风险。我们不推荐这样做,因此当您执行此类操作时,Ansible 会发出警告
#... vars: usermod_args: name: testuser state: present update_password: always tasks: - user: '{{ usermod_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