我有一个.yml文件,其中包含了一个Axis网络摄像机的数百个配置值。内容如下:
---
axis:
config:
"Bandwidth.Limit": 0
"HTTPS.AllowTLS1": "no"
"HTTPS.AllowTLS11": "no"
"HTTPS.AllowSSLV3": "no"
"HTTPS.Ciphers": AES256-SHA:AES128-SHA
"HTTPS.Enabled": "yes"
"HTTPS.Port": 443
...Axis称为Vapix,它提供了一个更新函数来更新一个值,因此我在这些值中圈了一个圈,并在每次迭代中触发了一个新的API调用:
---
- name: update parameters
local_action:
module: uri
user: "{{ axis_snmp_role.login_user }}"
password: "{{ axis_snmp_role.login_password }}"
url: "{{ axis_snmp_role.server_url }}?action=update&{{ item.key }}={{ item.value }}"
validate_certs: false
with_dict: "{{ axis.config }}"事实证明这是可行的,但要花上很长时间。我手动发现,可以使用一个API调用更新多个值,方法是将键/值对与&-符号粘在一起,如下所示:
https://{{ axis_snmp_role.server_url }}/axis-cgi/param.cgi?action=update&ImageSource.I0.Sensor.ExposureValue=100&Image.I0.Appearance.Compression=50是否有可能创建一个Ansible循环,同时读取100个键/值对,创建一个包含所有参数的大api调用,将其发送出去并重复执行,直到达到配置文件的末尾?
发布于 2020-01-09 15:38:27
只需在一个循环中创建一个查询参数列表,并将其立即发送到&中。
---
- name: Create a parameter list
set_fact:
my_params: "{{ my_params | default([]) + [îtem.key + '=' + item.value] }}"
with_dict: "{{ axis.config }}"
- name: Update parameters
uri:
user: "{{ axis_snmp_role.login_user }}"
password: "{{ axis_snmp_role.login_password }}"
url: "{{ axis_snmp_role.server_url }}?action=update&{{ my_params | join('&') }}"
validate_certs: false
delegate_to: localhost备注:
,
,则可能必须使用urlencode筛选器对值进行编码。
https://stackoverflow.com/questions/59666623
复制相似问题