LoginSignup
1
0

More than 5 years have passed since last update.

IDCFクラウドのAPI Docsが公開されたのでpython3から色々と利用してみる

Posted at

IDCFクラウドのAPIドキュメントサイト、API Docsが公開されたので色々と試してみました。
ちょうどILB APIのRubyコードを読んでいた最中だったのですが、このサイトが公開されてとてもすんなり理解できたのですぐに実行させることができました。

環境変数にAPIキーとシークレットキー

export IDCF_APIKEY=確認したAPIキー
export IDCF_SECRETKEY=確認したシークレットキー

インフィニットLB一覧を表示する

# -*- conding:utf8 -*-

import os
import json
import requests
import hashlib,hmac
import time
import base64

METHOD='GET'
QUERY_STRING = ''
APIKEY=os.getenv("IDCF_APIKEY")
SECRET_KEY=os.getenv("IDCF_SECRETKEY")
ENDPOINT='https://ilb.jp-east-2.idcfcloud.com'
ENDPOINT_URI='/api/v1/loadbalancers'
EXPIRATION_SECONDS = 30

expiration = int(time.time()) + EXPIRATION_SECONDS
#print(expiration)

message = METHOD + "\n" + ENDPOINT_URI + "\n" + APIKEY + "\n" + str(expiration) + "\n" + QUERY_STRING
secret = SECRET_KEY

signature=hmac.new(bytes(secret, 'ascii'), bytes(message, 'ascii'), hashlib.sha256).digest()
sig=base64.b64encode(signature)

head = {'X-IDCF-APIKEY': APIKEY, \
        'X-IDCF-Expires' : str(expiration), \
        'X-IDCF-Signature' : str(sig,'utf-8') }
#print(head)
#URL生成
uri = ENDPOINT + ENDPOINT_URI + '?' + QUERY_STRING
print(uri)
res = requests.get(uri, headers=head)
data = res.json()
print(json.dumps(data,sort_keys=True,indent=4,separators=(',', ': ')))

インフィニットLB一覧実行結果

[
    {
        "account_id": "XXXXXXXXXXXXXXXXXXXXx",
        "configs": [
            {
                "algorithm": "roundrobin",
                "backend_protocol": "http",
                "connection_timeout": 60,
                "created_at": "2017-11-10T12:33:40.000+09:00",
                "frontend_protocol": "http",
                "healthcheck": {
                    "check_interval": 30,
                    "healthy_threshold": 3,
                    "path": "/.lbstat",
                    "timeout": 30,
                    "type": "http",
                    "unhealthy_threshold": 2
                },
                "id": "XXXXXXXXXXXXXXXXXXXXXxx",
                "loadbalancer_id": "XXXXXXXXXXXXXXXXXXXXX",
                "port": 80,
                "servers": [
                    {
                        "config_id": "XXXXXXXXXXXXXXXXXXXXX",
                        "created_at": "2017-11-10T12:33:39.000+09:00",
                        "id": "XXXXXXXXXXXXXXX",
                        "ipaddress": "10.XX.XX.XX",
                        "loadbalancer_id": "XXXXXXXXXXXXXX",
                        "port": 80,
                        "state": "Running",
                        "updated_at": "2017-11-10T12:33:43.000+09:00"
                    }
                ],
                "state": "Running",
                "stickiness_policy": "lb_cookie",
                "updated_at": "2017-11-10T12:33:43.000+09:00"
            }
        ],
        "created_at": "2017-03-24T09:19:37.000+09:00",
        "fqdn": "example.ilb.jp-east-2.idcfcloud.net",
        "id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        "name": "TESTILB",
        "network": {
            "account_id": "XXXXXXXXXXXXXXXXX",
            "domain": "XXXXXXXXXXXXXX",
            "domainid": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
            "gateway": "10.1.0.1",
            "id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
            "name": "weber-network1",
            "networkcidr": "10.1.0.0/22",
            "networkoffering_id": "XXXXXXXXXXXXXXXXXXXXXXX",
            "networkoffering_name": "DefaultIsolatedNetworkOffering",
            "related": "XXXXXXXXXXXXXXXXXXXXXXXX",
            "state": "Implemented",
            "traffic_type": "Guest",
            "zone_id": "XXXXXXXXXXXXXXXXXXXXXXXX",
            "zone_name": "weber"
        },
        "network_id": "XXXXXXXXXXXXXXXXXXXXXX",
        "network_name": "weber-network1",
        "state": "Running",
        "updated_at": "2017-11-10T12:33:48.000+09:00",
        "zone_id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        "zone_name": "weber"
    }
]

DNS Zone一覧を表示させる

# -*- conding:utf8 -*-

import os
import json
import requests
import hashlib,hmac
import time
import base64

METHOD='GET'
QUERY_STRING = ''
APIKEY=os.getenv("IDCF_APIKEY")
SECRET_KEY=os.getenv("IDCF_SECRETKEY")
ENDPOINT='https://dns.idcfcloud.com'
ENDPOINT_URI='/api/v1/zones'
EXPIRATION_SECONDS = 30

expiration = int(time.time()) + EXPIRATION_SECONDS
#print(expiration)

message = METHOD + "\n" + ENDPOINT_URI + "\n" + APIKEY + "\n" + str(expiration) + "\n" + QUERY_STRING
secret = SECRET_KEY

signature=hmac.new(bytes(secret, 'ascii'), bytes(message, 'ascii'), hashlib.sha256).digest()
sig=base64.b64encode(signature)

head = {'X-IDCF-APIKEY': APIKEY, \
        'X-IDCF-Expires' : str(expiration), \
        'X-IDCF-Signature' : str(sig,'utf-8') }
#print(head)
#URL生成
uri = ENDPOINT + ENDPOINT_URI + '?' + QUERY_STRING
print(uri)
res = requests.get(uri, headers=head)
data = res.json()
print(json.dumps(data,sort_keys=True,indent=4,separators=(',', ': ')))

DNS Zone一覧実行結果

[
    {
        "authenticated": "1",
        "created_at": "2016-12-02T13:10:13+09:00",
        "default_ttl": 3600,
        "description": "",
        "name": "example.com",
        "updated_at": "2016-12-02T13:10:13+09:00",
        "uuid": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    },
    {
        "authenticated": "1",
        "created_at": "2017-04-18T17:01:55+09:00",
        "default_ttl": 3600,
        "description": "",
        "name": "example.jp",
        "updated_at": "2017-04-18T17:01:55+09:00",
        "uuid": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxx"
    }
]

便利ですね!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0