Python

Python

SoftLayer, una società IBM, fornisce un pacchetto di API basato su Python che semplifica non poco l'effettuazione di chiamate API XML-RPC manuali. La nostra API basata su Python richiede come minimo Python 2.6 Per installare il pacchetto Python nella tua directory site-packages di installazione di Python, esegui questo comando:


pip install softlayer

Fai riferimento alla nostra documentazione dei bind Python per ulteriori opzioni di installazione.

Effettuazione di chiamate API

Una volta installato il client API, la prima cosa da fare è importare il pacchetto SoftLayer nel tuo script. Per eseguire questa operazione utilizza la seguente riga:

import SoftLayer

Dobbiamo quindi creare un oggetto client. Il frammento di codice fornisce un esempio di impostazione di un client API:

import SoftLayer
client = SoftLayer.Client(username='YOUR_USERNAME', api_key='YOUR_API_KEY')

Una volta pronto, possiamo utilizzare il nostro oggetto client API per effettuare chiamate. Ecco come ottenere i dettagli per l'account corrente. La chiamata non accetta parametri e non richiede un ID, quindi è il punto di partenza naturale.

client['Account'].getObject()

Viene qui illustrato il modo in cui si crea una nuova istanza di elaborazione CloudLayer, che richiede l'utilizzo del record di guest virtuale. Il record di guest virtuale è un tipo complesso, che viene passato come un dizionario Python.

 
client['Virtual_Guest'].createObject({
    'hostname': 'myhostname',
    'domain': 'example.org',
    'startCpus': 1,
    'maxMemory': 1024,
    'hourlyBillingFlag': 'true',
    'operatingSystemReferenceCode': 'UBUNTU_LATEST',
    'localDiskFlag': 'false'
})

Viene qui illustrato il modo in cui si crea una nuova zona di dominio sul nostro servizio DNS.

 
new_domain = client['Dns_Domain'].createObject({{
    'name' : 'example.org',
    'resourceRecords' => [
        {
            'host' : '@',
            'data' : '127.0.0.1',
            'type' : 'a',
        }
    ]
})

Ora che abbiamo creato una zona per il nostro dominio, vediamo nell'esempio come aggiungere successivamente un record A nella zona. Nota il modo in cui i parametri vengono passati come argomenti posizionali e come l'id dominio richiesto viene passato utilizzando l'argomento di parola chiave id. Questo esempio utilizza l'id dominio che era stato creato nell'ultima chiamata.Sarah Reese] (Just a question – should Domain ID be capitalized or should be lower case?)

new_record = client['Dns_Domain'].createARecord('myhost', '127.0.0.1', 86400, id=new_domain['id'])
 
print("New A record id: %", new_record['id'])

Utilizzo delle maschere oggetto

Le maschere oggetto ti consentono di controllare quali attributi vengono restituiti in ciascuna chiamata. Possono essere utilizzate per analizzare in modo più approfondito un oggetto per ottenere specifiche[Sarah Reese] We’re missing the rest of this sentence.

# Because of the object mask that we're using we will retrieve the following
# for each server:
# * operating system passwords
# * all network components
# * the datacenter the server is located in
# * the number of processors
object_mask = 'operatingSystem.passwords, networkComponents, datacenter, processorCount'
hardware = client['Account'].getHardware(mask=object_mask)

Utilizzo dei limiti dei risultati

L'API SoftLayer consente dei limiti al numero di risultati restituiti e degli offset per controllare meglio la quantità di dati restituita su specifiche chiamate. Viene qui di seguito riportato un esempio che mostra l'impaginazione.

client['Account'].getVirtualGuests(limit=10, offset=0)  # Page 1
client['Account'].getVirtualGuests(limit=10, offset=10)  # Page 2

Gestione degli errori

Gli errori che si verificano quando si effettuano chiamate API SoftLayer si presentano come eccezioni. Il seguente script fornisce un esempio di come è possibile gestire un errore API. In questo caso, ci limitiamo a stampare i dettagli dell'errore e uscire:

client = SoftLayer.Client(username='invalid', api_key='invalid')
 
try:
    account = client['Account'].getObject()
except SoftLayer.SoftLayerAPIError as e:
    print("Unable to retrieve account information faultCode=%s, faultString=%s"
          % (e.faultCode, e.faultString))
    exit(1)
# This should output:
# Unable to retrieve account information faultCode=SoftLayer_Exception, faultString=Invalid API token.

Manager

Tutto quanto ha preceduto questa sezione era dedicato alla modalità di utilizzo del client API base per interagire con l'API XML-RPC qui documentata su SLDN. I bind Python dispongono anche di manager che astraggono parte della funzionalità dalle chiamate API dirette. Per una guida di riferimento a tutti i manager disponibili, fare riferimento alla documentazione di API Python Client.

Creare una nuova istanza di elaborazione CloudLayer, come abbiamo fatto prima, si presenterebbe così, utilizzando i nostri manager Python API Client (non
sono sicuro se i manager Python API Client sono proprio la scelta ideale; tu però sentiti libero di sostituirli con quelli che preferisci, all'occorrenza):

import SoftLayer
client = SoftLayer.Client(username='YOUR_USERNAME', api_key='YOUR_API_KEY')
cci_manager = SoftLayer.CCIManager(client)
cci_manager.create_instance(
    hostname='myhostname',
    domain='example.org',
    cpus=1,
    memory=1024,
    hourly=True,
    os_code='UBUNTU_LATEST',
    local_disk=False)

Quello qui di seguito è un esempio di elencazione dei server hardware con più di 8 gigabyte di memoria nel datacenter dal05.

hardware_manager = SoftLayer.HardwareManager(client)
hardware = hardware_manager.list_hardware(datacenter='dal05', memory='> 8')

I manager sono un buon approccio a un set secondario di dimensioni inferiori dell'API e forniscono un riferimento per eseguire delle attività comuni.

Ulteriori risorse

I bind Python sono sviluppati pubblicamente su GitHub. Vengono sviluppate le nuove funzioni e i bug vengono segnalati servendosi di Integrated Issue Tracking di GitHub. La documentazione completa per il client Phyton API SoftLayer è disponibile qui. I bind hanno anche un'interfaccia di riga comandi che non è stata menzionata qui. Puoi trovare ulteriori informazioni su tale interfaccia sul sito della documentazione completa.