在某些 pods 中寻找 VSi 或裸金属

Finding VSi's or Bare metals in certain pods

有没有办法在数据中心搜索 pods,然后获取那些 pods 中的服务器?我在某处读到它是有可能的,但最后一个问题是关于 REST 的。目前正在使用 Python API

试试这个 python 脚本:

"""
List servers according pods from a specific datacenter

Important manual pages
http://sldn.softlayer.com/reference/services/SoftLayer_Account/getHardware
http://sldn.softlayer.com/reference/services/SoftLayer_Account/getVirtualGuests
http://sldn.softlayer.com/reference/datatypes/SoftLayer_Hardware
http://sldn.softlayer.com/reference/datatypes/SoftLayer_VirtualGuests

License: http://sldn.softlayer.com/article/License
Author: SoftLayer Technologies, Inc. <sldn@softlayer.com>
"""
import SoftLayer
import pprint
from prettytable import PrettyTable

# Your SoftLayer API username and key.
USERNAME = 'set me'
API_KEY = 'set me'

client = SoftLayer.Client(username=USERNAME, api_key=API_KEY)

# Define datacenter e.g: dal05, dal09, ams01, sao01, etc
datacenter = 'ams01'

# Declare a new API service objects for SoftLayer_Account
accountClient = client['SoftLayer_Account']

# Define objectMask and objectFilters to get additional information
objectMask = 'mask[primaryNetworkComponent[router[hostname]]]'
objectFilterBms = {"hardware": {"datacenter": {"name": {"operation": datacenter}}}}
objectFilterVsi = {"virtualGuests": {"datacenter": {"name": {"operation": datacenter}}}}

# Define array to add pods
pods = []

try:
    # Getting servers and vsis
    servers = accountClient.getHardware(mask=objectMask, filter=objectFilterBms)
    vsis = accountClient.getVirtualGuests(mask=objectMask, filter=objectFilterVsi)

    # Getting pods from servers 
    for server in servers:
        if server['primaryNetworkComponent']['router']['hostname'] not in pods:
            pods.append(server['primaryNetworkComponent']['router']['hostname']) 
    for vsi in vsis:
        if vsi['primaryNetworkComponent']['router']['hostname'] not in pods:
            pods.append(vsi['primaryNetworkComponent']['router']['hostname'])
    # Printing servers according pods
    for pod in pods:
        table = []
        tableDetails = PrettyTable(['POD', 'Server Id', 'Hostname', 'Domain', 'Type'])
        print("POD: %s " % pod)
        for server in servers:
            if pod in server['primaryNetworkComponent']['router']['hostname']:
                tableDetails.add_row([pod, server['id'], server['hostname'], server['domain'], 'Hardware'])
                #print("   Server Id: %s   Hostname: %s   Domain: %s" % (server['id'], server['hostname'], server['domain']))
        for vsi in vsis:
            if pod in vsi['primaryNetworkComponent']['router']['hostname']:
                tableDetails.add_row([pod, vsi['id'], vsi['hostname'], vsi['domain'], 'Virtual Guest'])
                #print("   Virtual Server Id: %s   Hostname: %s   Domain: %s" % (vsi['id'], vsi['hostname'], vsi['domain']))
        print(tableDetails)

except SoftLayer.SoftLayerAPIError as e:
    print("Error. " % (e.faultCode, e.faultString))

它显​​示了来自特定数据中心的每个 pod 的裸机和虚拟服务器,试试吧,如果您需要进一步的帮助或有任何疑问,请告诉我