告诉 Ansible 遍历(网络摄像机)配置 json 文件并通过新的 api 调用更新每个值
Tell Ansible to iterate through a (network camera) configuration json file and update every value via a new api call
我有一个 .json 文件,其中包含安讯士网络摄像机的数百个配置值。内容如下所示:
{
"Name": "HTTPS.Port",
"Value": "443"
},
{
"Name": "Image.DateFormat",
"Value": "YYYY-MM-DD"
},
{
"Name": "Image.MaxViewers",
"Value": "20"
},
Axis API,称为 Vapix,仅提供更新单个值的更新函数,因此我必须遍历这些值并触发新的 API 调用每次迭代:
name: update parameters
local_action:
module: uri
user: x
password: y
url: "{{ axis_snmp_role.server_url }}?action=update&{{ item }}"
with_items:
- "SNMP.V2c=yes"
- "SNMP.Enabled=yes"
- "ImageSource.I0.Sensor.ExposureValue=100"
现在上面的例子要求我将数百个配置值硬编码到循环中。有没有办法告诉 Ansible 通过相机配置 json,通过新的 api 调用更新每个值,并在 json 文件中没有更多值时停止?
鉴于配置的值是一个列表。例如
shell> cat data.yml
config: [
{"Name": "HTTPS.Port", "Value": "443"},
{"Name": "Image.DateFormat", "Value": "YYYY-MM-DD"},
{"Name": "Image.MaxViewers", "Value": "20"}]
该剧
- hosts: localhost
tasks:
- include_vars:
file: data.json
- debug:
msg: "?action=update&{{ item.Name }}={{ item.Value }}"
loop: "{{ config }}"
给予
ok: [localhost] => (item={u'Name': u'HTTPS.Port', u'Value': u'443'}) => {
"msg": "?action=update&HTTPS.Port=443"
}
ok: [localhost] => (item={u'Name': u'Image.DateFormat', u'Value': u'YYYY-MM-DD'}) => {
"msg": "?action=update&Image.DateFormat=YYYY-MM-DD"
}
ok: [localhost] => (item={u'Name': u'Image.MaxViewers', u'Value': u'20'}) => {
"msg": "?action=update&Image.MaxViewers=20"
}
如果这是您想要的循环 uri 模块。例如
- local_action:
module: uri
user: x
password: y
url: "{{ axis_snmp_role.server_url }}?action=update&{{ item.Name }}={{ item.Value }}"
loop: "{{ config }}"
我有一个 .json 文件,其中包含安讯士网络摄像机的数百个配置值。内容如下所示:
{
"Name": "HTTPS.Port",
"Value": "443"
},
{
"Name": "Image.DateFormat",
"Value": "YYYY-MM-DD"
},
{
"Name": "Image.MaxViewers",
"Value": "20"
},
Axis API,称为 Vapix,仅提供更新单个值的更新函数,因此我必须遍历这些值并触发新的 API 调用每次迭代:
name: update parameters
local_action:
module: uri
user: x
password: y
url: "{{ axis_snmp_role.server_url }}?action=update&{{ item }}"
with_items:
- "SNMP.V2c=yes"
- "SNMP.Enabled=yes"
- "ImageSource.I0.Sensor.ExposureValue=100"
现在上面的例子要求我将数百个配置值硬编码到循环中。有没有办法告诉 Ansible 通过相机配置 json,通过新的 api 调用更新每个值,并在 json 文件中没有更多值时停止?
鉴于配置的值是一个列表。例如
shell> cat data.yml
config: [
{"Name": "HTTPS.Port", "Value": "443"},
{"Name": "Image.DateFormat", "Value": "YYYY-MM-DD"},
{"Name": "Image.MaxViewers", "Value": "20"}]
该剧
- hosts: localhost
tasks:
- include_vars:
file: data.json
- debug:
msg: "?action=update&{{ item.Name }}={{ item.Value }}"
loop: "{{ config }}"
给予
ok: [localhost] => (item={u'Name': u'HTTPS.Port', u'Value': u'443'}) => {
"msg": "?action=update&HTTPS.Port=443"
}
ok: [localhost] => (item={u'Name': u'Image.DateFormat', u'Value': u'YYYY-MM-DD'}) => {
"msg": "?action=update&Image.DateFormat=YYYY-MM-DD"
}
ok: [localhost] => (item={u'Name': u'Image.MaxViewers', u'Value': u'20'}) => {
"msg": "?action=update&Image.MaxViewers=20"
}
如果这是您想要的循环 uri 模块。例如
- local_action:
module: uri
user: x
password: y
url: "{{ axis_snmp_role.server_url }}?action=update&{{ item.Name }}={{ item.Value }}"
loop: "{{ config }}"