我可以访问一个url,它看起来有点像这样:
curl https://api_url.com/device_groups/ -u api_key:在JSON中输出:
{
"data":[
{
"type":"device_group",
"id":85015,
"attributes":{
"name":"Initial"
},
"relationships":{
"devices":{
"data":[
]
}
}
},
{
"type":"device_group",
"id":85683,
"attributes":{
"name":"mode-4"
},
"relationships":{
"devices":{
"data":[
]
}
}
},
{
"type":"device_group",
"id":85684,
"attributes":{
"name":"Employees-3"
},
"relationships":{
"devices":{
"data":[
{
"type":"device",
"id":506044
},
{
"type":"device",
"id":658670
},
{
"type":"device",
"id":506034
},
{
"type":"device",
"id":506037
},
{
"type":"device",
"id":506038
},
{
"type":"device",
"id":506046
},
{
"type":"device",
"id":506043
},
{
"type":"device",
"id":658669
},
{
"type":"device",
"id":506036
},
{
"type":"device",
"id":502256
}
]
}
}
},
{
"type":"device_group",
"id":91589,
"attributes":{
"name":"Subcontractors-2"
},
"relationships":{
"devices":{
"data":[
{
"type":"device",
"id":658668
},
{
"type":"device",
"id":658671
},
{
"type":"device",
"id":506051
},
{
"type":"device",
"id":506048
},
{
"type":"device",
"id":506040
},
{
"type":"device",
"id":506050
},
{
"type":"device",
"id":506042
},
{
"type":"device",
"id":502236
},
{
"type":"device",
"id":506041
},
{
"type":"device",
"id":523577
},
{
"type":"device",
"id":506053
},
{
"type":"device",
"id":655780
},
{
"type":"device",
"id":508070
},
{
"type":"device",
"id":506052
},
{
"type":"device",
"id":506047
},
{
"type":"device",
"id":506035
},
{
"type":"device",
"id":506045
},
{
"type":"device",
"id":506039
},
{
"type":"device",
"id":506049
},
{
"type":"device",
"id":589426
}
]
}
}
},
{
"type":"device_group",
"id":92316,
"attributes":{
"name":"Employees-2"
},
"relationships":{
"devices":{
"data":[
{
"type":"device",
"id":673452
},
{
"type":"device",
"id":576554
},
{
"type":"device",
"id":672077
},
{
"type":"device",
"id":589167
}
]
}
}
},
{
"type":"device_group",
"id":92325,
"attributes":{
"name":"Employees"
},
"relationships":{
"devices":{
"data":[
]
}
}
},
{
"type":"device_group",
"id":94908,
"attributes":{
"name":"mode 2"
},
"relationships":{
"devices":{
"data":[
{
"type":"device",
"id":501727
}
]
}
}
},
{
"type":"device_group",
"id":95017,
"attributes":{
"name":"Mode 1"
},
"relationships":{
"devices":{
"data":[
]
}
}
},
{
"type":"device_group",
"id":95381,
"attributes":{
"name":"Employees-test"
},
"relationships":{
"devices":{
"data":[
{
"type":"device",
"id":658672
}
]
}
}
},
{
"type":"device_group",
"id":95382,
"attributes":{
"name":"Subcontracters-test"
},
"relationships":{
"devices":{
"data":[
]
}
}
}
],
"has_more":false
}我需要将每个设备移动到一个预定义的设备组id中,然后将设备返回到从初始JSON卷曲中提取的原始组。
例如:
curl https://api_url.com/group/$predefined_group_id/devices/506044 -u api_key: -X POST
curl https://api_url.com/group/$original_group_id/devices/506044 -u api_key: -X POST您还可以将特定的device_groups排除为变量吗?
发布于 2021-11-20 12:20:20
这正是我想做的,我相信他们可以让它看起来更优雅,但它能满足我的需要。
#!/bin/bash
# Set groupid also read and write API variables
group="80000"
read_api="read_api"
write_api="write_api"
# get all devicesid and groupid and create groups.json file
curl https://api_url.com/device_groups -u "$read_api": > groups.json
# Move all devices into predefined groupid
jq -r --arg groupid $group '
.data[].relationships.devices.data[].id |
@sh "https://api_url.com/device_groups/\($groupid)/devices/\(.)"' groups.json |
xargs curl -X POST -u "$write_api":
# Wait for the groupid to propagate
sleep 60;
# Move all devices into original groupid
jq -r '
.data[] |
"https://api_url.com/device_groups/\(.id)/devices/\(.relationships.devices.data[].id)"' groups.json |
xargs curl -X POST -u "$write_api":发布于 2021-11-18 12:32:49
jq命令
jq -r '
.data.id as $groupid |
.data.relationships.devices.data[].id |
@sh "https://api_url.com/group/\($groupid)/devices/\(.)"' file..。将提取组ID,然后从data数组提取所有D3值。对于每个id值,它将构造一个要输出的URL。
要在调用curl时使用这些生成的URL:
jq -r '
.data.id as $groupid |
.data.relationships.devices.data[].id |
@sh "https://api_url.com/group/\($groupid)/devices/\(.)"' file |
xargs -I {} curl -X POST -u api_key: {}给定问题中的JSON文档,这将执行以下命令:
curl -X POST -u api_key: https://api_url.com/group/85684/devices/506044
curl -X POST -u api_key: https://api_url.com/group/85684/devices/506034
curl -X POST -u api_key: https://api_url.com/group/85684/devices/506037
curl -X POST -u api_key: https://api_url.com/group/85684/devices/506038
curl -X POST -u api_key: https://api_url.com/group/85684/devices/506046
curl -X POST -u api_key: https://api_url.com/group/85684/devices/506043
curl -X POST -u api_key: https://api_url.com/group/85684/devices/658669
curl -X POST -u api_key: https://api_url.com/group/85684/devices/506036
curl -X POST -u api_key: https://api_url.com/group/85684/devices/502256您还可以使用xargs尽可能少地使用这些URL调用curl:
jq -r '
.data.id as $groupid |
.data.relationships.devices.data[].id |
@sh "https://api_url.com/group/\($groupid)/devices/\(.)"' file |
xargs curl -X POST -u api_key:这将生成一个命令
curl -X POST -u api_key: https://api_url.com/group/85684/devices/506044 https://api_url.com/group/85684/devices/506034 https://api_url.com/group/85684/devices/506037 https://api_url.com/group/85684/devices/506038 https://api_url.com/group/85684/devices/506046 https://api_url.com/group/85684/devices/506043 https://api_url.com/group/85684/devices/658669 https://api_url.com/group/85684/devices/506036 https://api_url.com/group/85684/devices/502256您可以从命令行提供组ID,而不是使用这样的数据中的ID(使用变量some_groupid):
jq -r --arg groupid "$some_groupid" '
.data.relationships.devices.data[].id |
@sh "https://api_url.com/group/\($groupid)/devices/\(.)"' filehttps://unix.stackexchange.com/questions/678092
复制相似问题