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)