| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697 |
- # -*- coding: utf-8 -*-
- # 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 EIP.
- """
- import copy
- import json
- import logging
- import uuid
- from baidubce import utils
- from baidubce.auth import bce_v1_signer
- from baidubce.bce_base_client import BceBaseClient
- from baidubce.http import bce_http_client
- from baidubce.http import handler
- from baidubce.http import http_methods
- from baidubce.services.eip.model import EipStatus
- _logger = logging.getLogger(__name__)
- class EipClient(BceBaseClient):
- """
- eip sdk client
- """
- version = b'/v1'
- prefix = b'/eip'
- def __init__(self, config=None):
- """
- :type config: baidubce.BceClientConfiguration
- :param config:
- """
- BceBaseClient.__init__(self, config)
- def create_eip(self, bandwidth_in_mbps, name=None, billing=None,
- route_type=None, client_token=None, config=None):
- """
- Create an eip with the specified options.
- :type bandwidth_in_mbps: int
- :param bandwidth_in_mbps: specify the bandwidth in Mbps
- :type name: string
- :param name: name of eip. The optional parameter
- :type billing: Billing
- :param billing: billing information. The optional parameter,
- default paymentTiming is Postpaid
- :type client_token: string
- :param client_token: if the clientToken is not specified by the user,
- a random String generated by default algorithm will be used.
- :type config: baidubce.BceClientConfiguration
- :param config:
- :return: created eip address, for example,{"eip":"x.x.x.x"}
- """
- body = {
- 'name': name,
- 'bandwidthInMbps': bandwidth_in_mbps
- }
- if route_type is not None:
- body['routeType'] = route_type
- if billing is None:
- body['billing'] = {
- 'paymentTiming': 'Postpaid',
- 'billingMethod': 'ByBandwidth'
- }
- else:
- body['billing'] = {
- 'paymentTiming': billing.payment_timing,
- 'billingMethod': billing.billing_method,
- 'reservation': {
- 'reservationLength': billing.reservation_length,
- 'reservationTimeUnit': billing.reservation_time_unit
- }
- }
- path = self._get_path()
- if client_token is None:
- client_token = self._generate_default_client_token()
- params = {
- b'clientToken': client_token
- }
- return self._send_request(http_methods.POST, path,
- body=json.dumps(body), params=params,
- config=config)
- def resize_eip(self, eip, new_bandwidth_in_mbps, client_token=None,
- config=None):
- """
- Resizing eip
- :type eip: string
- :param eip: eip address to be resized
- :type new_bandwidth_in_mbps: int
- :param new_bandwidth_in_mbps: specify new bandwidth in Mbps for eip
- :type client_token: string
- :param client_token: if the clientToken is not specified by the user,
- a random String generated by default algorithm will be used.
- :type config: baidubce.BceClientConfiguration
- :param config:
- :return: BceResponse
- """
- body = {
- 'newBandwidthInMbps': new_bandwidth_in_mbps
- }
- path = utils.append_uri(self._get_path(), eip)
- if client_token is None:
- client_token = self._generate_default_client_token()
- params = {
- b'resize': b'',
- b'clientToken': client_token
- }
- return self._send_request(http_methods.PUT, path, params=params,
- body=json.dumps(body), config=config)
- def purchase_reserved_eip(self, eip, billing=None, client_token=None,
- config=None):
- """
- PurchaseReserved eip with fixed duration,only Prepaid eip can do this
- :type eip: string
- :param eip: eip address to be renewed
- :type billing: Billing
- :param billing: billing information. The optional parameter,
- default reservationLength is 1
- :type client_token: string
- :param client_token: if the clientToken is not specified by the user,
- a random String generated by default algorithm will be used.
- :type config: baidubce.BceClientConfiguration
- :param config:
- :return: BceResponse
- """
- if billing is None:
- body = {
- 'billing': {
- 'reservation': {
- 'reservationLength': 1,
- 'reservationTimeUnit': 'Month'
- }
- }
- }
- else:
- body = {
- 'billing': {
- 'reservation': {
- 'reservationLength': billing.reservation_length,
- 'reservationTimeUnit': billing.reservation_time_unit
- }
- }
- }
- path = utils.append_uri(self._get_path(), eip)
- if client_token is None:
- client_token = self._generate_default_client_token()
- params = {
- b'purchaseReserved': b'',
- b'clientToken': client_token
- }
- return self._send_request(http_methods.PUT, path, params=params,
- body=json.dumps(body), config=config)
-
- def start_auto_renew_eip(self, eip, auto_renew_time_unit=None, auto_renew_time=None,
- client_token=None, config=None):
- """
- Enable auto renew for specified EIP.
- :type eip: string
- :param eip: eip address to be enable to auto-renew.
- :type auto_renew_time_unit: string
- :param auto_renew_time_unit: time unit of auto_renew_time, default 'Month'.
- :type auto_renew_time: int
- :param auto_renew_time: the unit of time for auto renew,
- default auto_renew_time is 1
- :type client_token: string
- :param client_token: if the clientToken is not specified by the user,
- a random String generated by default algorithm will be used.
- :type config: baidubce.BceClientConfiguration
- :param config:
- :return: BceResponse
- """
- if auto_renew_time_unit is None:
- auto_renew_time_unit = 'month'
- if auto_renew_time is None:
- auto_renew_time = 1
- body = {
- 'autoRenewTimeUnit': auto_renew_time_unit,
- 'autoRenewTime': auto_renew_time
- }
- path = utils.append_uri(self._get_path(), eip)
- if client_token is None:
- client_token = self._generate_default_client_token()
- params = {
- b'startAutoRenew': b'',
- b'clientToken': client_token
- }
- return self._send_request(http_methods.PUT, path, params=params,
- body=json.dumps(body), config=config)
-
- def stop_auto_renew_eip(self, eip, client_token=None, config=None):
- """
- Disable auto renew for specified EIP.
- :type eip: string
- :param eip: eip address to be disable to auto-renew.
- :type client_token: string
- :param client_token: if the clientToken is not specified by the user,
- a random String generated by default algorithm will be used.
- :type config: baidubce.BceClientConfiguration
- :param config:
- :return: BceResponse
- """
- path = utils.append_uri(self._get_path(), eip)
- if client_token is None:
- client_token = self._generate_default_client_token()
- params = {
- b'stopAutoRenew': b'',
- b'clientToken': client_token
- }
- # Sending the HTTP request
- return self._send_request(http_methods.PUT, path, params=params, config=config)
- def bind_eip(self, eip, instance_type, instance_id, instance_ip, client_token=None,
- config=None):
- """
- bind the eip to a specified instanceId and instanceType
- :type eip: string
- :param eip: eip address to be bound
- :type instance_type: string
- :param instance_type: type of instance to be bound(BCC BLB et.)
- :type instance_id: string
- :param instance_id: id of instance to be bound
- :type client_token: string
- :param client_token: if the clientToken is not specified by the user,
- a random String generated by default algorithm will be used.
- :type config: baidubce.BceClientConfiguration
- :param config:
- :return: BceResponse
- """
- body = {
- 'instanceType': instance_type,
- 'instanceId': instance_id
- }
- if instance_ip is not None:
- body['instanceIp'] = instance_ip
- path = utils.append_uri(self._get_path(), eip)
- if client_token is None:
- client_token = self._generate_default_client_token()
- params = {
- b'bind': b'',
- b'clientToken': client_token
- }
- return self._send_request(http_methods.PUT, path, params=params,
- body=json.dumps(body), config=config)
- def unbind_eip(self, eip, client_token=None, config=None):
- """
- unbind the eip from a specified instance
- :type eip: string
- :param eip: eip address to be unbound
- :type client_token: string
- :param client_token: if the clientToken is not specified by the user,
- a random String generated by default algorithm will be used.
- :type config: baidubce.BceClientConfiguration
- :param config:
- :return: BceResponse
- """
- path = utils.append_uri(self._get_path(), eip)
- if client_token is None:
- client_token = self._generate_default_client_token()
- params = {
- b'unbind': b'',
- b'clientToken': client_token
- }
- return self._send_request(http_methods.PUT, path, params=params,
- config=config)
- def release_eip(self, eip, client_token=None, config=None):
- """
- release the eip(delete operation)
- Only the Postpaid instance or Prepaid which is expired can be released.
- if the eip has been bound, must unbind before releasing.
- :type eip: string
- :param eip: eip address to be released
- :type client_token: string
- :param client_token: if the clientToken is not specified by the user,
- a random String generated by default algorithm will be used.
- :type config: baidubce.BceClientConfiguration
- :param config:
- :return: BceResponse
- """
- path = utils.append_uri(self._get_path(), eip)
- if client_token is None:
- client_token = self._generate_default_client_token()
- params = {
- b'clientToken': client_token
- }
- return self._send_request(http_methods.DELETE, path, params=params,
- config=config)
-
- def direct_eip(self, eip, client_token=None, config=None):
- """
- turn on EIP pass through with the specific parameters.
- :type eip: string
- :param eip: the specific EIP.
- :type client_token: string
- :param client_token: if the clientToken is not specified by the user,
- a random String generated by default algorithm will be used.
- :type config: baidubce.BceClientConfiguration
- :param config: None
- :return: BceResponse
- """
- path = utils.append_uri(self._get_path(), eip)
- if client_token is None:
- client_token = self._generate_default_client_token()
- params = {
- b'direct': b'',
- b'clientToken': client_token
- }
- return self._send_request(http_methods.PUT, path, params=params, config=config)
-
- def undirect_eip(self, eip, client_token, config=None):
- """
- Remove the direction of an EIP from a specific instance.
-
- :type eip: string
- :param eip: the EIP address to undirect.
- :type client_token: string
- :param client_token: If the clientToken is not specified by the user,
- a random String generated by default algorithm will be used.
- :type config: baidubce.BceClientConfiguration
- :param config: None
- :return: BceResponse
- """
- path = utils.append_uri(self._get_path(), eip)
- if client_token is None:
- client_token = self._generate_default_client_token()
- params = {
- b'unDirect': b'',
- b'clientToken': client_token
- }
- return self._send_request(http_methods.PUT, path, params=params, config=config)
- def list_eips(self, eip=None, instance_type=None, ip_version=None, instance_id=None,
- status=None, marker=None, max_keys=1000, config=None):
- """
- get a list of eip owned by the authenticated user and specified
- conditions. we can Also get a single eip function through this
- interface by eip condition
- :type eip: string
- :param eip: eip address condition
- :type instance_type: string
- :param instance_type: bound instance type condition
- :type instance_id: string
- :param instance_id: bound instance id condition
- if query by the instanceId or instanceType condition, must provides
- both of them at the same time
- :type status: string
- :param status of eip condition
- if query by the status condition, must provides
- :type marker: string
- :param marker: The optional parameter marker specified in the original
- request to specify where in the results to begin listing.
- :type max_keys: int
- :param max_keys: The optional parameter to specifies the max number
- of list result to return. The default value is 1000.
- :type config: baidubce.BceClientConfiguration
- :param config:
- :return: list of eip model, for example:
- {
- "eipList": [
- {
- "name":"eip-xxxxxxx-1",
- "eip": "x.x.x.x",
- "status":"binded",
- "instanceType": "BCC",
- "instanceId": "i-xxxxxxx",
- "bandwidthInMbps": 5,
- "paymentTiming":"Prepaid",
- "billingMethod":"ByBandwidth",
- "createTime":"2016-03-08T08:13:09Z",
- "expireTime":"2016-04-08T08:13:09Z"
- },
- {
- "name":"eip-xxxxxxx-1",
- "eip": "x.x.x.x",
- "status":"binded",
- "instanceType": "BCC",
- "instanceId": "i-xxxxxxx",
- "bandwidthInMbps": 1,
- "paymentTiming":"Postpaid",
- "billingMethod":"ByTraffic",
- "createTime":"2016-03-08T08:13:09Z",
- "expireTime":null
- },
- ],
- "marker":"eip-xxxxxxx-1",
- "isTruncated": true,
- "nextMarker": "eip-DCB50387",
- "maxKeys": 2
- }
- """
- path = self._get_path()
- params = {}
- if eip is not None:
- params[b'eip'] = eip
- if instance_type is not None:
- params[b'instanceType'] = instance_type
- if instance_id is not None:
- params[b'instanceId'] = instance_id
- if status is not None and isinstance(status, EipStatus):
- params[b'status'] = status.value
- if marker is not None:
- params[b'marker'] = marker
- if max_keys is not None:
- params[b'maxKeys'] = max_keys
- if ip_version is not None:
- params[b'ipVersion'] = ip_version
- return self._send_request(http_methods.GET, path, params=params,
- config=config)
- def list_eip_recycle(self, eip=None, name=None, marker=None, max_keys=1000, config=None):
- """
- list all EIP in the recycle bin with the specific parameters.
- :type eip: string
- :param eip: eip address condition
- :type name: string
- :param name: eip name condition
- :type marker: string
- :param marker: The optional parameter marker specified in the original
- request to specify where in the results to begin listing.
- :type max_keys: int
- :param max_keys: The optional parameter to specifies the max number
- of list result to return. The default value is 1000.
- :type config: baidubce.BceClientConfiguration
- :param config: None
- :return: list of eip model, for example:
- {
- "eipList": [
- {
- "name":"eip-xxxxxxx-1",
- "eip": "x.x.x.x",
- "eip_id":"ip-xxxxxxxx",
- "status": "paused",
- "route_type": "BGP",
- "bandwidth_in_mbps": 5,
- "payment_timing":"Prepaid",
- "billing_method":"ByBandwidth",
- "recycle_time":"2016-03-08T08:13:09Z",
- "scheduled_delete_time":"2016-04-08T08:13:09Z"
- },
- {
- "name":"eip-xxxxxxx-2",
- "eip": "x.x.x.x",
- "eip_id":"ip-xxxxxxxx",
- "status": "paused",
- "route_type": "BGP",
- "bandwidth_in_mbps": 10,
- "payment_timing":"Postpaid",
- "billing_method":"ByBandwidth",
- "recycle_time":"2016-03-08T08:13:09Z",
- "scheduled_delete_time":"2016-04-08T08:13:09Z"
- },
- ],
- "marker":"ip-xxxxxxxx",
- "is_truncated": true,
- "max_keys": 1000
- }
- """
- path = utils.append_uri(self._get_path(), 'recycle')
- params = {}
- if eip is not None:
- params[b'eip'] = eip
- if name is not None:
- params[b'name'] = name
- if marker is not None:
- params[b'marker'] = marker
- if max_keys is not None:
- params[b'maxKeys'] = max_keys
- return self._send_request(http_methods.GET, path, params=params, config=config)
-
- def optional_delete_eip(self, eip, release_to_recycle=False, client_token=None, config=None):
- """
- delete an EIP with additional options.
- :type eip: string
- :param eip: the EIP address to delete.
- :type release_to_recycle: bool
- :param release_to_recycle: flag to release EIP to recycle bin.
- :type client_token: string
- :param client_token: if the clientToken is not specified by the user,
- a random String generated by default algorithm will be used.
- :type config: baidubce.BceClientConfiguration
- :param config:
- :return: BceResponse
- """
- path = utils.append_uri(self._get_path(), eip)
- if client_token is None:
- client_token = self._generate_default_client_token()
- params = {
- b'clientToken': client_token,
- b'releaseToRecycle': release_to_recycle
- }
- return self._send_request(http_methods.DELETE, path, params=params, config=config)
- def restore_recycle_eip(self, eip, client_token=None, config=None):
- """
- restore an EIP from the recycle bin.
- :type eip: string
- :param eip: eip address to be restored from recycle bin.
- :type client_token: string
- :param client_token: if the clientToken is not specified by the user,
- a random String generated by default algorithm will be used.
- :type config: baidubce.BceClientConfiguration
- :param config:
- :return: BceResponse
- """
- path = utils.append_uri(self._get_path(), 'recycle', eip)
- if client_token is None:
- client_token = self._generate_default_client_token()
- params = {
- b'restore': b'',
- b'clientToken': client_token
- }
- return self._send_request(http_methods.PUT, path, params=params, config=config)
- def delete_recycle_eip(self, eip, client_token=None, config=None):
- """
- delete an EIP from the recycle bin.
- :type eip: string
- :param eip: eip address to be delete from recycle bin.
- :type client_token: string
- :param client_token: if the clientToken is not specified by the user,
- a random String generated by default algorithm will be used.
- :type config: baidubce.BceClientConfiguration
- :param config:
- :return: BceResponse
- """
- path = utils.append_uri(self._get_path(), 'recycle', eip)
- if client_token is None:
- client_token = self._generate_default_client_token()
- params = {
- b'clientToken': client_token
- }
- return self._send_request(http_methods.DELETE, path, params=params, config=config)
- @staticmethod
- def _generate_default_client_token():
- """
- default client token by uuid1
- """
- return uuid.uuid1()
- @staticmethod
- def _get_path(prefix=None):
- """
- :type prefix: string
- :param prefix: path prefix
- """
- if prefix is None:
- prefix = EipClient.prefix
- return utils.append_uri(EipClient.version, prefix)
- 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, path, body, headers,
- params)
|