【问题标题】:How to get to which datacenter a network storage belongs to using SoftLayer Ruby API?如何使用 SoftLayer Ruby API 获取网络存储所属的数据中心?
【发布时间】:2016-07-13 11:04:06
【问题描述】:

我正在使用:

http://sldn.softlayer.com/reference/services/SoftLayer_Account/getNetworkStorage

获取所有网络存储的列表。

但是,在 http://sldn.softlayer.com/reference/datatypes/SoftLayer_Network_Storage 中,我看不到获取网络存储所属数据中心详细信息的方法。

但是,“slcli iscsi list”(例如)正在显示“数据中心”列。

如何通过 Ruby SoftLayer API 获得相同的结果?

【问题讨论】:

    标签: ruby ibm-cloud-infrastructure network-storage


    【解决方案1】:

    您应该使用对象掩码来获取数据中心值

    例如: 掩码[serviceResource[datacenter[name]]]

    另外,您可以尝试以下 ruby​​ 脚本来获取此类信息

    # Get Network Storage
    #
    # This script retrieves an account's associated storage volumes.
    #
    # Important manual pages
    # http://sldn.softlayer.com/reference/services/SoftLayer_Account/getNetworkStorage
    # http://sldn.softlayer.com/reference/datatypes/SoftLayer_Network_Storage
    #
    # @License: http://sldn.softlayer.com/article/License
    # @Author: SoftLayer Technologies, Inc. <sldn@softlayer.com>
    require 'rubygems'
    require 'softlayer_api'
    require 'pp'
    
    # Declare your SoftLayer username and apiKey 
    SL_API_USERNAME = 'set me'
    SL_API_KEY = 'set me'
    
    # Create the client
    client = SoftLayer::Client.new(username: SL_API_USERNAME, api_key: SL_API_KEY)
    
    # Define an object mask to get datacenter name
    object_mask = 'mask[serviceResource[datacenter[name]]]'
    
    begin
      storages = client['SoftLayer_Account'].object_mask(object_mask).getNetworkStorage
      print "+------------+---------------------------+------------+-----------------------+\n"
      print "| ID         | Datacenter                | Size       |  Username             |\n"
      print "+------------+---------------------------+------------+-----------------------+\n"
      storages.each do |storage|
          printf('| %-10s ', storage['id'])
          if storage['serviceResource'].has_key?('datacenter')
              datacenter = storage['serviceResource']['datacenter']['name']
          else
              datacenter = 'None'
          end
          printf('| %-25s ', datacenter)
          printf('| %-10s ', storage['capacityGb'])
          printf("| %-21s | \n", storage['username'])
          end
      rescue StandardError => exception
      puts "Error. : #{exception}"
    end
    

    参考资料:

    【讨论】:

    • 非常感谢,鲁伯。我现在可以获得“数据中心”的详细信息。但是有一个问题,你为什么要检查 storage['serviceResource'].has_key?('datacenter') ?是否有可能存在存储而不分配给任何数据中心?
    • 好吧,对于一些快照项(其中很少),使用SoftLayer_Account::getNetworkStorage 方法不显示数据中心,但您可以使用SoftLayer_Network_Storage::getServiceResource 方法为它们获取数据中心。这是一个小问题,我们现在正在努力解决它。出于这个原因,我添加了对密钥 storage['serviceResource'].has_key?('datacenter') 的验证。
    • 如果影响您的要求,我深表歉意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多