Python

Python

IBM 소유의 SoftLayer는 수작업으로 진행되던 XML-RPC API 호출에서 복잡한 단계를 제거한 Python 기반 API 패키지를 제공합니다. SoftLayer의 Python 기반 API는 최소한 Python 2.6이 필요합니다. Python 패키지를 사용자의 Python site-packages 디렉토리에 설치하려면 다음 명령을 실행합니다.


pip install softlayer

자세한 설치 옵션은 Python 바인딩 문서를 참조하십시오.

API 호출 작성

API 클라이언트를 설치했으면 먼저 스크립트에서 SoftLayer 패키지를 가져와야 합니다. 이를 위해서는 다음 행을 사용합니다.

import SoftLayer

이어서, 클라이언트 오브젝트를 작성해야 합니다. 아래의 코드 조각은 API 클라이언트 설정 예제를 제공합니다.

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

API 클라이언트 오브젝트가 준비되었으면 호출할 수 있습니다. 다음은 현재 계정의 계정 세부사항을 확인하는 방법입니다. 호출할 때 매개변수를 사용하지 않고 ID 또한 필요하지 않으므로 출발점으로 적합합니다.

client['Account'].getObject()

다음은 가상 게스트 레코드를 반드시 사용해야 하는, 새로운 CloudLayer Computing Instance를 작성하는 방법입니다. 가상 게스트 레코드는 복합 유형으로, Python 사전으로 전달됩니다.

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

다음은 당사 DNS 서비스에 새로운 도메인 영역을 작성하는 방법입니다.

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

당사 도메인에 영역을 작성했으므로, 다음 예제는 해당 영역에서 팩트 뒤에 A 레코드를 추가하는 방법을 보여줍니다. 어떻게 매개변수가 위치 인수로 전달되고 필수 도메인 id가 id 키워드 인수를 사용하여 전달되는지에 주의하십시오. 이 예제에는 마지막 호출에 작성된 도메인 id가 사용되었습니다.[Sarah Reese] (간단한 질문 – 도메인 ID가 대문자로 표기되어야 합니까? 아니면 소문자여야 합니까?)

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

오브젝트 마스크 사용

오브젝트 마스크를 사용하면 각 호출에서 리턴되는 속성을 제어할 수 있습니다. 오브젝트를 좀 더 심층 탐색하여 구체적인 정보를 구할 때 사용합니다. [Sarah Reese] 이 문장의 나머지가 생략되었습니다.

# 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)

결과 제한 사용

SoftLayer API에서 리턴되는 결과의 수를 제한하고 오프셋을 사용하여 특정 호출에서 리턴되는 데이터의 양을 더 효과적으로 제어할 수 있습니다. 아래에 페이지 매김 예제가 나와 있습니다.

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

오류 처리

SoftLayer API 호출을 작성할 때 발생하는 오류는 예외로 표시됩니다. 다음 스크립트는 API 오류를 어떻게 처리하는지에 대한 예제입니다. 이 경우, 오류 세부사항을 인쇄하고 종료하기만 하면 됩니다.

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.

관리자

이 섹션에 앞서 나온 내용들은 모두 기본 API 클라이언트를 사용하여 여기 SLDN에 설명된 XML-RPC API와 상호작용하는 방법을 다루었습니다. Python 바인딩 역시 직접 API 호출에서 몇 가지 기능을 추상화하는 관리자를 포함합니다. 모든 사용 가능한 관리자에 대한 정보는 API Python 클라이언트 문서를 참조하십시오.

위에서 했듯이 새로운 CloudLayer Computing Instance를 작성하면 Python API 클라이언트 관리자를 사용하는 다음 경우와 비슷하게 나타납니다(Python API 클라이언트 관리자가 맞는지 확실하지 않지만 필요하면 마음대로 바꿀 수 있음).

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)

dal05 데이터 센터에서 8기가바이트 이상의 메모리가 장착된 하드웨어 서버를 나열하는 예제가 아래에 나와 있습니다.

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

관리자는 소규모 API 서브세트에 사용하기 좋은 방법으로, 일반적인 태스크를 수행하기 위한 참조를 제공합니다.

기타 자원

Python 바인딩은 GitHub에서 공개적으로 개발됩니다. 새로운 기능을 개발하고 버그를 보고할 때는 GitHub의 통합 이슈 추적을 사용합니다. SoftLayer API Python 클라이언트에 대한 모든 문서는 여기에서 구할 수 있습니다. 바인딩에는 여기에 언급되지 않은 명령행 인터페이스도 포함되어 있습니다. 이에 관한 자세한 정보는 전체 문서 사이트에서 확인할 수 있습니다.