| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653 |
- """
- This module provides a client class for AS.
- """
- import copy
- import json
- import uuid
- from baidubce import bce_base_client, compat
- from baidubce.auth import bce_v1_signer
- from baidubce.http import handler, bce_http_client, http_methods
- from baidubce.services.autoscaling import as_handler
- from baidubce.utils import required
- class AsClient(bce_base_client.BceBaseClient):
- """
- AS base sdk client
- """
- version = b'/v1'
- content_type_header_key = b"content-type"
- content_type_header_value = b"application/json;charset=UTF-8"
- request_id_header_key = b"x-bce-request-id"
- def __init__(self, config=None):
- bce_base_client.BceBaseClient.__init__(self, config)
- def _merge_config(self, config=None):
- 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):
- config = self._merge_config(config)
- if body_parser is None:
- body_parser = handler.parse_json
- if headers is None:
- headers = {}
- if self.content_type_header_key not in headers:
- headers[self.content_type_header_key] = self.content_type_header_value
- if self.request_id_header_key not in headers:
- headers[self.request_id_header_key] = uuid.uuid4()
- return bce_http_client.send_request(
- config, bce_v1_signer.sign, [as_handler.parse_error, body_parser],
- http_method, AsClient.version + path, body, headers, params)
- def get_as_group_list(self, page_no=1, page_size=1000, keyword=None, keyword_type=None, order=None, order_by=None):
- """
- Get autoscaling group list
- :param page_no:
- page_no
- :type page_no: int
- :param keyword:
- query keyword
- :type keyword: string
- :param keyword_type:
- query keyword type
- :type keyword_type: string
- :param order:
- order-ascending order or descending order
- :type order: string
- :param order_by:
- order by param
- :type order_by:
- :return:
- :rtype baidubce.bce_response.BceResponse
- """
- params = {
- b'keyword': keyword,
- b'keywordType': keyword_type,
- b'order': order,
- b'orderBy': order_by,
- b'pageNo': page_no,
- b'pageSize': page_size,
- }
- path = b'/group'
- return self._send_request(http_methods.GET, path, params=params)
- def get_as_group_detail(self, group_id):
- """
- Get autoscaling group detail
- :param group_id:
- autoscaling group_id
- :type group_id: string
- :return:
- :rtype baidubce.bce_response.BceResponse
- """
- if len(group_id) <= 0:
- raise ValueError('group_id should not be none or empty string')
- group_id = compat.convert_to_bytes(group_id)
- path = b'/group/%s' % group_id
- return self._send_request(http_methods.GET, path)
- def get_as_group_node_list(self, group_id, page_no=1, page_size=1000, keyword=None, keyword_type=None, order=None,
- order_by=None):
- """
- Get autoscaling group node list
- :param group_id:
- autoscaling group_id
- :type group_id: string
- :param page_no:
- page_no
- :type page_no: int
- :param keyword:
- query keyword
- :type keyword: string
- :param keyword_type:
- query keyword type
- :type keyword_type: string
- :param order:
- order-ascending order or descending order
- :type order: string
- :param order_by:
- order by param
- :type order_by:
- :return:
- :rtype baidubce.bce_response.BceResponse
- """
- if len(group_id) <= 0:
- raise ValueError('group_id should not be none or empty string')
- params = {
- b'groupid': group_id,
- b'keyword': keyword,
- b'keywordType': keyword_type,
- b'order': order,
- b'orderBy': order_by,
- b'pageNo': page_no,
- b'pageSize': page_size,
- }
- path = b'/node'
- return self._send_request(http_methods.GET, path, params=params)
- def delete_group(self, group_ids):
- """
- Get autoscaling group node list
- :param group_ids:
- autoscaling group_ids
- :type group_ids: list of strings
- """
- if len(group_ids) <= 0:
- raise ValueError('group_id should not be none or empty string')
- path = b'/group/delete'
- body = {
- "groupIds": group_ids
- }
- return self._send_request(http_methods.POST, path, body=json.dumps(body))
- def create_group(self, group_name=None, config=None, health_check=None, blb=None, rds=None, scs=None,
- shrinkage_strategy=None, zone_infos=None, assign_tag_info=None, node_list=None,
- eip=None, billing=None, cmd_config=None, bcc_name_config=None):
- """
- Create autoscaling group
- :param group_name:
- autoscaling group_name
- :type group_name: string
- :param config:
- autoscaling group config
- :type config: dict
- :param health_check:
- autoscaling group health check info
- :type health_check: dict
- :param blb:
- blb info
- :type blb: list of strings
- :param rds:
- rds info
- :type rds: list of strings
- :param scs:
- scs info
- :type scs: list of strings
- :param shrinkage_strategy:
- autoscaling group shrinkage strategy
- :type shrinkage_strategy: string
- :param zone_info:
- autoscaling group zone info
- :type zone_info: dict
- :param assign_tag_info:
- autoscaling group tag info
- :type assign_tag_info: dict
- :param nodes:
- autoscaling group nodes
- :type nodes: dict
- :param eip:
- autoscaling group eip info
- :type eip: dict
- :param billing:
- autoscaling group billing info
- :type billing: dict
- :param cmd_config:
- autoscaling group cmd config
- :type cmd_config: dict
- :param bcc_name_config:
- autoscaling group bcc name config
- :type bcc_name_config: dict
- :return:
- :rtype baidubce.bce_response.BceResponse
- """
- path = b'/group'
- body = {
- 'groupName': group_name,
- 'config': config,
- 'healthCheck': health_check,
- 'blb': blb,
- 'rds': rds,
- 'scs': scs,
- 'shrinkageStrategy': shrinkage_strategy,
- 'zoneInfo': zone_infos,
- 'assignTagInfo': assign_tag_info,
- 'nodes': node_list,
- 'eip': eip,
- 'billing': billing,
- 'cmdConfig': cmd_config,
- 'bccNameConfig': bcc_name_config
- }
- return self._send_request(http_methods.POST, path, body=json.dumps(body))
- @required(group_id=str, nodes=list)
- def detach_node(self, group_id, nodes):
- """
- Detach nodes from group
- :param group_id: the id of group
- :type group_id: string
- :param nodes: the list of node
- :type nodes: list
- :return: the result of detach node
- :rtype: dict
- """
- path = b'/group/%s' % compat.convert_to_bytes(group_id)
- params = {
- "detachNode": ""
- }
- body = {
- "nodes": nodes
- }
- return self._send_request(http_methods.POST, path, body=json.dumps(body), params=params)
- @required(rule_name=str, group_id=str, state=str, rule_type=str, action_type=str, action_num=int,
- cooldown_in_sec=int)
- def create_rule(self, rule_name, group_id, state, rule_type, action_type, action_num, cooldown_in_sec,
- target_type="", target_id="", indicator="", threshold="0", unit="",
- comparison_operator="", cron_time="", period_type=None, period_value=None,
- period_start_time=None, period_end_time=None):
- """
- Create rule
- :param rule_name: the name of the rule
- :type rule_name: string
- :param group_id: the id of the group
- :type group_id: string
- :param state: the state of the rule, can be "ENABLE" or "DISABLE"
- :type state: string
- :param rule_type: the type of the rule, can be "ALARM", "CRONTAB", or "PERIOD"
- :type rule_type: string
- :param target_type: the type of the target
- :type target_type: string
- :param target_id: the id of the target
- :type target_id: string
- :param indicator: the indicator of the rule
- :type indicator: string
- :param threshold: the threshold of the rule
- :type threshold: string
- :param unit: the unit of the threshold
- :type unit: string
- :param comparison_operator: the comparison operator of the rule
- :type comparison_operator: string
- :param action_type: the action type of the rule, can be INCREASE, DECREASE, ADJUST
- :type action_type: string
- :param action_num: the number of actions to be performed
- :type action_num: int
- :param cron_time: the cron time of the rule
- :type cron_time: string
- :param cooldown_in_sec: the cooldown time in seconds
- :type cooldown_in_sec: int
- :param period_type: the period type of the rule
- :type period_type: string
- :param period_value: the period value of the rule
- :type period_value: int
- :param period_start_time: the start time of the period
- :type period_start_time: string
- :param period_end_time: the end time of the period
- :type period_end_time: string
- """
- path = b'/rule'
- body = {
- "ruleName": rule_name,
- "groupId": group_id,
- "state": state,
- "type": rule_type,
- "targetType": target_type,
- "targetId": target_id,
- "indicator": indicator,
- "threshold": threshold,
- "unit": unit,
- "comparisonOperator": comparison_operator,
- "actionType": action_type,
- "actionNum": action_num,
- "cronTime": cron_time,
- "cooldownInSec": cooldown_in_sec,
- "periodType": period_type,
- "periodValue": period_value,
- "periodStartTime": period_start_time,
- "periodEndTime": period_end_time
- }
- return self._send_request(http_methods.POST, path, body=json.dumps(body))
- @required(rule_id=str, rule_name=str, group_id=str, state=str, rule_type=str, action_type=str, action_num=int,
- cooldown_in_sec=int)
- def update_rule(self, rule_id, rule_name, group_id, state, rule_type, action_type, action_num, cooldown_in_sec,
- target_type="", target_id="", indicator="", threshold="0", unit="",
- comparison_operator="", cron_time="", period_type=None, period_value=None,
- period_start_time=None, period_end_time=None):
- """
- Update rule
- :param rule_id: the id of the rule
- :type rule_id: string
- :param rule_name: the name of the rule
- :type rule_name: string
- :param group_id: the id of the group
- :type group_id: string
- :param state: the state of the rule, can be "ENABLE" or "DISABLE"
- :type state: string
- :param rule_type: the type of the rule, can be "ALARM", "CRONTAB", or "PERIOD"
- :type rule_type: string
- :param target_type: the type of the target
- :type target_type: string
- :param target_id: the id of the target
- :type target_id: string
- :param indicator: the indicator of the rule
- :type indicator: string
- :param threshold: the threshold of the rule
- :type threshold: string
- :param unit: the unit of the threshold
- :type unit: string
- :param comparison_operator: the comparison operator of the rule
- :type comparison_operator: string
- :param action_type: the action type of the rule, can be INCREASE, DECREASE, ADJUST
- :type action_type: string
- :param action_num: the number of actions to be performed
- :type action_num: int
- :param cron_time: the cron time of the rule
- :type cron_time: string
- :param cooldown_in_sec: the cooldown time in seconds
- :type cooldown_in_sec: int
- :param period_type: the period type of the rule
- :type period_type: string
- :param period_value: the period value of the rule
- :type period_value: int
- :param period_start_time: the start time of the period
- :type period_start_time: string
- :param period_end_time: the end time of the period
- :type period_end_time: string
- """
- path = b'/rule/%s' % compat.convert_to_bytes(rule_id)
- body = {
- "ruleName": rule_name,
- "groupId": group_id,
- "state": state,
- "type": rule_type,
- "targetType": target_type,
- "targetId": target_id,
- "indicator": indicator,
- "threshold": threshold,
- "unit": unit,
- "comparisonOperator": comparison_operator,
- "actionType": action_type,
- "actionNum": action_num,
- "cronTime": cron_time,
- "cooldownInSec": cooldown_in_sec,
- "periodType": period_type,
- "periodValue": period_value,
- "periodStartTime": period_start_time,
- "periodEndTime": period_end_time
- }
- return self._send_request(http_methods.PUT, path, body=json.dumps(body))
- @required(rule_id=str)
- def get_rule(self, rule_id):
- """
- Get rule
- :param rule_id: the id of the rule
- :type rule_id: string
- :return: the result of get rule
- :rtype: dict
- """
- path = b'/rule/%s' % compat.convert_to_bytes(rule_id)
- return self._send_request(http_methods.GET, path)
- @required(group_id=str)
- def list_rule(self, group_id, keyword="", keyword_type="", order="desc", order_by="createTime", page_no=1,
- page_size=1000):
- """
- Query rule list
- :param group_id: the id of the group
- :type group_id: string
- :param keyword: the keyword of the rule
- :type keyword: string
- :param keyword_type: the type of the keyword
- :type keyword_type: string
- :param order: the order of the rule
- :type order: string
- :param order_by: the order by of the rule
- :type order_by: string
- :param page_no: the page number
- :type page_no: int
- :param page_size: the page size
- :type page_size: int
- """
- path = b'/rule'
- params = {
- "groupid": group_id,
- "keyword": keyword,
- "keywordType": keyword_type,
- "order": order,
- "orderBy": order_by,
- "pageNo": page_no,
- "pageSize": page_size
- }
- return self._send_request(http_methods.GET, path, params=params)
- def delete_rule(self, rule_ids=None, group_ids=None):
- """
- Delete rule
- :param rule_ids: the list of rule id
- :type rule_ids: list
- :param group_ids: the list of group id
- :type group_ids: list
- """
- if not rule_ids and not group_ids:
- raise ValueError("rule_ids and group_ids can not be empty at the same time")
- path = b'/rule'
- params = {
- "delete": ""
- }
- body = {
- "ruleIds": rule_ids,
- "groupIds": group_ids
- }
- return self._send_request(http_methods.POST, path, params=params, body=json.dumps(body))
- def get_records(self, group_id, page_no=1, page_size=1000, order=None, order_by="startTime",
- start_time=None, end_time=None):
- """
- Get details of a specific group
- :param group_id:
- Group identifier
- :type group_id: str
- :param page_no:
- Page number
- :type page_no: int
- :param page_size:
- Page size
- :type page_size: int
- :param order:
- Order-ascending order or descending order
- :type order: string
- :param order_by:
- Order by parameter
- :type order_by: string
- :param start_time:
- Start time for filtering the results
- :type start_time: string
- :param end_time:
- End time for filtering the results
- :type end_time: string
- :return:
- rtype baidubce.bce_response.BceResponse
- """
- params = {
- b'groupid': group_id,
- b'order': order,
- b'orderBy': order_by,
- b'pageNo': page_no,
- b'pageSize': page_size,
- b'startTime': start_time,
- b'endTime': end_time,
- }
- path = b'/record'
- return self._send_request(http_methods.GET, path, params=params)
- def exec_rule(self, group_id, rule_id):
- """
- Execute a specific rule within a group
- :param group_id:
- Group identifier
- :type group_id: str
- :param rule_id:
- Rule identifier within the group
- :type rule_id: str
- :return:
- rtype baidubce.bce_response.BceResponse
- """
- group_id = compat.convert_to_bytes(group_id)
- path = b'/group/%s' % group_id
- params = {
- b'execRule': '',
- }
- body = {
- "ruleId": rule_id
- }
- return self._send_request(http_methods.POST, path, params=params, body=json.dumps(body))
- def scaling_up(self, group_id, node_count, zone, expansion_strategy=None):
- """
- Scale up a specific group
- :param group_id:
- Group identifier
- :type group_id: str
- :param node_count:
- Number of nodes to be added
- :type node_count: int
- :param zone:
- Zone where the nodes will be added
- :type zone: str
- :param expansion_strategy:
- Strategy to be used for the expansion, optional
- :type expansion_strategy: str, optional
- :return:
- rtype baidubce.bce_response.BceResponse
- """
- group_id = compat.convert_to_bytes(group_id)
- path = b'/group/%s' % group_id
- params = {
- b'scalingUp': '',
- }
- body = {
- "nodeCount": node_count,
- "zone": zone,
- "expansionStrategy": expansion_strategy
- }
- return self._send_request(http_methods.POST, path, params=params, body=json.dumps(body))
- def scaling_down(self, group_id, nodes):
- """
- Scale down a specific group
- :param group_id:
- Group identifier
- :type group_id: str
- :param nodes:
- Nodes to be removed
- :type nodes: list or str
- :return:
- rtype baidubce.bce_response.BceResponse
- """
- group_id = compat.convert_to_bytes(group_id)
- path = b'/group/%s' % group_id
- params = {
- b'scalingDown': '',
- }
- body = {
- "nodes": nodes,
- }
- return self._send_request(http_methods.POST, path, params=params, body=json.dumps(body))
- def adjust_node(self, group_id, adjust_num):
- """
- Adjust the number of nodes in a specific group
- :param group_id:
- Group identifier
- :type group_id: str
- :param adjust_num:
- Number to adjust the nodes by. This could be positive (for adding nodes) or
- negative (for removing nodes).
- :type adjust_num: int
- :return:
- rtype baidubce.bce_response.BceResponse
- """
- group_id = compat.convert_to_bytes(group_id)
- path = b'/group/%s' % group_id
- params = {
- b'adjustNode': '',
- }
- body = {
- "adjustNum": adjust_num,
- }
- return self._send_request(http_methods.POST, path, params=params, body=json.dumps(body))
- def attach_node(self, group_id, nodes):
- """
- Attach nodes to a specific group.
- :param group_id: str
- The unique identifier of the group to which the nodes will be attached.
- :param nodes: list or str
- The nodes that will be attached to the group.
- This can be a list of node identifiers or a single node identifier.
- :return: baidubce.bce_response.BceResponse
- rtype baidubce.bce_response.BceResponse
- """
- group_id = compat.convert_to_bytes(group_id)
- path = b'/group/%s' % group_id
- params = {
- b'attachNode': '',
- }
- body = {
- "nodes": nodes,
- }
- return self._send_request(http_methods.POST, path, params=params, body=json.dumps(body))
|