Ruby:SoftLayer API:getPendingEvents 无法显示许多关系属性
Ruby : SoftLayer API : getPendingEvents fails to show many relational properties
我正在尝试使用 Ruby 进行软层 API 调用,以查看即将进行的维护以及可能受维护影响的机器。我有几个问题,但我 运行 遇到了一个问题,看到这里记录的许多关系属性:
http://sldn.softlayer.com/reference/datatypes/SoftLayer_Notification_Occurrence_Event
这是我的简单程序:
require 'rubygems'
require 'softlayer_api'
require 'pp'
client = SoftLayer::Client.new(:username => user, :api_key => api_key, :timeout => 99999999)
account = client['Account'].object_mask("mask[pendingEventCount]").getObject()
pending_event_count = account["pendingEventCount"]
current_time = Time.now.to_i
for i in 0..(pending_event_count/30.0).ceil - 1
list_of_pending_events = client['Account'].result_limit(i*30,30).object_mask("mask[id, startDate, endDate, recoveryTime, subject, summary]").getPendingEvents
for x in 0..list_of_pending_events.length - 1
start_time = DateTime.parse(list_of_pending_events[x]['startDate']).to_time.to_i
if start_time > current_time
pp list_of_pending_events[x]
end
end
end
以上有效,但如果我尝试向掩码添加关系 属性,例如 "impactedResources",它将失败,说 属性 不属于 SoftLayer_Notification_Occurrence_Event.有人可以帮助解释为什么这个以及许多其他关系属性在上述调用中无效吗?
此外,还有两个关于此主题的其他问题:
1) 为什么 getPendingEvents 中的某些结果的开始时间和结束时间是过去的?为什么有些人完全没有结束时间?请注意,我正在检查开始时间是否大于当前时间,因为结果中似乎有旧的维护数据。
2) 我是否采取了正确的方法来进行即将到来的维护并找出将受到影响的机器? (使用 getPendingEvents 然后 'impactedResources' 属性)
我使用了您的代码,并将 "impactedResources" 添加到对象掩码中,效果很好。您可能会遇到问题,因为您的 API 用户没有足够的权限,我建议您尝试使用主用户。
关于您的其他问题:
1.- 当我 运行 你的代码时,我只有 3 个事件的开始日期大于当前时间,所以它对我来说工作正常。如果您仍然遇到该问题,您可以尝试使用 objectFilters。
require 'rubygems'
require 'softlayer_api'
require 'pp'
client = SoftLayer::Client.new(:username => user, :api_key => apikey, :timeout => 99999999)
object_filter = SoftLayer::ObjectFilter.new
object_filter.set_criteria_for_key_path('pendingEvents.startDate', 'operation' => 'greaterThanDate',
'options' => [{
'name' => 'date',
'value' => ['9/8/2016']
}])
list_of_pending_events = client['Account'].object_filter(object_filter).object_mask("mask[id, startDate, endDate, recoveryTime, subject, summary]").getPendingEvents
pp list_of_pending_events
2.- 是的,这种方法会奏效。
此致
我正在尝试使用 Ruby 进行软层 API 调用,以查看即将进行的维护以及可能受维护影响的机器。我有几个问题,但我 运行 遇到了一个问题,看到这里记录的许多关系属性: http://sldn.softlayer.com/reference/datatypes/SoftLayer_Notification_Occurrence_Event
这是我的简单程序:
require 'rubygems'
require 'softlayer_api'
require 'pp'
client = SoftLayer::Client.new(:username => user, :api_key => api_key, :timeout => 99999999)
account = client['Account'].object_mask("mask[pendingEventCount]").getObject()
pending_event_count = account["pendingEventCount"]
current_time = Time.now.to_i
for i in 0..(pending_event_count/30.0).ceil - 1
list_of_pending_events = client['Account'].result_limit(i*30,30).object_mask("mask[id, startDate, endDate, recoveryTime, subject, summary]").getPendingEvents
for x in 0..list_of_pending_events.length - 1
start_time = DateTime.parse(list_of_pending_events[x]['startDate']).to_time.to_i
if start_time > current_time
pp list_of_pending_events[x]
end
end
end
以上有效,但如果我尝试向掩码添加关系 属性,例如 "impactedResources",它将失败,说 属性 不属于 SoftLayer_Notification_Occurrence_Event.有人可以帮助解释为什么这个以及许多其他关系属性在上述调用中无效吗?
此外,还有两个关于此主题的其他问题:
1) 为什么 getPendingEvents 中的某些结果的开始时间和结束时间是过去的?为什么有些人完全没有结束时间?请注意,我正在检查开始时间是否大于当前时间,因为结果中似乎有旧的维护数据。
2) 我是否采取了正确的方法来进行即将到来的维护并找出将受到影响的机器? (使用 getPendingEvents 然后 'impactedResources' 属性)
我使用了您的代码,并将 "impactedResources" 添加到对象掩码中,效果很好。您可能会遇到问题,因为您的 API 用户没有足够的权限,我建议您尝试使用主用户。
关于您的其他问题:
1.- 当我 运行 你的代码时,我只有 3 个事件的开始日期大于当前时间,所以它对我来说工作正常。如果您仍然遇到该问题,您可以尝试使用 objectFilters。
require 'rubygems'
require 'softlayer_api'
require 'pp'
client = SoftLayer::Client.new(:username => user, :api_key => apikey, :timeout => 99999999)
object_filter = SoftLayer::ObjectFilter.new
object_filter.set_criteria_for_key_path('pendingEvents.startDate', 'operation' => 'greaterThanDate',
'options' => [{
'name' => 'date',
'value' => ['9/8/2016']
}])
list_of_pending_events = client['Account'].object_filter(object_filter).object_mask("mask[id, startDate, endDate, recoveryTime, subject, summary]").getPendingEvents
pp list_of_pending_events
2.- 是的,这种方法会奏效。
此致