Python

Python

SoftLayer, une société d'IBM, met à disposition un package API basé Python qui dispense des lourdeurs qu'impliquent les appels API XML-RPC manuels. Notre API Python exige au minimum la version Python 2.6. Pour placer le package Python dans le répertoire de packages sur site de votre installation Python, exécutez la commande suivante :


pip install softlayer

Pour d'autres d'options d'installation, reportez-vous à notre documentation sur les liaisons Python.

Exécution d'appels API

Une fois le client API installé, la première chose à faire est d'importer le package SoftLayer dans votre script. Pour cela, écrivez la ligne suivante :

import SoftLayer

Il vous faut ensuite créer un objet de client. Le fragment de code ci-dessous est un exemple de configuration d'un client API :

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

Une fois votre objet de client API prêt, vous pouvez l'utiliser pour effectuer des appels. La commande ci-après permet d'obtenir les détails du compte en cours. L'appel n'exige aucun paramètre et aucun identifiant : c'est donc le point de départ naturel.

client['Account'].getObject()

Nous allons voir ici comment créer une nouvelle instance de calcul CloudLayer nécessitant l'utilisation de l'enregistrement Virtual Guest. Cet enregistrement de type complexe est transmis en tant que dictionnaire Python.

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

Et voici comment créer une nouvelle zone de domaine sur notre service DNS :

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

Maintenant qu'une zone a été créée pour notre domaine, nous allons voir comment ajouter ensuite un enregistrement A dans cette zone. Notez comment les paramètres sont transmis en tant qu'arguments de position, avec transmission de l'ID domaine requis via l'argument de mot clé id. Cet exemple utilise l'ID domaine qui a été créé lors du dernier appel. [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'])

Utilisation de masques d'objet

Les objets de masque vous permettent de contrôler les attributs à renvoyer pour chaque appel. Vous pouvez les utiliser pour explorer un objet nettement plus en profondeur ... [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)

Utilisation de limites de résultats

Avec l'API SoftLayer, il vous est possible de limiter le nombre de résultats renvoyés ainsi que de définir des décalages, ce qui vous permet de mieux contrôler la quantité de données renvoyées suite à certains appels. Voici un exemple avec définition d'une mise en page :

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

Traitement des erreurs

Les erreurs qui se produisent lors d'appels de l'API SoftLayer se présentent sous forme d'exceptions. Le script ci-après est un exemple de traitement d'erreur API. Nous nous contentons ici d'imprimer les détails de l'erreur et de quitter :

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.

Gestionnaires

Dans toutes les sections qui précèdent, nous avons vu comment utiliser le client API de base pour interagir avec l'API XML-RPC qui est documentée ici sur SLDN. Les liaisons Python disposent par ailleurs de gestionnaires qui vont masquer certaines fonctionnalités dans les appels API directs. Pour toute information sur les différents gestionnaires disponibles, reportez-vous à notre documentation sur le client API Python.

Nous avons précédemment créé une nouvelle instance de calcul CloudLayer, et la commande correspondante se présentera sur le modèle ci-après si nous utilisons notre gestionnaire de client API Python (ce gestionnaire ne sera pas peut-être pas approprié dans votre cas ; n'hésitez pas à en utiliser un autre si nécessaire) :

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)

Voici un exemple de listage des serveurs matériels avec plus de 8 gigaoctets de mémoire dans le centre de données dal05 :

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

Les gestionnaires constituent un bon moyen pour accéder à un sous-ensemble réduit de l'API et fournissent une référence pour l'exécution de tâches communes.

Autres ressources

Les liaisons Python sont développées publiquement sur GitHub. Les nouvelles fonctions sont développées et les bogues sont signalés dans GitHub's Integrated Issue Tracking. La documentation complète pour le client API Python de SoftLayer est disponible ici. Une interface de ligne de commande, non discutée ici, est par ailleurs disponible pour les liaisons. Pour toute information concernant cette interface, accédez à sa documentation complète.