365 lines
10 KiB
Python
365 lines
10 KiB
Python
# -*- coding: utf-8 -*-
|
|
# !/usr/bin/env python
|
|
|
|
# Copyright (c) 2014 Baidu.com, Inc. All Rights Reserved
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
|
|
# the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
|
|
# an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations under the License.
|
|
|
|
"""
|
|
This module provides a client class for LBDC.
|
|
"""
|
|
import copy
|
|
import json
|
|
import logging
|
|
import uuid
|
|
|
|
from baidubce.bce_base_client import BceBaseClient
|
|
from baidubce.auth import bce_v1_signer
|
|
from baidubce.http import bce_http_client
|
|
from baidubce.http import handler
|
|
from baidubce.http import http_methods
|
|
|
|
from baidubce import compat
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
class LbdcClient(BceBaseClient):
|
|
"""
|
|
|
|
LBDC base sdk client
|
|
"""
|
|
|
|
prefix = b'/v1'
|
|
path = b'/lbdc'
|
|
|
|
def __init__(self, config=None):
|
|
"""
|
|
:param config: client config info
|
|
reuse BceBaseClient init func
|
|
"""
|
|
BceBaseClient.__init__(self, config)
|
|
|
|
@staticmethod
|
|
def _generate_default_client_token():
|
|
"""
|
|
|
|
default client token by uuid1
|
|
"""
|
|
return uuid.uuid1()
|
|
|
|
def _merge_config(self, config):
|
|
"""
|
|
|
|
:type config: baidubce.BceClientConfiguration
|
|
:param config:
|
|
:return:
|
|
"""
|
|
if config is None:
|
|
return self.config
|
|
else:
|
|
new_config = copy.copy(self.config)
|
|
new_config.merge_non_none_values(config)
|
|
return new_config
|
|
|
|
def _send_request(self, http_method, path, body=None, headers=None,
|
|
params=None, config=None, body_parser=None):
|
|
"""
|
|
|
|
:param http_method:
|
|
:param path:
|
|
:param body:
|
|
:param headers:
|
|
:param params:
|
|
|
|
:type config: baidubce.BceClientConfiguration
|
|
:param config:
|
|
|
|
:param body_parser:
|
|
|
|
:return: baidubce.BceResponse
|
|
"""
|
|
config = self._merge_config(config)
|
|
if body_parser is None:
|
|
body_parser = handler.parse_json
|
|
|
|
if headers is None:
|
|
headers = {b'Accept': b'*/*',
|
|
b'Content-Type': b'application/json;charset=utf-8'}
|
|
|
|
return bce_http_client.send_request(config, bce_v1_signer.sign,
|
|
[handler.parse_error, body_parser],
|
|
http_method, LbdcClient.prefix + path, body, headers,
|
|
params)
|
|
|
|
def create_lbdc(self, name, type, ccu_count, billing, desc=None, renew=None, client_token=None, config=None):
|
|
"""
|
|
|
|
The method of lbdc to be created.
|
|
:param name:
|
|
name
|
|
:type name: str
|
|
|
|
:param type:
|
|
lbdc type
|
|
:type type: str
|
|
|
|
:param ccu_count:
|
|
count of Cluster Capacity Unit
|
|
:type ccu_count: int
|
|
|
|
:param billing:
|
|
order_configuration
|
|
:type billing:Billing
|
|
|
|
:param desc:
|
|
description of the cluster
|
|
:type desc: string
|
|
|
|
:param renew:
|
|
reservation info of order_configuration
|
|
:type renew:Billing.reservation
|
|
|
|
:param client_token:
|
|
An ASCII string whose length is less than 64.
|
|
The request will be idempotent if clientToken is provided.
|
|
If the clientToken is not specified by the user, a random String
|
|
generated by default algorithm will be used.
|
|
:type client_token: string
|
|
|
|
:param config:
|
|
:type config: baidubce.BceClientConfiguration
|
|
|
|
:return:
|
|
:rtype baidubce.bce_response.BceResponse
|
|
"""
|
|
if client_token is None:
|
|
client_token = self._generate_default_client_token()
|
|
params = {
|
|
b'clientToken': client_token
|
|
}
|
|
|
|
body = {
|
|
b'name': name,
|
|
b'type': type,
|
|
b'ccuCount': ccu_count,
|
|
b'billing': {
|
|
b'paymentTiming': billing.payment_timing,
|
|
b'reservation': {
|
|
b'reservationLength': billing.reservation_length
|
|
}
|
|
}
|
|
}
|
|
if desc is not None:
|
|
body[b'desc'] = desc
|
|
if renew is not None:
|
|
body[b'renewReservation'] = {
|
|
b'reservationLength': billing.reservation_length
|
|
}
|
|
return self._send_request(http_methods.POST, LbdcClient.path, body=json.dumps(body), params=params,
|
|
config=config)
|
|
|
|
def upgrade_lbdc(self, lbdc_id, ccu_count, action=b'resize', client_token=None, config=None):
|
|
"""
|
|
The method of lbdc to be upgrade.
|
|
|
|
:param lbdc_id: lbdc id
|
|
:type lbdc_id: str
|
|
|
|
:param ccu_count: count of Cluster Capacity Unit
|
|
:type ccu_count: int
|
|
|
|
:param action: action to upgrade lbdc
|
|
:type action: str
|
|
|
|
:param client_token:
|
|
An ASCII string whose length is less than 64.
|
|
The request will be idempotent if clientToken is provided.
|
|
If the clientToken is not specified by the user, a random String
|
|
generated by default algorithm will be used.
|
|
:type client_token: string
|
|
|
|
:param config:
|
|
:type config: baidubce.BceClientConfiguration
|
|
|
|
:return:
|
|
:rtype baidubce.bce_response.BceResponse
|
|
"""
|
|
|
|
path = LbdcClient.path + b'/' + compat.convert_to_bytes(lbdc_id)
|
|
|
|
if client_token is None:
|
|
client_token = self._generate_default_client_token()
|
|
params = {
|
|
b'clientToken': client_token,
|
|
action: '',
|
|
}
|
|
|
|
body = {
|
|
b'ccuCount': ccu_count,
|
|
}
|
|
|
|
return self._send_request(http_methods.PUT, path, body=json.dumps(body), params=params,
|
|
config=config)
|
|
|
|
def renew_lbdc(self, lbdc_id, billing, action=b'purchaseReserved', client_token=None, config=None):
|
|
"""
|
|
|
|
renew lbdc
|
|
|
|
:param lbdc_id:
|
|
The id of lbdc.
|
|
:type lbdc_id: str
|
|
|
|
:param billing: order_configuration
|
|
:type billing:Billing
|
|
|
|
:param action: action to update lbdc
|
|
:type action: str
|
|
|
|
:param client_token:
|
|
An ASCII string whose length is less than 64.
|
|
The request will be idempotent if clientToken is provided.
|
|
If the clientToken is not specified by the user, a random String generated by default algorithm will
|
|
be used.
|
|
:type client_token: string
|
|
|
|
:param config:
|
|
:type config: baidubce.BceClientConfiguration
|
|
|
|
:return:
|
|
:rtype baidubce.bce_response.BceResponse
|
|
"""
|
|
path = LbdcClient.path + b'/' + compat.convert_to_bytes(lbdc_id)
|
|
if client_token is None:
|
|
client_token = self._generate_default_client_token()
|
|
params = {
|
|
b'clientToken': client_token,
|
|
action: '',
|
|
}
|
|
|
|
body = {
|
|
b'billing': {
|
|
b'reservation': {
|
|
b'reservationLength': billing.reservation_length
|
|
}
|
|
}
|
|
}
|
|
return self._send_request(http_methods.PUT, path, body=json.dumps(body), params=params,
|
|
config=config)
|
|
|
|
def list_lbdc(self, lbdc_id=None, name=None, config=None):
|
|
"""
|
|
|
|
return all lbdc list about query info
|
|
|
|
:param lbdc_id: lbdc id
|
|
:type lbdc_id: str
|
|
|
|
:param name: lbdc name
|
|
:type name: str
|
|
|
|
:param config:
|
|
:type config: baidubce.BceClientConfiguration
|
|
|
|
:return:
|
|
:rtype baidubce.bce_response.BceResponse
|
|
"""
|
|
params = {}
|
|
if lbdc_id is not None:
|
|
params[b'id'] = lbdc_id
|
|
if name is not None:
|
|
params[b'name'] = name
|
|
|
|
return self._send_request(http_methods.GET, LbdcClient.path, params=params, config=config)
|
|
|
|
def get_lbdc(self, lbdc_id, config=None):
|
|
"""
|
|
|
|
Get the detail information of lbdc.
|
|
|
|
:param lbdc_id:
|
|
The id of lbdc.
|
|
:type lbdc_id: str
|
|
|
|
:param config:
|
|
:type config: baidubce.BceClientConfiguration
|
|
|
|
:return:
|
|
:rtype baidubce.bce_response.BceResponse
|
|
"""
|
|
path = LbdcClient.path + b'/' + compat.convert_to_bytes(lbdc_id)
|
|
|
|
return self._send_request(http_methods.GET, path, config=config)
|
|
|
|
def update_lbdc(self, lbdc_id, name=None, desc=None, client_token=None, config=None):
|
|
"""
|
|
|
|
renew lbdc
|
|
|
|
:param lbdc_id:
|
|
The id of lbdc.
|
|
:type lbdc_id: string
|
|
|
|
:param name:
|
|
The name of lbdc
|
|
:type name: str
|
|
|
|
:param desc: description
|
|
:type desc: str
|
|
|
|
:param client_token:
|
|
An ASCII string whose length is less than 64.
|
|
The request will be idempotent if clientToken is provided.
|
|
If the clientToken is not specified by the user, a random String generated by default algorithm will
|
|
be used.
|
|
:type client_token: string
|
|
|
|
:param config:
|
|
:type config: baidubce.BceClientConfiguration
|
|
|
|
:return:
|
|
:rtype baidubce.bce_response.BceResponse
|
|
"""
|
|
path = LbdcClient.path + b'/' + compat.convert_to_bytes(lbdc_id)
|
|
if client_token is None:
|
|
client_token = self._generate_default_client_token()
|
|
params = {
|
|
b'clientToken': client_token
|
|
}
|
|
|
|
body = {}
|
|
if name is not None:
|
|
body[b'name'] = name
|
|
if desc is not None:
|
|
body[b'desc'] = desc
|
|
return self._send_request(http_methods.PUT, path, body=json.dumps(body), params=params,
|
|
config=config)
|
|
|
|
def list_lbdc_blb(self, lbdc_id, config=None):
|
|
"""
|
|
|
|
return all lbdc list about query info
|
|
|
|
:param lbdc_id: lbdc id
|
|
:type lbdc_id:string
|
|
|
|
:param config:
|
|
:type config: baidubce.BceClientConfiguration
|
|
|
|
:return:
|
|
:rtype baidubce.bce_response.BceResponse
|
|
"""
|
|
params = {}
|
|
if lbdc_id is not None:
|
|
params[b'id'] = lbdc_id
|
|
|
|
return self._send_request(http_methods.GET, LbdcClient.path, params=params, config=config)
|