首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >告诉Ansible在一个大型(网络摄像机)配置yml中迭代,同时更新100个值,一个api调用

告诉Ansible在一个大型(网络摄像机)配置yml中迭代,同时更新100个值,一个api调用
EN

Stack Overflow用户
提问于 2020-01-09 14:55:24
回答 1查看 133关注 0票数 0

我有一个.yml文件,其中包含了一个Axis网络摄像机的数百个配置值。内容如下:

代码语言:javascript
复制
---
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调用:

代码语言:javascript
复制
---
  - 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调用更新多个值,方法是将键/值对与&-符号粘在一起,如下所示:

代码语言:javascript
复制
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调用,将其发送出去并重复执行,直到达到配置文件的末尾?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-09 15:38:27

只需在一个循环中创建一个查询参数列表,并将其立即发送到&中。

代码语言:javascript
复制
---
- 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

备注:

  • ,如果你真的有很多的话,你可能会达到最大的url长度。在这种情况下,在几个iterations.
  • You中剪切以下内容,如果其中包含特殊字符.

,则可能必须使用urlencode筛选器对值进行编码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59666623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档