我在softlayer API上使用ObjectFilter时遇到了麻烦。
我正在测试Softlayer API以检索块存储的主机IQN,用户名和密码。
我尝试过使用下面的命令,但objectFilter
根本不起作用。
curl -g 'https://username:api_key@api.softlayer.com/rest/v3/SoftLayer_Network_Storage/storage_ID/getObject?objectMask=mask[id,username,allowedIpAddresses[ipAddress,allowedHost[name,credential[username,password]]]]'
它返回3个网络对象,包括我预期的IQN,用户名和密码。
所以我想通过下面的api命令通过“ip address”进行过滤但不起作用。 (似乎objectFilter忽略了)
curl -g 'https://username:api_key@api.softlayer.com/rest/v3/SoftLayer_Network_Storage/storage_ID/getObject?objectMask=mask[id,username,allowedIpAddresses[ipAddress,allowedHost[name,credential[username,password]]]]&objectFilter={"object":{"allowedIpAddresses":{"ipAddress":{"operation":"1.2.3.4"}}}}'
我的API用法有问题吗?
答案 0 :(得分:0)
实际上过滤器正在运行,但您不会注意到,因为对象掩码和过滤器之间存在细微差别,请记住,对象过滤器可用于限制API返回的结果,它们与对象掩码的区别在于它们确定返回哪些数据类型对象(在此特定情况下,整个SoftLayer_Network_Storage单个对象以及您可以通过使用对象掩码返回的关系属性,例如[allowedIpAddresses]数组),而Object Masks定义从返回的内容中检索哪些属性对象。
例如,另一种检索和演示过滤器如何工作的方法,您可以尝试以下请求:
curl -g "https://[username]:[apiKey]@api.softlayer.com/rest/v3.1/SoftLayer_Account/getNetworkStorage?objectMask=mask[id,username,allowedIpAddresses[ipAddress,allowedHost[name,credential[username,password]]]]&objectFilter=%7B%22networkStorage%22%3A%7B%22allowedIpAddresses%22%3A%7B%22ipAddress%22%3A%7B%22operation%22%3A%22[ipAddress]%22%7D%7D%7D%7D"
此方法检索所有帐户关联存储卷的数组,包括Lockbox,NAS,EVault和iSCSI卷(其中包含块存储)。
您可以在没有对象过滤器的情况下使用请求,并仅使用对象Mask验证返回的所有对象,然后使用完整请求和对象过滤器验证它是否缩小了返回到块存储的单个对象的对象通过使用您在其上定义的ipAddress。
有关详细信息,请参阅以下内容:
https://sldn.softlayer.com/blog/bpotter/going-further-softlayer-api-python-client-part-1